Shiro反序列化漏洞的洞利利用工具,最早能追溯到2016年。用工那时候ysoserial刚火起来,洞利有人把Shiro的用工Cookie解密逻辑单独抽出来,拼成一个能打AES密钥的洞利脚本。真正让这类工具进入大众视野的用工,是洞利2020年——Shiro-550(CVE-2020-1957之前那个默认硬编码密钥的问题)被大规模扫描,网上冒出一堆一键getshell的用工Python脚本。我手头还留着当时某个群里传的洞利shiro_tool.py,三百来行,用工支持cb1、洞利commons-collections几条链,用工跑起来满屏红色报错,洞利但真能弹shell。用工
这类工具的洞利核心逻辑其实不复杂。Shiro的rememberMe字段用AES加密,密钥硬编码在代码里。工具干的事就是三步:爆破密钥、构造恶意序列化数据、把加密后的Cookie塞进请求头。关键在第二步——你得有可用的gadget链。早期工具只带CommonsCollections,后来慢慢加了CommonsBeanutils、JRMP、Spring等。我见过一个工具,把十几条链全塞进一个payloads目录,每个链一个.ser文件,用的时候根据目标环境选。挺粗暴,但管用。
实际用起来,坑比想象的多。目标JDK版本、依赖库版本、甚至Tomcat的类加载顺序都会影响链的可用性。有次我拿一个工具打某台机器,cb1链死活不成功,换成cc6就通了。后来发现目标用了Spring Boot的LaunchedURLClassLoader,类加载器层级不一样。工具本身不会告诉你这些,得自己调。所以真正顺手的人,往往会在工具里留个--debug开关,把序列化流和异常堆栈打出来看。
工具生态现在分两派。一派是ShiroExploit这种图形化工具,界面做得跟Burp插件似的,填URL、选链、点Exploit,适合快速验证。另一派是命令行脚本,比如shiro_attack,纯Python,支持批量扫描和自定义key。我偏好后者,因为能塞进CI流程里。不过图形化工具有个好处:它内置了key字典,从kPH+bIxk5D2deZiIxcaaaA==到各种变种,覆盖了大部分默认配置。手动跑脚本还得自己维护字典。
说个真实案例。去年帮朋友看一个站,Shiro的rememberMe开着,但key不是默认的。工具跑了一遍字典没结果。后来翻JS源码,发现前端有个rememberMe的加密逻辑,密钥写在app.js里——base64编码后跟Shiro的默认key只差两个字符。改一下字典,秒出。这说明工具再强,也得靠信息收集。光靠字典爆破,遇到改过key的站就歇菜。
工具本身不违法,但用的人得清楚边界。我见过有人拿扫描器全网段跑Shiro,结果触发了WAF的反序列化攻击规则,IP直接被封。更麻烦的是,有些工具会往目标写文件或者反弹shell,这就从检测变成入侵了。所以我自己用的时候,只跑dnslog验证,不弹shell。确认漏洞存在就停手,剩下的交给甲方走流程。
最后提一嘴防御。Shiro的官方修复方案是升级到1.7.1以上,但很多老系统动不了。临时缓解可以加WAF规则,拦截rememberMe字段里base64解码后以rO0开头的请求。或者干脆关掉rememberMe功能——如果业务不需要的话。工具再锋利,也怕目标把门焊死。