CTF-Web
Web攻防世界
前期在bilibili学习Web知识、基本漏洞原理、burp、正则表达式的用法…(菜鸟第九天)
PHP2
题目显示为:
题目不存在其他可上传的参数,xss、sql注入的可能性减少
输入一般的首页名,后缀名为phps(查看源码)
留意到注释存在注入参数id,当id=admin时,可以得到flag,但是不被允许访问。整合代码得到:
<?php
if("admin"===$_GET[id]) {
echo("<p> not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin") {
echo "Access granted!";
echo "Key: xxxxxxx";
}
?>
Can you anthenticate to this website?
分析得到:直接输入的id不为admin,经过url解码后得到admin
值得注意的是,这里进行两次url解码绕过。
下面展示 Payload
。
id=%2561dmin
在传入id参数是浏览器会对非ASCII码的字符进行一次URL编码(urlencode),运行该段代码时,自动进行一次URL解码(urldecode),遇到urldecode()函数时,再次进行一次解码
id=%2561dmin //传参
admin === %61admin //进行第一次判断
admin == admin //进行第二次判断
则将a字母进行两次加密得到%2561
总结
phps后缀
phps文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替。
URL传输时的编码流程
–图片来源于KogRow的博客