ShiroExp:从 Shiro 漏洞检测到内存马注入的完整实战路线
2026/8/23 12:41:11 网站建设 项目流程

ShiroExp:从 Shiro 漏洞检测到内存马注入的完整实战路线

【免费下载链接】ShiroExpshiro综合利用工具项目地址: https://gitcode.com/gh_mirrors/sh/ShiroExp

ShiroExp 是一款图形化的 Shiro 漏洞检测与反序列化利用工具,把 rememberMe 特征识别、AES 密钥爆破、多条利用链命令执行和内存马注入整合在同一个界面里,适合渗透测试与安全自查场景。

它解决什么问题

测试一个 Java 站点时,如果响应里出现rememberMe=deleteMe这类 cookie,通常意味着后端在用 Apache Shiro 做认证。接下来的验证过程比较繁琐:先确认 Shiro 版本对应的加密模式,再用候选密钥逐个 AES 加密SimplePrincipalCollection对象发过去,观察 cookie 回显判断哪个密钥有效;一旦站点把 cookie 名改掉了、或者目标根本没有回显,手工流程就更难推进。

ShiroExp 把这条流程固化成几个按钮:填入目标 URL 和 cookie 特征,跑内置密钥字典完成爆破;拿到密钥后直接选利用链下发命令,或在确认命令可执行后注入内存马。对使用 AES-GCM 算法的较新版本 Shiro,勾选 GCM 选项即可继续测试。

上图是工具主界面,左侧输入目标地址与 rememberMe 特征,右侧完成密钥爆破、利用链选择和 payload 生成。

ShiroExp 部署与启动

整个过程分四步,按顺序执行即可跑通。

第一步,准备环境。安装 JDK 8 及以上版本和 Maven。项目按 Java 8 编译,界面依赖 JavaFX 11,JDK 8 搭配独立的 JavaFX 运行环境或 OpenJDK 自带版本均可。

第二步,克隆并构建。

git clone https://gitcode.com/gh_mirrors/sh/ShiroExp cd ShiroExp mvn clean package

第三步,启动程序。构建完成后在target目录生成带全部依赖的 fat jar:

java -jar target/ShiroExp-1.3-all.jar

第四步,完成首次检测。打开界面后先手工确认目标是 Shiro 站点,再填入目标 URL、选择 GET/POST 并填写 rememberMe 特征(被改名的站点要改成实际值),然后发起密钥爆破。日志区会实时打印每个密钥的测试结果。

核心能力拆解

密钥爆破:回显与 DNSLOG 两种模式

工具内置主流密钥字典,爆破前先读取程序当前目录下的shirokeys.txt,没有该文件时才回落到包内自带的ShiroKeys.txt,因此自定义字典只需建一个纯文本文件、每行一个密钥即可。检测模式上有两种路径:

  • SimplePrincipalCollection 检测:加密后发送并比对回显,适用于大多数有响应的站点,是默认选择。
  • DNSLOG 检测:借助 dnslog.cn 的解析记录判断,专治 rememberMe 无回显的站点。

加密模式可选 AES-CBC 与 AES-GCM,后者对应 Shiro 1.4 之后切换的算法,遇到 CBC 全部失败的 1.4+ 站点可以切换重试。

上图展示了一次完整的爆破过程:多数密钥逐一失败,命中有效密钥后日志高亮提示。

反序列化利用链与命令执行

拿到密钥后进入命令执行环节。工具集成的利用链覆盖常见目标环境:

  • CommonsCollections 系列:CC1 到 CC7、CCK1 到 CCK4 等变体;
  • CommonsBeanutils 系列:CB1 及 1.8.3/1.9.2 的 NOCC 版本;
  • 两种 Tomcat 通用回显(TomcatEcho 系列),在命令无回显时借道 Tomcat 的共享存储把结果读出来;
  • shortPayload 子模块基于 ASM 做类压缩,生成更小的 payload,降低被 WAF 拦截的概率。

实操上如果某条链执行无回显,优先更换利用链再试,而不是反复重试同一条链;JRMP 与 payload 导出功能可以配合手工验证。

上图是从特征检测到执行whoami拿到系统身份信息的完整链路。

内存马注入:冰蝎、Godzilla 与 Tomcat 专用

