简介
之前没有学习过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> |
成功执行弹计算器的命令