
Enumerazione anonima di Active Directory in un solo passaggio tramite SAMR e LSARPC — sessione nulla, senza credenziali, con output strutturato riutilizzabile.
Un enumeratore Active Directory a passaggio singolo per una sessione anonima (null), che utilizza le named pipe \samr e \lsarpc. Nessuna credenziale richiesta.
Non fa nulla che gli strumenti classici non possano fare. Quello che fa è raccogliere tutto in una sola esecuzione e presentare i risultati in modo pulito. Durante un engagement ti trovi senza un account di dominio, trovi il DC tramite DNS e vuoi il quadro completo: account, dettagli per utente, gruppi, policy e le parti LSA/DNS, senza dover mettere insieme sessioni rpcclient o diversi script separati e poi analizzare manualmente il loro stdout. Questo esegue quel passaggio per te e scrive output strutturato e riutilizzabile:
manifest.json, userlist.txt / computerlist.txt pronti all'uso, e una lista di RID salvata che puoi riutilizzare invece di forzare due volte.Esegui questo strumento solo su sistemi che possiedi o che sei esplicitamente autorizzato a testare. Enumerare la directory di qualcun altro senza permesso non è accettabile e, a seconda di dove ti trovi, potrebbe essere illegale.
Esistono due versioni che si comportano in modo identico. Usa quella per cui hai la libreria:
adnullenum.py — basato su impacket.$) sono separati dagli utenti reali.Segnala anche account interessanti per te: cose come "password non richiesta", "password che non scade mai", AS-REP-roastable, delega non vincolata, mai effettuato il logon, o una descrizione che menziona una password.
Un paio di cose che derivano naturalmente da questo:
Tutto qui è SAMR/LSARPC anonimo standard, e gli strumenti consolidati raggiungono già gli stessi dati. Questo è un wrapper di comodità, non una nuova capacità, quindi vale la pena conoscere le alternative:
--rid-brute, --users, --pass-pol) copre la stessa enumerazione all'interno di un framework molto più ampio.samrdump.py (utenti/gruppi/alias + dettaglio per utente) e lookupsid.py (RID cycling su LSA). Nessuna esecuzione singola, nessun fallback SAMR→LSA, solo stdout.rpcclient espone le chiamate sottostanti (queryuser, enumdomusers, querydominfo, lsaquery, lookupsids, …) ma in modo interattivo e solo stdout. Il suo enumdomusers elenca gli utenti standard per nome, nessun account macchina ($), e il dettaglio completo è queryuser uno alla volta. Senza un ciclo di RID-cycling integrato non può recuperare i computer o aggirare l'enumerazione limitata. Vedi Farlo a mano.Ciò che adnullenum aggiunge è il packaging: una singola esecuzione in sessione null invece di diversi strumenti, SAMR-first con un fallback LSA opt-in, flag curati per gli account interessanti e output ordinato multi-formato che puoi passare direttamente al passo successivo o riaprire più tardi. Se quel flusso di lavoro si adatta a come lavori, usalo; se preferisci uno strumento collaudato, rivolgiti a enum4linux-ng o NetExec.
Ti servono Python 3.9+ e una libreria SMB. Un ambiente virtuale mantiene tutto ordinato:
# 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
Tutto qui. Esegui python3 adnullenum.py --help per vedere tutto.
Tutto passa attraverso un singolo --mode. Il default è recon, che è la cosa sicura da eseguire per prima.
| Modalità | Cosa ottieni |
|---|---|
recon | Informazioni di dominio, conteggi, policy di password/lockout e i dettagli LSA/DNS. Nessun brute-forcing. Solo un'occhiata in giro. |
rids | Trova quali account esistono e li suddivide in utenti / computer / gruppi. |
users | Quanto sopra, più il dettaglio completo su ogni utente reale e il riepilogo degli "account interessanti". Aggiungi --include-groups per elencare anche i gruppi di ogni utente. |
groups | Gruppi di dominio e alias builtin con i loro membri. |
full | Tutto quanto. |
# 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
Se il dominio non ti permette di elencare gli utenti direttamente (cosa comune), lo strumento ripiega sul RID cycling: chiede al DC di tradurre gli ID account in nomi in batch da 1000. Per default esegue una scansione verso l'alto finché non ha trovato tutto ciò che il DC dice esistere, o finché 5000 ID consecutivi non tornano vuoti. Puoi invece vincolarlo a un intervallo esatto:
python3 adnullenum.py 10.0.0.10 --mode rids --range 500-50000
Alcuni DC rifiutano completamente SAMR anonimo (enumdomains e la traduzione dei RID tornano ACCESS_DENIED). L'esecuzione non si arrende: