Exploit/CVE-2010-0738

news2024/11/25 23:17:32

打开JBoss的潘多拉魔盒:JBoss高危漏洞分析

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

前言

JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发,这使得JBoss广为流行。

0x01 JBoss优点

JBoss有许多优点。

其一,将具有革命性的JMX微内核服务作为其总线结构;

其二,本身就是面向服务架构(Service-Oriented Architecture,SOA);

其三,具有统一的类装载器,从而能够实现应用的热部署和热卸载能力。

因此,高度模块化的和松耦合。JBoss应用服务器是健壮的、高质量的,而且还具有良好的性能。

JBoss AS作为Redhat公司的商业产品JBoss Enterprise Application Platform的上游基础,为了避免用户混淆,该公司在去年10月份就为JBoss AS拟定一个新名字——WildFly。

由此看来,国内使用JBoss服务的用户很广泛,因此防范JBoss漏洞就显得尤为重要了。一旦JBoss的潘多拉魔盒被打开,必将在当今网络中掀起腥风血雨。

0x02 高危漏洞介绍

近几年JBoss爆发的漏洞数量与其他著名的中间件(Weblogic,Jenkins,WebSphere等)相比,数量相对较少。然而,由于最近几年Java反序列化漏洞的肆虐,JBoss也深受其害,相继爆发了三个著名的高危漏洞。

下面介绍一下JBoss“潘多拉魔盒”中的高危漏洞。

JBoss高危漏洞主要涉及到两种。

第一种是利用未授权访问进入JBoss后台进行文件上传的漏洞,例如:CVE-2007-1036,CVE-2010-0738,CVE-2005-5750以及JBoss jmx-consoleHtmlAdaptor addURL() File Upload Vulnerability。

另一种是利用Java反序列化进行远程代码执行的漏洞,例如:CVE-2015-7501,CVE-2017-7504,CVE-2017-12149,CVE-2013-4810。

除此之外,还要额外介绍一下JBoss seam2的模板注入CVE-2010-1871漏洞。

Java反序列化RCE漏洞

关于Java反序列化漏洞的利用思路此前已经介绍过,详情请看缝缝补补的WebLogic:绕过的艺术 - FreeBuf网络安全行业门户。

1. CVE-2015-7501漏洞

此漏洞主要是由于JBoss中invoker/JMXInvokerServlet路径对外开放,由于JBoss的jmx组件支持Java反序列化,并且在反序列化过程中没有加入有效的安全检测机制,导致攻击者可以传入精心构造好的恶意序列化数据,在jmx对其进行反序列化处理时,导致传入的携带恶意代码的序列化数据执行,造成反序列化漏洞,下面是传入的序列化结构。

从图中我们可以看到,此漏洞的payload和weblogic Java反序列化CVE-2015-4852原理相同,都是利用了Apache Commons Collections的基础库进行Java反序列化漏洞的利用。

CVE-2015-7501 POC

首先我们进入到/invoker/JMXInvokerServlet路径下,post传入我们构造好的payload,下面的序列化POC需要将16进制解码。

在上面的POC中,cmd是我们想要执行的代码,这里大家注意一下,binascii.b2a_hex(cmd)前面的两位(标红的部分)是代表cmd转换为16进制的长度。所以需要根据我们具体传入的代码而进行调整。

这个漏洞的修补方法很简单,因为ysoserial工具生成的payload都依赖于InvokerTransformer类。如果用户在正常业务中不使用此类,可以将此类移除,方法为使用Winzip打开jar文件,在org/apache/commons/collections/functors/InvokerTransformer.class删除该文件。

2. CVE-2017-7504漏洞

CVE-2017-7504漏洞与CVE-2015-7501的漏洞如出一辙,只是利用的路径稍微出现了变化,CVE-2017-7504出现在/jbossmq-httpil/HTTPServerILServlet路径下,一般出现如图所示的界面,绝大多数存在此漏洞。

漏洞的利用方式也和CVE-2105-7501相同,只需要在存在漏洞的路径下post传入我们构造的payload,即可对存在漏洞的服务器进行远程代码攻击。Payload使用上面提到的CVE-2015-7501的POC即可。

3. CVE-2017-12149漏洞

此漏洞主要是由于jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEB-INF\classes\org\jboss\invocation\http\servlet目录下的ReadOnlyAccessFilter.class文件中的doFilter方法,再将序列化传入ois中,并没有进行过滤便调用了readObject()进行反序列化,导致传入的携带恶意代码的序列化数据执行,造成了反序列化的漏洞,下面粘出doFilter方法。

看到代码中的MarshalledInvocation,也许熟悉weblogic Java反序列化漏洞的同学可能会想到CVE-2016-3510漏洞。没错,这个漏洞也是利用了MarshalledInvocation类进行的Java反序列化攻击。首先我们进入到/invoker/readonly路径下,post传入我们构造好的payload,下面的序列化POC需要将16进制解码。

CVE-2017-12149的POC(序列化)

这里我们在cmd_hex所在位置,必须要插入类似于

bash -c {echo,bmMgLW52IDE5Mi4xNjguMTYuMSA0MDQw}|{base64,-d}|{bash,-i}

这种形式的命令才可以达到攻击效果,这是因为使用了“Java.lang.Runtime.exec(String)”语句而导致的一些限制。首先是不支持shell操作符,如输出重定向以及管道。其次是传递给payload命令的参数中不能包含空格。同样前面标红的那两位(b1)也需要和我们插入的指令长度相符,这是Java序列化中的结构规定。

如果进入到漏洞所在路径看见如下图的界面,很可能存在CVE-2017-12149漏洞。

4. CVE-2013-4810漏洞

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

首先我们进入到/invoker/JMXInvokerServlet,/invoker/EJBInvokerServlet路径下,post传入我们构造好的payload,并在头部传入。

下面的序列化POC需要将16进制解码。

CVE-2013-4810的POC(序列化)

POC的序列化结构如下图:

图中红框位置就是我们执行上传文件功能(jboss.admin中的DeploymentFileRepository)的代码和上传文件的内容。

另外如果是检测web-console/Invoker路径下的漏洞,则传入http头部如下:

post传入的payload如下:

POC的序列化结构如下图:

图中红框位置就是我们上传文件内容。

JBoss后台文件上传的漏洞

1.CVE-2007-1036漏洞

此漏洞主要是由于JBoss中/jmx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导致攻击者可以进入到jmx控制台,并在其中执行任何功能。该漏洞利用的是后台中jboss.admin -> DeploymentFileRepository -> store()方法,通过向四个参数传入信息,达到上传shell的目的,其中arg0传入的是部署的war包名字,arg1传入的是上传的文件的文件名,arg2传入的是上传文件的文件格式,arg3传入的是上传文件中的内容。通过控制这四个参数即可上传shell,控制整台服务器。但是通过实验发现,arg1和arg2可以进行文件的拼接,例如arg1=she,arg2=ll.jsp。这个时候服务器还是会进行拼接,将shell.jsp传入到指定路径下。后面的CVE-2010-0738和CVE-2005-5750漏洞也存在这一特性。

CVE-2007-1036 POC

其中war_name是部署war包的名称,filename是我们想要上传的文件名。漏洞利用过程就是将POC以GET或POST方式在/jmx-console/HtmlAdaptor路径下进行传入即可。

下图是利用此payload进行shell上传:

这个是存在漏洞的后台路径:

图中的store()函数便是文件上传使用的方法,通过构造内部的4的参数,将我们构造好的文件传到任何我们指定的位置。

2. CVE-2010-0738漏洞

此漏洞利用原理和CVE-2007-1036漏洞相同,唯一的区别是CVE-2010-0738漏洞利用了HTTP中HEAD请求方法,绕过了对GET和POST请求的限制,成功地再次利用jboss.admin -> DeploymentFileRepository -> store()方法上传文件。

