- 类别:bytecode 别名:— 优先级:10
- 作者:Ar3h
- 依赖:无(纯 JDK)
链尾探测型字节码 sink。产出一段在类静态初始化 / 无参构造时执行 Thread.sleep(second) 的类字节码。当目标不出网、也不方便回显时,用「响应时间是否明显变长」来判断反序列化点是否真的触发了代码执行——即时间盲注式探测。与 Exec(命令执行)、DNSLog*(出网探测)互为替代 sink。
- 入口
tags:Bytecode、END—— 自身即链尾字节码源。 - 衔接
nextTags:(无,END)。 - 典型上游:
BytecodeConvert→TemplatesImpl→ 各反序列化触发器。
@Param(name="秒", type=ParamType.Integer)
public String second = "5";
public byte[] getObject() throws Exception {
JavassistHelper javassistHelper = new JavassistHelper(SleepBytecode.class);
javassistHelper.modifyStringField("second", this.second); // 把模板类里的 second 字段改为用户设定秒数
return javassistHelper.getBytecode();
}
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
chain.doCreate(context); // 到链尾,无更内层
return this.getObject();
}与 Exec 结构完全一致:以内置模板类 SleepBytecode 为蓝本,用 JavassistHelper.modifyStringField 把其中的 second 字段替换为用户设定的秒数,返回字节码。SleepBytecode 在被 TemplatesImpl 加载实例化时于静态块 / 构造中调用 Thread.sleep(second * 1000),从而使目标响应延迟可观测。
| 字段 | 名称 | 说明 | 默认 |
|---|---|---|---|
second |
秒 | 休眠秒数(Integer) | 5 |
- Fastjson链、Fastjson2链、Jackson链(这些预设链默认用
Sleep作探测 sink,可替换为Exec实现 RCE) - Sleep探测链(
[BytecodeConvert, Sleep])
- 同位替代 sink:Exec(命令执行)、DNSLog / DNSLogWithInfo(出网探测)
- 上游:BytecodeConvert、TemplatesImpl