WEB漏洞-反序列化之PHP&JAVA全解(下)
- 一、Java中API实现
- 二、序列化理解
- 三、案例演示
- 3.1、本地
- 3.2、Java 反序列化及命令执行代码测试
- 3.3、WebGoat_Javaweb 靶场反序列化测试
- 3.4、2020-网鼎杯-朱雀组-Web-think_java 真题复现
- 四、涉及资源
一、Java中API实现
二、序列化理解
- 序列化(Serialization):将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。
- 反序列化:从存储区中读取该数据,并将其还原为对象的过程,成为反序列化。
三、案例演示
3.1、本地
1、主函数:
- 调用序列化方法
- 将反序列化的的结果返回给person变量
- 输出person变量
2、序列化方法:
- 创建一个person的对象
- 创建一个文件输出流(指向person.txt的文件),命名为oos
- 将person对象的写入到文件输出流中
3、反序列化方法:
- 创建一个文件输入流(指向person.txt的文件),命名为ois
- 从到文件输入流中读取person对象的信息
- 返回person对象(直接显示会乱码,一般用base64加密输出)
4、运行结果:
3.2、Java 反序列化及命令执行代码测试
1、源代码分析:
- 使用exec方法执行字符串命令并返回一个process对象
- 获取命令(process)的输入流给reader对象
- 读取输入流的内容,打印输出(反序列化)
2、运行结果:
3.3、WebGoat_Javaweb 靶场反序列化测试
1、启动靶场:
2、进入靶场:
3、理论分析:
- 输入框内接受序列化的对象,并且将它反序列化(更改序列化的对象,将页面延迟5秒)
4、源代码分析:
- 使用IDEA打开jar文件(https://www.cnblogs.com/liaowenhui/p/17353156.html)
- 可以使用解压软件打开,再找到对应的jar文件解压出来后再使用IDEA打开。
-
接受参数,base64解密,反序列化读取,返回读取的对象
-
获取输出流,赋值给一个对象,然后写入输出流(序列化),返回base64编码
-
这里存在命令执行(在调用读取输入流的时候,也就是读取反序列化的数据,并且把它当做命令执行)
5、漏洞分析:这里会将反序列化的数据进行读取,再进行命令执行。
rO0ABXQAVklmIHlvdSBkZXNlcmlhbGl6ZSBtZSBkb3duLCBJIHNoYWxsIGJlY29tZSBtb3JlIHBvd2VyZnVsIHRoYW4geW91IGNhbiBwb3NzaWJseSBpbWFnaW5l
是序列化后加密形成- 序列化标志参考(可以确定是base64加密),因此要攻击,要如何构造payload?考虑对方的回显?==》反弹shell(解决回显)
- 思路:要执行ipconfig =》序列化 =》base64加密 =》rO0AB格式字符串 =》payload
#补充知识点
下方的特征可以作为序列化的标志参考:
一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。
或者如果以aced开头,那么他就是这一段java序列化的16进制。|
6、 使用工具将命令构造成序列化语句
- 命令分析
- 生成组件,打开本地的计算器,保存到payload.bin文件中
- 为什么要保存?还要进行base64加密
java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;
ysoserial-master-30099844c6-1.jar
ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin
- 如何判断组件
- 看工具的组建在源代码内是否出现过
- 这里源代码出现了组件
java -jar ysoserial-all.jar
- 生成payload:
java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;ysoserial-master-8eb5cbfbf6-1.jar ysoserial.GeneratePayload Hibernate1 calc.exe > payload.bin
-
生成了payload,利用Python程序base64加密
-
将加密后文本的代码复制到反序列化窗口,发现本地的计算器被打开。
3.4、2020-网鼎杯-朱雀组-Web-think_java 真题复现
https://blog.csdn.net/qq_36585338/article/details/128121566
四、涉及资源
- https://github.com/frohoff/ysoserial/releases
- https://github.com/WebGoat/WebGoat/releases
- https://github.com/NickstaDB/SerializationDumper/releases/tag/1.12