文章目录
序列化和反序列化的概念:
- 序列化:把java对象转换成字节流的过程;
- 反序列化:把字节流恢复为java对象的过程。
对象的序列化主要有两种用途:
- 把对象的字节流永久的保存在硬盘上,通常存放在一个文件中(持久化对象);
- 在网络上传送对象的字节流(网络传输对象)。
序列化数据:
- 功能特性
反序列化操作一般应用在导入模板文件、网络通信、数据传输、日志格式化存储或DB存储等业务场景,因此审计中重点关注这些功能板块。 - 数据特性
一般数据以rO0AB
开头,基本上可以确定这串就是JAVA反序列化base64加密的数据;如果aced
(16进制)开头,那么它就是一段java序列化的16进制数据。 - 序列化可能出现
http参数、cookie、session、存储方式可能是base64(rO0
),压缩后的base64(H4s
),MLL等;
Serverts http、Sockets、Session管理器,包含的协议包括:JMX、RMI、JMS、JND1等
发现
黑盒分析:数据库出现地——观察数据特性
白盒分析:组件安全&函数搜索&功能模块
序列化函数API:
- JAVA:
serializable
、Extemailzable
、fastjson
、jackson
、gson
、ObjectInputStream.read
、ObjectObjectInputStream.readUnshared
等; - PHP:
serialize()
、unserialize()
- Python:
pickle
生成java反序列化payload工具-ysoserial
使用ysoserial
时,若要根据某个外部包生成payload,可以将该包复制到ysoserial
目录下,确保paylaod的生成更加可靠。
ysoserial
最终生成的payload是aced
(16进制)的字节流,若需要编码应该进一步进行编码。
swagger
接口:swagger-ui.html
JAVA反序列化解密工具:SerializationDumper
java特定组件:shiro
、jboos
网鼎杯朱雀组2020 Think java
网鼎杯朱雀组2020 Think java
查看源代码发现swagger-ui
api接口,url地址后面加上./swagger-ui.htm
,结果如下图: