buuctf-web-[MRCTF2020]Ez_bypass
知识点:md5的强弱比较
== 先将字符串类型转化成相同,再比较
=== 先判断两种字符串的类型是否相等,再比较。
先看代码关键部分
if (md5($id) === md5($gg) && $id !== $gg) { echo 'You got the first step'; if(isset($_POST['passwd'])) { $passwd=$_POST['passwd']; if (!is_numeric($passwd)) { if($passwd==1234567) { echo 'Good Job!'; highlight_file('flag.php');
看到id和gg是强比较,可以用数组绕过(因为md5()计算的是字符串的值,对数组返回的都是false),即构造payload:?id[]=1&gg[]=2
接下来是弱类型绕过!is_numeric,passwd不能是数字但==1234567。弱类型比较的时候先会把字符串类型转换成相同的,即123a==123.那么可以构造passwd=1234567a