目录
- Java中的API实现
- 序列化和反序列化
- 演示案例
- WebGoat_Javaweb靶场反序列化测试
- 2020-网鼎杯-朱雀组-Web-think java真题复现
文章参考:
https://www.cnblogs.com/zhengna/p/15737517.html
https://blog.csdn.net/MCTSOG/article/details/123819548
ysoserial生成攻击的payload,工具地址:
https://github.com/frohoff/ysoserial/releases
Java中的API实现
位置:Java.io.ObjectOutputStream java.io.ObjectlnputStream
序列化:Object0utputStream类 --> writeObject()
注:该方法对参数指定的obj对象进行序列化,把字节序列写到一个目标输出流中按Java的标准约定是给文件一个.ser扩展名
反序列化:0bjectInputStream类 --> readObject()
注: 该方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
序列化和反序列化
序列化 (serialization): 将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其当前状态写入到临时或持久性存储区。
反序列化: 从存储区中读取该数据,并将其还原为对象的过程,称为反序列化。
演示案例
WebGoat_Javaweb靶场反序列化测试
java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;ysoserial-master-30099844c6-1.jar ysoserial.GeneratePayload Hibernatel calc.exe > payload.bin
2020-网鼎杯-朱雀组-Web-think java真题复现
下方的特征可以作为序列化的标志参考:
一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加空的数据。或者如果以aced开头,那么他就是这一段java序列化的16进制。
根据当前windows或linux操作系统来写反弹命令
ipconfig=>序列化->base64=rO0AB格式字符串 最终payload
0x01 注入判断,获取管理员帐号密码:
根据提示附件进行javaweb代码审计,发现可能存在注入漏洞
另外有swagger开发接口,测试注入漏洞及访问接口进行调用测试
数据库名: myapp,列名name,pwd
注入测试:
POST /common/test/sqlDict
dbName=myapp?a=’ union select (select pwd from user)#
SerializationDumper反序列化解密工具
https://github.com/NickstaDB/SerializationDumper/releases/tag/1.12
反序列化漏洞是java当中经常出现的漏洞,相比其它漏洞出现的频率会高一些,原因就是他的语言特性决定的,它不像php这些语言,我们看到不仅是在分析的时候,还是我们下去做开发看源代码的时候,它的php储存方式、运行原理各个方面都不一样,所以造成它的漏洞类型产生的方面也不一样