TryHackMe Writeup：TakeOver

# はじめに
本記事はTryHackMeのWriteupです。
Roomは[TakeOver](https://tryhackme.com/room/takeover)、Difficulty（難易度）はEasyです。

TakeOverはサブドメインの列挙を行なうことで、フラグを取得します。

このRoomでは、サブドメインを調査する方法について学ぶことができます。

## TakeOver
準備作業としてマシンを起動後、`/etc/hosts`ファイルにIPアドレスと、futurevera.thmのドメイン名を記入します。

以下はポートスキャンの結果です。試しにgobusterも実行しましたが、特にフラグにつながるようなヒントは見つかりませんでした。

```console
##################
# Port scan tool #
##################
 *Detailed scan :1
 *Full scan     :2


 ***Select scanning method by number***
1
Starting Nmap 7.94 ( https://nmap.org ) at 2023-09-10 17:36 JST
Nmap scan report for 10.10.139.197
Host is up (0.24s latency).

PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 dd:29:a7:0c:05:69:1f:f6:26:0a:d9:28:cd:40:f0:20 (RSA)
|   256 cb:2e:a8:6d:03:66:e9:70:eb:96:e1:f5:ba:25:cb:4e (ECDSA)
|_  256 50:d3:4b:a8:a2:4d:1d:79:e1:7d:ac:bb:ff:0b:24:13 (ED25519)
80/tcp  open  http     Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Did not follow redirect to https://futurevera.thm/
|_http-server-header: Apache/2.4.41 (Ubuntu)
443/tcp open  ssl/http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_ssl-date: TLS randomness does not represent time
|_http-title: FutureVera
| tls-alpn: 
|_  http/1.1
| ssl-cert: Subject: commonName=futurevera.thm/organizationName=Futurevera/stateOrProvinceName=Oregon/countryName=US
| Not valid before: 2022-03-13T10:05:19
|_Not valid after:  2023-03-13T10:05:19
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 26.26 seconds
Scan completed

```

ブラウザを起動してアクセスすると、サイトが表示されます。
ルームの説明内容を踏まえて、ヒントはサブドメインだと思われるため、以降ffufを用いてサブドメインの列挙を行います。

### ffuf
ワードリストは、[SecLists](https://github.com/danielmiessler/SecLists)の`subdomains-top1million-5000.txt`ファイルを使用します。

`$ ffuf -w /<Your dir path>/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u https://<Ip address> -H "Host: FUZZ.futurevera.thm"`

上記のコマンドを実行すると以下の様な出力がえられます。

```console
[Status: 200, Size: 4605, Words: 1511, Lines: 92, Duration: 236ms]
    * FUZZ: vpn

[Status: 200, Size: 4605, Words: 1511, Lines: 92, Duration: 236ms]
    * FUZZ: www

[Status: 200, Size: 4605, Words: 1511, Lines: 92, Duration: 236ms]
    * FUZZ: ns1

[Status: 200, Size: 4605, Words: 1511, Lines: 92, Duration: 236ms]

```

`Size`の振る舞いから効率よく調査するためには、以下のようにオプションを付与する必要があります。

`$ ffuf -w /<Your dir path>/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u https://<Ip address> -H "Host: FUZZ.futurevera.thm"  -c -fs 0,4605`

`-H`オプションは、HTTPヘッダーを指定します。Hostヘッダーを`FUZZ.futurevera.thm`として指定することで、サブドメインの`FUZZ`がリストの値に置換されます。
`-fs`オプションは、ステータスコードのフィルタリングを行います。上記の例では4605のステータスコードを除外しています。

上記オプションを付与して実行すると、2個のサブドメインが検出されました。

```console
[Status: 200, Size: 1522, Words: 367, Lines: 34, Duration: 237ms]
    * FUZZ: support

[Status: 200, Size: 3838, Words: 1326, Lines: 81, Duration: 236ms]
    * FUZZ: blog
```

### 証明書の確認
ffufの実行結果から2つのサブドメインを列挙することができました。

タスクの説明を参考にしながら`/etc/hosts`ファイルに`support.futurevera.thm`を追加します。

ブラウザから`support.futurevera.thm`にアクセスします。

サーバ証明書を確認すると、`Subject Alt Names`から新しいサブドメインを発見しました。

![スクリーンショット 2023-09-10 18.23.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/bf1387b4-1229-3249-a6d0-d43d6e0fc87c.png)

同じように`/etc/hosts`ファイルに新しいサブドメインを追記します。
上記サブドメインを辿ると、フラグが見つかります。

# おわりに
想像力があればすぐに解ける場合もあると思いますが、ffufツールの重要性を学びました。