mirror of https://github.com/cowrie/cowrie.git
95 lines
3.4 KiB
Python
95 lines
3.4 KiB
Python
# Copyright (c) 2010 Upi Tamminen <desaster@gmail.com>
|
|
# See the COPYRIGHT file for more information
|
|
|
|
from twisted.internet import reactor, defer
|
|
from twisted.internet.defer import inlineCallbacks
|
|
from kippo.core.honeypot import HoneyPotCommand
|
|
import random, re
|
|
|
|
commands = {}
|
|
|
|
O_O, O_Q, O_P = 1, 2, 3
|
|
|
|
class command_adduser(HoneyPotCommand):
|
|
def start(self):
|
|
self.username = None
|
|
self.item = 0
|
|
for arg in self.args:
|
|
if arg.startswith('-') or arg.isdigit():
|
|
continue
|
|
self.username = arg
|
|
break
|
|
if self.username is None:
|
|
self.writeln('adduser: Only one or two names allowed.')
|
|
self.exit()
|
|
return
|
|
|
|
self.output = [
|
|
(O_O, 'Adding user `%(username)s\' ...\n'),
|
|
(O_O, 'Adding new group `%(username)s\' (1001) ...\n'),
|
|
(O_O, 'Adding new user `%(username)s\' (1001) with group `%(username)s\' ...\n'),
|
|
(O_O, 'Creating home directory `/home/%(username)s\' ...\n'),
|
|
(O_O, 'Copying files from `/etc/skel\' ...\n'),
|
|
(O_P, 'Password: '),
|
|
(O_P, 'Password again: '),
|
|
(O_O, '\nChanging the user information for %(username)s\n'),
|
|
(O_O, 'Enter the new value, or press ENTER for the default\n'),
|
|
(O_Q, ' Username []: '),
|
|
(O_Q, ' Full Name []: '),
|
|
(O_Q, ' Room Number []: '),
|
|
(O_Q, ' Work Phone []: '),
|
|
(O_Q, ' Home Phone []: '),
|
|
(O_Q, ' Mobile Phone []: '),
|
|
(O_Q, ' Country []: '),
|
|
(O_Q, ' City []: '),
|
|
(O_Q, ' Language []: '),
|
|
(O_Q, ' Favorite movie []: '),
|
|
(O_Q, ' Other []: '),
|
|
(O_Q, 'Is the information correct? [Y/n] '),
|
|
(O_O, 'ERROR: Some of the information you entered is invalid\n'),
|
|
(O_O, 'Deleting user `%(username)s\' ...\n'),
|
|
(O_O, 'Deleting group `%(username)s\' (1001) ...\n'),
|
|
(O_O, 'Deleting home directory `/home/%(username)s\' ...\n'),
|
|
(O_Q, 'Try again? [Y/n] '),
|
|
]
|
|
self.do_output()
|
|
|
|
def do_output(self):
|
|
if self.item == len(self.output):
|
|
self.item = 7
|
|
self.schedule_next()
|
|
return
|
|
|
|
l = self.output[self.item]
|
|
self.write(l[1] % {'username': self.username})
|
|
if l[0] == O_P:
|
|
self.honeypot.password_input = True
|
|
return
|
|
if l[0] == O_Q:
|
|
return
|
|
else:
|
|
self.item += 1
|
|
self.schedule_next()
|
|
|
|
def schedule_next(self):
|
|
self.scheduled = reactor.callLater(
|
|
0.5 + random.random() * 1, self.do_output)
|
|
|
|
def lineReceived(self, line):
|
|
if self.item + 1 == len(self.output) and line.strip() in ('n', 'no'):
|
|
self.exit()
|
|
return
|
|
elif self.item == 20 and line.strip() not in ('y', 'yes'):
|
|
self.item = 7
|
|
self.writeln('Ok, starting over')
|
|
elif not len(line) and self.output[self.item][0] == O_Q:
|
|
self.writeln('Must enter a value!')
|
|
else:
|
|
self.item += 1
|
|
self.schedule_next()
|
|
self.honeypot.password_input = False
|
|
commands['/usr/sbin/adduser'] = command_adduser
|
|
commands['/usr/sbin/useradd'] = command_adduser
|
|
|
|
# vim: set sw=4 et tw=0:
|