一打开就是一坨看起来像乱码的东西
 
 
   查看源码才看的舒服点,原来是一串PHP代码
 
 
   这么长一段,翻译起来还有点麻烦
首先第一个if语句
检测GET传参gg和id是否存在
- 如果不存在就输出’Please input first‘(请先输入)并利用die函数退出脚本 
- 如果存在分别赋值给对应变量,并执行下一步if判断 
第二个if语句
运用完全比较,判断MD5编码后的id是否值和类型都等于md5编码后 gg,并且变量id本身不等于变量gg
- 如果不是就输出’You are not a real hacker!‘(你不是一个真正的黑客) 
- 如果是就输出’You got the first step‘(你完成了第一步),并执行下一步if判断 
第三个if语句
检测POST方法的passwd是否存在
- 如果不存在就输出’only one way to get the flag’(只有一种方法获取flag),并退出脚本 
- 如果存在就赋值给对应变量,并执行下一个if判断 
第四个if语句
检测passwd变量是否不由数字或者数字字符串组成
- 如果不由数字或数字字符串组成,则输出‘You can not get it !’(你不能得到它) 
- 如果是数字或数字字符串组成,则进行下一个if判断 
第五个if语句
弱比较,仅比较值,判断passwd变量的值是否为1234567
- 如果不是则输出‘can you think twice?’(你能三思吗?) 
- 如果是则获取到flag 
总结来说,我们需要连个GET参数和一个POST参数,需要绕过两处
if (md5($id) === md5($gg) && $id !== $gg)
if (!is_numeric($passwd) if($passwd==1234567)
- 第一处是md5强类型比较绕过,我们可以构造/?id[]=1&&gg[]==2 
- 因为md5()函数计算的是一个字符串的哈希值,对于数组则返回false ,(false === false) 为true 
- 第二处是弱类型比较绕过,既要passwd的参数不为数字或数字字符串组成,又要passwd参数的值等于123456,我可以构造passwd='123456a' 
- 因为在php8.0之前,数字和字符串的弱类型比较取的是字符以前的数据 
也就是说:(123a == 123) 返回的是true
我抓包抓的是GET传参,可以在burp中更改为POST请求方式后再传参,不然passwd的传参不会成功,并且会报错
 
 
   


















