实验吧 php大法好
进入题目中,和前面做的题目很相似的是,这个也是在url中稍作修改,你就能看到需要审的代码,(我从其他的大佬那里了解到,这种题目叫做代码审计)
那就看看代码吧:
<?php
if(eregi("hackerDJ",$_GET[id])) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
echo "<p>Access granted!</p>";
echo "<p>flag: *****************} </p>";
}
?>
<br><br>
根据上面的代码,我们可以知道:
1.这是使用get方式输入的,所以我们可以构造url
2.在url中不能出现hackerDJ,否则的话,直接输出错误
3.但是在url解码之后,要出现hackerDJ才能回显出来正确的flag
既然知道了规律,很容易想到一个办法,那就是我直接url转码hackerDJ,这样子url中没有包含hackerDJ,还能在解码之后出现hackerDJ,所以我照着做了。。。。
id=%68ackerDJ
发现报错了
…
我意识到,我可能忽略了什么问题,所以我查阅了一些资料,后来发现了问题所在:
原来,在浏览器传递url到服务器中之前,浏览器会进行一次url转码
这就导致了我们的url中直接出现了hackerDJ
明白了问题所在,那就动手解决吧,我想了一个方法来解决这个问题:我把hackerDJ使用url编码两次,这样子就达到和之前同样的效果。
id=%2568ackerDJ
最后,我成功的解出题目!!