
Einmalige anonyme Active-Directory-Enumeration über SAMR und LSARPC — Null-Session, ohne Anmeldedaten, mit strukturierter wiederverwendbarer Ausgabe.
Ein Single-Pass-Active-Directory-Enumerator für eine anonyme (Null-)Session,
unter Verwendung der Named Pipes \samr und \lsarpc. Keine Anmeldedaten erforderlich.
Es tut nichts, was die klassischen Tools nicht auch können. Was es tut, ist, alles in
einem Durchlauf zu sammeln und die Ergebnisse übersichtlich aufzubereiten. In einem Engagement landest du ohne Domänenkonto, findest den DC über DNS und willst das Gesamtbild – Konten,
Details pro Benutzer, Gruppen, Richtlinien und die LSA/DNS-Informationen –, ohne rpcclient-Sessions
oder mehrere separate Skripte zusammenzustückeln und deren stdout manuell zu parsen. Dies erledigt diesen Durchlauf für dich und schreibt strukturierte, wiederverwendbare Ausgaben:
manifest.json, sofort einsetzbaren userlist.txt /
computerlist.txt und einer gespeicherten RID-Liste, die du wiederverwenden kannst, statt zweimal zu brute-forcen.Bitte führe dies nur gegen Systeme aus, die dir gehören oder für die du ausdrücklich autorisiert bist, zu testen. Das Verzeichnis von jemand anderem ohne Erlaubnis zu enumerieren, ist nicht in Ordnung, und je nachdem, wo du bist, kann es illegal sein.
Es gibt zwei Versionen, die sich identisch verhalten. Verwende die Bibliothek, die du hast:
adnullenum.py — basiert auf impacket.$ enden), werden
von echten Benutzern getrennt.Es markiert außerdem interessante Konten für dich: Dinge wie „Passwort nicht erforderlich“, „Passwort läuft nie ab“, AS-REP-roastable, unconstrained delegation, nie angemeldet oder eine Beschreibung, die ein Passwort erwähnt.
Ein paar Dinge, die sich daraus natürlich ergeben:
Alles hier ist Standard-anonymes SAMR/LSARPC, und die etablierten Tools erreichen bereits dieselben Daten. Dies ist ein Komfort-Wrapper, keine neue Fähigkeit, daher lohnt es sich, die Alternativen zu kennen:
--rid-brute, --users,
--pass-pol) deckt dieselbe Enumeration innerhalb eines viel größeren Frameworks ab.samrdump.py (Benutzer/Gruppen/Aliase +
Details pro Benutzer) und lookupsid.py (RID-Cycling über LSA). Kein einzelner Durchlauf, kein
SAMR→LSA-Fallback, nur stdout.rpcclient legt die zugrunde liegenden Aufrufe offen (queryuser, enumdomusers,
querydominfo, lsaquery, lookupsids, …), aber interaktiv und nur stdout.
Sein enumdomusers listet Standardbenutzer nach Namen auf, keine Maschinen- ($) Konten, und
vollständige Details gibt es mit queryuser einzeln. Ohne eingebaute RID-Cycling-Schleife
kann es Computer nicht wiederherstellen oder eingeschränkte Enumeration umgehen. Siehe
Manuell durchführen.Was adnullenum hinzufügt, ist die Verpackung: ein Null-Session-Durchlauf statt mehrerer Tools, SAMR-first mit einem optionalen LSA-Fallback, kuratierte Flags für interessante Konten und ordentliche Multi-Format-Ausgabe, die du direkt an den nächsten Schritt weitergeben oder später erneut öffnen kannst. Wenn dieser Workflow zu deiner Arbeitsweise passt, verwende es; wenn du lieber ein kampferprobtes Tool möchtest, greife zu enum4linux-ng oder NetExec.
Du brauchst Python 3.9+ und eine SMB-Bibliothek. Eine virtuelle Umgebung hält es ordentlich:
# 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
Das war's. Führe python3 adnullenum.py --help aus, um alles zu sehen.
Alles läuft über einen einzigen --mode. Der Standard ist recon, was das
Sicherste ist, was man zuerst ausführt.
| Modus | Was du bekommst |
|---|---|
recon | Domäneninformationen, Zählungen, Passwort-/Sperrrichtlinie und die LSA-/DNS-Details. Kein Brute-Forcing. Nur ein Blick. |
rids | Findet, welche Konten existieren, und sortiert sie in Benutzer / Computer / Gruppen. |
users | Das Obige plus vollständige Details zu jedem echten Benutzer und die Zusammenfassung der „interessanten Konten“. Füge --include-groups hinzu, um auch die Gruppen jedes Benutzers aufzulisten. |
groups | Domänengruppen und integrierte Aliase mit ihren Mitgliedern. |
full | Alles davon. |
# 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
Wenn die Domäne dich Benutzer nicht direkt auflisten lässt (häufig), fällt das Tool auf RID-Cycling zurück: Es bittet den DC, Konto-IDs in Stapeln von 1000 in Namen zu übersetzen. Standardmäßig tastet es aufwärts ab, bis es alles gefunden hat, was der DC als existierend angibt, oder bis 5000 IDs in Folge leer zurückkommen. Du kannst es stattdessen auf einen exakten Bereich festlegen:
python3 adnullenum.py 10.0.0.10 --mode rids --range 500-50000
Einige DCs verweigern anonymes SAMR vollständig (enumdomains und RID-Übersetzung kommen
als ACCESS_DENIED zurück). Der Durchlauf gibt nicht auf: