Java安全之JBoss反序列化漏洞分析
0x00 前言
看到网上的Jboss分析文章较少,从而激发起了兴趣。前段时间一直沉迷于工具开发这块,所以打算将jboss系列反序列化漏洞进行分析并打造成GUI的工具集。当然反序列化回显这块也是需要解决的一大问题之一,所以下面会出一系列文章对该漏洞的分析到工具的构造进行一个记录。
0x01 环境搭建
首先拿
CVE-2017-12149
漏洞为例,进行调试分析。
CVE-2017-12149漏洞影响版本: 5.X 及 6.X
漏洞描述
该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。
调试环境搭建
远程调试
版本要求:JBoss-EAP-7.0及其以上版本
在Jboss的bin目录下有个standalone.bat文件,以文本的形式打开此文件,在Jboss的bin目录下有个standalone.bat文件。
set DEBUG_MODE=falseset DEBUG_PORT_VAR=8787
false改成true就可以改成调试模式了,8787是调试模式的端口。重启Jboss
而5.x、6.x:
jboss-6.1.0.Final/bin/run.conf 中
#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
的
#
即可。
为了方便这里使用
进去
/vulhub-master/jboss/CVE-2017-12149
修改
docker-compose.yml
文件添加8787端口
version: \'2\'services:jboss:image: vulhub/jboss:as-6.1.0ports:- "9990:9990"- "8080:8080"- "8787:8787"
jboss-6.1.0.Final/bin/run.conf 中
#JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"
的
#
重新启动容器即可
docker restart 808d3fffae0c
此处有坑点,个别漏洞调用链查看不了可能是确实代码,需要添加资源到idea中,而本次的这个核心漏洞组件
httpha-invoker.sar
,打包成jar包后无法进行断点,需要扔到jd-gui中进行反编译打包后添加到idea资源中。
0x02 漏洞分析
查看调用链定位漏洞位置
直接就接受值进行反序列化了,但并不是在一个位置存在任意数据反序列化
以上是
org.jboss.invocation.http.servlet#ReadOnlyAccessFilter
类的反序列化位置
而
org.jboss.invocation.http.servlet#InvokerServlet
同样存在任意反序列化点
查看
web.xml
发现
/invoker/JMXInvokerServlet/*
,
/invoker/readonly
,
/JMXInvokerServlet/
等地方都可触发。
关于CVE-2017-7504类似漏洞位置在
/jbossmq-httpil/HTTPServerILServlet
,在此不做分析。
0x03 结尾
文章略显水分,因为JBoss这些漏洞接受过来就直接进行反序列化了,而且还是接受原生的数据并未进行加密解密处理。分析起来比较简单,但是反序列化回显的构造又成了一大问题,下篇文章再对反序列化回显进行探究。