简介
之前没有学习过Java,所以不太了解Java相关漏洞,因此打算通过ysoserial这个工具学习一下,ysoserial集合了各种Java反序列化payload,上手也比较容易。
github地址:https://github.com/frohoff/ysoserial
Ysoserial环境配置
git clone到本地之后通过IDEA打开。因为ysoserial项目是通过Maven搭建的,因此相关依赖也通过Maven下载配置。
依赖配置完成之后,运行项目的主函数,地址在
ysoserial/src/main/java/ysoserial/GeneratePayload.main()

我们也可以通过IDEA给ysoserial添加参数,例如通过CommonsCollections1执行弹计算器的命令。

执行GeneratePayload.java如下图所示,这样我们就得到了序列化后的字符串。

测试的时候我们可以将这段payload发送出去,但是由于是序列化的文件,因此我们需要将序列化后的字符串保存到一个二进制文件中。
我们知道,在序列化的时候,程序会执行writeObject()方法,因此我们可以在writeObject()之后将数据保存。因此可以定位到如下这段代码

在Serializer.serialize()中执行了writeObject()方法

因此我们在writeObject()方法后,写入保存序列化文件的代码
1 | try { |

之后再次运行GeneratePayload.java,则会在指定的路径下生成payload.ser文件

WebServer配置
版本说明
1 | tomcat:8.5.73 |
Web.xml配置
1 | <servlet> |
相关包的引入
在WEB-INF/lib下导入CommonsCollections3.1.jar
Tomcat配置

处理请求
对POST请求的数据执行反序列化操作,处理代码如下
1 | package demotest; |
启动服务


CC1 Payload测试
使用curl命令向服务器发送post请求,将前面生成的payload.ser发送到服务器
1 | curl http://localhost:8080/demotest --data-binary @/Users/caoyifan/payload.ser |
1 | --data-binary <data> |
成功执行弹计算器的命令
