Shiro⾼版本默认密钥的漏洞利⽤
在Shiro反序列化漏洞修复的过程中,如果仅进⾏Shiro的版本升级,⽽没有重新⽣成密钥,那么AES加密的默认密钥扔硬编码在代码⾥,仍然会存在反序列化风险。
01、漏洞案例
本案例引⽤的shiro版本已是⽬前最新的1.8.0。尝试访问系统进⾏登录,抓包获取参数特征,包含xxx_rememberMe=deleteMe字段。
注意:在Shiro1.4.2版本后,Shiro的加密模式由AES-CBC更换为 AES-GCM,Shiro⾼版本下的漏洞利⽤,就需要考虑加密模式变化的情况。另外,这⾥cookie传递的参数是⾃定义的,⽽不是常见的rememberMe,这也是需要注意的地⽅。
02、漏洞利⽤
为了减少⼿⼯构造⽣成反序列化数据的繁琐,这⾥,我们使⽤⼀个Shiro反序列化利⽤⼯具,python编写,⽽且作者增加了AES-GCM加密⽅式的漏洞利⽤⽀持,可以很⽅便地进⾏修改和参数构建,
Github项⽬地址:
spring framework rce漏洞复现
github/Ares-X/shiro-exploit.git
⾸先,我们需要修改python脚本参数,将rememberMe 替换为 xxx_remeberme,使参数能够正常传递。
利⽤脚本来爆破Shiro key:
python shiro-exploit.py check -u 72/shiro-cas.shtml
成功获取到了Shiro key。
发送回显Payload,获取命令执⾏结果。
python shiro-exploit.py echo -g CommonsBeanutils2 -v 2 -k 3AvVhmFLUs0KTA3Kprsdag== -c whoami -u 72/shiro-cas.shtml 修改python脚本设置代理,在requests使⽤代理proxies,增加proxies={'http': '' + '127.0.0.1:8888'}。
这样就可以将流量引⼊BurpSuite,抓取HTTP数据包,⼿动利⽤查看回显。
以上便是Shiro⾼版本下默认密钥的漏洞利⽤过程,So,修复Shiro默认密钥漏洞,除了升级shiro⾄最新版本,⼀定要注意⽣成新的密钥替换。
PS:记录个有意思的事情,之前有个内部系统确认过Shiro版本和密钥都有更换,但后来还是被检测到存在漏洞,⼀度有点怀疑⼈⽣。开发⼀起排查了⼀下,原来有两台服务器负载,其中⼀台是修复了,还有⼀台旧服务器被遗忘了。我复测的时候是修复的状态,别⼈⼀扫描,漏洞还存在,直接泪崩。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。