- 类别:mysql 别名:— 优先级:—
- 作者:4ra1n
- 依赖:无(利用面在受害方 MySQL JDBC 驱动的
LOCAL INFILE处理逻辑)
「恶意 MySQL 服务端」利用模型中的参数载荷 gadget,与 FakeMySQLReadFile 是同一机制的孪生变体:它把用户配置的一个 URL(而非本地文件路径)作为 String 交给 Fake MySQL Payload。当受害方 JDBC 客户端在处理服务端下发的 LOCAL INFILE 请求时,若把该「路径」当作 URL 去拉取,就会由客户端所在主机发起对该 URL 的请求,从而形成 SSRF。
- 入口
tags:FakeMySQLRead、ENDFakeMySQLRead—— 与读文件变体共用同一标签,被FakeMySQLReadPayload(@PayloadAnnotation(gadgetTags={"FakeMySQLRead"}))识别为「读取/SSRF」模式的字符串载荷。END—— 链尾 gadget,invoke直接返回终值。
- 衔接
nextTags:无。 excludes:无。
本类同样极简,invoke 直接返回配置的 URL 字符串,不做任何对象包装:
@GadgetTags(tags={"FakeMySQLRead", "END"})
@GadgetAnnotation(name="FakeMySQL SSRF", authors={"4ra1n"})
public class FakeMySQLSSRF implements Gadget {
@Param(name="SSRF URL", description="eg: http://www.baidu.com")
public String url = "http://www.baidu.com";
@Override
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
return this.url; // 无 chain.doCreate,纯参数提供者
}
}它与 FakeMySQLReadFile 结构完全一致,唯一区别是 @Param 的语义从「文件路径」变成「URL」。二者返回的字符串都进入同一个 ReadFileResolver——该 Resolver 把字符串塞进 LOCAL INFILE 请求包的 0xFB 载荷:
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bao.write(-5); // 0xFB LOCAL INFILE 标志
bao.write(this.fileOrUrl.getBytes()); // 此处 fileOrUrl 即本 gadget 的 url
this.outputStream.write(PacketHelper.buildPacket(1, bao.toByteArray()));当受害方 JDBC 驱动把 LOCAL INFILE 的目标当作 URL 解析并拉取时(部分驱动/配置会以 URL 方式打开 infile 流),就会由客户端主机发起对 url 的出站请求,攻击者据此探测内网、访问元数据接口等。Resolver 随后仍尝试把「响应内容」按包接收并写入 fake-server-files/<时间戳>/<name>(shortName 取自 new File(url).getName()),因此 SSRF 的响应体也可能被落盘取回。
说明:读文件与 SSRF 在 java-chains 侧走的是同一段服务端代码,实际能否成功、以及是走「读文件」还是「发 URL 请求」,取决于受害方 MySQL JDBC 驱动版本对
LOCAL INFILE路径的解析行为。
| 字段 | 名称 | 说明 | 默认 | 可选值 |
|---|---|---|---|---|
url |
SSRF URL | 诱导客户端主机发起请求的目标 URL,eg http://www.baidu.com |
http://www.baidu.com |
任意 URL 字符串 |
- 该 gadget 无独立
description,要点承自FakeMySQLReadPayload:JDBC URL 完全可控时,即使较新驱动开启了allowUrlInLocalInfile=true等限制,仍可通过伪造 MySQL 服务端触发。 - 本质与读文件同源——都是 MySQL 客户端对服务端
LOCAL INFILE请求的过度信任;SSRF 变体把「本地文件」换成「远端 URL」,由客户端代为发起请求。 - SSRF 返回内容同样会写入 java-chains 运行目录的
fake-server-files/下。
自由构件,未直接出现在预设链(usedInChains 为空)。使用时直接选择「Fake MySQL 读文件/SSRF」Payload(FakeMySQLReadPayload),单独以本 gadget 产出 URL 载荷即可。
- 同族/同标签:FakeMySQLReadFile(同
FakeMySQLRead载荷,读本地文件;已入 ReadFile 链) - 相关但不同利用面:FakeMySQLPipeFile(Fake MySQL 反序列化 RCE 路线)
- 上层 Payload:
FakeMySQLReadPayload(gadgetTags={"FakeMySQLRead"},mode="Fake MySQL")