Skip to content

Latest commit

 

History

History
55 lines (45 loc) · 3.49 KB

File metadata and controls

55 lines (45 loc) · 3.49 KB

自定义byte[]类型数据(文件上传)(ByteArrayFromUploadFile)

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

作用

ByteArrayFromBase64 的运行逻辑完全相同——把一段 Base64 解码成 byte[] 作为链的数据源(最内层产物)。差异仅在参数标注为 ParamType.File:Base64 内容来自前端上传的文件而非手工粘贴的文本框,便于直接投递较大的二进制负载(class 文件、完整序列化流、jar 等)。

链接标签

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

源码剖析

@GadgetTags(tags={"CustomBytePayload", "END"})
@GadgetAnnotation(name="自定义byte[]类型数据(文件上传)", priority=200)
public class ByteArrayFromUploadFile implements Gadget {
    @Param(name="Base64字符串", description="会通过该字符串进行解码操作", type=ParamType.File)  // 注意 type=File
    public String base64String;

    public Object getObject() {
        return Base64.decodeBase64((String)this.base64String);   // 与 ByteArrayFromBase64 相同的解码
    }

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

关键点:

  • 唯一的实质差异是 @Param(... type=ParamType.File):告诉前端/CLI 该参数以文件形式提供,框架读取文件内容后把其(Base64 文本)写入 base64String 字段,再进入与 Base64 版一致的解码流程。字段类型仍是 String,说明约定上传的是 Base64 文本文件而非裸二进制。
  • invoke 同样调用 chain.doCreate(context),直接返回解码字节,符合 END 语义。
  • 产物类型为 byte[],消费方须是接受原始字节的 UserCustomPayload

参数(@Param)

字段 名称 说明 默认 可选值
base64String Base64字符串 ParamType.File:以上传文件形式提供 Base64 文本,框架读取后 Base64 解码为最终 byte[] 负载 一个包含 Base64 文本的文件

适用版本与原理要点

  • 与目标环境版本无关,属生成端「离线数据封装」构件。
  • 相对 ByteArrayFromBase64 的价值在于投递方式:大体积 payload 通过上传文件比粘贴文本框更方便、更不易出错(避免文本框长度/换行问题)。解码逻辑(Base64.decodeBase64,宽松容错)与之一致。

所属预设链

自由构件,未直接出现在 51 条预设链中。面向 UserCustomPayload 的自定义数据生成场景。

关联

  • 消费方 Payload:UserCustomPayloadCustomBytePayload → HTTP Server / TCP Server)。
  • 同族(同产 byte[] 数据源):ByteArrayFromBase64(文本框输入的等价实现)、ByteArrayFromHex(Hex 编码)。
  • 字符串版本:CustomString