shiro漏洞复现及其攻击流量分析
前言
最近面试时经常被问到,每次说的都不太完美,现在再来复现一边。
shiro介绍
Apache Shiro是一个开源安全框架,提供身份验证、授权、密码学和会话管理。
CVE-2016-4437
利用vulhub搭建的靶场。
在Apache Shiro <= 1.2.4版本中存在反序列化漏洞。
该漏洞成因在于,Shiro的“记住我”功能是设置cookie中的rememberMe值来实现。当我们给rememberMe赋值时,它会经过一下过程。
- 检索cookie中RememberMe的值
- Base64解码
- 使用AES解密
- 反序列化
当我们知道了AES加解密时的密钥(该密钥是写死在代码中)时,我们便可以去修改rememberMe的值,改造其readObject()方法,让其在反序列化时执行任意操作。
服务器接收数据后的流程为
- 读取cookie中rememberMe值
- base64解码
- AES解密
- 反序列化
使用工具来执行命令。
利用wireshark来抓取流量。
回显时会有一串base64加密的值,代表着命令执行成功。
总结:CVE-2016-4437的攻击流量特征有
- 请求包Cookie的rememberMe中会存在AES+base64加密的一串java反序列化代码。
- 返回包中存在base64加密数据,该数据可作为攻击成功的判定条件。
如果攻击者利用其反弹shell,还可以通过对rememberMe中的数据解码来获得反弹的ip地址。
shrio550和721的区别
- 主要区别在于Shiro550使用已知默认密码,只要有足够的密码,不需要Remember Cookie的
- Shiro721的ase加密的key为系统随机生成,需要利用登录后的rememberMe去爆破正确的key值。利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,再去构造反序列化攻击。
CVE-2020-1957
在Spring web项目中,请求URI/resource/menus和/resource/menus/都可以访问到服务器的资源。
但在Shiro中的URL路径表达式pathPattern可以正确匹配/resource/menus,但不能正确匹配/resource/menus/,导致过滤链无法正确匹配,从而绕Shiro的防护机制
直接访问/xxx/…;/admin/可以绕过权限校验访问到管理页面
该漏洞的流量分析只能去看请求头加ip的访问频繁次数来判断是否为测试。