在Shiro反序列化漏洞修复过程中,如果只升级Shiro版本而不重新生成密钥,AES加密的默认密钥会被硬编码在代码中,仍然存在反序列化的风险。01.漏洞案例本案例引用的shiro版本为最新的1.8.0。尝试访问系统登录,抓包获取参数特征,包括xxx_rememberMe=deleteMe字段。注意:Shiro1.4.2之后,Shiro的加密模式由AES-CBC改为AES-GCM。在Shiro高版本下利用该漏洞,需要考虑改变加密方式。另外,这里的cookie传递的参数是custom的,不是常见的rememberMe,这也是需要注意的地方。02.Exploitation为了减少手动构建和生成反序列化数据的繁琐,这里使用了一个Shiro反序列化利用工具,用python编写,作者增加了对AES-GCM加密方式的漏洞利用,可以轻松执行修改及参数构建,Github项目地址:https://github.com/Ares-X/shiro-exploit.git首先我们需要修改python脚本参数,将rememberMe替换为xxx_remeberme,这样参数就可以正常传递了.使用脚本爆破Shiro密钥:pythonshiro-exploit.pycheck-uhttp://10.xxx.xxx.72/shiro-cas.shtml成功获取Shiro密钥。发送echoPayload,获取命令执行结果。pythonshiro-exploit.pyecho-gCommonsBeanutils2-v2-k3AvVhmFLUs0KTA3Kprsdag==-cwhoami-uhttp://10.xxx.xxx.72/shiro-cas.shtml修改python脚本设置代理,在请求中使用代理代理,添加代理={'http':'http://'+'127.0.0.1:8888'}。这样就可以在BurpSuite中引入流量,抓取HTTP包,手动查看回显。以上就是Shiro高版本下defaultkey的利用过程。所以,修复Shiro默认密钥漏洞,除了将shiro升级到最新版本外,还必须注意生成新密钥进行替换。记录一个有趣的事情,一个内部系统确认Shiro版本和key都被替换了,但是后来检测到有漏洞,有点怀疑人生。我发现有两台服务器负载,其中一台修好了,另一台旧服务器被遗忘了。当我重新测试时,它处于修复状态。别人扫了一眼,漏洞依旧存在,泪流满面。
