Skip to content

Latest commit

 

History

History
112 lines (44 loc) · 2.92 KB

File metadata and controls

112 lines (44 loc) · 2.92 KB

ReadFile

文件读取 / 数据外带 · 适用 Payload:FakeMySQLReadPayload · 最终效果:文件读取 / 数据外带

链概览

  • 利用场景 / 触发入口FakeMySQLReadPayload

  • 受影响依赖与版本:未在注解中声明额外第三方依赖,详见各 gadget 条目。

  • Gadget 组成(配置顺序,由外到内)FakeMySQLReadFile

FakeMySQLReadFile 是 FakeMySQL 读文件入口,链输出目标文件路径,后续由 FakeMySQL 协议处理模块完成读取交互。

Gadget 组成

| 顺序(外->内) | Gadget | 类别 | 在本链中的角色 |

|---|---|---|---|

| 1 | FakeMySQLReadFile | mysql | 最外层入口;FakeMySQL 读取文件 |

触发流程

  1. Payload 入口按 chains.json 中的 steps 解析 gadget,并按 java-chains 约定由内向外调用 chain.doCreate(context) 构建对象。

  2. 最内层 FakeMySQLReadFile 先产出链尾数据;随后每一层根据 nextTags 与上下文标签继续包装。

  3. 最外层 FakeMySQLReadFile 生成交给 Payload 序列化或投递的对象。目标端触发后,调用路径再从外向内推进。

  4. 本链关键路径:FakeMySQLReadFile 是 FakeMySQL 读文件入口,链输出目标文件路径,后续由 FakeMySQL 协议处理模块完成读取交互。

逐 Gadget 源码剖析

1. FakeMySQL 读取文件(FakeMySQLReadFile

  • 标签:tags=FakeMySQLReadEND;nextTags=无
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {

        return this.targetFilePath;

    }

在本链中,FakeMySQLReadFile 的职责是:最外层入口;FakeMySQL 读取文件。它的返回值由相邻层根据标签继续消费;如果源码中写入了 ContextTag,这些上下文值会影响下一层的类名、getter 名、驱动类名或序列化后处理。

完整调用栈


FakeMySQLReadPayload

 -> FakeMySQLReadFile.invoke/getObject

 -> 文件读取 / 数据外带

可配参数

| Gadget | 字段 | 名称 | 说明 | 默认/可选 |

|---|---|---|---|---|

| FakeMySQLReadFile | targetFilePath | 读取的文件路径 | eg: /etc/passwd | "/etc/passwd" |

防御与检测

  • 对不可信反序列化、JNDI Reference、JDBC URL、Spring XML 加载等入口实施白名单;不要只依赖单个黑名单类名。

  • 检测对象图或配置中连续出现本链类名:FakeMySQLReadFile

  • 关注上下文相关副作用:ContextTag.DRIVER_CLASS_NAME_KEYGETTER_PARAM_NAME_KEYSUID_REPLACECACHE_FILES_MAP 等值会改变后续触发点。

  • 对应用服务器出站连接、异常 DNS/HTTP/JDBC 请求、动态类定义与 ProcessBuilder 子进程做审计。

参考 / 关联

  • 机器可读定义:index/chains.json(id=51)。

  • 原始链配置:index/default-chains.yaml

  • 关联 gadget 条目见上方组成表。