shiro反序列化漏洞综合利用(仅限授权测试使用)
> /plugin marketplace add SummerSec/ShiroAttack2> /plugin install shiro-attack-cli@shiro-attack2
Repo: SummerSec/ShiroAttack2
What's inside
完整使用说明:docs/USAGE.md

2016 年的洞,到现在还能用。不是漏洞本身多高级,而是三个很现实的原因叠在一起。
第一,默认 Key。 Shiro 1.2.4 及之前版本在 CookieRememberMeManager 里硬写了一个 AES Key:kPH+bIxk5D2deZiIxcaaaA==。十几年来的教程和脚手架代码一直在拷贝这个值。
第二,Key 换不掉。 rememberMe 要求客户端和服务端用同一个 Key。一旦 Key 写进了配置文件、Docker 镜像、源码仓库,要替换就得所有节点一起改。
第三,利用成本足够低。 GUI 点几下就能拿 shell,CLI 可以直接嵌进脚本。
探测 ── 发 rememberMe=yes,看有没有 Set-Cookie: rememberMe=deleteMe
Shiro 1.x 遇到非法 Cookie 一定会回 deleteMe
爆破 ── 用 SimplePrincipalCollection 序列化 + 候选 Key 逐个加密
响应里没有 deleteMe 就是 Key 对了
Gadget ── 用确认的 Key 加密完整 Payload(Gadget 链 + TemplatesImpl 回显类)
命令执行 ── rememberMe Cookie 带着 Gadget Payload,命令写在 Authorization 头里
内存马 ── 同样的 Gadget 链注入 Filter/Servlet,不再依赖 rememberMe
Key 替换 ── 用内存马机制改掉 Shiro 的 AES Key,旧 Key 失效
5.0 之后增加了 CLI 模式。核心攻击逻辑 AttackService(1000+ 行)一行没改——通过继承 TextArea 拦截日志输出,利用 ControllersFactory 注册表注入假的 MainController,GUI 和 CLI 共用同一套攻击代码。CLI 不需要 JavaFX 窗口,启动时用一个 JFXPanel 初始化 JavaFX 线程即可。
# 启动 CLI
java -cp shiro_attack-<version>.jar com.summersec.attack.CLI.MainCLI <command> [options]
| 命令 | 用途 |
|---|---|
detect | 探测目标是否为 Shiro 框架 |
crack | 爆破或验证 Shiro AES Key |
exec | 执行系统命令(自动探测 Gadget 链) |
memshell | 注入内存马(哥斯拉/冰蝎/蚁剑等) |
changekey | 替换目标 Shiro Key |
gui | 启动 JavaFX 图形界面 |
--json 模式下输出分为两个通道:以 { 开头的是结构化日志,AI 或脚本可以按行 JSON.parse;不以 { 开头的是命令原始输出,tail -1 就能拿到结果。
AES 模式:--cbc(Shiro ≤1.2.4),--gcm(Shiro ≥1.2.5)。
Gadget 自动探测优先尝试 String/AttrCompare/ObjectToStringComparator 变体(无需 commons-collections),回退到依赖 ComparableComparator 的 CB 变体。
详细 CLI 用法见 @skills/shiro-attack-cli/SKILL.md(此文件是给 AI Agent 加载的 skill 描述,结构化为命令参数和排错规则)。
--json 结构化输出,适合脚本化和 AI 调用# 安装本地 JAR(仅首次需要)
mvn install:install-file -Dfile=libs/jEG-Core-1.0.0.jar -DgroupId=jeg -DartifactId=jeg-core -Dversion=1.0.0 -Dpackaging=jar
mvn install:install-file -Dfile=libs/jmg-sdk-1.0.9.jar -DgroupId=jmg -DartifactId=jmg-sdk -Dversion=1.0.9 -Dpackaging=jar
# 打包 fat JAR(Java 8)
mvn clean package -DskipTests
# 产物: target/shiro_attack-5.1.1-all.jar
Release 提供两类产物:
shiro_attack-<version>-<jdk>.jar:单文件可执行版本shiro_attack-<version>-<jdk>-bundle.zip:包含 data/ 和 lib/ 的完整压缩包运行目录结构:
./
├── shiro_attack-{version}-{jdk}.jar
├── data/
│ └── shiro_keys.txt # Key 字典,每行一个 Base64 Key
└── lib/ # CommonsBeanutils 各版本 JAR
Release 由 GitHub Actions 在推送 tag(v* 或 X.Y.Z)时自动构建。可选版本说明放在 docs/releases/<tag>.md。
| 文档 | 说明 |
|---|---|
| docs/USAGE.md | 完整功能使用说明 |
| docs/FAQ.md | 常见问题 |
| docs/ShiroAttack2-v5-guide.md | 5.x 版本功能深度介绍 |
| docs/memshell.md | 内存马说明 |
| docs/BypassWaf.md | WAF 绕过 |
| docs/NoGadget.md | 无 Gadget 场景 |
| docs/THIRD_PARTY_GENERATORS.md | jEG/jMG 集成说明 |
| AGENTS.md | OpenCode Agent 指令 |
| @skills/shiro-attack-cli/SKILL.md | AI Agent Skill 描述 |
免责声明:
本文档仅用于授权安全测试和学术研究。严禁利用本文档内容进行任何非法活动。
合规要求:
使用规范:
责任声明:
ShiroAttack2) 的开发者/维护者不承担任何因使用本工具而产生的法律责任法律依据:
报告漏洞: 如发现安全漏洞,请通过负责任的方式披露,勿直接公开漏洞细节。
.claude/
.claude-plugin/
marketplace.json
plugin.json
skills/
shiro-attack-cli/
SKILL.md
.codex-plugin/
plugin.json
.cursor-plugin/
plugin.json
.github/
workflows/
release.yml
.gitignore
AGENT.md
AGENTS.md
assembly.xml
CHANGELOG.md
CLAUDE.md
data/
shiro_keys.txt
docs/
_config.yml
ads.txt
BypassWaf.md
CNAME
FAQ.md
images/
00.png
01.png
02.png
03.png
04.png
05.png
050.png
06.png
07.png
08.png
09.png
memshell.md
NoGadget.md
README.md
readme.png
releases/
5.0.1.md
5.1.0.md
5.1.1.md
ShiroAttack2-v5-guide.md
THIRD_PARTY_GENERATORS.md
USAGE.md
JSONUtil.class
lib/
1.8.3/
commons-beanutils-1.8.3.jar
1.9.2/
commons-beanutils-1.9.2.jar
libs/
jEG-core-1.0.0.jar
jmg-sdk-1.0.9.jar
LICENSE
package.json
plugin.json
pom.xml
README_EN.md
README.md
shiro_attack2.iml
skills/
shiro-attack-cli/
SKILL.md
src/
main/
java/
com/
summersec/
attack/
CLI/
ConsoleTextArea.java
MainCLI.java
core/
AttackService.java
demo.java
deser/
echo/
AllEcho.java
dfs.java
DFSEcho.java
EchoPayload.java
NoEcho.java
ReverseEcho.java
SpringEcho.java
TomcatEcho.java
TomcatEcho2.java
TomcatEcho3.java
frame/
FramePayload.java
Shiro.java
payloads/
annotation/
Authors.java
Dependencies.java
PayloadTest.java
CommonsBeanutils1_183.java
CommonsBeanutils1.java
CommonsBeanutilsAttrCompare_183.java
CommonsBeanutilsAttrCompare.java
CommonsBeanutilsObjectToStringComparator_183.java
CommonsBeanutilsObjectToStringComparator.java
CommonsBeanutilsPropertySource_183.java
CommonsBeanutilsPropertySource.java
CommonsBeanutilsString_183.java
CommonsBeanutilsString_192s.java
CommonsBeanutilsString.java
CommonsCollections2.java
CommonsCollections3.java
CommonsCollectionsK1.java
CommonsCollectionsK2.java
ObjectPayload.java
test.java
URLDNS.java
plugins/
InjectMemTool.java
keytest/
KeyEcho.java
servlet/
MemBytes.java
util/
ClassFiles.java
CommonUtil.java
CommonUtils.java
DynamicDependencies.java
Gadgets_orgin.java
Gadgets.java
Gadgetsasm.java
GadgetsK.java
Gadgetsplugin.java
JavassistClassLoader.java
JavaVersion.java
Reflections.java
StandardExecutorClassLoader.java
Strings.java
SuidClassLoader.java
Encrypt/
CbcEncrypt.java
Encrypt.java
EncryptInterface.java
GcmEncrypt.java
JcaCipherService.java
KeyGenerator.java
package-info.java
ShiroGCM.java
entity/
ControllersFactory.java
RequestInfo.java
integration/
generator/
EchoGeneratorAdapter.java
GeneratorFacade.java
JegEchoGeneratorAdapter.java
JmgMemshellGeneratorAdapter.java
LegacyMemshellGeneratorAdapter.java
MemshellGeneratorAdapter.java
model/
EchoGenerateRequest.java
EchoGenerateResult.java
MemshellGenerateRequest.java
MemshellGenerateResult.java
UI/
Main.java
MainController.java
utils/
AesUtil.java
AppLogger.java
CliOutputSink.java
Console.java
ConvertUtil.java
HttpUtil_bak.java
HttpUtil.java
HttpUtils.java
MessageUtil.java
MyCert.java
OutputSink.java
UserAgentUtil.java
Utils.java
x/
AddDllFilter.java
AntSwordFilter.java
AntSwordServlet.java
BastionEncryFilter.java
BastionFilter.java
BehinderFilter.java
BehinderServlet.java
ChangeShiroKeyFilter.java
ChangeShiroKeyFilter2.java
ChangeShiroKeyFilter3.java
ChangeShiroKeyFilter4.java
ChangeShiroKeyFilter5.java
ChangeShiroKeyFilter6.java
FilterMem.java
GodzillaFilter.java
GodzillaServlet.java
GodzillaTomServlet.java
NeoreGeorgFilter.java
NeoreGeorgServlet.java
reGeorgFilter.java
reGeorgServlet.java
META-INF/
MANIFEST.MF
org/
apache/
shiro/
crypto/
cipher/
AbstractSymmetricCipherService.java
AesCipherService.java
BlowfishCipherService.java
ByteSourceBroker.java
ByteSourceUser.java
CipherService.java
DefaultBlockCipherService.java
JcaCipherService.java
OperationMode.java
package-info.java
PaddingScheme.java
SimpleByteSourceBroker.java
lang/
codec/
Base64.java
CodecException.java
CodecSupport.java
H64.java
Hex.java
package-info.java
ShiroException.java
util/
Assert.java
ByteSource.java
ClassUtils.java
Destroyable.java
Factory.java
Initializable.java
InstantiationException.java
LifecycleUtils.java
Nameable.java
SimpleByteSource.java
SoftHashMap.java
StringUtils.java
UnknownClassException.java
util/
ByteSourceWrapper.java
ByteUtils.java
resources/
allatori.xml
commons-beanutils-1.8.3.txt
data/
shiro_key.txt
gui.fxml
gui.fxml.bak
log4j.properties
styles/
app.css
Tomcat.txt
META-INF/
MANIFEST.MFFAQ
shiro-attack2 is a Claude Code plugin with 2 hand-picked skills for security work, indexed on Flowy. Install it with the command on its page. It includes shiro-attack-cli, shiro-attack-cli. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.