| name | ldapdomaindump |
| description | LDAPDomainDump — dump des informations Active Directory via LDAP (utilisateurs, groupes, ordinateurs, GPO, confiance, politiques de mot de passe, DNS), scripts d'analyse post-dump, et workflow de reconnaissance AD complet. |
LDAPDomainDump — Énumération Active Directory par LDAP
Présentation
LDAPDomainDump est un outil qui interroge l'annuaire Active Directory via LDAP pour extraire toutes les informations du domaine : utilisateurs, groupes, ordinateurs, GPO, policies, et relations de confiance.
Installation :
sudo apt install ldapdomaindump
git clone https://github.com/dirkjanm/ldapdomaindump.git
cd ldapdomaindump && pip3 install .
Connexion de base
Avec mot de passe
ldapdomaindump -u 'DOMAIN\user' -p 'Password123' 192.168.1.10
ldapdomaindump -u 'DOMAIN\\Administrator' -p 'Password123' dc01.example.com
ldapdomaindump -u 'DOMAIN\user' -p 'Password123' -o /tmp/domain_dump/ 192.168.1.10
Pass-the-Hash (NTLM)
ldapdomaindump -u 'DOMAIN\user' -p '' -hashes :NTHASH 192.168.1.10
Avec authentification Kerberos
impacket-getTGT DOMAIN/user:Password123
export KRB5CCNAME=/path/to/user.ccache
ldapdomaindump -k -u 'DOMAIN\user' dc01.example.com
Connexion LDAP simple (SSL)
ldapdomaindump -u 'DOMAIN\user' -p 'Password123' ldap://192.168.1.10
ldapdomaindump -u 'DOMAIN\user' -p 'Password123' ldaps://192.168.1.10
Fichiers générés
ldapdomaindump -u 'DOMAIN\user' -p 'Password123' -o /tmp/domain_dump/ 192.168.1.10
/tmp/domain_dump/
├── domain_users.html
├── domain_users_by_group.html
├── domain_computers.html
├── domain_groups.html
├── domain_trusts.html
├── domain_policy.html
├── domain_dns.html
├── domain_forest_trusts.html
├── domain_users.json
├── domain_computers.json
├── domain_groups.json
├── domain_trusts.json
├── domain_policy.json
├── domain_dns.json
├── domain_users.grep
├── domain_computers.grep
├── domain_groups.grep
Analyse des fichiers HTML
Utilisateurs (domain_users.html)
Groupes (domain_groups.html)
Ordinateurs (domain_computers.html)
Politiques (domain_policy.html)
Relations de confiance (domain_trusts.html)
Analyse avancée
Extraction des descriptions (mots de passe potentiels)
cat /tmp/domain_dump/domain_users.json | jq '.[] | select(.description != "") | {username, description}'
Utilisateurs inactifs (takeover possible)
cat /tmp/domain_dump/domain_users.json | jq '.[] | select(.lastlogon != "" and .enabled == true)'
OS non supportés
cat /tmp/domain_dump/domain_computers.json | jq '.[] | select(.operatingsystem | contains("Windows 7") or contains("Server 2008") or contains("Windows XP"))'
Analyse DNS
cat /tmp/domain_dump/domain_dns.json | jq '.[] | select(.type == "A") | {name, data}'
LDAPDomainDump pour pentest AD
Workflow typique
ldapdomaindump -u 'DOMAIN\user' -p 'Password123' -o dump/ 192.168.1.10
grep -i "serviceprincipalname" dump/domain_users.html | head -20
grep -i "dontreqpreauth\|does not require" dump/domain_users.html
xdg-open dump/domain_policy.html
xdg-open dump/domain_groups.html
Combinaison avec d'autres outils
ldapdomaindump -u 'DOMAIN\user' -p 'Password123' -o dump/ 192.168.1.10
impacket-GetUserSPNs 'DOMAIN/user:Password123' -outputfile kerb_hashes.txt
impacket-GetNPUsers 'DOMAIN/' -dc-ip 192.168.1.10 -usersfile dump/domain_users.grep
bloodhound-python -c All -u 'DOMAIN\user' -p 'Password123' \
-dc DC01 -ns 192.168.1.10 -d domain.local
Scripts d'analyse post-dump
#!/bin/bash
DUMP_DIR="${1:-/tmp/domain_dump}"
echo "=== Analyse LDAPDomainDump ==="
echo ""
echo "=== Utilisateurs inactifs (>90 jours) ==="
cat $DUMP_DIR/domain_users.json | jq -r '.[] | select(.lastlogon != "" and .enabled == true) | .username' | head -20
echo ""
echo "=== Utilisateurs avec description (mots de passe?) ==="
cat $DUMP_DIR/domain_users.json | jq -r '.[] | select(.description != "") | "\(.username): \(.description)"'
echo ""
echo "=== OS non supportés ==="
cat $DUMP_DIR/domain_computers.json | jq -r '.[] | select(.operatingsystem | contains("7") or contains("2008") or contains("XP")) | "\(.computername): \(.operatingsystem)"'
echo ""
echo "=== Top 10 groupes les plus grands ==="
cat $DUMP_DIR/domain_groups.json | jq -r '.[] | "\(.groupname): \(.membercount)"' | sort -t: -k2 -rn | head -10
echo ""
echo
/domain_policy.json | jq -r
LDAPDomainDump sans credentials
ldapdomaindump -u '' -p '' 192.168.1.10
ldapdomaindump -u 'DOMAIN\guest' -p '' 192.168.1.10
Analyse JSON avec jq
cat domain_users.json | jq -r '.[].username'
cat domain_users.json | jq -r '.[] | select(.enabled == true) | .username'
cat domain_users.json | jq -r '.[] | select(.admincount == true) | .username'
cat domain_groups.json | jq -r '.[].groupname'
cat domain_computers.json | jq -r '.[] | "\(.computername): \(.operatingsystem)"'
cat domain_users.json | jq 'length'
cat domain_computers.json | jq 'length'
cat domain_groups.json | jq 'length'
Dépannage
| Problème | Solution |
|---|
| "LDAP bind failed" | Vérifier credentials, protocole (LDAP vs LDAPS) |
| Pas de données DNS | DNS dans AD non configuré |
| Fichiers vides | Vérifier la connexion LDAP, les droits |
| HTML cassé | Vérifier que les fichiers JSON sont bien générés |
| Connexion refusée | Vérifier port 389 (LDAP) sur le DC |
Antisèche rapide
ldapdomaindump -u 'DOMAIN\user' -p 'Password123' -o /tmp/dump/ 192.168.1.10
xdg-open /tmp/dump/domain_users.html
xdg-open /tmp/dump/domain_groups.html
xdg-open /tmp/dump/domain_computers.html
xdg-open /tmp/dump/domain_policy.html
cat /tmp/dump/domain_users.json | jq '.[] | select(.description != "") | {username, description}'
cat /tmp/dump/domain_computers.json | jq -r '.[] | select(.operatingsystem | contains("7") or contains("2008")) | .computername'
cat /tmp/dump/domain_policy.json | jq '.'