簡介
原題復現:[極客大挑戰 2019]BuyFlag
考察知識點:php函數特性(is_numeric()、strcmp函數())
線上平台:https://buuoj.cn(北京聯合大學公開的CTF平台 特別感謝!) 榆林學院內可使用信安協會內部的CTF訓練平台找到此題
復現
基礎知識
is_numeric()函數 :https://www.cnblogs.com/xhds/p/12312223.html
strcmp()函數:https://www.cnblogs.com/xhds/p/12312055.html
打開頁面發現payflag頁面 在這個頁面有這些信息
If you want to buy the FLAG:
You must be a student from CUIT!!!
You must be answer the correct password!!!
Only Cuit's students can buy the FLAG
FLAG NEED YOUR 100000000 MONEY
在源碼中發現:
<!-- ~~~post money and password~~~ if (isset($_POST['password'])) { $password = $_POST['password']; if (is_numeric($password)) { echo "password can't be number</br>"; }elseif ($password == 404) { echo "Password Right!</br>"; } } -->
根據這些信息分析是要經過post傳輸密碼要等於404 才等於說有權限購買 金錢要等於100000000 首先有個問題404是數值is_numeric函數會檢測出來所以我們得繞過它 還有主義觀察我們抓取的包里面cookie的值有個user=0 CTF直覺這肯定要改成1的 因為正常情況下這里是cookie的值 所以我們用bp測試
得到信息 nember lenth is too long 意識是長度有問題太長 所以這里我們借助strcmp的函數特性繞過它
strcmp函數特性 money后面加[]繞過 即可得到flag