Skip to content

Latest commit

 

History

History
57 lines (47 loc) · 3.85 KB

File metadata and controls

57 lines (47 loc) · 3.85 KB

自定义byte[]类型数据(Base64)(ByteArrayFromBase64)

  • 类别:custom 别名:— 优先级:200
  • 作者:—
  • 依赖commons-codec:commons-codecorg.apache.commons.codec.binary.Base64,工具自带)

作用

把用户提供的一段 Base64 字符串解码为 byte[],作为链的**数据源(最内层产物)**直接返回。它不构造任何反序列化对象,只负责把「已经准备好的原始字节」注入到 Payload 生成流程中——典型用途是把外部工具生成好的 payload(如 ysoserial 输出、字节码、序列化流)用 Base64 承载后交给 UserCustomPayload,由 TcpServer / HTTPServer 直接吐给目标。

链接标签

  • 入口 tagsCustomBytePayloadEND
    • CustomBytePayload —— 声明本 gadget 产出的是「自定义字节负载」,被 UserCustomPayload(自定义数据生成,gadgetTags={"CustomBytePayload"},mode = HTTP Server / TCP Server)作为可接入的构件收纳。
    • END —— 终结标签,表示这是链的叶子/源头,其内部不再 chain.doCreate() 调用下一环。
  • 衔接 nextTags:(空)—— 后面不接任何 gadget,本身即链尾数据源。
  • excludes:(空)

源码剖析

整类只有两个方法,逻辑极简:

@GadgetTags(tags={"CustomBytePayload", "END"})
@GadgetAnnotation(name="自定义byte[]类型数据(Base64)", description="会自动对字符串进行Base64解码操作", priority=200)
public class ByteArrayFromBase64 implements Gadget {
    @Param(name="Base64字符串", description="会通过该字符串进行解码操作")
    public String base64String;

    public Object getObject() {
        return Base64.decodeBase64((String)this.base64String);   // 直接 Base64 解码为 byte[]
    }

    @Override
    public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
        return this.getObject();                                  // 不调用 chain.doCreate,纯数据源
    }
}

关键点:

  • invoke 调用 chain.doCreate(context),与 END 标签一致——它是链的最内层,直接把解码结果作为「内层对象」返回给外层(或直接交给 Payload)。
  • Base64.decodeBase64 使用 commons-codec 的实现,宽松解码(忽略非 Base64 字符、自动处理换行),因此可直接粘贴多行 Base64。
  • 产物类型是 byte[],因此消费方必须是接受原始字节的 Payload(UserCustomPayload),而非需要 Java 对象图的原生反序列化 Payload。

参数(@Param)

字段 名称 说明 默认 可选值
base64String Base64字符串 会通过该字符串进行 Base64 解码,解码结果即最终 byte[] 负载 任意 Base64 文本

适用版本与原理要点

  • 与目标 JDK / 第三方库版本无关:它不触碰目标环境,只在生成端做一次 Base64 解码,属于「离线数据封装」构件。
  • description 明确「会自动对字符串进行Base64解码操作」——使用者只需粘贴 Base64,无需手工解码。
  • 常见搭配:把其它工具产出的序列化流 / class 字节 base64 化后填入,用 HTTP/TCP Server 模式对外提供,实现「自带 payload」的投递。

所属预设链

自由构件,未直接出现在 51 条预设链中。它面向 UserCustomPayload 的自定义数据生成场景,由使用者按需组合。

关联

  • 消费方 Payload:UserCustomPayloadCustomBytePayload → HTTP Server / TCP Server)。
  • 同族(同为 custom 目录、同产 byte[] 数据源):ByteArrayFromHex(改用 Hex 编码)、ByteArrayFromUploadFile(从上传文件读取 Base64)。
  • 字符串版本:CustomString(产 String 而非 byte[],标签 CustomStringPayload)。