题目链接: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
。