diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4f18a99..0000000 --- a/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Responder logs -*.db -*.txt -*.log - diff --git a/Responder.py b/Responder.py index 996fc28..c57676e 100755 --- a/Responder.py +++ b/Responder.py @@ -15,12 +15,9 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . import optparse -import ssl - -from SocketServer import TCPServer, UDPServer, ThreadingMixIn -from threading import Thread from utils import * -import struct +from servers.ServersPool import ServersPool + banner() parser = optparse.OptionParser(usage='python %prog -I eth0 -w -r -f\nor:\npython %prog -I eth0 -wrf', version=settings.__version__, prog=sys.argv[0]) @@ -60,236 +57,18 @@ StartupMessage() settings.Config.ExpandIPRanges() if settings.Config.AnalyzeMode: - print color('[i] Responder is in analyze mode. No NBT-NS, LLMNR, MDNS requests will be poisoned.', 3, 1) - -class ThreadingUDPServer(ThreadingMixIn, UDPServer): - def server_bind(self): - if OsInterfaceIsSupported(): - try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') - except: - pass - UDPServer.server_bind(self) - -class ThreadingTCPServer(ThreadingMixIn, TCPServer): - def server_bind(self): - if OsInterfaceIsSupported(): - try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') - except: - pass - TCPServer.server_bind(self) - -class ThreadingTCPServerAuth(ThreadingMixIn, TCPServer): - def server_bind(self): - if OsInterfaceIsSupported(): - try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') - except: - pass - self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 1, 0)) - TCPServer.server_bind(self) - -class ThreadingUDPMDNSServer(ThreadingMixIn, UDPServer): - def server_bind(self): - MADDR = "224.0.0.251" - - self.socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1) - self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) - - Join = self.socket.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP, socket.inet_aton(MADDR) + settings.Config.IP_aton) - - if OsInterfaceIsSupported(): - try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') - except: - pass - UDPServer.server_bind(self) - -class ThreadingUDPLLMNRServer(ThreadingMixIn, UDPServer): - def server_bind(self): - MADDR = "224.0.0.252" - - self.socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) - self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) - - Join = self.socket.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,socket.inet_aton(MADDR) + settings.Config.IP_aton) - - if OsInterfaceIsSupported(): - try: - self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To+'\0') - except: - pass - UDPServer.server_bind(self) - -ThreadingUDPServer.allow_reuse_address = 1 -ThreadingTCPServer.allow_reuse_address = 1 -ThreadingUDPMDNSServer.allow_reuse_address = 1 -ThreadingUDPLLMNRServer.allow_reuse_address = 1 -ThreadingTCPServerAuth.allow_reuse_address = 1 - -def serve_thread_udp_broadcast(host, port, handler): - try: - server = ThreadingUDPServer(('', port), handler) - server.serve_forever() - except: - print color("[!] ", 1, 1) + "Error starting UDP server on port " + str(port) + ", check permissions or other servers running." - -def serve_NBTNS_poisoner(host, port, handler): - serve_thread_udp_broadcast(host, port, handler) - -def serve_MDNS_poisoner(host, port, handler): - try: - server = ThreadingUDPMDNSServer((host, port), handler) - server.serve_forever() - except: - print color("[!] ", 1, 1) + "Error starting UDP server on port " + str(port) + ", check permissions or other servers running." - -def serve_LLMNR_poisoner(host, port, handler): - try: - server = ThreadingUDPLLMNRServer((host, port), handler) - server.serve_forever() - except: - print color("[!] ", 1, 1) + "Error starting UDP server on port " + str(port) + ", check permissions or other servers running." - -def serve_thread_udp(host, port, handler): - try: - if OsInterfaceIsSupported(): - server = ThreadingUDPServer((settings.Config.Bind_To, port), handler) - server.serve_forever() - else: - server = ThreadingUDPServer((host, port), handler) - server.serve_forever() - except: - print color("[!] ", 1, 1) + "Error starting UDP server on port " + str(port) + ", check permissions or other servers running." - -def serve_thread_tcp(host, port, handler): - try: - if OsInterfaceIsSupported(): - server = ThreadingTCPServer((settings.Config.Bind_To, port), handler) - server.serve_forever() - else: - server = ThreadingTCPServer((host, port), handler) - server.serve_forever() - except: - print color("[!] ", 1, 1) + "Error starting TCP server on port " + str(port) + ", check permissions or other servers running." - -def serve_thread_tcp_auth(host, port, handler): - try: - if OsInterfaceIsSupported(): - server = ThreadingTCPServerAuth((settings.Config.Bind_To, port), handler) - server.serve_forever() - else: - server = ThreadingTCPServerAuth((host, port), handler) - server.serve_forever() - except: - print color("[!] ", 1, 1) + "Error starting TCP server on port " + str(port) + ", check permissions or other servers running." - -def serve_thread_SSL(host, port, handler): - try: - - cert = os.path.join(settings.Config.ResponderPATH, settings.Config.SSLCert) - key = os.path.join(settings.Config.ResponderPATH, settings.Config.SSLKey) - - if OsInterfaceIsSupported(): - 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 = 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." + print color('[i] Responder is in analyze mode. No NBT-NS, LLMNR, MDNS requests will be poisoned.', 3, 1) def main(): - try: - threads = [] + try: + serversPool = ServersPool(options) + print color('[+]', 2, 1) + " Listening for events..." + serversPool.start() + while True: + time.sleep(1) - # Load (M)DNS, NBNS and LLMNR Poisoners - from poisoners.LLMNR import LLMNR - from poisoners.NBTNS import NBTNS - from poisoners.MDNS import MDNS - 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 - threads.append(Thread(target=serve_thread_udp_broadcast, args=('', 138, Browser,))) - - if settings.Config.HTTP_On_Off: - from servers.HTTP import HTTP - threads.append(Thread(target=serve_thread_tcp, args=('', 80, HTTP,))) - - if settings.Config.SSL_On_Off: - from servers.HTTP import HTTPS - threads.append(Thread(target=serve_thread_SSL, args=('', 443, HTTPS,))) - - if settings.Config.WPAD_On_Off: - from servers.HTTP_Proxy import HTTP_Proxy - threads.append(Thread(target=serve_thread_tcp, args=('', 3141, HTTP_Proxy,))) - - if settings.Config.ProxyAuth_On_Off: - from servers.Proxy_Auth import Proxy_Auth - threads.append(Thread(target=serve_thread_tcp_auth, args=('', 3128, Proxy_Auth,))) - - if settings.Config.SMB_On_Off: - if settings.Config.LM_On_Off: - from servers.SMB import 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 - 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 - 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 - threads.append(Thread(target=serve_thread_tcp, args=('', 1433, MSSQL,))) - - if settings.Config.FTP_On_Off: - from servers.FTP import FTP - threads.append(Thread(target=serve_thread_tcp, args=('', 21, FTP,))) - - if settings.Config.POP_On_Off: - from servers.POP3 import POP3 - threads.append(Thread(target=serve_thread_tcp, args=('', 110, POP3,))) - - if settings.Config.LDAP_On_Off: - from servers.LDAP import LDAP - threads.append(Thread(target=serve_thread_tcp, args=('', 389, LDAP,))) - - if settings.Config.SMTP_On_Off: - from servers.SMTP import 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 - threads.append(Thread(target=serve_thread_tcp, args=('', 143, IMAP,))) - - if settings.Config.DNS_On_Off: - from servers.DNS import DNS, 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..." - - while True: - time.sleep(1) - - except KeyboardInterrupt: - sys.exit("\r%s Exiting..." % color('[+]', 2, 1)) + except KeyboardInterrupt: + sys.exit("\r%s Exiting..." % color('[+]', 2, 1)) if __name__ == '__main__': main() diff --git a/fingerprint.pyc b/fingerprint.pyc new file mode 100644 index 0000000..97cebb0 Binary files /dev/null and b/fingerprint.pyc differ diff --git a/odict.pyc b/odict.pyc new file mode 100644 index 0000000..7efe18b Binary files /dev/null and b/odict.pyc differ diff --git a/packets.pyc b/packets.pyc new file mode 100644 index 0000000..c59684d Binary files /dev/null and b/packets.pyc differ diff --git a/poisoners/LLMNR.pyc b/poisoners/LLMNR.pyc new file mode 100644 index 0000000..40e7f7c Binary files /dev/null and b/poisoners/LLMNR.pyc differ diff --git a/poisoners/MDNS.pyc b/poisoners/MDNS.pyc new file mode 100644 index 0000000..43093a2 Binary files /dev/null and b/poisoners/MDNS.pyc differ diff --git a/poisoners/NBTNS.pyc b/poisoners/NBTNS.pyc new file mode 100644 index 0000000..fd8f552 Binary files /dev/null and b/poisoners/NBTNS.pyc differ diff --git a/poisoners/__init__.pyc b/poisoners/__init__.pyc new file mode 100644 index 0000000..7c82ad5 Binary files /dev/null and b/poisoners/__init__.pyc differ diff --git a/servers/Browser.py b/servers/Browser.py index 4aa4549..6f87b80 100644 --- a/servers/Browser.py +++ b/servers/Browser.py @@ -23,8 +23,8 @@ import struct def WorkstationFingerPrint(data): return { "\x04\x00" :"Windows 95", - "\x04\x10" :"Windows 98", - "\x04\x90" :"Windows ME", + "\x04\x0A" :"Windows 98", + "\x04\x5A" :"Windows ME", "\x05\x00" :"Windows 2000", "\x05\x01" :"Windows XP", "\x05\x02" :"Windows XP(64-Bit)/Windows 2003", @@ -32,7 +32,7 @@ def WorkstationFingerPrint(data): "\x06\x01" :"Windows 7/Server 2008R2", "\x06\x02" :"Windows 8/Server 2012", "\x06\x03" :"Windows 8.1/Server 2012R2", - "\x10\x00" :"Windows 10/Server 2016", + "\x0A\x00" :"Windows 10/Server 2016", }.get(data, 'Unknown') diff --git a/servers/Browser.pyc b/servers/Browser.pyc new file mode 100644 index 0000000..991ed9d Binary files /dev/null and b/servers/Browser.pyc differ diff --git a/servers/DNS.pyc b/servers/DNS.pyc new file mode 100644 index 0000000..c7b9c31 Binary files /dev/null and b/servers/DNS.pyc differ diff --git a/servers/FTP.pyc b/servers/FTP.pyc new file mode 100644 index 0000000..f2e4168 Binary files /dev/null and b/servers/FTP.pyc differ diff --git a/servers/HTTP.pyc b/servers/HTTP.pyc new file mode 100644 index 0000000..e4eb6e9 Binary files /dev/null and b/servers/HTTP.pyc differ diff --git a/servers/HTTP_Proxy.pyc b/servers/HTTP_Proxy.pyc new file mode 100644 index 0000000..e8ca411 Binary files /dev/null and b/servers/HTTP_Proxy.pyc differ diff --git a/servers/IMAP.pyc b/servers/IMAP.pyc new file mode 100644 index 0000000..662ffc5 Binary files /dev/null and b/servers/IMAP.pyc differ diff --git a/servers/Kerberos.pyc b/servers/Kerberos.pyc new file mode 100644 index 0000000..dee1fc7 Binary files /dev/null and b/servers/Kerberos.pyc differ diff --git a/servers/LDAP.pyc b/servers/LDAP.pyc new file mode 100644 index 0000000..367d807 Binary files /dev/null and b/servers/LDAP.pyc differ diff --git a/servers/MSSQL.pyc b/servers/MSSQL.pyc new file mode 100644 index 0000000..28ed2ed Binary files /dev/null and b/servers/MSSQL.pyc differ diff --git a/servers/POP3.pyc b/servers/POP3.pyc new file mode 100644 index 0000000..19c69db Binary files /dev/null and b/servers/POP3.pyc differ diff --git a/servers/Proxy_Auth.pyc b/servers/Proxy_Auth.pyc new file mode 100644 index 0000000..d3fe951 Binary files /dev/null and b/servers/Proxy_Auth.pyc differ diff --git a/servers/SMB.pyc b/servers/SMB.pyc new file mode 100644 index 0000000..b5fc17a Binary files /dev/null and b/servers/SMB.pyc differ diff --git a/servers/SMTP.pyc b/servers/SMTP.pyc new file mode 100644 index 0000000..2bb6f9d Binary files /dev/null and b/servers/SMTP.pyc differ diff --git a/servers/ServersPool.py b/servers/ServersPool.py new file mode 100644 index 0000000..951e7c7 --- /dev/null +++ b/servers/ServersPool.py @@ -0,0 +1,254 @@ +from threading import Thread +import ssl +import struct +from utils import * +from SocketServer import TCPServer, UDPServer, ThreadingMixIn + +class ThreadingUDPServer(ThreadingMixIn, UDPServer): + def server_bind(self): + if OsInterfaceIsSupported(): + try: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To + '\0') + except: + pass + UDPServer.server_bind(self) + + +class ThreadingTCPServer(ThreadingMixIn, TCPServer): + def server_bind(self): + if OsInterfaceIsSupported(): + try: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To + '\0') + except: + pass + TCPServer.server_bind(self) + + +class ThreadingTCPServerAuth(ThreadingMixIn, TCPServer): + def server_bind(self): + if OsInterfaceIsSupported(): + try: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To + '\0') + except: + pass + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 1, 0)) + TCPServer.server_bind(self) + + +class ThreadingUDPMDNSServer(ThreadingMixIn, UDPServer): + def server_bind(self): + MADDR = "224.0.0.251" + + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) + + Join = self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, + socket.inet_aton(MADDR) + settings.Config.IP_aton) + + if OsInterfaceIsSupported(): + try: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To + '\0') + except: + pass + UDPServer.server_bind(self) + + +class ThreadingUDPLLMNRServer(ThreadingMixIn, UDPServer): + def server_bind(self): + MADDR = "224.0.0.252" + + self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) + + Join = self.socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, + socket.inet_aton(MADDR) + settings.Config.IP_aton) + + if OsInterfaceIsSupported(): + try: + self.socket.setsockopt(socket.SOL_SOCKET, 25, settings.Config.Bind_To + '\0') + except: + pass + UDPServer.server_bind(self) + + +ThreadingUDPServer.allow_reuse_address = 1 +ThreadingTCPServer.allow_reuse_address = 1 +ThreadingUDPMDNSServer.allow_reuse_address = 1 +ThreadingUDPLLMNRServer.allow_reuse_address = 1 +ThreadingTCPServerAuth.allow_reuse_address = 1 + + +def serve_thread_udp_broadcast(host, port, handler): + try: + server = ThreadingUDPServer(('', port), handler) + server.serve_forever() + except: + print color("[!] ", 1, 1) + "Error starting UDP server on port " + str( + port) + ", check permissions or other servers running." + + +def serve_NBTNS_poisoner(host, port, handler): + serve_thread_udp_broadcast(host, port, handler) + + +def serve_MDNS_poisoner(host, port, handler): + try: + server = ThreadingUDPMDNSServer((host, port), handler) + server.serve_forever() + except: + print color("[!] ", 1, 1) + "Error starting UDP server on port " + str( + port) + ", check permissions or other servers running." + + +def serve_LLMNR_poisoner(host, port, handler): + try: + server = ThreadingUDPLLMNRServer((host, port), handler) + server.serve_forever() + except: + print color("[!] ", 1, 1) + "Error starting UDP server on port " + str( + port) + ", check permissions or other servers running." + + +def serve_thread_udp(host, port, handler): + try: + if OsInterfaceIsSupported(): + server = ThreadingUDPServer((settings.Config.Bind_To, port), handler) + server.serve_forever() + else: + server = ThreadingUDPServer((host, port), handler) + server.serve_forever() + except: + print color("[!] ", 1, 1) + "Error starting UDP server on port " + str( + port) + ", check permissions or other servers running." + + +def serve_thread_tcp(host, port, handler): + try: + if OsInterfaceIsSupported(): + server = ThreadingTCPServer((settings.Config.Bind_To, port), handler) + server.serve_forever() + else: + server = ThreadingTCPServer((host, port), handler) + server.serve_forever() + except: + print color("[!] ", 1, 1) + "Error starting TCP server on port " + str( + port) + ", check permissions or other servers running." + + +def serve_thread_tcp_auth(host, port, handler): + try: + if OsInterfaceIsSupported(): + server = ThreadingTCPServerAuth((settings.Config.Bind_To, port), handler) + server.serve_forever() + else: + server = ThreadingTCPServerAuth((host, port), handler) + server.serve_forever() + except: + print color("[!] ", 1, 1) + "Error starting TCP server on port " + str( + port) + ", check permissions or other servers running." + + +def serve_thread_SSL(host, port, handler): + try: + + cert = os.path.join(settings.Config.ResponderPATH, settings.Config.SSLCert) + key = os.path.join(settings.Config.ResponderPATH, settings.Config.SSLKey) + + if OsInterfaceIsSupported(): + 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 = 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." + + +class ServersPool: + """ServersPool provides managing of the threads according current settings.""" + def __init__(self, settings): + self.__threadsPool = [] + self.__settings = settings + self.initServers() + + def start(self): + for thread in self.__threadsPool: + thread.setDaemon(True) + thread.start() + + def initServers(self): + # Load (M)DNS, NBNS and LLMNR Poisoners + from poisoners.LLMNR import LLMNR + from poisoners.NBTNS import NBTNS + from poisoners.MDNS import MDNS + self.__threadsPool.append(Thread(target=serve_MDNS_poisoner, args=('', 5353, MDNS,))) + self.__threadsPool.append(Thread(target=serve_LLMNR_poisoner, args=('', 5355, LLMNR,))) + self.__threadsPool.append(Thread(target=serve_NBTNS_poisoner, args=('', 137, NBTNS,))) + + # Load Browser Listener + from servers.Browser import Browser + self.__threadsPool.append(Thread(target=serve_thread_udp_broadcast, args=('', 138, Browser,))) + + if settings.Config.HTTP_On_Off: + from servers.HTTP import HTTP + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 80, HTTP,))) + + if settings.Config.SSL_On_Off: + from servers.HTTP import HTTPS + self.__threadsPool.append(Thread(target=serve_thread_SSL, args=('', 443, HTTPS,))) + + if settings.Config.WPAD_On_Off: + from servers.HTTP_Proxy import HTTP_Proxy + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 3141, HTTP_Proxy,))) + + if settings.Config.ProxyAuth_On_Off: + from servers.Proxy_Auth import Proxy_Auth + self.__threadsPool.append(Thread(target=serve_thread_tcp_auth, args=('', 3128, Proxy_Auth,))) + + if settings.Config.SMB_On_Off: + if settings.Config.LM_On_Off: + from servers.SMB import SMB1LM + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 445, SMB1LM,))) + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 139, SMB1LM,))) + else: + from servers.SMB import SMB1 + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 445, SMB1,))) + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 139, SMB1,))) + + if settings.Config.Krb_On_Off: + from servers.Kerberos import KerbTCP, KerbUDP + self.__threadsPool.append(Thread(target=serve_thread_udp, args=('', 88, KerbUDP,))) + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 88, KerbTCP,))) + + if settings.Config.SQL_On_Off: + from servers.MSSQL import MSSQL + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 1433, MSSQL,))) + + if settings.Config.FTP_On_Off: + from servers.FTP import FTP + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 21, FTP,))) + + if settings.Config.POP_On_Off: + from servers.POP3 import POP3 + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 110, POP3,))) + + if settings.Config.LDAP_On_Off: + from servers.LDAP import LDAP + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 389, LDAP,))) + + if settings.Config.SMTP_On_Off: + from servers.SMTP import ESMTP + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 25, ESMTP,))) + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 587, ESMTP,))) + + if settings.Config.IMAP_On_Off: + from servers.IMAP import IMAP + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 143, IMAP,))) + + if settings.Config.DNS_On_Off: + from servers.DNS import DNS, DNSTCP + self.__threadsPool.append(Thread(target=serve_thread_udp, args=('', 53, DNS,))) + self.__threadsPool.append(Thread(target=serve_thread_tcp, args=('', 53, DNSTCP,))) diff --git a/servers/ServersPool.pyc b/servers/ServersPool.pyc new file mode 100644 index 0000000..c1fe393 Binary files /dev/null and b/servers/ServersPool.pyc differ diff --git a/servers/__init__.pyc b/servers/__init__.pyc new file mode 100644 index 0000000..5fc1d9e Binary files /dev/null and b/servers/__init__.pyc differ diff --git a/settings.py b/settings.py index e44c772..34f3c19 100644 --- a/settings.py +++ b/settings.py @@ -149,7 +149,7 @@ class Settings: # Auto Ignore List self.AutoIgnore = self.toBool(config.get('Responder Core', 'AutoIgnoreAfterSuccess')) self.CaptureMultipleCredentials = self.toBool(config.get('Responder Core', 'CaptureMultipleCredentials')) - self.CaptureMultipleHashFromSameHost = self.toBool(config.get('Responder Core', 'CaptureMultipleHashFromSameHost')) + self.CaptureMultipleHashFromSameHost = self.toBool(config.get('Responder Core', 'CaptureMultipleHashFromSameHost')) self.AutoIgnoreList = [] # CLI options @@ -169,13 +169,13 @@ class Settings: self.ProxyAuth_On_Off = options.ProxyAuth_On_Off self.CommandLine = str(sys.argv) - if self.ExternalIP: - self.ExternalIPAton = socket.inet_aton(self.ExternalIP) + if self.ExternalIP: + self.ExternalIPAton = socket.inet_aton(self.ExternalIP) if self.HtmlToInject is None: self.HtmlToInject = '' - self.Bind_To = utils.FindLocalIP(self.Interface, self.OURIP) + self.Bind_To = utils.FindLocalIP(self.Interface, self.OURIP) self.IP_aton = socket.inet_aton(self.Bind_To) self.Os_version = sys.platform @@ -208,12 +208,12 @@ class Settings: self.AnalyzeLogger = logging.getLogger('Analyze Log') self.AnalyzeLogger.addHandler(ALog_Handler) - NetworkCard = subprocess.check_output(["ifconfig", "-a"]) - DNS = subprocess.check_output(["cat", "/etc/resolv.conf"]) - RoutingInfo = subprocess.check_output(["netstat", "-rn"]) - Message = "Current environment is:\nNetwork Config:\n%s\nDNS Settings:\n%s\nRouting info:\n%s\n\n"%(NetworkCard,DNS,RoutingInfo) - utils.DumpConfig(self.ResponderConfigDump, Message) - utils.DumpConfig(self.ResponderConfigDump,str(self)) + NetworkCard = subprocess.check_output(["ifconfig", "-a"]) + DNS = subprocess.check_output(["cat", "/etc/resolv.conf"]) + RoutingInfo = subprocess.check_output(["netstat", "-rn"]) + Message = "Current environment is:\nNetwork Config:\n%s\nDNS Settings:\n%s\nRouting info:\n%s\n\n"%(NetworkCard,DNS,RoutingInfo) + utils.DumpConfig(self.ResponderConfigDump, Message) + utils.DumpConfig(self.ResponderConfigDump,str(self)) def init(): global Config diff --git a/settings.pyc b/settings.pyc new file mode 100644 index 0000000..fba1c4d Binary files /dev/null and b/settings.pyc differ diff --git a/utils.py b/utils.py index 72818a9..4f66f2f 100644 --- a/utils.py +++ b/utils.py @@ -176,7 +176,7 @@ def SaveToDb(result): with open(logfile,"a") as outf: if len(result['cleartext']): # If we obtained cleartext credentials, write them to file outf.write('%s:%s\n' % (result['user'].encode('utf8', 'replace'), result['cleartext'].encode('utf8', 'replace'))) - else: # Otherwise, write JtR-style hash string to file + else: # Otherwise, write JtR-style hash string to filed outf.write(result['fullhash'].encode('utf8', 'replace') + '\n') if not count or settings.Config.Verbose: # Print output diff --git a/utils.pyc b/utils.pyc new file mode 100644 index 0000000..d30e07e Binary files /dev/null and b/utils.pyc differ