BUUCTF[MRCTF2020]Ez_bypass 1
启动靶场
发现是一串代码,进行代码分析
<?php I put something in F12 for you include 'flag.php'; $flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}'; if(isset($_GET['gg'])&&isset($_GET['id'])) { $id=$_GET['id']; $gg=$_GET['gg']; if (md5($id) === md5($gg) && $id !== $gg) { echo 'You got the first step'; if(isset($_POST['passwd'])) { $passwd=$_POST['passwd']; if (!is_numeric($passwd))//(判断passwd是不是数字) { if($passwd==1234567) { echo 'Good Job!'; highlight_file('flag.php'); die('By Retr_0'); } else { echo "can you think twice??"; } } else{ echo 'You can not get it !'; } } else{ die('only one way to get the flag'); } } else { echo "You are not a real hacker!"; } } else{ die('Please input first'); } }Please input first php>
1.md5()无法处理数组,所以如果传入的两个参数都是数组,那么md5()函数返回的都是false,false===false成立
?id[]=1&gg[]=2
2.passwd要用post上传
3.passwd不全为数字,但传入进去要为1234567
php弱类型比较
php==在比较不同类型的数据时,会首先将==两边的数据转化为同一类型,字符型数据与数字型数据进行比较,字符型数据会转化为数据型数据。
比如1234567a会转化为1234567再进行比较,同时也绕过了is_numeric()函数
post下传入passwd=1234567a
解法一:
用hackbar
得到flag
解法二:
用burpsuite进行构造(我的burpsuite没有试出来,这里附上成功的图)
得到flag