java反序列化漏洞挖掘
1.漏洞触发场景
在java编写的web应用与web服务器间java通常会发送大量的序列化对象例如以下场景:
1)HTTP请求中的参数,cookies以及Parameters。
2)RMI协议,被广泛使用的RMI协议完全基于序列化
3)JMX 同样用于处理序列化对象
4)自定义协议 用来接收与发送原始的java对象
2. 漏洞挖掘
(1)确定反序列化输入点
首先应找出readObject方法调用,在找到之后进行下一步的注入操作。一般可以通过以下方法进行查找:
1)源码审计:寻找可以利用的“靶点”,即确定调用反序列化函数readObject的调用地点。
2)对该应用进行网络行为抓包,寻找序列化数据,如wireshark,tcpdump等
注: java序列化的数据一般会以标记(ac ed 00 05)开头,base64编码后的特征为rO0AB。
(2)再考察应用的Class Path中是否包含Apache Commons Collections库
(3)生成反序列化的payload
(4)提交我们的payload数据
相关工具
ysoserial是一个用我们刚才的思路生成序列化payload数据的工具。当中针对Apache Commons Collections 3的payload也是基于TransformedMap和InvokerTransformer来构造的,然而在触发时,并没有采用上文介绍的AnnotationInvocationHandler,而是使用了java.lang.reflect.Proxy中的相关代码来实现触发。此处不再做深入分析,有兴趣的读者可以参考ysoserial的源码。
获取方法
去github上下载jar发行版:https://github.com/frohoff/ysoserial/releases
wget https://github.com/frohoff/ysoserial/releases/download/v0.0.2/ysoserial-0.0.2-all.jar
或者自行编译:
git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -DskipTests
相关Tool链接
https://github.com/frohoff/ysoserial
https://github.com/CaledoniaProject/jenkins-cli-exploit
https://github.com/foxglovesec/JavaUnserializeExploits
ysoserial
去github上下载jar发行版:https://github.com/frohoff/ysoserial/releases
或者自行编译:
git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -DskipTests
没有mvn的话需要先安装:sudo apt-get install maven
实际漏洞环境测试
JBOSS
JBoss是一个管理和运行EJB项目的容器和服务器
Enterprise JavaBean (EJB)规范定义了开发和部署基于事务性、分布式对象应用程序的服务器端软件组件的体系结构。
企业组织可以构建它们自己的组件,或从第三方供应商购买组件。
这些服务器端组件称作 Enterprise Bean,它们是 Enterprise JavaBean 容器中驻留的分布式对象,为分布在网络中的客户机提供远程服务。