CVE-2010-0738 POC

其中war_name是部署war包的名称,filename是我们想要上传的文件名。漏洞利用过程就是将POC以HEAD方式在/jmx-console/HtmlAdaptor路径下进行传入即可。

下图是成功上传shell的截图。

3. CVE-2005-5750漏洞

此漏洞利用原理和CVE-2007-1036漏洞相同,唯一的区别是CVE-2006-5750漏洞利用methodIndex进行store()方法的调用。其中methodIndex是通过方法的编号进行调用。

CVE-2005-5750 POC

其中war_name是部署war包的名称,filename是我们想要上传的文件名。在/jmx-console/HtmlAdaptor路径下,使用HEAD方法传入上面构造好的payload,即可对此漏洞进行利用。

下图是成功上传shell的截图。

4. JBoss jmx-consoleHtmlAdaptor addURL() 文件上传漏洞

此漏洞是由于JBoss中/jmx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导致攻击者可以进入到jmx控制台,并在其中执行任何功能。该漏洞利用的是后台jboss.deployment -> DeploymentScanner -> Java.net.URL类型 addURL() 
方法,通过向一个参数传入url进行访问,在要访问的url中构造带有shell的war包,当服务器访问时便会上传shell。但是,上传shell的文件只是一个映射文件,当url一旦无法访问或者内部资源丢失,则服务器上的文件也会相应消失。

JBoss jmx-consoleHtmlAdaptor addURL() File Upload Vulnerability POC

其中arg0传入的是我们可以控制服务器访问的url。在/jmx-console/HtmlAdaptor路径下GET传入我们构造好的payload,即可对此漏洞进行漏洞利用。

下图是漏洞利用所选择的函数:

防御以上漏洞,其实只需要将JBoss后台添加权限,控制访问者对敏感路径访问即可。

JBoss seam2模板注入

在介绍漏洞之前,首先介绍一下Java反射机制。

很多POC都是利用Java的反射机制来调用需要的方法进行远程代码执行。在Java中,一切皆为对象,包括Class对象。Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。

在下面的漏洞中,我们可以利用一些函数去反射需要的类,以及类的方法。例如,利用getClass()函数获取类,并利用getMethod()获取我们想要反射的方法。在CVE-2010-1871,就是通过反射出Java.lang.Runtime.getRuntime().exec()方法,进行远程代码执行。

1.CVE-2010-1871漏洞

此漏洞是通过seam组件中插入#{payload}进行模板注入,我们可以在/admin-console/login.seam?actionOutcome=/success.xhtml?user%3d%23{}的#{}中插入我们要执行的方法,我们可以通过Java反射机制来获取到Java.lang.Runtime.getRuntime().exec()方法,从而可以传入任何想要执行的指令。

CVE-2010-1871 POC

其中cmd代表传入的远程命令。在/admin-console/login.seam路径下,POST传入我们构造好的payload,即可对此漏洞利用。

0x03 结语

目前,JBoss未授权访问的漏洞已经得到了很好的修复,一些对外组件都添加了权限访问控制,想继续利用

JBoss的潘多拉魔盒已经开启,每一个JBoss高危漏洞都会给使用JBoss的用户造成巨大的灾难。传言,潘多拉在开启魔盒的瞬间,由于害怕和紧张,在智慧女神雅典娜放在盒子中的“希望”还没有飞出,就关上了盒子,导致了人类饱受疾病与灾难的痛苦。那么作为一个安全研究员,放飞盒子中的“希望”就是我们现在需要努力的方向。及时的在漏洞爆发期间完成对漏洞的分析,并完成对漏洞的预防,防止漏洞攻击在网络环境中肆虐,保护大家的网络环境,这便是安全研究员的职责所在。

