
Énumération anonyme d'Active Directory en une seule passe via SAMR et LSARPC — session nulle, sans identifiants, avec une sortie structurée réutilisable.
Un énumérateur Active Directory à passe unique pour une session anonyme (null), utilisant les named pipes \samr et \lsarpc. Aucun identifiant requis.
Il ne fait rien que les outils classiques ne peuvent pas faire. Ce qu'il fait, c'est tout rassembler en une seule exécution et présenter les résultats proprement. Lors d'un engagement, vous arrivez sans compte de domaine, vous trouvez le DC via DNS, et vous voulez la vue complète — comptes, détail par utilisateur, groupes, politique, et les éléments LSA/DNS — sans avoir à assembler des sessions rpcclient ou plusieurs scripts séparés puis à parser leur stdout à la main. Cet outil fait cette passe pour vous et écrit une sortie structurée et réutilisable :
manifest.json, des userlist.txt / computerlist.txt prêts à l'emploi, et une liste de RID sauvegardée que vous pouvez réutiliser au lieu de brute-forcer deux fois.Veuillez n'exécuter ceci que contre des systèmes que vous possédez ou que vous êtes explicitement autorisé à tester. Énumérer l'annuaire de quelqu'un d'autre sans autorisation n'est pas acceptable, et selon votre localisation, cela peut être illégal.
Il existe deux versions qui se comportent de manière identique. Utilisez celle dont vous disposez la bibliothèque :
adnullenum.py — basé sur impacket.$) sont séparés des vrais utilisateurs.Il signale aussi les comptes intéressants pour vous : des choses comme « mot de passe non requis », « le mot de passe n'expire jamais », AS-REP-roastable, délégation non contrainte, jamais connecté, ou une description qui mentionne un mot de passe.
Quelques éléments qui en découlent naturellement :
Tout ici est du SAMR/LSARPC anonyme standard, et les outils établis atteignent déjà les mêmes données. C'est un wrapper de commodité, pas une nouvelle capacité, donc il vaut la peine de connaître les alternatives :
--rid-brute, --users, --pass-pol) couvre la même énumération au sein d'un framework bien plus vaste.samrdump.py (utilisateurs/groupes/alias + détail par utilisateur) et lookupsid.py (RID cycling via LSA). Pas d'exécution unique, pas de repli SAMR→LSA, stdout uniquement.rpcclient expose les appels sous-jacents (queryuser, enumdomusers, querydominfo, lsaquery, lookupsids, …) mais de manière interactive et en stdout uniquement. Son enumdomusers liste les utilisateurs standard par nom, sans comptes machine ($), et le détail complet se fait via queryuser un par un. Sans boucle de RID cycling intégrée, il ne peut pas récupérer les ordinateurs ni contourner une énumération restreinte. Voir Le faire à la main.Ce qu'adnullenum ajoute, c'est l'emballage : une seule exécution en session nulle au lieu de plusieurs outils, SAMR en premier avec un repli LSA optionnel, des indicateurs de comptes intéressants sélectionnés, et une sortie multi-format soignée que vous pouvez transmettre directement à l'étape suivante ou rouvrir plus tard. Si ce flux de travail correspond à votre façon de travailler, utilisez-le ; si vous préférez un outil éprouvé, tournez-vous vers enum4linux-ng ou NetExec.
Vous avez besoin de Python 3.9+ et d'une bibliothèque SMB. Un environnement virtuel garde tout propre :
# clone / copy the files, then from the project folder:
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install impacket # for adnullenum.py
C'est tout. Lancez python3 adnullenum.py --help pour tout voir.
Tout passe par un seul --mode. La valeur par défaut est recon, ce qui est la chose sûre à exécuter en premier.
| Mode | Ce que vous obtenez |
|---|---|
recon | Infos de domaine, comptages, politique de mot de passe/verrouillage, et les détails LSA/DNS. Pas de brute-force. Juste un tour d'horizon. |
rids | Trouve quels comptes existent et les classe en utilisateurs / ordinateurs / groupes. |
users | Ce qui précède, plus le détail complet de chaque vrai utilisateur et le résumé des « comptes intéressants ». Ajoutez --include-groups pour lister aussi les groupes de chaque utilisateur. |
groups | Groupes de domaine et alias intégrés avec leurs membres. |
full | Tout. |
# 1. Is anonymous access open, and how big is this domain?
python3 adnullenum.py 10.0.0.10
# 2. Grab everything
python3 adnullenum.py 10.0.0.10 --mode full
# 3. Just the account inventory, wider net for a big domain
python3 adnullenum.py 10.0.0.10 --mode rids --start-rid 1000 --max-rid 200000
# 4. Go slower to stay quiet
python3 adnullenum.py 10.0.0.10 --mode users --sleep 1 --jitter 40
# 5. Also write JSON (txt and csv are always written)
python3 adnullenum.py 10.0.0.10 --mode full --json
Si le domaine ne vous laisse pas lister les utilisateurs directement (courant), l'outil se rabat sur le RID cycling : il demande au DC de traduire les identifiants de compte en noms par lots de 1000. Par défaut, il balaie vers le haut jusqu'à avoir trouvé tout ce que le DC dit exister, ou jusqu'à ce que 5000 ID consécutifs reviennent vides. Vous pouvez le fixer à une plage exacte à la place :
python3 adnullenum.py 10.0.0.10 --mode rids --range 500-50000
Certains DC refusent entièrement le SAMR anonyme (enumdomains et la traduction de RID reviennent en ACCESS_DENIED). L'exécution n'abandonne pas :