{# BigBrother Responder.conf template
   Jinja2 variables:
     protocols: dict of protocol toggles (LLMNR, NBT-NS, mDNS, HTTP, SMB, etc.)
     relay_targets: set of IPs excluded from SMB auth (for ntlm_relay)
     interface: network interface
#}
[Responder Core]

; Servers to start
SQL = {{ 'On' if protocols.get('SQL', false) else 'Off' }}
SMB = {{ 'On' if protocols.get('SMB', true) else 'Off' }}
RDP = Off
Kerberos = Off
FTP = {{ 'On' if protocols.get('FTP', false) else 'Off' }}
POP = {{ 'On' if protocols.get('POP', false) else 'Off' }}
SMTP = {{ 'On' if protocols.get('SMTP', false) else 'Off' }}
IMAP = {{ 'On' if protocols.get('IMAP', false) else 'Off' }}
HTTP = {{ 'On' if protocols.get('HTTP', true) else 'Off' }}
HTTPS = {{ 'On' if protocols.get('HTTP', true) else 'Off' }}
DNS = Off
LDAP = {{ 'On' if protocols.get('LDAP', false) else 'Off' }}
DCERPC = Off
WinRM = Off
SNMP = Off
MQTT = Off

; Custom challenge — Random is stealthier than fixed
Challenge = Random

; Set specific interface
; Interface = {{ interface }}

; WPAD configuration
WPADScript = function FindProxyForURL(url, host){return "DIRECT";}
{% if protocols.get('WPAD', true) %}
; WPAD rogue proxy enabled
Serve-Html = On
Serve-Exe = Off
{% endif %}

; Force WPAD auth for hash capture
Force-WPAD-Auth = {{ 'On' if protocols.get('WPAD', true) else 'Off' }}

; Downgrade to NTLMv1 (more crackable but more detectable)
; Set to On only when specifically targeting NTLMv1
Downgrade-To-NTLMv1 = Off

; Don't respond to these machines (comma-separated hostnames)
DontRespondToNames =

{% if relay_targets %}
; Hosts excluded from SMB auth — being relayed by ntlmrelayx
; These IPs should get auth forwarded to ntlmrelayx, not captured locally
DontRespondTo = {{ relay_targets | join(', ') }}
{% else %}
DontRespondTo =
{% endif %}

[HTTP Server]
; Custom HTML to serve for WPAD/HTTP auth
HTMLToInject =
; Serve a custom EXE
Serve-Always = Off
Filename =
ExecParams =

[HTTPS Server]
; Self-signed cert params
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