目前,JBoss未授权访问的漏洞已经得到了很好的修复,一些管理后台都添加了权限访问控制,想继续通过JBoss后台进行文件上传在现在的JBoss版本已经很少能实现了。目前JBoss的攻击趋势随着2015年FoxGlove Security 安全团队的 @breenmachine 博客的发布而渐渐偏向于Java反序列化攻击。因为这种攻击的特点是,危险等级高,影响范围广,一个Java反序列化漏洞造成的影响是巨大的。所以对于JBoss,我们需要做的防护措施就是,在各个对外开放组件进行输入验证,确保传入的信息中没有对服务器产生危害的内容。

漏洞挖掘者和漏洞防御者之间的博弈从未停止过,而且这种博弈在今后的生活中也将会愈演愈烈,安全研究员时刻准备迎接挑战。

*本文作者:千里目安全实验室,转载请注明来自FreeBuf.COM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盖雅工场联合福达企业资源系統 (DynaSys) 成功举办 SAP SuccessFactors Day 活动

2023年5月31日,由DynaSys主办、盖雅工场协办的SAP SuccessFactors Day活动在香港半岛酒店成功举行。本次活动旨在为在港企业分享员工体验和劳动力管理解决方案,并以行业标杆案例为指引,帮助企业客户在全球市场中更好地制定人力资源管理策略。…

Linux下socket网络编程实战思考

socket网络编程是每个服务端开发人员必会技能,但是目前市面上各种web服务器容器,屏蔽了很多底层实现,导致很多socket通信细节被屏蔽,本文结合在linux下C语言socket通信说明一下网络通信的一些注意点。 目录 1.多进程模型tcp服务…

Windows11安装mysql8.0.32步骤

1、下载mysql安装包 下载地址:https://dev.mysql.com/downloads/mysql/ 2、添加配置文件 mysql安装文件目录下新建一个文件名:my.inimy.ini文件中复制如下内容: [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 ---这里输入你安装…

Linux中的C/C++语言调试工具 GDB

Linux中的C/C语言调试工具 GDB GDB(GNU Debugger)是一个功能强大的调试器,用于调试和分析程序的执行过程。它是GNU项目的一部分,可以在多个操作系统上使用,包括Linux、Unix和Windows。 GDB主要用于调试编译后的可执行…

大模型扎堆「赶考」,语文还是国产AI行,文言文能力超过95%考生

量子位 | 公众号 QbitAI ChatGPT诞生后的第一场全国高考,考生忙,大模型们也很忙。 这不,高考还没结束,AI挑战高考题就成了刷屏热搜话题,各家大模型都被拉出来写起了高考作文,甚至是参与整场考试。 &#…

【MySQL事务】保证数据完整性的利器

1、事务的认识 事务:事务就是将多个SQL给打包在一起,组成一个整体。组成这个整体的各个SQL,要么全部成功,要么全部失败。 举例说明: 情人节到了,滑稽老铁打算给他女朋友小美发给红包,但是他又害…

msvcp140.dll重新安装的解决方法(一键安装方法)

msvcp140.dll电脑文件中的dll文件,即动态链接库文件,若计算机中丢失了某个dll文件,就会导致某些软件和游戏等程序无法正常启动运行,并且导致电脑系统弹窗报错,其安装方法:1、打开浏览器输入“【dll修复程序…

[Diffusion] Speed is all your need

论文简要总结 刚读了下speed is all you need这个论文, https://arxiv.org/pdf/2304.11267.pdf 只是用的SD1.4没有对网络进行改造。 只做了4个改动 1 是对norm采用了groupnorm (GPU shader加速) 2 采用了GELU (GPU shader加速) 3 采用了两种attention优化,是partiti…

一个简单的MCU内存管理模块(附源码)

现在非常多的的MCU性能都还不错,同时用户也会去扩展一些外部RAM,那么如何高效便捷的管理这些内存是一个重要话题。 今天给大家分享一份源码:基于无操作系统的STM32单片机开发,功能强大,可申请到地址空间连续的不同大小…

如何应对公民开发者的挑战?低代码流程自动化助你打造高效系统

