Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
adnullenum — Enumeración anónima de Active Directory en una sola pasada sobre SAMR y LSARPC — sesión nula, sin credenciales, con salida estructurada y reutilizable. | Kitploit
Herramientas/GitHubGitHub/crypt0p3g/adnullenum
Herramientas DefensivasOSINT (Inteligencia de Fuentes Abiertas)ReconocimientoAnálisis de VulnerabilidadesRecopilación de InformaciónSeguridad de RedesPruebas de PenetraciónRed Teaming
GitHubcrypt0p3g/adnullenum

adnullenum

Enumeración anónima de Active Directory en una sola pasada sobre SAMR y LSARPC — sesión nula, sin credenciales, con salida estructurada y reutilizable.

Ver Repositorio
37710hace 3 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

adnullenum

Un enumerador de Active Directory de una sola pasada para una sesión anónima (null), utilizando las named pipes \samr y \lsarpc. No se requieren credenciales.

No hace nada que las herramientas clásicas no puedan hacer. Lo que hace es reunirlo todo en una sola ejecución y presentar los resultados de forma limpia. En un engagement llegas sin ninguna cuenta de dominio, encuentras el DC a través de DNS, y quieres la imagen completa: cuentas, detalle por usuario, grupos, política y los detalles de LSA/DNS, sin tener que encadenar sesiones de rpcclient o varios scripts separados y luego parsear su stdout a mano. Esto hace esa pasada por ti y escribe una salida estructurada y reutilizable:

  • Un solo comando cubre la información del dominio, la política, el descubrimiento de RIDs, el detalle por usuario y los grupos, eligiendo el método que funciona y degradándose con elegancia cuando SAMR está bloqueado (ver Cómo se compara y Cuando SAMR está bloqueado).
  • Salida diseñada para alimentar a la siguiente herramienta. Carpetas de ejecución con marca de tiempo con txt / csv / (opcional) json, un manifest.json, userlist.txt / computerlist.txt listos para usar, y una lista de RIDs guardada que puedes reutilizar en lugar de hacer fuerza bruta dos veces.
  • Cuentas interesantes marcadas a medida que aparecen (AS-REP-roastable, contraseña no requerida, delegación sin restricciones, etc.).
  • Por favor, ejecuta esto solo contra sistemas que poseas o estés explícitamente autorizado a probar. Enumerar el directorio de otra persona sin permiso no está bien, y dependiendo de dónde estés puede ser ilegal.

    Hay dos versiones que se comportan de forma idéntica. Usa la biblioteca que tengas:

    • adnullenum.py — construido sobre impacket.

    Qué recopila

    • Usuarios, equipos y grupos. Las cuentas de máquina (las que terminan en $) se separan de los usuarios reales.
    • Detalle completo por usuario. Descripción, pertenencia a grupos, marcas de tiempo de contraseña e inicio de sesión, flags de cuenta y restricciones de inicio de sesión (horas de inicio de sesión, estaciones de trabajo permitidas, expiración).
    • Grupos con sus miembros, resueltos a nombres reales.
    • Información del dominio y la política. Nombre del dominio, SID, rol del servidor, los recuentos reales de usuarios/grupos/equipos, y la política de contraseñas y bloqueo.
    • Detalles de LSA / DNS. Nombre de dominio y bosque DNS, GUID del dominio, SID del dominio y cualquier trust — esto a menudo se devuelve incluso cuando SAMR está bloqueado.

    También marca cuentas interesantes por ti: cosas como "contraseña no requerida", "la contraseña nunca expira", AS-REP-roastable, delegación sin restricciones, nunca inició sesión, o una descripción que menciona una contraseña.

    Un par de cosas que se derivan naturalmente de esto:

    • Los nombres de usuario que recopilas son tu lista para AS-REP roasting.
    • Los nombres de equipo son tu lista para las comprobaciones de cuentas de máquina pre-Windows 2000.

    Cómo se compara

    Todo aquí es SAMR/LSARPC anónimo estándar, y las herramientas establecidas ya alcanzan los mismos datos. Esto es un envoltorio de conveniencia, no una nueva capacidad, así que vale la pena conocer las alternativas:

    • enum4linux-ng es el equivalente más cercano: SAMR + LSA de sesión nula, RID cycling, política, usuarios y grupos. Si quieres una herramienta madura y ampliamente usada, úsala. adnullenum se solapa en gran medida con ella.
    • NetExec (--rid-brute, --users, --pass-pol) cubre la misma enumeración dentro de un framework mucho más grande.
    • impacket lo incluye como dos scripts: samrdump.py (usuarios/grupos/alias + detalle por usuario) y lookupsid.py (RID cycling sobre LSA). Sin una sola ejecución, sin fallback SAMR→LSA, solo stdout.
    • rpcclient expone las llamadas subyacentes (queryuser, enumdomusers, querydominfo, lsaquery, lookupsids, …) pero de forma interactiva y solo stdout. Su enumdomusers lista usuarios estándar por nombre, sin cuentas de máquina ($), y el detalle completo es queryuser de uno en uno. Sin un bucle de RID-cycling integrado no puede recuperar equipos ni sortear la enumeración restringida. Ver Hacerlo a mano.

    Lo que adnullenum añade es el empaquetado: una sola ejecución de sesión nula en lugar de varias herramientas, SAMR primero con un fallback LSA opcional, flags curados de cuentas interesantes, y una salida ordenada multiformato que puedes pasar directamente al siguiente paso o reabrir más tarde. Si ese flujo de trabajo encaja con cómo trabajas, úsalo; si prefieres una herramienta probada en batalla, recurre a enum4linux-ng o NetExec.


    Instalación

    Necesitas Python 3.9+ y una biblioteca SMB. Un entorno virtual lo mantiene ordenado:

    root@kitploit:~
    # 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
    

    Eso es todo. Ejecuta python3 adnullenum.py --help para verlo todo.


    Cómo usarlo

    Todo se ejecuta a través de un único --mode. El predeterminado es recon, que es lo seguro para ejecutar primero.

    ModoQué obtienes
    reconInformación del dominio, recuentos, política de contraseñas/bloqueo, y los detalles de LSA/DNS. Sin fuerza bruta. Solo un vistazo.
    ridsEncuentra qué cuentas existen y las clasifica en usuarios / equipos / grupos.
    usersLo anterior, más el detalle completo de cada usuario real y el resumen de "cuentas interesantes". Añade --include-groups para listar también los grupos de cada usuario.
    groupsGrupos de dominio y alias integrados con sus miembros.
    fullTodo ello.
    root@kitploit:~
    # 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
    

    Encontrar cuentas

    Si el dominio no te permite listar usuarios directamente (habitual), la herramienta recurre al RID cycling: pide al DC que traduzca los IDs de cuenta a nombres en lotes de 1000. Por defecto barre hacia arriba hasta que ha encontrado todo lo que el DC dice que existe, o hasta que 5000 IDs seguidos vuelven vacíos. Puedes fijarlo a un rango exacto en su lugar:

    root@kitploit:~
    python3 adnullenum.py 10.0.0.10 --mode rids --range 500-50000
    

    Cuando SAMR está bloqueado

    Algunos DCs rechazan SAMR anónimo por completo (enumdomains y la traducción de RIDs vuelven ACCESS_DENIED). La ejecución no se rinde:

    • El recon de LSA siempre se ejecuta. El nombre del dominio, el SID, y a menudo el bosque, el GUID y los trusts vienen de \lsarpc, que con frecuencia responde cuando SAMR no lo hace.
    • El RID cycling puede recurrir a LSA (opcional). Si SAMR no traduce los RIDs y pasas --lsa-fallback, la herramienta reintenta el mismo barrido sobre LSA LsarLookupSids usando el SID del dominio, lo que aún te da el inventario de cuentas (nombres y tipos, incluidos los equipos). Está desactivado por defecto porque es una segunda pasada de fuerza bruta; sin el flag la ejecución se detiene en recon y lo indica.
    • El detalle profundo por usuario y la pertenencia a grupos necesitan SAMR. Cuando SAMR está bloqueado esas etapas se omiten y se anotan; aún obtienes el inventario de nombre/tipo.
    • Si las búsquedas de LSA también están bloqueadas, la ejecución se degrada a solo recon (nombre de dominio y SID). En un objetivo así, ninguna herramienta anónima enumerará las cuentas.

    No hacer fuerza bruta dos veces

    Encontrar las cuentas es la parte lenta, así que la herramienta guarda la lista (rids.txt) en la carpeta de salida de cada ejecución. Apunta una ejecución posterior a esa carpeta con --session y se salta la fuerza bruta y reutiliza lo que ya encontraste:

    root@kitploit:~
    python3 adnullenum.py 10.0.0.10 --mode rids
    # -> output/20260917-1530_10.0.0.10_rids/
    
    python3 adnullenum.py 10.0.0.10 --mode users \
        --session output/20260917-1530_10.0.0.10_rids
    

    --session toma la carpeta de una ejecución anterior. (--rid-file hace lo mismo desde un archivo de texto plano con un RID por línea.)


    Salida

    Cada ejecución deja una carpeta con marca de tiempo bajo output/:

    root@kitploit:~
    output/20260917-1530_10.0.0.10_full/
    ├── rids.txt          # the account IDs found (reuse with --session)
    ├── manifest.json     # summary: counts, interesting accounts, run details
    ├── access_denied.txt # only if something was denied/restricted (with a timestamp)
    ├── output
    ├──── lists/          # ready-to-use lists (see below)
    ├──── txt/            # easy to read
    └──── csv/            # easy to grep / open in a spreadsheet
    

    txt y csv siempre se escriben; añade --json para una carpeta json/ también.

    La carpeta lists/ contiene dos archivos planos hechos para alimentar directamente a otras herramientas:

    • lists/userlist.txt — para meter directamente en AS-REP roasting, password spraying, o la lista --users de un cracker. En modo users/full contiene solo cuentas habilitadas; en modo rids (sin detalle por usuario) es todos los usuarios.
    • lists/computerlist.txt — nombres de cuentas de máquina con el $ conservado (el sAMAccountName), para las comprobaciones de cuentas de máquina pre-Windows 2000.

    ¿Olvidaste mirarlos, o solo ejecutaste rids y ahora quieres las listas? Apunta a la carpeta de la ejecución y se reconstruyen desde los CSVs, sin necesidad de red:

    root@kitploit:~
    python3 adnullenum.py --lists-from output/20260917-1530_10.0.0.10_full
    

    En pantalla obtienes una vista previa limitada para que un dominio grande no inunde tu terminal (--limit, por defecto 100 por sección) — los archivos siempre tienen los datos completos. El color está activado cuando estás en un terminal; --no-color lo desactiva.


    Ejemplo

    Una ejecución full contra un DC de prueba (saneado). En pantalla obtienes el recon, el barrido de RIDs, el resumen de cuentas interesantes, y la lista de archivos escritos:

    root@kitploit:~
    $ python3 adnullenum.py 10.0.0.10 --mode full
    [*] Connecting to 10.0.0.10:445 anonymously ...
    [+] SAM domain: CORP (S-1-5-21-1111111111-2222222222-3333333333)
    ...
    [ COUNTS ]
      Users:   43
      Groups:  0
      Aliases: 17
    
    [ PASSWORD POLICY ]
      Min length:       7
      Max age:          42 days
      Properties:       COMPLEX
    
    [*] Bruting RIDs via SAMR (chunk=1000, open-ended 500-100000, stop-after 5000)
    [*] up to RID 1498: 31 resolved, gap=0
    [*] stop: 5000 consecutive empty RIDs (--stop-after 5000)
    [+] Resolved: 5 users, 4 computers, 22 groups, 0 other
    [*] Deep-querying 5 users (skipping 4 computers)
        [!] Administrator (RID 500)  PWD_NEVER_EXPIRES
        [!] Guest (RID 501) (disabled)  PWD_NOT_REQUIRED, PWD_NEVER_EXPIRES
        [!] svc_sql (RID 1104)  ASREP_ROASTABLE
    [+] 5 users: 3 enabled, 2 disabled, 3 interesting (full detail in the users file)
    
    [ FILES WRITTEN in output/20260101-120000_10.0.0.10_full ]
      txt/recon.txt / csv/recon.csv        domain info + password/lockout policy
      txt/inventory.txt / csv/inventory.csv  all resolved accounts
      txt/users.txt / csv/users.csv        full per-user detail
      txt/groups.txt / csv/groups.csv      groups + aliases with members
      rids.txt                             existing RIDs (reuse with --session)
      lists/userlist.txt                   usernames, one per line
      lists/computerlist.txt               machine accounts (with $)
      manifest.json                        run metadata + counts
    

    Un único registro de txt/users.txt (el grupo primario y los grupos directos se resuelven a nombres):

    root@kitploit:~
    [+] RID 500
        Enabled:                   True
        SamAccountName:            Administrator
        SID:                       S-1-5-21-1111111111-2222222222-3333333333-500
        Description/AdminComment:  Built-in account for administering the computer/domain
        Last Logon:                2026-09-03 17:58:26+09:00
        Password Last Set:         2026-01-23 05:14:35+09:00
        Primary Group:             Domain Users (513)
        Account Control:           NORMAL_ACCOUNT | PASSWORD_NEVER_EXPIRES
        Logon Count:               92
        Direct Domain Groups:      Domain Users; Administrators; Domain Admins
        >> INTERESTING:            PWD_NEVER_EXPIRES
    

    Hacerlo a mano

    Todo aquí es SAMR/LSARPC estándar, así que puedes obtener los mismos datos llamada a llamada con el rpcclient de Samba. Conéctate anónimamente primero:

    root@kitploit:~
    rpcclient -U "" -N 10.0.0.10
    
    Esta herramientaEquivalente en rpcclient
    recon (información del dominio + recuentos)querydominfo
    recon (política de contraseñas)getdompwinfo
    recon (dominio LSA + SID)lsaquery, lsaenumsid
    rids (traducción nombre/SID)lookupnames <name>, lookupsids <SID>
    rids (lista del lado del servidor)enumdomusers (solo usuarios estándar — sin cuentas de máquina $)
    users (detalle por usuario)queryuser <rid> o queryuser <name>, querydispinfo
    groupsenumdomgroups, querygroupmem <rid>, enumalsgroups builtin, queryaliasmem builtin <rid>

    enumdomusers devuelve cuentas de usuario estándar solo por nombre; las cuentas de máquina ($) se filtran, y el detalle completo significa ejecutar queryuser de una cuenta en una. rpcclient no tiene un bucle de RID-cycling integrado, así que no puede recuperar las cuentas de máquina (ni nada más) cuando la enumeración del lado del servidor está restringida; tendrías que scriptear lookupsids sobre un rango tú mismo. Tampoco tiene comando de política de bloqueo y no devuelve el DNS/bosque/GUID de LSA ni los trusts, por lo que esta herramienta consulta PolicyDnsDomainInformation directamente.

    Para equivalentes scripteados y cómo se relaciona esta herramienta con ellos, ver Cómo se compara.


    Mitigaciones

    Si estás en el lado azul y quieres cerrar esto, la ruta anónima es lo que hay que cerrar:

    • Activa "Do not allow anonymous enumeration of SAM accounts" y "…accounts and shares" (los ajustes RestrictAnonymousSAM / RestrictAnonymous).
    • Elimina Anonymous Logon (y Everyone) del grupo Pre-Windows 2000 Compatible Access. Esto es normalmente por qué el RID cycling de sesión nula funciona en un controlador de dominio.
    • Pon "Let Everyone permissions apply to anonymous users" en Disabled, y restringe el acceso anónimo a las named pipes.
    • Requiere la firma SMB y desactiva SMBv1.

    Nada de esto impide que un usuario con sesión iniciada lea los mismos datos — eso es normal y esperado. Solo cierra la ruta sin credenciales.

    Detectarlo

    • Activa la auditoría de objetos SAM/directorio y vigila una ráfaga de evento 4661 / 4662 (un handle a un objeto SAM o de directorio) desde una máquina en una ventana corta.
    • Vigila muchos inicios de sesión anónimos (evento 4624, tipo de inicio de sesión 3, la cuenta ANONYMOUS LOGON) y actividad de IPC$ (5140 / 5145).
    • El indicio es el volumen desde una única fuente: muchas búsquedas de IDs de cuenta contra \samr, o llamadas de política/búsqueda contra \lsarpc, en poco tiempo.
    • Como --sleep y --jitter pueden repartir las llamadas, alerta sobre el recuento total en una ventana en lugar de solo sobre la tasa.

    Notas

    • Solo se usa el puerto 445 — esto no toca el endpoint mapper de RPC en el 135.
    • Si la traducción de RIDs de SAMR vuelve ACCESS_DENIED, añade --lsa-fallback para probar LSA LsarLookupSids para el inventario (ver "Cuando SAMR está bloqueado"). Si las búsquedas de LSA también están bloqueadas, solo es posible el recon (nombre de dominio + SID).

    Licencia

    MIT. Ver LICENSE.

    Descargar herramienta