[ACTF2020 新生赛]BackupFile

发布时间 2023-10-08 14:57:11作者: 圆弧状态

原理

字符串和数字弱比较问题
代码审计
目录扫描

解题过程

进入靶场就让我们找source file,原代码也没其他东西了,只能扫目录了

python dirsearch.py -u 3c33c7f9-7306-4c4e-99a6-13b8ef0803b9.node4.buuoj.cn:81 --delay=3

扫出来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!";
}

可以看到这里用到is_numeric判断是否为数字,最后还用intval强转为数字,最后比较key和str的值,这里用到弱比较问题。
即字符串和数字进行==比较时,会将字符串强转为数字进行比较。所以我们key只需要传入123即可获得flag

payload:key=123

成功获取flag

其他类型的绕过
弱类型和强类型比较:https://blog.csdn.net/weixin_45349299/article/details/127983551
MD5相等绕过:https://blog.csdn.net/m0_64236521/article/details/128877434
strcmp绕过:https://blog.csdn.net/s11show_163/article/details/103238943