#!/usr/bin/env python # This file is part of Responder, a network take-over set of tools # created and maintained by Laurent Gaffie. # email: laurent.gaffie@gmail.com # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import os import sys import re import logging import socket import time import settings import datetime import codecs import struct import random try: import netifaces except: sys.exit('You need to install python-netifaces or run Responder with python3...\nTry "apt-get install python-netifaces" or "pip install netifaces"') from calendar import timegm def if_nametoindex2(name): if settings.Config.PY2OR3 == "PY2": import ctypes import ctypes.util libc = ctypes.CDLL(ctypes.util.find_library('c')) ret = libc.if_nametoindex(name) return ret else: return socket.if_nametoindex(settings.Config.Interface) def RandomChallenge(): if settings.Config.PY2OR3 == "PY3": if settings.Config.NumChal == "random": from random import getrandbits NumChal = b'%016x' % getrandbits(16 * 4) Challenge = b'' for i in range(0, len(NumChal),2): Challenge += NumChal[i:i+2] return codecs.decode(Challenge, 'hex') else: return settings.Config.Challenge else: if settings.Config.NumChal == "random": from random import getrandbits NumChal = '%016x' % getrandbits(16 * 4) Challenge = '' for i in range(0, len(NumChal),2): Challenge += NumChal[i:i+2].decode("hex") return Challenge else: return settings.Config.Challenge def HTTPCurrentDate(): Date = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT') return Date def SMBTime(): dt = datetime.datetime.now() dt = dt.replace(tzinfo=None) if settings.Config.PY2OR3 == "PY3": return struct.pack(" https://github.com/sponsors/lgandx") print(" Paypal -> https://paypal.me/PythonResponder") print('') print(" Author: Laurent Gaffie (laurent.gaffie@gmail.com)") print(" To kill this script hit CTRL-C") print('') def StartupMessage(): enabled = color('[ON]', 2, 1) disabled = color('[OFF]', 1, 1) print('') print(color("[+] ", 2, 1) + "Poisoners:") print(' %-27s' % "LLMNR" + (enabled if settings.Config.AnalyzeMode == False else disabled)) print(' %-27s' % "NBT-NS" + (enabled if settings.Config.AnalyzeMode == False else disabled)) print(' %-27s' % "MDNS" + (enabled if settings.Config.AnalyzeMode == False else disabled)) print(' %-27s' % "DNS" + enabled) print(' %-27s' % "DHCP" + (enabled if settings.Config.DHCP_On_Off else disabled)) print('') print(color("[+] ", 2, 1) + "Servers:") print(' %-27s' % "HTTP server" + (enabled if settings.Config.HTTP_On_Off else disabled)) print(' %-27s' % "HTTPS server" + (enabled if settings.Config.SSL_On_Off else disabled)) print(' %-27s' % "WPAD proxy" + (enabled if settings.Config.WPAD_On_Off else disabled)) print(' %-27s' % "Auth proxy" + (enabled if settings.Config.ProxyAuth_On_Off else disabled)) print(' %-27s' % "SMB server" + (enabled if settings.Config.SMB_On_Off else disabled)) print(' %-27s' % "Kerberos server" + (enabled if settings.Config.Krb_On_Off else disabled)) print(' %-27s' % "SQL server" + (enabled if settings.Config.SQL_On_Off else disabled)) print(' %-27s' % "FTP server" + (enabled if settings.Config.FTP_On_Off else disabled)) print(' %-27s' % "IMAP server" + (enabled if settings.Config.IMAP_On_Off else disabled)) print(' %-27s' % "POP3 server" + (enabled if settings.Config.POP_On_Off else disabled)) print(' %-27s' % "SMTP server" + (enabled if settings.Config.SMTP_On_Off else disabled)) print(' %-27s' % "DNS server" + (enabled if settings.Config.DNS_On_Off else disabled)) print(' %-27s' % "LDAP server" + (enabled if settings.Config.LDAP_On_Off else disabled)) print(' %-27s' % "MQTT server" + (enabled if settings.Config.MQTT_On_Off else disabled)) print(' %-27s' % "RDP server" + (enabled if settings.Config.RDP_On_Off else disabled)) print(' %-27s' % "DCE-RPC server" + (enabled if settings.Config.DCERPC_On_Off else disabled)) print(' %-27s' % "WinRM server" + (enabled if settings.Config.WinRM_On_Off else disabled)) print(' %-27s' % "SNMP server" + (enabled if settings.Config.SNMP_On_Off else disabled)) print('') print(color("[+] ", 2, 1) + "HTTP Options:") print(' %-27s' % "Always serving EXE" + (enabled if settings.Config.Serve_Always else disabled)) print(' %-27s' % "Serving EXE" + (enabled if settings.Config.Serve_Exe else disabled)) print(' %-27s' % "Serving HTML" + (enabled if settings.Config.Serve_Html else disabled)) print(' %-27s' % "Upstream Proxy" + (enabled if settings.Config.Upstream_Proxy else disabled)) #print(' %-27s' % "WPAD script" + settings.Config.WPAD_Script print('') print(color("[+] ", 2, 1) + "Poisoning Options:") print(' %-27s' % "Analyze Mode" + (enabled if settings.Config.AnalyzeMode else disabled)) print(' %-27s' % "Force WPAD auth" + (enabled if settings.Config.Force_WPAD_Auth else disabled)) print(' %-27s' % "Force Basic Auth" + (enabled if settings.Config.Basic else disabled)) print(' %-27s' % "Force LM downgrade" + (enabled if settings.Config.LM_On_Off == True else disabled)) print(' %-27s' % "Force ESS downgrade" + (enabled if settings.Config.NOESS_On_Off == True or settings.Config.LM_On_Off == True else disabled)) print('') print(color("[+] ", 2, 1) + "Generic Options:") print(' %-27s' % "Responder NIC" + color('[%s]' % settings.Config.Interface, 5, 1)) print(' %-27s' % "Responder IP" + color('[%s]' % settings.Config.Bind_To, 5, 1)) print(' %-27s' % "Responder IPv6" + color('[%s]' % settings.Config.Bind_To6, 5, 1)) if settings.Config.ExternalIP: print(' %-27s' % "Responder external IP" + color('[%s]' % settings.Config.ExternalIP, 5, 1)) if settings.Config.ExternalIP6: print(' %-27s' % "Responder external IPv6" + color('[%s]' % settings.Config.ExternalIP6, 5, 1)) print(' %-27s' % "Challenge set" + color('[%s]' % settings.Config.NumChal, 5, 1)) if settings.Config.Upstream_Proxy: print(' %-27s' % "Upstream Proxy" + color('[%s]' % settings.Config.Upstream_Proxy, 5, 1)) if len(settings.Config.RespondTo): print(' %-27s' % "Respond To" + color(str(settings.Config.RespondTo), 5, 1)) if len(settings.Config.RespondToName): print(' %-27s' % "Respond To Names" + color(str(settings.Config.RespondToName), 5, 1)) if len(settings.Config.DontRespondTo): print(' %-27s' % "Don't Respond To" + color(str(settings.Config.DontRespondTo), 5, 1)) if len(settings.Config.DontRespondToName): print(' %-27s' % "Don't Respond To Names" + color(str(settings.Config.DontRespondToName), 5, 1)) print(' %-27s' % "TTL for poisoned response" + color(str(settings.Config.TTL.encode().hex()) + " ("+ str(int.from_bytes(str.encode(settings.Config.TTL),"big")) +" seconds)", 5, 1)) print('') print(color("[+] ", 2, 1) + "Current Session Variables:") print(' %-27s' % "Responder Machine Name" + color('[%s]' % settings.Config.MachineName, 5, 1)) print(' %-27s' % "Responder Domain Name" + color('[%s]' % settings.Config.DomainName, 5, 1)) print(' %-27s' % "Responder DCE-RPC Port " + color('[%s]' % settings.Config.RPCPort, 5, 1))