diff --git a/Responder.py b/Responder.py index 98fb366..94fbaa4 100644 --- a/Responder.py +++ b/Responder.py @@ -17,11 +17,12 @@ import sys import optparse import socket -import thread import time import settings +import ssl from SocketServer import TCPServer, UDPServer, ThreadingMixIn, StreamRequestHandler, BaseRequestHandler, BaseServer +from threading import Thread from utils import * banner() @@ -163,87 +164,97 @@ def serve_thread_tcp(host, port, handler): def serve_thread_SSL(host, port, handler): try: - from servers.HTTP import SSLSock + + cert = os.path.join(settings.Config.ResponderPATH, settings.Config.SSLCert) + key = os.path.join(settings.Config.ResponderPATH, settings.Config.SSLKey) if OsInterfaceIsSupported(): - server = SSLSock((settings.Config.Bind_To, port), handler) + server = ThreadingTCPServer((settings.Config.Bind_To, port), handler) + server.socket = ssl.wrap_socket(server.socket, certfile=cert, keyfile=key, server_side=True) server.serve_forever() else: - server = SSLSock((host, port), handler) + server = ThreadingTCPServer((host, port), handler) + server.socket = ssl.wrap_socket(server.socket, certfile=cert, keyfile=key, server_side=True) server.serve_forever() except: print color("[!] ", 1, 1) + "Error starting SSL server on port " + str(port) + ", check permissions or other servers running." def main(): try: + threads = [] + # Load (M)DNS, NBNS and LLMNR Poisoners from poisoners.LLMNR import LLMNR from poisoners.NBTNS import NBTNS from poisoners.MDNS import MDNS - thread.start_new(serve_LLMNR_poisoner, ('', 5355, LLMNR)) - thread.start_new(serve_MDNS_poisoner, ('', 5353, MDNS)) - thread.start_new(serve_NBTNS_poisoner, ('', 137, NBTNS)) + threads.append(Thread(target=serve_LLMNR_poisoner, args=('', 5355, LLMNR,))) + threads.append(Thread(target=serve_MDNS_poisoner, args=('', 5353, MDNS,))) + threads.append(Thread(target=serve_NBTNS_poisoner, args=('', 137, NBTNS,))) # Load Browser Listener from servers.Browser import Browser - thread.start_new(serve_thread_udp_broadcast,('', 138, Browser)) + threads.append(Thread(target=serve_thread_udp_broadcast, args=('', 138, Browser,))) if settings.Config.HTTP_On_Off: from servers.HTTP import HTTP - thread.start_new(serve_thread_tcp,('', 80, HTTP)) + threads.append(Thread(target=serve_thread_tcp, args=('', 80, HTTP,))) if settings.Config.SSL_On_Off: from servers.HTTP import HTTPS - thread.start_new(serve_thread_SSL,('', 443, HTTPS)) + threads.append(Thread(target=serve_thread_SSL, args=('', 443, HTTPS,))) if settings.Config.WPAD_On_Off: from servers.HTTP_Proxy import HTTP_Proxy - thread.start_new(serve_thread_tcp,('', 3141, HTTP_Proxy)) + threads.append(Thread(target=serve_thread_tcp, args=('', 3141, HTTP_Proxy,))) if settings.Config.SMB_On_Off: if settings.Config.LM_On_Off: from servers.SMB import SMB1LM - thread.start_new(serve_thread_tcp,('', 445, SMB1LM)) - thread.start_new(serve_thread_tcp,('', 139, SMB1LM)) + threads.append(Thread(target=serve_thread_tcp, args=('', 445, SMB1LM,))) + threads.append(Thread(target=serve_thread_tcp, args=('', 139, SMB1LM,))) else: from servers.SMB import SMB1 - thread.start_new(serve_thread_tcp,('', 445, SMB1)) - thread.start_new(serve_thread_tcp,('', 139, SMB1)) + threads.append(Thread(target=serve_thread_tcp, args=('', 445, SMB1,))) + threads.append(Thread(target=serve_thread_tcp, args=('', 139, SMB1,))) if settings.Config.Krb_On_Off: from servers.Kerberos import KerbTCP, KerbUDP - thread.start_new(serve_thread_udp,('', 88, KerbUDP)) - thread.start_new(serve_thread_tcp,('', 88, KerbTCP)) + threads.append(Thread(target=serve_thread_udp, args=('', 88, KerbUDP,))) + threads.append(Thread(target=serve_thread_tcp, args=('', 88, KerbTCP,))) if settings.Config.SQL_On_Off: from servers.MSSQL import MSSQL - thread.start_new(serve_thread_tcp,('', 1433, MSSQL)) + threads.append(Thread(target=serve_thread_tcp, args=('', 1433, MSSQL,))) if settings.Config.FTP_On_Off: from servers.FTP import FTP - thread.start_new(serve_thread_tcp,('', 21, FTP)) + threads.append(Thread(target=serve_thread_tcp, args=('', 21, FTP,))) if settings.Config.POP_On_Off: from servers.POP3 import POP3 - thread.start_new(serve_thread_tcp,('', 110, POP3)) + threads.append(Thread(target=serve_thread_tcp, args=('', 110, POP3,))) if settings.Config.LDAP_On_Off: from servers.LDAP import LDAP - thread.start_new(serve_thread_tcp,('', 389, LDAP)) + threads.append(Thread(target=serve_thread_tcp, args=('', 389, LDAP,))) if settings.Config.SMTP_On_Off: from servers.SMTP import ESMTP - thread.start_new(serve_thread_tcp,('', 25, ESMTP)) - thread.start_new(serve_thread_tcp,('', 587, ESMTP)) + threads.append(Thread(target=serve_thread_tcp, args=('', 25, ESMTP,))) + threads.append(Thread(target=serve_thread_tcp, args=('', 587, ESMTP,))) if settings.Config.IMAP_On_Off: from servers.IMAP import IMAP - thread.start_new(serve_thread_tcp,('', 143, IMAP)) + threads.append(Thread(target=serve_thread_tcp, args=('', 143, IMAP,))) if settings.Config.DNS_On_Off: from servers.DNS import DNS, DNSTCP - thread.start_new(serve_thread_udp,('', 53, DNS)) - thread.start_new(serve_thread_tcp,('', 53, DNSTCP)) + threads.append(Thread(target=serve_thread_udp, args=('', 53, DNS,))) + threads.append(Thread(target=serve_thread_tcp, args=('', 53, DNSTCP,))) + + for thread in threads: + thread.setDaemon(True) + thread.start() print color('[+]', 2, 1) + " Listening for events..." diff --git a/servers/HTTP.py b/servers/HTTP.py index 3ab6b39..d55eb6c 100644 --- a/servers/HTTP.py +++ b/servers/HTTP.py @@ -280,26 +280,3 @@ class HTTPS(StreamRequestHandler): except: pass -# SSL context handler -class SSLSock(ThreadingMixIn, TCPServer): - def __init__(self, server_address, RequestHandlerClass): - from OpenSSL import SSL - - BaseServer.__init__(self, server_address, RequestHandlerClass) - ctx = SSL.Context(SSL.TLSv1_METHOD) - - cert = os.path.join(settings.Config.ResponderPATH, settings.Config.SSLCert) - key = os.path.join(settings.Config.ResponderPATH, settings.Config.SSLKey) - - ctx.use_privatekey_file(key) - ctx.use_certificate_file(cert) - - self.socket = SSL.Connection(ctx, socket.socket(self.address_family, self.socket_type)) - self.server_bind() - self.server_activate() - - def shutdown_request(self,request): - try: - request.shutdown() - except: - pass