如今,企业越来越倾向于采用公民开发作为提升流程自动化和数字化转型的手段。这种方法让非程序员(如客户和员工),有机会为特定任务创建自己的应用程序。它还使公司能够快速调整以适应客户偏好或业务需求。 尽管这种方法有很多好处&…

Prometheus+Grafana普罗米修斯搭建+监控MySQL

PrometheusGrafana普罗米修斯搭建监控MySQL 一,Prometheus 1.什么是Prometheus? ​ Prometheus 是 Cloud Native Computing Foundation 的一个监控系统项目, 集采集、监控、报警等特点于一体。 ​ Prometheus主要受启发于Google的Brogmon监控系统&…

数字化转型浪潮下,汽车零部件企业如何逐鹿突围?

一、汽车行业当下趋势 数据来源:汽车工业协会 1.乘用车及新能源车市场:2023年1-4月,乘用车销量同比增长6.8%,新能源车销量同比增长35.8%。 2.行业趋势:汽车行业生存压力大,4月中国汽车经销商库存系数下降…

中国科学院稀土研究院-PLC采集项目案例

1.项目背景 中国科学院稀土研究院(江西稀土研究院)隶属中国科学院。 作为中国国内唯一专注于稀土科技创新的国立科研机构,中国科学院稀土研究院将面向国家战略和产业发展重大需求,围绕稀土绿色、高效、均衡、高值化利用的核心科学…

【Spring MVC】没有Spring MVC,Spring Boot表现得毫无用处? ? ?走进Spring MVC,学习热部署自动运行程序 ! ! !

前言: 大家好,我是良辰丫,从今天开始,我们就要进入Spring MVC的学习了,前面的文章中我们的很多注解都没有讲解,是不是看的脑瓜嗡嗡的,哈哈,没关系,在我们Spring MVC中我们就要详细讲解那些注解了,请跟随良辰的脚步,gogogo! ! !💌💌💌 &#x…

希望之星、黄昏之星、三只乌鸦……怎么用 DolphinDB 快速计算 K 线?

K 线技术分析是股票投资中很常用的一种分析方法,主要通过历史价格图表中的数据来预测未来市场趋势。一根 K 线包括四个价格:开盘价、收盘价、最高价和最低价,通常简称为 OHLC。K 线按照周期一般可以分为日、周、月、年,以及五分钟…

Selenium自动化落地实践

01、自动化测试流程图 02、主要过程描述 1、自动化测试的切入点 开展自动化测试的时间点很关键,需要在系统已经过多版本的系统测试,达到稳定之后。 2、可行性分析 在进行项目自动化测试之前,第一步就是要确认其可行性,是否可以…

为何唐宋诗词鼎盛,而到了明清变成了小说

我国是一个历史悠久的国家,在漫长的历史长河中,随着朝代的更替,很多事也发生了有趣的变化。 例如唐宋时期盛行的是诗词,而到了明清时代,小说又开始盛行了起来,那么造成这种文风改变的原因是什么呢&#xf…

2023安博会进行时!英码科技1个重磅+4大看点隆重亮相

2023年6月7日,第十六届(2023)中国国际社会公共安全产品博览会(以下简称:安博会)在北京首钢会展中心盛大开幕!本届安博会以“自主创新数智融合”为主题,共设置了7大主题展馆&#xff…

linux开发:Linux下查看端口占用

前段时间有学生问到,怎么查看已经被占用的端口?下面我就统一给大家解释一下。 提到端口,那首先来回顾端口定义,为了区分一台主机接收到的数据包应该转交给哪个任务来进行处理,使用端口号来区别;我们知道TCP…

【活动预告】ACDU 中国行 · 深圳站精彩抢先看

近期活动 在当今数字化时代,数据库是各行各业中最核心的信息管理系统之一。 随着技术的飞速发展,数据库领域也不断涌现出新的前沿技术和创新应用。 数据库运维和开发人员需要紧跟前沿技术,才能保持竞争力,并实现更高效、更智…