打开界面,如下代码:
代码很简单,从参数中获取到filename然后include这个filename
2.1 首先参考常见做法,将参数设置为php://filter/read=convert.base64-encode/resource=flag.php,看是否有效果
果然没这么简单,有WAF过滤了这种参数,所以现在的思路是如何绕过这个WAF,尝试修改参数,看WAF是在什么情况下才会拦截
通过实验,我们发现,拦截的是
2.2 因此,我们尝试去掉read,另外将base64-encode替换成其它的函数,看是否能够通过WAF
参考官网https://www.php.net/manual/zh/filters.convert.php,有三种转换过滤器
经过尝试,前面两种都会被WAF拦截掉,只有第三种不会拦截.
官方也给出了iconv的用法,后面接了输入编码方式和输出编码方式两个参数,如果能够明确输入编码和输出编码都是什么即可
3.1 先获取到php支持的编码列表
官网:https://www.php.net/manual/zh/mbstring.supported-encodings.php
3.2 burpsuite配置爆破参数位置(这里选择集束炸弹)
payloads设置为各种编码
3.3 开始爆破,发现满足条件的有多种
这些都是满足条件的,我们看下返回结果,最终的flag为:cyberpeace{5fc26b214436ecef7de1c166c95d1487}
这道题的难点在于如何绕过WAF,在存在WAF的情况下,找出WAF的过滤条件,然后根据过滤条件进行针对性的操作;本题绕过过滤条件还考察了爆破的知识点,这一点也增加了题目的难度