Active Directory Methodology
Last updated
Last updated
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Active Directory sirve como una tecnología fundamental, permitiendo a los administradores de red crear y gestionar de manera eficiente dominios, usuarios y objetos dentro de una red. Está diseñado para escalar, facilitando la organización de un gran número de usuarios en grupos y subgrupos manejables, mientras controla los derechos de acceso en varios niveles.
La estructura de Active Directory se compone de tres capas principales: dominios, árboles y bosques. Un dominio abarca una colección de objetos, como usuarios o dispositivos, que comparten una base de datos común. Los árboles son grupos de estos dominios vinculados por una estructura compartida, y un bosque representa la colección de múltiples árboles, interconectados a través de relaciones de confianza, formando la capa más alta de la estructura organizativa. Se pueden designar derechos de acceso y comunicación específicos en cada uno de estos niveles.
Los conceptos clave dentro de Active Directory incluyen:
Directorio – Alberga toda la información relacionada con los objetos de Active Directory.
Objeto – Denota entidades dentro del directorio, incluyendo usuarios, grupos o carpetas compartidas.
Dominio – Sirve como un contenedor para objetos de directorio, con la capacidad de que múltiples dominios coexistan dentro de un bosque, cada uno manteniendo su propia colección de objetos.
Árbol – Un agrupamiento de dominios que comparten un dominio raíz común.
Bosque – La cúspide de la estructura organizativa en Active Directory, compuesta por varios árboles con relaciones de confianza entre ellos.
Active Directory Domain Services (AD DS) abarca una gama de servicios críticos para la gestión y comunicación centralizada dentro de una red. Estos servicios comprenden:
Servicios de Dominio – Centraliza el almacenamiento de datos y gestiona las interacciones entre usuarios y dominios, incluyendo funcionalidades de autenticación y búsqueda.
Servicios de Certificado – Supervisa la creación, distribución y gestión de certificados digitales seguros.
Servicios de Directorio Ligero – Soporta aplicaciones habilitadas para directorios a través del protocolo LDAP.
Servicios de Federación de Directorio – Proporciona capacidades de inicio de sesión único para autenticar usuarios a través de múltiples aplicaciones web en una sola sesión.
Gestión de Derechos – Ayuda a proteger material con derechos de autor regulando su distribución y uso no autorizados.
Servicio DNS – Crucial para la resolución de nombres de dominio.
Para una explicación más detallada, consulta: TechTerms - Definición de Active Directory
Para aprender a atacar un AD, necesitas entender muy bien el proceso de autenticación Kerberos. Lee esta página si aún no sabes cómo funciona.
Puedes visitar https://wadcoms.github.io/ para tener una vista rápida de qué comandos puedes ejecutar para enumerar/explotar un AD.
Si solo tienes acceso a un entorno AD pero no tienes credenciales/sesiones, podrías:
Pentestear la red:
Escanear la red, encontrar máquinas y puertos abiertos e intentar explotar vulnerabilidades o extraer credenciales de ellas (por ejemplo, las impresoras podrían ser objetivos muy interesantes.
Enumerar DNS podría proporcionar información sobre servidores clave en el dominio como web, impresoras, comparticiones, vpn, medios, etc.
gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt
Consulta la Metodología General de Pentesting para encontrar más información sobre cómo hacer esto.
Verifica el acceso nulo y de invitado en servicios smb (esto no funcionará en versiones modernas de Windows):
enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>
smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>
smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //
Una guía más detallada sobre cómo enumerar un servidor SMB se puede encontrar aquí:
Enumerar Ldap
nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>
Una guía más detallada sobre cómo enumerar LDAP se puede encontrar aquí (presta especial atención al acceso anónimo):
Envenenar la red
Reúne credenciales suplantando servicios con Responder
Accede al host abusando del ataque de retransmisión
Reúne credenciales exponiendo servicios UPnP falsos con evil-SSDP
Extrae nombres de usuario/nombres de documentos internos, redes sociales, servicios (principalmente web) dentro de los entornos de dominio y también de los disponibles públicamente.
Si encuentras los nombres completos de los trabajadores de la empresa, podrías intentar diferentes convenciones de nombres de usuario de AD (lee esto). Las convenciones más comunes son: NombreApellido, Nombre.Apellido, NamSur (3 letras de cada uno), Nam.Sur, NSurname, N.Surname, ApellidoNombre, Apellido.Nombre, ApellidoN, Apellido.N, 3 letras aleatorias y 3 números aleatorios (abc123).
Herramientas:
Enumeración SMB/LDAP anónima: Consulta las páginas de pentesting SMB y pentesting LDAP.
Enumeración Kerbrute: Cuando se solicita un nombre de usuario inválido, el servidor responderá utilizando el código de error Kerberos KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN, lo que nos permite determinar que el nombre de usuario era inválido. Nombres de usuario válidos provocarán ya sea el TGT en una respuesta AS-REP o el error KRB5KDC_ERR_PREAUTH_REQUIRED, indicando que se requiere que el usuario realice una pre-autenticación.
Servidor OWA (Outlook Web Access)
Si encuentras uno de estos servidores en la red, también puedes realizar enumeración de usuarios contra él. Por ejemplo, podrías usar la herramienta MailSniper:
Puedes encontrar listas de nombres de usuario en este repositorio de github **** y este otro (nombres de usuario estadísticamente probables).
Sin embargo, deberías tener el nombre de las personas que trabajan en la empresa del paso de reconocimiento que deberías haber realizado antes de esto. Con el nombre y apellido podrías usar el script namemash.py para generar nombres de usuario potencialmente válidos.
Bien, así que sabes que ya tienes un nombre de usuario válido pero no contraseñas... Entonces intenta:
ASREPRoast: Si un usuario no tiene el atributo DONT_REQ_PREAUTH puedes solicitar un mensaje AS_REP para ese usuario que contendrá algunos datos encriptados por una derivación de la contraseña del usuario.
Password Spraying: Intentemos las contraseñas más comunes con cada uno de los usuarios descubiertos, tal vez algún usuario esté usando una mala contraseña (¡ten en cuenta la política de contraseñas!).
Ten en cuenta que también puedes spray servidores OWA para intentar acceder a los servidores de correo de los usuarios.
Podrías ser capaz de obtener algunos hashes de desafío para romper envenenando algunos protocolos de la red:
Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay AttacksSi has logrado enumerar el directorio activo tendrás más correos electrónicos y una mejor comprensión de la red. Podrías ser capaz de forzar ataques de relay NTML **** para obtener acceso al entorno de AD.
Si puedes acceder a otras PC o recursos compartidos con el usuario nulo o invitado podrías colocar archivos (como un archivo SCF) que si se acceden de alguna manera activarán una autenticación NTML contra ti para que puedas robar el desafío NTLM y romperlo:
Places to steal NTLM credsPara esta fase necesitas haber comprometido las credenciales o una sesión de una cuenta de dominio válida. Si tienes algunas credenciales válidas o una shell como usuario de dominio, deberías recordar que las opciones dadas antes siguen siendo opciones para comprometer a otros usuarios.
Antes de comenzar la enumeración autenticada deberías saber cuál es el problema del doble salto de Kerberos.
Kerberos Double Hop ProblemHaber comprometido una cuenta es un gran paso para comenzar a comprometer todo el dominio, porque podrás comenzar la Enumeración de Active Directory:
Respecto a ASREPRoast ahora puedes encontrar cada posible usuario vulnerable, y respecto a Password Spraying puedes obtener una lista de todos los nombres de usuario y probar la contraseña de la cuenta comprometida, contraseñas vacías y nuevas contraseñas prometedoras.
Podrías usar el CMD para realizar un reconocimiento básico
También puedes usar powershell para reconocimiento que será más sigiloso
También puedes usar powerview para extraer información más detallada
Otra herramienta increíble para reconocimiento en un directorio activo es BloodHound. No es muy sigilosa (dependiendo de los métodos de recolección que uses), pero si no te importa eso, deberías probarla. Encuentra dónde los usuarios pueden RDP, encuentra rutas a otros grupos, etc.
Otras herramientas automatizadas de enumeración de AD son: AD Explorer, ADRecon, Group3r, PingCastle.
Registros DNS del AD ya que podrían contener información interesante.
Una herramienta con GUI que puedes usar para enumerar el directorio es AdExplorer.exe del SysInternal Suite.
También puedes buscar en la base de datos LDAP con ldapsearch para buscar credenciales en los campos userPassword y unixUserPassword, o incluso para Description. cf. Contraseña en el comentario de usuario AD en PayloadsAllTheThings para otros métodos.
Si estás usando Linux, también podrías enumerar el dominio usando pywerview.
También podrías intentar herramientas automatizadas como:
Extrayendo todos los usuarios del dominio
Es muy fácil obtener todos los nombres de usuario del dominio desde Windows (net user /domain
, Get-DomainUser
o wmic useraccount get name,sid
). En Linux, puedes usar: GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username
o enum4linux -a -u "user" -p "password" <DC IP>
Incluso si esta sección de Enumeración parece pequeña, esta es la parte más importante de todas. Accede a los enlaces (principalmente el de cmd, powershell, powerview y BloodHound), aprende cómo enumerar un dominio y practica hasta que te sientas cómodo. Durante una evaluación, este será el momento clave para encontrar tu camino hacia DA o decidir que no se puede hacer nada.
Kerberoasting implica obtener tickets TGS utilizados por servicios vinculados a cuentas de usuario y romper su encriptación—que se basa en contraseñas de usuario—fuera de línea.
Más sobre esto en:
KerberoastUna vez que hayas obtenido algunas credenciales podrías verificar si tienes acceso a alguna máquina. Para ello, podrías usar CrackMapExec para intentar conectarte a varios servidores con diferentes protocolos, de acuerdo a tus escaneos de puertos.
Si has comprometido credenciales o una sesión como un usuario regular de dominio y tienes acceso con este usuario a cualquier máquina en el dominio deberías intentar encontrar la manera de escalar privilegios localmente y buscar credenciales. Esto se debe a que solo con privilegios de administrador local podrás volcar hashes de otros usuarios en memoria (LSASS) y localmente (SAM).
Hay una página completa en este libro sobre escalación de privilegios local en Windows y una lista de verificación. Además, no olvides usar WinPEAS.
Es muy improbable que encuentres tickets en el usuario actual dándote permiso para acceder a recursos inesperados, pero podrías verificar:
Si has logrado enumerar el directorio activo, tendrás más correos electrónicos y una mejor comprensión de la red. Podrías ser capaz de forzar ataques de NTML relay attacks.
Ahora que tienes algunas credenciales básicas, deberías verificar si puedes encontrar archivos interesantes que se compartan dentro del AD. Podrías hacerlo manualmente, pero es una tarea muy aburrida y repetitiva (y más si encuentras cientos de documentos que necesitas revisar).
Sigue este enlace para aprender sobre herramientas que podrías usar.
Si puedes acceder a otras PC o recursos compartidos, podrías colocar archivos (como un archivo SCF) que, si se accede de alguna manera, activarán una autenticación NTML contra ti, para que puedas robar el reto NTLM y crackearlo: