步骤
打开所给场景,如图:
问我能找到网站吗?迷惑,尝试进行目录扫描,发现没什么用。
然后尝试在后面随意传参数,页面没什么变化,接着我就想试一下看把后缀改了能不能行,就添加了一个字母s,结果,运气爆棚!直接出源码了,然后我尝试了其他字母,都会报错。
接着我就去查了一下,还真是我太菜了!(我看其他师傅直接用御剑扫出了phps文件爆出源码,我这运气算好还是算坏啊…)
.phps
文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替。其实,只要不用php等已经在服务器中注册过的MIME类型为文件即可,但为了国际通用,所以才用了phps文件类型。- 它的MIME类型为:text/html, application/x-httpd-php-source, application/x-httpd-php3-source
又涨姿势了,拿到源码之后就简单了,进行代码审计:
<?php
if("admin"===$_GET[id]) {//如果id参数为admin字符串
echo("<p>not allowed!</p>");//打印不被允许
exit();//退出程序
}
$_GET[id] = urldecode($_GET[id]);//将传递的id参数进行url解码
if($_GET[id] == "admin")//如果等于admin
{
echo "<p>Access granted!</p>";//打印授予访问权限
echo "<p>Key: xxxxxxx </p>";//打印flag
}
?>
好的,审计完成之后,发现只要我们将输入的admin用url进行编码就可以拿到flag
编码之前:
编码之后:
注意:这里需要将admin进行二次编码才可成功,因为浏览器会自动进行一次url解码,解码之后传递给代码相当于没进行编码,还是admin
payload:?id=%2561%2564%256d%2569%256e
或?id=%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65
第一个是我将一次编码之后的%
单独又编码了一次,也可以成功,第二个全部进行编码
最后,又去看了一下御剑,发现我的字典里没有.phps
结尾的,能扫出来就怪了,还是太菜了
总结
考察对phps文件的了解,以及url编码的相关知识