you can’t see it? well,I guess i can.
一、题目分析
题目链接:warmup
进去看到一个调皮并使劲微笑的表情,查看源代码提示了source.php(也可以用御剑扫),在source页面是一段代码审计:大意要求参数file在白名单内(这里有两次检查),然后包含这个文件。对于第二次检查,这里可以使用url多次编码进行绕过(事实上这也是web过检测的常见操作)。
其实本题是根据chaMD5安全团队的一篇推文设计的,具体链接:phpmyadmin4.8.1后台getshell
二、具体思路
- 进入页面F12查看源代码,看到关键提示source.php,跟进。
2.代码审计。如果参数file符合checkFile函数检测规则,则包含此文件。这里我们可以利用url多次编码绕过第二个检测。
3.构造payload。哦对了,这里的ffffllllaaaagggg是在hint.php中发现的,显然flag在这个文件里。其实文件名提示了我们要使用四层目录,这里比较坑。
三、题目总结
其实本题的收获不是URL编码绕过(indeed,that’s normal),而是include函数有这么一个神奇的功能:以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’。
笔者实测如下: