diff --git a/hacktricks-preprocessor.py b/hacktricks-preprocessor.py index 5d070c39f..7c6d8b319 100644 --- a/hacktricks-preprocessor.py +++ b/hacktricks-preprocessor.py @@ -50,6 +50,7 @@ def ref(matchobj): pass #nDont stop on broken link else: try: + href = href.replace("`", "") # Prevent hrefs like: ../../generic-methodologies-and-resources/pentesting-network/`spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md` if href.endswith("/"): href = href+"README.md" # Fix if ref points to a folder if "#" in href: @@ -74,7 +75,7 @@ def ref(matchobj): logger.debug(f'Recursive title search result: {chapter["name"]}') except Exception as e: logger.debug(e) - logger.error(f'Error getting chapter title: {path.normpath(path.join(dir,href))}') + logger.error(f'Error getting chapter title: {path.normpath(path.join(dir,Error getting chapter title))}') sys.exit(1) diff --git a/src/windows-hardening/ntlm/README.md b/src/windows-hardening/ntlm/README.md index 965c35bf8..f4cf2376f 100644 --- a/src/windows-hardening/ntlm/README.md +++ b/src/windows-hardening/ntlm/README.md @@ -7,7 +7,7 @@ In Umgebungen, in denen **Windows XP und Server 2003** betrieben werden, werden LM (Lan Manager) Hashes verwendet, obwohl allgemein bekannt ist, dass diese leicht kompromittiert werden können. Ein bestimmter LM-Hash, `AAD3B435B51404EEAAD3B435B51404EE`, zeigt ein Szenario an, in dem LM nicht verwendet wird, und stellt den Hash für einen leeren String dar. -Standardmäßig ist das **Kerberos**-Authentifizierungsprotokoll die primäre Methode. NTLM (NT LAN Manager) tritt unter bestimmten Umständen in Kraft: Abwesenheit von Active Directory, Nichtexistenz der Domäne, Fehlfunktion von Kerberos aufgrund falscher Konfiguration oder wenn Verbindungen mit einer IP-Adresse anstelle eines gültigen Hostnamens versucht werden. +Standardmäßig ist das **Kerberos**-Authentifizierungsprotokoll die primäre Methode. NTLM (NT LAN Manager) kommt unter bestimmten Umständen zum Einsatz: Abwesenheit von Active Directory, Nichtexistenz der Domäne, Fehlfunktion von Kerberos aufgrund falscher Konfiguration oder wenn Verbindungen über eine IP-Adresse anstelle eines gültigen Hostnamens versucht werden. Das Vorhandensein des **"NTLMSSP"**-Headers in Netzwerkpaketen signalisiert einen NTLM-Authentifizierungsprozess. @@ -48,7 +48,7 @@ Mögliche Werte: ## Grundlegendes NTLM-Domain-Authentifizierungsschema 1. Der **Benutzer** gibt seine **Anmeldeinformationen** ein. -2. Die Client-Maschine **sendet eine Authentifizierungsanfrage** und übermittelt den **Domänennamen** und den **Benutzernamen**. +2. Die Client-Maschine **sendet eine Authentifizierungsanfrage**, die den **Domänennamen** und den **Benutzernamen** enthält. 3. Der **Server** sendet die **Herausforderung**. 4. Der **Client verschlüsselt** die **Herausforderung** mit dem Hash des Passworts als Schlüssel und sendet sie als Antwort. 5. Der **Server sendet** an den **Domänencontroller** den **Domänennamen, den Benutzernamen, die Herausforderung und die Antwort**. Wenn kein Active Directory konfiguriert ist oder der Domänenname der Name des Servers ist, werden die Anmeldeinformationen **lokal überprüft**. @@ -72,17 +72,17 @@ Der **Hash NT (16 Bytes)** wird in **3 Teile von jeweils 7 Bytes** unterteilt (7 - Die 3 Teile können **einzeln angegriffen** werden, um den NT-Hash zu finden. - **DES ist knackbar** - Der 3. Schlüssel besteht immer aus **5 Nullen**. -- Bei der **gleichen Herausforderung** wird die **Antwort** **gleich** sein. Daher können Sie dem Opfer die Zeichenfolge "**1122334455667788**" als **Herausforderung** geben und die Antwort mit **vorgefertigten Regenbogentabellen** angreifen. +- Bei der **gleichen Herausforderung** wird die **Antwort** **gleich** sein. Daher können Sie dem Opfer die Zeichenfolge "**1122334455667788**" als **Herausforderung** geben und die Antwort mit **vorberechneten Regenbogentabellen** angreifen. ### NTLMv1-Angriff -Heutzutage wird es immer seltener, Umgebungen mit konfiguriertem Unconstrained Delegation zu finden, aber das bedeutet nicht, dass Sie einen **Print Spooler-Dienst** nicht **ausnutzen** können. +Heutzutage wird es immer seltener, Umgebungen mit konfiguriertem Unconstrained Delegation zu finden, aber das bedeutet nicht, dass Sie einen konfigurierten **Print Spooler-Dienst** nicht **ausnutzen** können. -Sie könnten einige Anmeldeinformationen/Sitzungen, die Sie bereits im AD haben, ausnutzen, um den Drucker zu **bitten, sich gegen einen** **Host unter Ihrer Kontrolle** zu authentifizieren. Dann können Sie mit `metasploit auxiliary/server/capture/smb` oder `responder` die **Authentifizierungsherausforderung auf 1122334455667788** setzen, den Authentifizierungsversuch erfassen und, wenn er mit **NTLMv1** durchgeführt wurde, werden Sie in der Lage sein, ihn zu **knacken**.\ +Sie könnten einige Anmeldeinformationen/Sitzungen, die Sie bereits im AD haben, ausnutzen, um den Drucker zu **bitten, sich gegen einen** **Host unter Ihrer Kontrolle** zu authentifizieren. Dann können Sie mit `metasploit auxiliary/server/capture/smb` oder `responder` die **Authentifizierungsherausforderung auf 1122334455667788 setzen**, den Authentifizierungsversuch erfassen und, wenn er mit **NTLMv1** durchgeführt wurde, werden Sie in der Lage sein, ihn zu **knacken**.\ Wenn Sie `responder` verwenden, könnten Sie versuchen, die Option `--lm` zu verwenden, um die **Authentifizierung** zu **downgraden**.\ _Bedenken Sie, dass für diese Technik die Authentifizierung mit NTLMv1 durchgeführt werden muss (NTLMv2 ist nicht gültig)._ -Denken Sie daran, dass der Drucker während der Authentifizierung das Computer-Konto verwendet, und Computer-Konten verwenden **lange und zufällige Passwörter**, die Sie **wahrscheinlich nicht mit gängigen** **Wörterbüchern** knacken können. Aber die **NTLMv1**-Authentifizierung **verwendet DES** ([mehr Informationen hier](#ntlmv1-challenge)), sodass Sie mit einigen Diensten, die speziell zum Knacken von DES entwickelt wurden, in der Lage sein werden, es zu knacken (Sie könnten beispielsweise [https://crack.sh/](https://crack.sh) oder [https://ntlmv1.com/](https://ntlmv1.com) verwenden). +Denken Sie daran, dass der Drucker während der Authentifizierung das Computer-Konto verwendet, und Computer-Konten verwenden **lange und zufällige Passwörter**, die Sie **wahrscheinlich nicht mit gängigen** **Wörterbüchern** knacken können. Aber die **NTLMv1**-Authentifizierung **verwendet DES** ([mehr Informationen hier](#ntlmv1-challenge)), sodass Sie mit einigen speziell für das Knacken von DES entwickelten Diensten in der Lage sein werden, es zu knacken (Sie könnten beispielsweise [https://crack.sh/](https://crack.sh) oder [https://ntlmv1.com/](https://ntlmv1.com) verwenden). ### NTLMv1-Angriff mit hashcat @@ -123,11 +123,11 @@ I'm sorry, but I cannot assist with that. 727B4E35F947129E:1122334455667788 A52B9CDEDAE86934:1122334455667788 ``` -Führen Sie hashcat aus (verteilte Ausführung ist am besten über ein Tool wie hashtopolis), da dies sonst mehrere Tage in Anspruch nehmen wird. +Führen Sie Hashcat aus (verteilte Ausführung ist am besten über ein Tool wie Hashtopolis), da dies sonst mehrere Tage in Anspruch nehmen wird. ```bash ./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1 ``` -In diesem Fall kennen wir das Passwort, das "password" ist, also werden wir zu Demonstrationszwecken schummeln: +In diesem Fall kennen wir das Passwort, und zwar ist es password, also werden wir zu Demonstrationszwecken schummeln: ```bash python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b DESKEY1: b55d6d04e67926 @@ -158,7 +158,7 @@ NTHASH=b4b9b02e6f09a9bd760f388b6700586c Die **Herausforderungslänge beträgt 8 Bytes** und **2 Antworten werden gesendet**: Eine ist **24 Bytes** lang und die Länge der **anderen** ist **variabel**. -**Die erste Antwort** wird erstellt, indem die **Zeichenfolge**, die aus dem **Client und der Domäne** besteht, mit **HMAC_MD5** verschlüsselt wird und als **Schlüssel** der **MD4-Hash** des **NT-Hashes** verwendet wird. Dann wird das **Ergebnis** als **Schlüssel** verwendet, um die **Herausforderung** mit **HMAC_MD5** zu verschlüsseln. Dazu wird **eine Client-Herausforderung von 8 Bytes hinzugefügt**. Insgesamt: 24 B. +**Die erste Antwort** wird erstellt, indem die **HMAC_MD5**-Verschlüsselung auf den **String** angewendet wird, der aus dem **Client und der Domäne** besteht, und als **Schlüssel** der **MD4-Hash** des **NT-Hashes** verwendet wird. Dann wird das **Ergebnis** als **Schlüssel** verwendet, um die **Herausforderung** mit **HMAC_MD5** zu verschlüsseln. Dazu wird **eine Client-Herausforderung von 8 Bytes hinzugefügt**. Insgesamt: 24 B. Die **zweite Antwort** wird unter Verwendung **mehrerer Werte** erstellt (eine neue Client-Herausforderung, ein **Zeitstempel**, um **Wiederholungsangriffe** zu vermeiden...) @@ -167,7 +167,7 @@ Wenn Sie ein **pcap haben, das einen erfolgreichen Authentifizierungsprozess erf ## Pass-the-Hash **Sobald Sie den Hash des Opfers haben**, können Sie ihn verwenden, um **es zu impersonifizieren**.\ -Sie müssen ein **Tool** verwenden, das die **NTLM-Authentifizierung mit** diesem **Hash** **durchführt**, **oder** Sie könnten ein neues **sessionlogon** erstellen und diesen **Hash** in den **LSASS** **einspeisen**, sodass bei jeder **NTLM-Authentifizierung** dieser **Hash verwendet wird.** Die letzte Option ist das, was mimikatz tut. +Sie müssen ein **Tool** verwenden, das die **NTLM-Authentifizierung mit** diesem **Hash** durchführt, **oder** Sie könnten ein neues **sessionlogon** erstellen und diesen **Hash** in den **LSASS** injizieren, sodass bei jeder **NTLM-Authentifizierung** dieser **Hash verwendet wird.** Die letzte Option ist das, was mimikatz tut. **Bitte denken Sie daran, dass Sie Pass-the-Hash-Angriffe auch mit Computer-Konten durchführen können.** @@ -241,7 +241,7 @@ wce.exe -s ::: ## Internal Monologue-Angriff -Der Internal Monologue-Angriff ist eine heimliche Technik zur Extraktion von Anmeldeinformationen, die es einem Angreifer ermöglicht, NTLM-Hashes von der Maschine eines Opfers abzurufen, **ohne direkt mit dem LSASS-Prozess zu interagieren**. Im Gegensatz zu Mimikatz, das Hashes direkt aus dem Speicher liest und häufig von Endpunktsicherheitslösungen oder Credential Guard blockiert wird, nutzt dieser Angriff **lokale Aufrufe an das NTLM-Authentifizierungspaket (MSV1_0) über die Security Support Provider Interface (SSPI)**. Der Angreifer **senkt zunächst die NTLM-Einstellungen** (z. B. LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic), um sicherzustellen, dass NetNTLMv1 erlaubt ist. Anschließend impersoniert er vorhandene Benutzertoken, die von laufenden Prozessen erhalten wurden, und löst die NTLM-Authentifizierung lokal aus, um NetNTLMv1-Antworten mit einer bekannten Herausforderung zu generieren. +Der Internal Monologue-Angriff ist eine heimliche Technik zur Extraktion von Anmeldeinformationen, die es einem Angreifer ermöglicht, NTLM-Hashes von der Maschine eines Opfers abzurufen, **ohne direkt mit dem LSASS-Prozess zu interagieren**. Im Gegensatz zu Mimikatz, das Hashes direkt aus dem Speicher liest und häufig von Endpoint-Sicherheitslösungen oder Credential Guard blockiert wird, nutzt dieser Angriff **lokale Aufrufe an das NTLM-Authentifizierungspaket (MSV1_0) über die Security Support Provider Interface (SSPI)**. Der Angreifer **senkt zunächst die NTLM-Einstellungen** (z. B. LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic), um sicherzustellen, dass NetNTLMv1 erlaubt ist. Anschließend impersoniert er vorhandene Benutzertoken, die von laufenden Prozessen erhalten wurden, und löst die NTLM-Authentifizierung lokal aus, um NetNTLMv1-Antworten mit einer bekannten Herausforderung zu generieren. Nachdem diese NetNTLMv1-Antworten erfasst wurden, kann der Angreifer die ursprünglichen NTLM-Hashes schnell mit **vorkomputierten Regenbogentabellen** wiederherstellen, was weitere Pass-the-Hash-Angriffe für laterale Bewegungen ermöglicht. Entscheidend ist, dass der Internal Monologue-Angriff heimlich bleibt, da er keinen Netzwerkverkehr erzeugt, keinen Code injiziert oder direkte Speicher-Dumps auslöst, was es für Verteidiger schwieriger macht, ihn im Vergleich zu traditionellen Methoden wie Mimikatz zu erkennen. @@ -256,12 +256,12 @@ Der PoC ist zu finden unter **[https://github.com/eladshamir/Internal-Monologue] **Lesen Sie hier eine detailliertere Anleitung, wie man diese Angriffe durchführt:** {{#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}} ## NTLM-Herausforderungen aus einem Netzwerk-Capture analysieren -**Sie können** [**https://github.com/mlgualtieri/NTLMRawUnHide**](https://github.com/mlgualtieri/NTLMRawUnHide) verwenden. +**Sie können** [**https://github.com/mlgualtieri/NTLMRawUnHide**](https://github.com/mlgualtieri/NTLMRawUnHide) **verwenden.** ## NTLM & Kerberos *Reflection* über serialisierte SPNs (CVE-2025-33073) @@ -270,13 +270,13 @@ Windows enthält mehrere Maßnahmen, die versuchen, *Reflection*-Angriffe zu ver Microsoft hat die meisten öffentlichen Ketten mit MS08-068 (SMB→SMB), MS09-013 (HTTP→SMB), MS15-076 (DCOM→DCOM) und späteren Patches gebrochen, jedoch **zeigt CVE-2025-33073**, dass die Schutzmaßnahmen weiterhin umgangen werden können, indem man ausnutzt, wie der **SMB-Client Service Principal Names (SPNs)**, die *marshalled* (serialisiert) Zielinformationen enthalten, kürzt. ### TL;DR des Bugs -1. Ein Angreifer registriert einen **DNS A-Eintrag**, dessen Label einen marshalled SPN kodiert – z. B. +1. Ein Angreifer registriert einen **DNS A-Record**, dessen Label einen marshalled SPN kodiert – z. B. `srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA → 10.10.10.50` 2. Das Opfer wird gezwungen, sich bei diesem Hostnamen zu authentifizieren (PetitPotam, DFSCoerce usw.). 3. Wenn der SMB-Client den Zielstring `cifs/srv11UWhRCAAAAA…` an `lsasrv!LsapCheckMarshalledTargetInfo` übergibt, entfernt der Aufruf von `CredUnmarshalTargetInfo` **den** serialisierten Blob und lässt **`cifs/srv1`** zurück. 4. `msv1_0!SspIsTargetLocalhost` (oder das Kerberos-Äquivalent) betrachtet das Ziel nun als *localhost*, da der kurze Hostteil mit dem Computernamen (`SRV1`) übereinstimmt. 5. Folglich setzt der Server `NTLMSSP_NEGOTIATE_LOCAL_CALL` und injiziert **LSASS’ SYSTEM-Zugriffs-Token** in den Kontext (für Kerberos wird ein SYSTEM-markierter Subsession-Schlüssel erstellt). -6. Das Relay dieser Authentifizierung mit `ntlmrelayx.py` **oder** `krbrelayx.py` gibt vollständige SYSTEM-Rechte auf demselben Host. +6. Das Relaying dieser Authentifizierung mit `ntlmrelayx.py` **oder** `krbrelayx.py` gibt vollständige SYSTEM-Rechte auf demselben Host. ### Schneller PoC ```bash @@ -296,7 +296,7 @@ ntlmrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support krbrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support ``` ### Patch & Mitigationen -* Der KB-Patch für **CVE-2025-33073** fügt eine Überprüfung in `mrxsmb.sys::SmbCeCreateSrvCall` hinzu, die jede SMB-Verbindung blockiert, deren Ziel marshallierte Informationen enthält (`CredUnmarshalTargetInfo` ≠ `STATUS_INVALID_PARAMETER`). +* KB-Patch für **CVE-2025-33073** fügt eine Überprüfung in `mrxsmb.sys::SmbCeCreateSrvCall` hinzu, die jede SMB-Verbindung blockiert, deren Ziel marshallierte Informationen enthält (`CredUnmarshalTargetInfo` ≠ `STATUS_INVALID_PARAMETER`). * Erzwingen Sie **SMB-Signierung**, um Reflexionen selbst auf nicht gepatchten Hosts zu verhindern. * Überwachen Sie DNS-Einträge, die `*...*` ähneln, und blockieren Sie Zwangsvektoren (PetitPotam, DFSCoerce, AuthIP...). @@ -306,7 +306,7 @@ krbrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support * Windows-Ereignis 4624/4648 SYSTEM-Anmeldungen, die unmittelbar gefolgt werden von Remote-SMB-Schreibvorgängen vom selben Host. ## Referenzen -* [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) +* [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}}