XCTF-web-file_include

根据题目描述应该是一个文件包含的题目,访问主页面

需要传入filename的参数,尝试使用php://filter协议读取check.php文件的内容

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


经过一些测试,得到过滤了php://filter/readbase64,这里无法使用php://filter/read协议了
我又测试了data://协议和php://input协议,都没有成功,在网上查找资料

因为php://filter协议可以使用,在网上查找到了convert.quoted-printable-encode这个方法也可以读取
尝试后发现quoted这个单词也被过滤了,但是还有下方还有另一个方法

  • convert.iconv.*方法:格式位:convert.iconv.<input-encoding>.<output-encoding>或者convert.iconv.<input-encoding>/<output-encoding>

其中input-encodingoutput-encoding有很多编码,详细可以看探索php伪协议以及死亡绕过

因为我们中文常用的方式是utf-8,所以input-encoding选择UTF-8*,然后output-encoding随便选择一个,浏览器显示正常解析即可
我测试了这几个可以正常解析:UCS-4*UCS-4LE*UCS-2UCS-2LEUTF-32*UTF-32LE*UTF-16*可以正常解析,还有很多可以自己尝试

传入payload

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


可以看到check.php过滤的内容,/base|be|encode|print|zlib|quoted|write|rot13|read|string/i,不过已经不重要的

该题目没有提示flag文件的位置,尝试包含常见的flag.php

?filename=php://filter/convert.iconv.UTF-8*.UTF-16*/resource=flag.php

成功得到flag

posted @ 2023-11-29 11:07  Junglezt  阅读(42)  评论(0编辑  收藏  举报