攻防世界-web高手进阶区-PHP2
php2
默认页面是/index.php
输入/index.phps 页面出现乱码 我们查看一下源代码,题目的源代码就出来了(用路径扫描没扫出来,看大佬的博客才知道,这次长个记性,把index.phps记起来)。
我们先看到第二句if语句:
if ($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx</p>";
}
当id=admin的时候key就会显示出来
然后再看到第一句if语句:
if("admin" === $_GET[id]) {
echo ("<p>not allowed!</p>");
exit();
}
当id=admin的时候会输出一个not allowed! 并且退出
也就是说我们不能直接输入id=admin来拿到key值
再看到中间一句代码:
$_GET[id] = urldecode($_GET[id]);
这句是进行一个url解码,在我们网页上输入网址位置也会进行一次url解码,这个时候我们拿出计算器算一下,代码中一句url解码 + 网页自带一句url解码,如果我没有算错的话应该是 2次 url解码(果然9年义务教育没白教)
然后这个时候我们可以想到,url解码 + url解码 = admin,然后我们把admin进行编码两下
用burp 的url编码或者网上找url编码网站一大堆,这里我用burp
然后把最后的加密用到url里面
我们输入?id=%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65
这样回车之后首先会对 %25%36%31%25%36%34%25%36%64%25%36%39%25%36%65 进行url解码,解码之后的结果就是 %61%64%6d%69%6e 。
然后就是执行代码里面的第一句if语句:
if("admin"===$_GET[id]) {
echo("<p>not allowed!</p>");
exit();
}
到这里的时候我们的结果就是id = %61%64%6d%69%6e
这样我们就成功绕过第一句if语句: id 不等于 admin
然后我们来到第二句:
$_GET[id] = urldecode($_GET[id]); // 对id进行url解码一次
我们这个时候 id = %61%64%6d%69%6e 解码了就是: id = admin
然后执行代码最后一句:当满足id = admin 就输出key值,这个时候已经满足了
if($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx </p>";
}
?>
最后结果
不懂评论区问,还不懂我分分钟
第一次写博客有问题请指出