Bugkuctf题库中的一道代码审计题,通过url二次编码绕过过滤得到flag

源代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$flag='flag{xxxx}';
if(preg_match("/hackerDJ/",$_GET['id'])){
echo "not allowed";
exit;
}
$id=$_GET['id'];
$id=urldecode($id);
if("hackerDJ" == $id){
echo $flag;
}

?>

看代码第一感觉将hackerDJ进行一次URL编码即可绕过过滤

将一次编码后的值输入

发现自动转化成了hackerDJ,为什么呢,因为我们提交id值给服务器时,服务器会对id值自动url解码,所以要对hackerDJ进行二次URL编码才可以绕过

输入二次编码后的值

成功得到flag值