解题环境依旧是攻防世界的靶场

解题思路

这道题涉及到一个我自己较少接触到的知识点,就是php的转换过滤器。其实大体思路就是用convert过滤器的不同方法来尝试出被check.php拦截的关键字,达到用特殊编码输出的目的

题目分析

进来后可以看到如下界面
2

首先猜测flag在flag.php中
根据经验可以很容易知道,check.php里可能含有字符串过滤
先使用下面这句常规的base64编码读取

?filename=php://filter/read=convert.base64-encode/resource=check.php

可以看到确实存在过滤的字符串,但由于check.php本身无法被查看,所以只能另寻他路

在php官网中查找到有关字符串过滤的string过滤器,可以看到有很多字符串转换的方式来读取出flag.php或是check.php中的内容,尝试官网中的第一种rot13()方法,但也同样遭到了和上面一样的拦截
所以只能把目光转向另一种过滤器,也就是转换过滤器
1
这种过滤器有一种特殊的方法也就是iconv
4
由于文中提到这种方式等同于用 iconv() 处理所有的流数据,所以点进iconv()函数的页面就能得知它的具体用处和用法
3
由于这里提到字符串编码,所以可以通过查询php所支持的字符串编码形式,结合暴力破解来确定可以使用哪种编码

这里就不演示burp暴力破解结果,经过测试后可行方案有多种,任选一种即可。这里我选择其中一种来构造查询语句

?filename=php://filter//convert.iconv.SJIS*.UCS-4*/resource=check.php

结果如下
5
就可以看到被过滤的字符串有哪些。现在只要将check修改为flag即可
6