題目連結:https://buuoj.cn/challenges#[ACTF2020 新生賽]BackupFile
開啟環境後如下。
題目中僅有一句 "Try to find out source file!" 的提示,因此直接掃描一下備份檔案,發現存在 "index.php.bak" 檔案,該檔案程式碼如下所示。
<?php
include_once "flag.php";
if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
可以看到,index.php 接收一個 "key" 的引數,並且要求該引數的型別為數字,隨後將該引數內容與 "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3" 進行比對。留意到,再比對時,是弱型別比較(弱型別比較中,會出現筆者稱之為 "內容轉換" 的行為,即假如 "123" 與 "123a" 進行弱型別比較,則 PHP 會將 "123a" 當作數字 "123" 再來進行比較),因此使用者直接傳入 "123",即可列印出 flag。
Payload:?key=123
。