From 4fd704ecaffd97f1ddb761028f35f90facb700a7 Mon Sep 17 00:00:00 2001 From: Michel Oosterhof Date: Mon, 28 Dec 2015 13:25:35 +0400 Subject: [PATCH] complete split of ssh.py --- cowrie/core/avatar.py | 11 ++++--- cowrie/core/{ssh.py => filetransfer.py} | 32 ------------------- cowrie/core/forwarding.py | 41 +++++++++++++++++++++++++ cowrie/core/realm.py | 1 - 4 files changed, 47 insertions(+), 38 deletions(-) rename cowrie/core/{ssh.py => filetransfer.py} (87%) create mode 100644 cowrie/core/forwarding.py diff --git a/cowrie/core/avatar.py b/cowrie/core/avatar.py index 403d59b..3eab3c3 100644 --- a/cowrie/core/avatar.py +++ b/cowrie/core/avatar.py @@ -10,12 +10,13 @@ from zope.interface import implementer import twisted from twisted.conch import avatar from twisted.conch.interfaces import IConchUser, ISession, ISFTPServer -from twisted.conch.ssh import filetransfer +from twisted.conch.ssh import filetransfer as conchfiletransfer from twisted.python import log, components from cowrie.core import pwd -from cowrie.core import ssh from cowrie.core import session +from cowrie.core import filetransfer +from cowrie.core import forwarding @implementer(IConchUser) @@ -31,7 +32,7 @@ class CowrieUser(avatar.ConchUser): self.channelLookup.update( {"session": session.HoneyPotSSHSession, - "direct-tcpip": ssh.CowrieOpenConnectForwardingClient}) + "direct-tcpip": forwarding.CowrieOpenConnectForwardingClient}) try: pwentry = pwd.Passwd(self.cfg).getpwnam(self.username) @@ -46,7 +47,7 @@ class CowrieUser(avatar.ConchUser): # Sftp support enabled only when option is explicitly set try: if (self.cfg.get('honeypot', 'sftp_enabled') == "true"): - self.subsystemLookup['sftp'] = filetransfer.FileTransferServer + self.subsystemLookup['sftp'] = conchfiletransfer.FileTransferServer except: pass @@ -57,7 +58,7 @@ class CowrieUser(avatar.ConchUser): log.msg('avatar {} logging out'.format(self.username)) -components.registerAdapter(ssh.SFTPServerForCowrieUser, CowrieUser, ISFTPServer) +components.registerAdapter(filetransfer.SFTPServerForCowrieUser, CowrieUser, ISFTPServer) components.registerAdapter(session.SSHSessionForCowrieUser, CowrieUser, ISession) diff --git a/cowrie/core/ssh.py b/cowrie/core/filetransfer.py similarity index 87% rename from cowrie/core/ssh.py rename to cowrie/core/filetransfer.py index 45c2bfd..6335252 100644 --- a/cowrie/core/ssh.py +++ b/cowrie/core/filetransfer.py @@ -12,7 +12,6 @@ from zope.interface import implementer import twisted from twisted.conch.interfaces import ISFTPFile, ISFTPServer from twisted.conch.ssh import filetransfer -from twisted.conch.ssh import forwarding from twisted.conch.ssh.filetransfer import FXF_READ, FXF_WRITE, FXF_APPEND, FXF_CREAT, FXF_TRUNC, FXF_EXCL import twisted.conch.ls from twisted.python import log @@ -282,34 +281,3 @@ class SFTPServerForCowrieUser: """ raise NotImplementedError - -def CowrieOpenConnectForwardingClient(remoteWindow, remoteMaxPacket, data, avatar): - """ - """ - remoteHP, origHP = twisted.conch.ssh.forwarding.unpackOpen_direct_tcpip(data) - log.msg(eventid='COW0014', format='direct-tcp connection request to %(dst_ip)s:%(dst_port)s', - dst_ip=remoteHP[0], dst_port=remoteHP[1]) - return CowrieConnectForwardingChannel(remoteHP, - remoteWindow=remoteWindow, remoteMaxPacket=remoteMaxPacket, - avatar=avatar) - - - -class CowrieConnectForwardingChannel(forwarding.SSHConnectForwardingChannel): - """ - """ - def channelOpen(self, specificData): - """ - """ - pass - - - def dataReceived(self, data): - """ - """ - log.msg(eventid='COW0015', - format='direct-tcp forward to %(dst_ip)s:%(dst_port)s with data %(data)s', - dst_ip=self.hostport[0], dst_port=self.hostport[1], data=repr(data)) - self._close("Connection refused") - -# vim: set et sw=4 et: diff --git a/cowrie/core/forwarding.py b/cowrie/core/forwarding.py new file mode 100644 index 0000000..e00921b --- /dev/null +++ b/cowrie/core/forwarding.py @@ -0,0 +1,41 @@ +# Copyright (c) 2009-2014 Upi Tamminen +# See the COPYRIGHT file for more information + +""" +This module contains ... +""" + +import twisted +from twisted.conch.ssh import forwarding +from twisted.python import log + + +def CowrieOpenConnectForwardingClient(remoteWindow, remoteMaxPacket, data, avatar): + """ + """ + remoteHP, origHP = twisted.conch.ssh.forwarding.unpackOpen_direct_tcpip(data) + log.msg(eventid='COW0014', format='direct-tcp connection request to %(dst_ip)s:%(dst_port)s', + dst_ip=remoteHP[0], dst_port=remoteHP[1]) + return CowrieConnectForwardingChannel(remoteHP, + remoteWindow=remoteWindow, remoteMaxPacket=remoteMaxPacket, + avatar=avatar) + + + +class CowrieConnectForwardingChannel(forwarding.SSHConnectForwardingChannel): + """ + """ + def channelOpen(self, specificData): + """ + """ + pass + + + def dataReceived(self, data): + """ + """ + log.msg(eventid='COW0015', + format='direct-tcp forward to %(dst_ip)s:%(dst_port)s with data %(data)s', + dst_ip=self.hostport[0], dst_port=self.hostport[1], data=repr(data)) + self._close("Connection refused") + diff --git a/cowrie/core/realm.py b/cowrie/core/realm.py index 942efa0..1e04f89 100644 --- a/cowrie/core/realm.py +++ b/cowrie/core/realm.py @@ -38,7 +38,6 @@ from twisted.python import log from cowrie.core import protocol from cowrie.core import server -from cowrie.core import ssh from cowrie.core import avatar import sys