征服web第二站-攻防世界 file_include

        小白全流程解读代码和自己的思路,欢迎大家一起学习和批评指正。

        之前一直对文件包含,尤其是对伪协议一知半解,今天在比武的再次遇到了伪协议,决定通过攻防世界的一道题了解一下php://filter这个伪协议,

        一、初窥题目

        根据代码分析,显然过滤条件在check.php里,绕过了过滤条件,就可以用include方法任意读取文件。接下来的问题就是怎么看到check.php。

        首先直接在url后面就路径,即/check.php,无内容显示,那考虑是不是是不是直接用?filename=check.php,也没有反应。尝试filename=../../../../etc/passwd,发现有回显,那说明的确是本地文件包含,可能做了一些文件读取权限限制,不能直接读取。

        二、尝试使用伪协议

        我先尝试了一下file://,没有数据显示,然后尝试php://filter/,根据文心一言的解释,file就是简单的读取文件,而php://filter/是对文件内容可以做一个过滤,以文件流的形式的读取,不能使用file://可能也是后台限制了file的访问权限。针对php://filter/,我觉得这篇文章解释的很清楚。PHP伪协议filter详解,php://filter协议过滤器-CSDN博客

简单的说php://filter/在读取目标路径的文件时,中间多了筛选器的功能,即对读取和输出可以做编码、大小写等筛选功能。常见的筛选器有string.rot13(rot13编码,回显结果可以手动使用rot13解码)、string.toupper(大写)、string.tolower(小写)、convert.base64-encode(回显结果base64编码)以及convert.iconv.*。convert.iconv.*可以理解为自定义筛选器,数据流的内容按照指定字符来转换,他的格式是convert.iconv.<input-encoding>.<output-encoding>,输入编码和输出编码用“.”点来分割,也可以用“/”斜线分割,效果一样。

        三、进行测试

        那么先构造最简单的poc,php://filter/convert.base64-encode/resource=文件路径,输入以后发现有报错,“do not hack”,应该是对传出的参数做了过滤。然后以此对string.toupper(大写)、string.tolower(小写)、string.rot13,都一样的结果。

         再试一下convert.iconv.发现没有报错,应该就是考这个,看了一下网页时utf-8的编码,试了一下把utf-8改成tf-8*.UTF-16*,即通过UTF-16输出,发现跳出了check.php的内容

        可以看到内容,果然是对几个过滤器都做了过滤,那么直接把check.php换成常见的flag.php测试一下,flag直接出现,cyberpeace{e5c6af5f8322e1bab8dabec76d4c1b09}。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值