MRCTF2020_Ez_bypass

[MRCTF2020]Ez_bypass

0x00 过程

进页面看到审计代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//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))
{
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');
}
}

首先判断传入的id和gg的md5是否相同,且id与gg本身不同。一个办法是找存在哈希碰撞的两个字符串,还有一个方法就是直接让gg与id变成数组,因为md5无法让数组哈希,所以由于php弱类型会让判断成立,绕过第一个门槛;第二个门槛则还是is_numeric绕过,以post形式提交passwd=1234567%00,即可绕过之后的判断,拿到flag。


MRCTF2020_Ez_bypass
https://k1nm0.com/2022/10/23/[MRCTF2020]Ez_bypass/
作者
K1nm0
发布于
2022年10月23日
许可协议