[MRCTF2020]Ez_bypass WP
作者:互联网
首先打开页面
他提示说f12里面有东西,于是直接ctrl+u 查看源代码
I put something in F12 for you
include 'flag.php';
$flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';
if(isset($_GET['gg'])&&isset($_GET['id'])) { // 进行判断gg和id两个参数
$id=$_GET['id'];
$gg=$_GET['gg'];
if (md5($id) === md5($gg) && $id !== $gg) { //发现三个等于 代表这里是强类型比较 且进行md5加密
echo 'You got the first step';
if(isset($_POST['passwd'])) { //post参数检验
$passwd=$_POST['passwd'];
if (!is_numeric($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
得到源码,根据题目提示,这是一道绕过题 且对代码进行审计 发现三个等于 代表这里是强类型比较 且进行md5加密
那么思路就是使用加密后的md5值为0e开头的字符
这里为什么md5值相同是因为php里面在做 == 的时候会先把两边的类型转成一样的,因为是0e开头,php会认为它是科学技计数法,而0的多少次方都是0
常见md5加密后为0e开头的可以去这个博客看
https://blog.csdn.net/qq_29566629/article/details/108736519
那么既然思路有了,就开干
emm 发现淦不通,于是利用数组绕过看看。
构造payload
?gg[]=QNKCDZO&id[]=s878926199a
得到
可以看到,这里已经绕过一层,提示说还有一步就能得到flag
继续审计源码
is_numeric() 函数用于检测变量是否为数字或数字字符串
is_numeric()
函数用1234567x
绕。1234567x
是字符串,但是弱比较的时候,因为数字在前面,若比较的时候,php会将其整体转成数字,就可以通过比较了
payload:post传参 passwd=1234567x //这里x可以替换为其他字母
发包,从而得到flag
flag为flag{eb0b0a6d-6011-426d-9ad1-e07dcf092ad4}
本题主要是考查强比较和若比较以及一些基本函数的绕过。
标签:passwd,WP,echo,gg,flag,bypass,Ez,id,md5 来源: https://www.cnblogs.com/snail7/p/16558927.html