命令执行验证通过后,可以直接注入内存马实现持续访问,无需落盘 webshell。可选三种方式:

  • 冰蝎(Behinder)Filter 马:注入后由冰蝎客户端按密码连接,连接密码可自定义;
  • Godzilla Filter 马:面向 Godzilla 客户端,插件体系更丰富;
  • Tomcat 专用注入(TomcatInject):针对 Tomcat 容器做了适配。

一个前置条件要注意:注入前必须先确认所选利用链能在目标上正常执行命令,否则马打进去也无法通信。

上图是注入冰蝎内存马后,用冰蝎客户端连上目标并执行命令的实战效果。

实战路径

如果你是渗透测试人员,按"验证 → 利用"的节奏走:先确认 Shiro 特征,用内置字典跑一轮 CBC 爆破;没命中就切 GCM 或改用 DNSLOG 模式。拿到密钥后先跑一条最简单的 CC 链执行whoami,确认 RCE 成立,再决定是否需要权限维持。

如果你在做红队打点,重心放在隐蔽性上。确认命令可执行后注入 Filter 类内存马并设置强密码,之后通过冰蝎或 Godzilla 客户端长连操作,避免反复使用反序列化通道暴露痕迹。

如果你负责企业安全自查,把 ShiroExp 纳入定期扫描流程即可。批量测试时注意控制并发与超时,避免对线上服务造成压力;发现漏洞后第一时间记录密钥、Shiro 版本和利用链,推动业务方更换密钥并升级到安全版本。

进阶与避坑

  • 特征被改名的站点:界面上要手工填写实际 cookie 名,默认rememberMe匹配不到时先检查这一点。
  • 配置自定义密钥字典:在程序当前目录创建shirokeys.txt,每行一个密钥,UTF-8 编码。文件不存在时工具静默回落到内置字典,不会报错,排查"为什么没用我的字典"时先确认文件位置。
  • 无回显场景:命令执行看不到输出时,依次尝试更换利用链、Tomcat 通用回显、DNSLOG 验证,比盲目重试更有效。
  • 代理功能有已知 bug,作者明确不打算修复,走代理的网络环境请自行在系统层处理。
  • suid 不一致问题:部分目标因类加载器差异导致 payload 的 suid 对不上,工具提供了 SuidClassLoader 与 AlterKey 系列工具做修正,遇到 "suid" 相关报错可以走这条路。
  • WAF 拦截:优先使用 shortPayload 生成的压缩 payload;遇到分段拦截时,可开启 payload 输出功能拿到明文,手工拆分再发送。
  • 资源与日志:长任务结束后关闭程序窗口会一并终止子线程;定期清理日志输出,避免占用磁盘。

源码导航

想读懂或二次开发这套工具,可以从下面几块入手:

  • cn/safe6/core/ —— 请求与调度的骨架。BurstJob是一个可复用的爆破任务单元,负责单个密钥的加密与比对;Request/Response封装 HTTP 交互细节;SuidClassLoader处理自定义类加载。
  • cn/safe6/payload/ —— 所有打点逻辑的存放地。根目录是 CC、CB 等利用链入口类;memshell/下是冰蝎、Godzilla、Tomcat 三种内存马实现;shortPayload/用 ASM 做 payload 瘦身;tool/提供密钥修改相关能力。
  • cn/safe6/util/ —— 工具箱。ShiroToolPayloadEncryptTool负责 AES-CBC/GCM 加密,BCELEncode处理 BCEL 编码,HttpTool封装了各种请求发送与报文解析。
  • cn/safe6/controller/ —— JavaFX 事件层,界面上每个按钮对应一个方法,从burstKey(爆破)到injectShell(注马)都能在这里找到入口。

合规提示

ShiroExp 仅应在取得明确授权的目标上使用,测试前确认授权范围并遵守当地法律法规。任何未授权的检测与利用行为都可能构成入侵,后果由使用者自行承担。发现漏洞后及时通报并协助修复,比保存成果更有价值。

写在最后

ShiroExp 的价值在于把 Shiro 测试中最耗时的三段——密钥确认、链路选择、马的注入——压缩成界面操作,让你把精力放在判断目标环境上,而不是反复手搓加密参数。熟悉它的利用链结构后,再遇到 WAF、改名、GCM 这类变体,也能顺着源码快速调整出适配方案。

【免费下载链接】ShiroExpshiro综合利用工具项目地址: https://gitcode.com/gh_mirrors/sh/ShiroExp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询