Guía de Reconocimiento Inicial en Active Directory para CTFs (Sin Autenticación Previa)
La primera fase de un ataque a Active Directory (AD) en un CTF es el Reconocimiento. Incluso sin credenciales, se puede obtener una cantidad sorprendente de información. Esta guía resume algunas herramientas y técnicas para esta etapa crucial, ilustradas con ejemplos y hallazgos reales de la máquina Ledger (thm.local, IP: 10.10.41.115) de TryHackMe.
Nmap: El Punto de Partida Esencial
Todo comienza con un escaneo de puertos. nmap
es la herramienta estándar. Se suele realizar un escaneo rápido de todos los puertos, seguido de un escaneo más detallado con detección de versiones y scripts en los puertos abiertos.Resultados del Escaneo Nmap en 10.10.41.115
(Dominio: thm.local0.
)
Los siguientes comandos fueron ejecutados contra 10.10.41.115
:
nmap -sS -p- -Pn -n -min-rate 5000 -oG ports 10.10.41.115
(Escaneo de todos los puertos TCP)nmap -sVC -p<puertos_abiertos_detectados> -oG services 10.10.41.115
(Escaneo de servicios y scripts)
Servicios Clave Identificados en 10.10.41.115
y su Relevancia (Sin Autenticación):
53/tcp (DNS - Simple DNS Plus): Crucial para identificar el dominio, controladores de dominio (DCs) y otros servicios mediante consultas SRV. Es el primer paso para mapear la infraestructura de AD.
88/tcp (Kerberos - Microsoft Windows Kerberos): Confirma que es un KDC (parte del DC). No se puede usar sin credenciales, pero es un indicador.
135/tcp, 593/tcp y múltiples puertos altos (ej. 49664-49670) (RPC - Microsoft Windows RPC): El RPC Endpoint Mapper (135) y otros servicios RPC son vitales. Si se obtiene acceso a
IPC$
(vía SMB), se pueden usar para enumerar usuarios, grupos, etc.139/tcp (NetBIOS-SSN) y 445/tcp (Microsoft-DS - SMB): Fundamentales para intentar sesiones nulas o con
guest
(sin contraseña) para listar comparticiones (ej.IPC$
,SYSVOL
) y obtener información del dominio.389/tcp, 636/tcp (LDAP/LDAPS - Microsoft Windows AD LDAP): El escaneo
-sVC
reveló:Dominio:
thm.local0.
Sitio:
Default-First-Site-Name
Permite intentos de enlace anónimo para extraer información del directorio (RootDSE, OUs, usuarios si los permisos son laxos).
3268/tcp, 3269/tcp (Global Catalog LDAP/LDAPS): Similar a LDAP, pero para búsquedas en todo el bosque.
80/tcp, 443/tcp (HTTP/HTTPS - Microsoft IIS httpd 10.0): Servidores web que deben ser investigados en busca de portales (OWA, CertSrv, etc.), información expuesta o vulnerabilidades.
47001/tcp (HTTP - Microsoft HTTPAPI httpd 2.0): Otro servicio web, posiblemente WinRM o una interfaz de administración.
9389/tcp (ADWS - .NET Message Framing): Interfaz moderna para AD.
Conclusión del Escaneo Nmap en 10.10.41.115
:
La máquina 10.10.41.115
es un Controlador de Dominio para thm.local0.
. El escaneo Nmap ha proporcionado una lista rica de servicios para investigar, especialmente DNS para mapeo, LDAP para consultas anónimas, SMB para sesiones nulas/guest, y los servicios HTTP para enumeración web.
Inspección de Servicios Clave en Ledger (thm.local, 10.10.41.115)
DNS: Mapeando el Dominio
1. Intento de Transferencia de Zona (AXFR)
Comando Ejecutado (Real en Ledger):
dig axfr @10.10.41.115 thm.local
Ejemplo de INFORMACIÓN EXITOSA (Inventado - no ocurrió en Ledger):
; <<>> DiG 9.XX.X <<>> axfr @10.10.41.115 thm.local thm.local. 3600 IN SOA labyrinth.thm.local. hostmaster.thm.local. 28 900 600 86400 3600 labyrinth.thm.local. 3600 IN A 10.10.41.115 ;; Transfer complete.
Resultado Real Obtenido en Ledger:
; Transfer failed.
Conclusión (Real en Ledger): La transferencia de zona DNS falló.
2. Consultas de Registros SRV usando nslookup
(Real en Ledger)
Extracto de Comandos y Salida Real en Ledger:
> server 10.10.41.115 > set type=SRV > _ldap._tcp.thm.local _ldap._tcp.thm.local service = 0 100 389 labyrinth.thm.local. > _kerberos._tcp.thm.local _kerberos._tcp.thm.local service = 0 100 88 labyrinth.thm.local.
Conclusión (Real en Ledger): El host
labyrinth.thm.local
proporciona LDAP (389) y Kerberos (88) parathm.local
, identificándolo como el DC/KDC.
3. Consultas de Registros SRV y A usando dig
(Real en Ledger)
Extracto de Comando y Salida Real en Ledger (para LDAP):
dig SRV _ldap._tcp.dc._msdcs.thm.local @10.10.41.115
;; ANSWER SECTION: _ldap._tcp.dc._msdcs.thm.local. 600 IN SRV 0 100 389 labyrinth.thm.local. ;; ADDITIONAL SECTION: labyrinth.thm.local. 3600 IN A 10.10.41.115
Conclusión (Real en Ledger): Se confirma que
labyrinth.thm.local
(IP10.10.41.115
) es el DC.
Conclusión General de DNS (Real en Ledger):
Se identificó el dominio thm.local
, el DC labyrinth.thm.local
(IP 10.10.41.115
), y los puertos de servicios clave.
LDAP: Buscando Secretos en el Directorio (Énfasis en Enlace Anónimo)
Enumeración LDAP/LDAPS Anónima (Sin Credenciales Explícitas): Cuando intentas obtener información de LDAP (389) o LDAPS (636) sin proporcionar un usuario y contraseña, estás realizando un "enlace anónimo". Lo que obtengas depende de la configuración del servidor.
Información que A MENUDO se puede Obtener Anónimamente:
Información del RootDSE:
Casi siempre accesible. Proporciona el
defaultNamingContext
(DN base del dominio, ej:DC=thm,DC=local
), versiones LDAP, y niveles funcionales.Comando:
ldapsearch -x -H ldap://10.10.41.115 -s base -b "" "(objectClass=*)" namingContexts defaultNamingContext
Información Limitada de Configuración y Esquema: A veces, DNs de estos contextos.
Listado Básico de Objetos: Si los permisos son muy laxos, podrías listar DNs de OUs o incluso algunos usuarios bajo el
defaultNamingContext
.Comando:
ldapsearch -x -H ldap://10.10.41.115 -b "DC=thm,DC=local" -s sub "(objectClass=*)" dn
Hallazgo Específico Destacado en Ledger (Real - probablemente no anónimo puro, sino con guest
o enumeración dirigida):
# SUSANNA_MCKNIGHT, Test, ITS, Tier 1, thm.local
dn: CN=SUSANNA_MCKNIGHT,OU=Test,OU=ITS,OU=Tier 1,DC=thm,DC=local
description: Please change it: CHANGEME2023!
sAMAccountName: SUSANNA_MCKNIGHT
Conclusión (Real en Ledger): Se descubrió una contraseña potencial:
CHANGEME2023!
paraSUSANNA_MCKNIGHT
. Nota: Es menos común obtener este nivel de detalle con un enlace LDAP puramente anónimo; a menudo requiere algún tipo de autenticación de bajo nivel o permisos específicos.
SMB: Probando el Acceso a Comparticiones (Énfasis en Sesión Nula/Guest)
(Los siguientes resultados de smbclient
, smbmap
, crackmapexec
, y nxc
son reales de Ledger, usando guest
con contraseña vacía, que es una forma de acceso no autenticado o de muy bajo privilegio).
Objetivo: Determinar si una sesión nula o la cuenta guest
(con contraseña vacía) puede autenticarse y qué comparticiones son visibles/accesibles.
1. smbclient -L //10.10.41.115 -U 'guest%'
(Real en Ledger)
Salida Real:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.10.41.115 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Conclusión (Real en Ledger):
guest
pudo listar shares estándar.
2. smbmap -H 10.10.41.115 -u 'guest' -p ''
(Real en Ledger)
Salida Real (Extracto):
[+] IP: 10.10.41.115:445 Name: labyrinth.thm.local Status: Authenticated Disk Permissions Comment ---- ----------- ------- ADMIN$ NO ACCESS Remote Admin IPC$ READ ONLY Remote IPC
Conclusión (Real en Ledger):
guest
se autentica pero solo tieneREAD ONLY
sobreIPC$
.
3. crackmapexec smb 10.10.41.115 -u 'guest' -p '' --shares
(Real en Ledger)4. nxc smb 10.10.41.115 -u 'guest' -p '' --shares
(Real en Ledger)
Salida Real (Similar para ambos, Extracto):
SMB 10.10.41.115 445 LABYRINTH [+] thm.local\guest: SMB 10.10.41.115 445 LABYRINTH Share Permissions Remark SMB 10.10.41.115 445 LABYRINTH ----- ----------- ------ SMB 10.10.41.115 445 LABYRINTH IPC$ READ Remote IPC
Conclusión (Real en Ledger): Ambas herramientas confirman la autenticación de
guest
y el acceso deREAD
aIPC$
.
RPC: Profundizando con el Acceso IPC$
Obtenido
IPC$
Obtenido(La siguiente sección es conocimiento general y los ejemplos de salida son inventados, basados en el acceso IPC$
que guest
tiene en Ledger).
Dado el acceso READ ONLY
a IPC$
para guest
en Ledger, se puede intentar usar rpcclient
:
impacket-rpcdump @10.10.41.115
(Ejemplo Inventado de Posible Salida)
Podría revelar interfaces RPC clave como LSAR
, SAMR
, SRVS
.
Utilidad: Mapea las interfaces RPC disponibles.
rpcclient -U "guest%" -N 10.10.41.115
(Ejemplo Inventado de Posibles Hallazgos)
Si guest
tiene permisos suficientes a través de IPC$
:
enumdomusers
: Podría listar usuarios del dominio (ej:Administrator
,SUSANNA_MCKNIGHT
).enumdomgroups
: Podría listar grupos (ej:Domain Admins
).querydominfo
: Podría revelar el SID del dominio.querydispinfo
: Podría revelar la política de contraseñas.Utilidad: Podría volcar listas de usuarios, grupos, y políticas del dominio.
Última actualización