当前位置: 首页 > news >正文

文件包含PHP_INCLUDE_TO_SHELL_CHAR_DICT工具详解

是一个PHP 编码混淆与构造工具,核心目的是:利用 PHP 的php://filter编码链,将我们想要执行的任意 PHP 代码(Webshell)经过多重编码转换,使其在输出时仅由特定、受限的字符集构成

自己理解的原理:就是比如1.txt中内容为hello world......等等,我不是可以用文件包含漏洞来包含1.txt,我就要想办法通过php的filter来不断对1.txt的内容来转化,使其变为一句话木马,从而inciude就是包含了一个一句话木马(include会对其包含的内容按php代码来解析,因为php内核并不会在意被包含的文件是什么类型,txt,png等等都行)
1.txt(内容:hello world...或其他任意文本) ↓ php://filter/convert.iconv.编码1.编码2|convert.base64-encode|...(复杂转换链) ↓ 包含后的实际内容:<?php eval($_GET[1]);?>(一句话木马) ↓ include()执行 → PHP代码被执行

例如:

<?php $file = $_GET['file']; include($file); ?>

当服务器对$file指向的文件内容有严格过滤(例如,只允许字母、数字和点.等少量字符),如果包含的文件内容包含非法字符,就会失败

一、核心原理(test.py

工具的核心方法是构造一个复杂的php://filter编码链

  • 起点:我们有一个目标 Webshell,例如<?php eval($_GET[1]);?>a(末尾加a是为了填充)

  • 目标:经过一系列convert.iconvconvert.base64的编码、解码、再编码后,最终输出的文件内容只包含我们允许的字符(比如仅包含a-z,A-Z,0-9,+,/,=等 Base64 字符,或通过convert.iconv.UTF8.UTF7进一步过滤掉特殊字符)。

  • 方法:脚本test.py展示了一种自动化构造此类 Filter 链的思路。它利用了convert.iconv转换中,不同的字符集映射关系,可以将特定字符“转换”为我们想要的字符。

二、工具文件介绍

链接中仓库的关键文件:

  1. test.py核心构造脚本。这就是生成最终php://filterpayload 的工具。

  2. fuzzer.php:一个用于测试和模糊测试(Fuzzing)的辅助脚本,可能用于验证生成的 payload 或寻找可用的字符转换对。

  3. test.php:一个示例目标文件,脚本会尝试去包含它(例如/etc/passwd),并注入我们的代码。

  4. res/目录:这个目录下很可能存放着许多以单个字符命名的文件(如a,b,c, ...,+,/,=)。这些文件的内容是预先计算好的、用于构建 Filter 链的convert.iconv转换规则片段。

三、具体使用

(1)假设我们正在做一道文件包含的ctf题目

(2)在PHP_INCLUDE_TO_SHELL_CHAR_DICT目录中运行test.py

python test.py

运行后,它会输出一个非常长的php://filter字符串,类似:

php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSGB2312.UTF-32|略略略............|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=/etc/passwd

这个字符串就是我们的 payload

四、Payload 的组成与原理

  1. /etc/passwd:这是我们 LFI 要包含的原始、合法的服务器文件。它作为整个 Filter 链的“输入源”。

  2. 复杂的 Filter 链:这一长串convert.iconvconvert.base64操作,目的不是为了读取/etc/passwd的内容,而是/etc/passwd文件内容转换成webshell。

  3. 执行:当include执行这个 payload 时,PHP 会先应用整个 Filter 链对/etc/passwd进行处理,处理后的结果(即原内容 + 我们注入的代码)会被include执行。由于我们注入的是<?php eval($_GET[1]);?>, 它就会被执行,从而我们可以通过?1=system('ls');这样的参数来执行任意命令。

五、实战利用

(1)发送请求到存在 LFI 漏洞的点

http://vulnerable-site.com/index.php?file=php://filter/...(长payload).../resource=/etc/passwd

注:payload可能要进行进行 URL 编码(因为|等字符需要编码)

(2)如果成功,服务器就会include一个“被污染”的/etc/passwd文件,接着,我们可以访问同一个页面,并传递命令参数

http://vulnerable-site.com/index.php?file=php://filter/...(长payload).../resource=/etc/passwd&1=system('cat /flag');

六、fuzzer.php的使用

(1)一个辅助性的、用于“探索”和“发现”可用转换规则的侦察工具

自动、批量地测试 PHP 的iconv扩展支持的所有字符集编码转换对(convert.iconv.FROM.TO),并找出那些在转换过程中能产生出特定、有用字符(特别是可以用于构造攻击 payload 的字符)的转换规则

因为要构造一个能绕过严格过滤的php://filter编码链,你需要知道:

  • 哪些字符(A)能通过某种convert.iconv转换成你需要的字符(B)。

  • iconv库支持数百种字符集编码,人工测试所有组合(FROM x TO)是海量的、不现实的。

  • fuzzer.php自动化了这个“大海捞针”的过程。

(2)记录有效规则

如果一个转换能稳定地、确定性地产生某个目标字符(比如,输入'x'经过convert.iconv.CP850.UTF7后总是输出包含字符'A'的结果),那么这条转换规则 (CP850.UTF7) 以及它和目标字符 (A) 的对应关系就会被记录下来。

输出“字典”

所有被发现的、有效的转换对 -> 生成字符的规则,最终会被保存到项目的res/目录下。res/目录下的每一个文件,都是以一个“目标字符”命名的(例如A,B,+,=),文件内容就是能生成这个字符的一条或多条convert.iconv转换规则。

这正是test.py在生成攻击链时所依赖的“字典”

(3)使用

fuzzer.php通常在攻击准备阶段,在本地或可控的测试环境中运行,以构建res/字典,而不是在目标服务器上直接运行

【1】步骤 1:环境准备

  1. 确保你有一个可运行的 PHP 命令行环境(CLI)。

  2. 克隆PHP_INCLUDE_TO_SHELL_CHAR_DICT项目。

  3. 确认iconv扩展已启用(php -m | grep iconv

  4. 在项目目录下,通过命令行执行:

    php fuzzer.php

【2】运行后,脚本会开始工作。由于需要测试的编码对数量巨大(通常是数万甚至更多),这个过程会非常耗时(可能需要数小时甚至更久)。

  • 在终端中,你会看到它不断输出当前正在测试的编码对,以及发现的可能有效的规则。

  • 脚本会将最终确认的、稳定的转换规则自动写入res/目录下对应的文件中。

一个重要的中间输出

脚本可能会生成一个类似phpresult的文件。这个文件记录了初步发现的所有可能规则,格式可能是原始的、未经严格去重和验证的列表。最终的res/字典是从这个中间结果中提炼出来的。

使用生成的结果

运行结束后,检查res/目录。你应该能看到许多以单个字符命名的文件(如A,B,w,+等)。test.py在生成攻击链时,会读取这些文件来获取“如何构造字符A”、“如何构造字符B”的转换步骤。

iconv库的实现和可用字符集可能因操作系统(Linux/macOS/Windows)和 PHP 版本而异。在一个环境中由fuzzer.php发现的规则,在另一个环境(尤其是目标服务器环境)中可能无效。最理想的情况是在与目标环境尽可能相似的环境中运行 fuzzer

对于解题或测试,通常可以直接使用项目中已提供的res/字典,这些是作者在常见环境中预先运行 fuzzer 得到的结果。只有当你发现现有字典在你的特定目标环境下无效时,才需要考虑自己运行fuzzer.php来生成新的字典。

以上观点仅供参考,如有错误,欢迎指出

http://www.jsqmd.com/news/486355/

相关文章:

  • 2026贵阳装修公司5强名单公布,本地市场格局数据出炉 - 精选优质企业推荐榜
  • 4节点光储直流微网:多目标控制下的光伏MPPT与储能双向DCDC的二次优化与多智能体一致性研究
  • 2026贵阳室内设计5强名单出炉,权威机构发布行业现状 - 精选优质企业推荐榜
  • 2026年三防布批发TOP10企业揭晓,谁将领跑行业?
  • 虚拟机(Red Hat)部署后的优化
  • 2026高二生免高考留学新加坡全指南:避开内卷,直通世界名校 - 品牌2026
  • 超绝openclaw技能skill,herHug让AI更懂你
  • 计算机毕业设计 java 虚拟股票交易系统 Java+SpringBoot 模拟股票交易平台 Web 版股市虚拟交易实训系统
  • 【云藏山鹰代数信息系统】琴语言基础100讲之琴语言解析器梅开二度设计
  • 技术裸奔时代:软件测试行业的社交货币陷阱与专业重构
  • 制造知识断层:软件测试工程师的不可替代性构建策略
  • 基于MATLAB的Kmeans自动寻找最佳聚类中心App:‘手肘法‘确定k值与聚类结果可视化
  • 2026年最新完整java面试题(含答案)
  • 老牌智造,长效守护:2026全国风机五强赋能全场景通风安全能效新标杆 - 深度智识库
  • openYuanrong Agent 方向真实案例验证
  • 基于FPGA的DisplayPort Transmitter IP纯源码,使用fpga的gt收发器
  • 2026贵阳室内设计实惠排行榜发布,权威数据揭示本地格局 - 精选优质企业推荐榜
  • 数据仓库处理架构: lambda架构、kappa架构
  • 计算机毕业设计springboot基于Vue.js的臻品可可平台管理系统 基于SpringBoot与Vue.js的高端巧克力电商运营平台 采用前后端分离架构的精品可可产品在线销售管理系统
  • Coze自动化工作流+Agent智能体实战教程(0基础入门,附多场景实操)
  • 刷题篇-1
  • 基于FFT傅里叶变换的QPSK基带信号频偏估计与补偿算法的FPGA实现:从调制到补偿的完整流程...
  • 画说:一个开箱即用的白板录屏工具,专为知识讲解而生
  • 计算机毕业设计springboot基于Vue的北方消逝民族网站的设计与实现 基于SpringBoot与Vue.js的北方濒危民族文化数字化传承平台 采用前后端分离架构的北方少数民族历史文化在线展示系统
  • 和 AI 聊天不难,难的是长期协作:我做了一套三层机制
  • LeetCode 49. 字母异位词分组
  • 基于蓝耘元生代MaaS平台调用DeepSeek-V3.1-Terminus模型:HTML实战Demo
  • 当数据分类遇上金枪鱼:用群体智能优化支持向量机
  • iframe自适应高度的终极解决方案
  • 风光储联合发电系统;光伏风电储能能量管理simulink仿真 模型正确无误,已跑通 仅供学习 ...