[ACTF2020 新生赛]BackupFile
扫描目录,下载index.php.bak(这就是备份文件)
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!";
}
代码审计
key 必须先通过 is_numeric(),否则直接退出;随后被转为整数,再与固定的 $str 作弱比较,成立时显示 flag。
这里依赖 PHP 7 及更早版本的整数与字符串弱比较规则:固定字符串的数字前缀被解释为123。PHP 8 改变了数字与非数字字符串的比较规则,这个绕过不再成立。
传入参数得到flag
payload:
?key=123
str 在服务器源码中写死,并未读取请求参数,额外传入 str 不影响结果。
评论将在接近此处时加载,也可点击立即加载。