initial version of dd command

This commit is contained in:
Michel Oosterhof
2017-05-17 16:57:56 +04:00
parent 1158a1a55e
commit 07207612d6
2 changed files with 76 additions and 0 deletions

View File

@ -7,6 +7,7 @@ __all__ = [
'base',
'busybox',
'curl',
'dd',
'env',
'ethtool',
'free',

75
cowrie/commands/dd.py Normal file
View File

@ -0,0 +1,75 @@
# Copyright (c) 2016 Michel Oosterhof <michel@oosterhof.net>
# See the COPYRIGHT file for more information
"""
dd commands
"""
import getopt
import copy
from os import path
from cowrie.core.honeypot import HoneyPotCommand
from cowrie.core.fs import *
commands = {}
class command_dd(HoneyPotCommand):
"""
dd command
"""
ddargs = {}
def start(self):
if not self.args or self.args[0] == '>':
return
for arg in self.args:
if not arg.index('='):
self.write('unknown operand: {}'.format(arg))
HoneyPotCommand.exit()
operand, value = arg.split('=')
if operand not in ('if', 'bs', 'of'):
self.write('unknown operand: {}'.format(operand))
self.exit(success=False)
self.ddargs[operand] = value
if self.input_data:
self.write(self.input_data)
else:
for arg in self.ddargs.keys():
value = self.ddargs[arg]
if arg == 'if':
pname = self.fs.resolve_path(value, self.protocol.cwd)
if self.fs.isdir(pname):
self.errorWrite('dd: {}: Is a directory\n'.format(value))
continue
try:
self.write(self.fs.file_contents(pname))
except:
self.errorWrite('dd: {}: No such file or directory\n'.format(value))
HoneyPotCommand.exit(self)
self.exit()
def exit(self, success=True):
if success == True:
self.write('0+0 records in\n')
self.write('0+0 records out\n')
self.write('0 bytes transferred in 0.695821 secs (0 bytes/sec)\n')
HoneyPotCommand.exit(self)
def lineReceived(self, line):
log.msg(eventid='cowrie.session.input',
realm='dd',
input=line,
format='INPUT (%(realm)s): %(input)s')
def handle_CTRL_D(self):
self.exit()
commands['/bin/dd'] = command_dd