Skip to content

Latest commit

 

History

History
44 lines (35 loc) · 2.18 KB

File metadata and controls

44 lines (35 loc) · 2.18 KB

Sleep字节码(Sleep)

  • 类别:bytecode 别名:— 优先级:10
  • 作者:Ar3h
  • 依赖:无(纯 JDK)

作用

链尾探测型字节码 sink。产出一段在类静态初始化 / 无参构造时执行 Thread.sleep(second) 的类字节码。当目标不出网、也不方便回显时,用「响应时间是否明显变长」来判断反序列化点是否真的触发了代码执行——即时间盲注式探测。与 Exec(命令执行)、DNSLog*(出网探测)互为替代 sink。

链接标签

  • 入口 tagsBytecodeEND —— 自身即链尾字节码源。
  • 衔接 nextTags:(无,END)。
  • 典型上游:BytecodeConvertTemplatesImpl → 各反序列化触发器。

源码剖析

@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),从而使目标响应延迟可观测。

参数(@Param)

字段 名称 说明 默认
second 休眠秒数(Integer) 5

所属预设链

  • Fastjson链、Fastjson2链、Jackson链(这些预设链默认用 Sleep 作探测 sink,可替换为 Exec 实现 RCE)
  • Sleep探测链([BytecodeConvert, Sleep]

关联