记一次Shiro反序列化渗透测试
字数 1830 2025-08-05 08:19:51
Apache Shiro反序列化漏洞渗透测试实战教学文档
0x00 漏洞背景
Apache Shiro是一个强大且易用的Java安全框架,提供身份验证、授权、加密和会话管理等功能。在Shiro框架中,如果配置了rememberMe功能且使用了默认密钥,攻击者可以利用反序列化漏洞执行任意代码,获取服务器权限。
0x01 信息收集阶段
1. 基础信息探测
- Wappalyzer插件:快速识别网站技术栈
- Shodan搜索:获取目标IP和开放端口
- 示例结果:IP为xxx.xxx.1.59,开放80(http)和443(https)端口
- CDN检测:
- 使用
nslookup命令和多地ping检测 - 确认目标未使用CDN,直接暴露真实IP
- 使用
2. 端口扫描
使用Nmap进行详细扫描:
nmap -sV -p- xxx.xxx.1.59
结果示例:
80/tcp open http nginx 1.18.0
443/tcp open ssl/https
8080/tcp closed http-proxy
3. 目录扫描
尝试多种工具进行目录扫描:
- Dirsearch:设置延迟和随机UA,但可能被防护机制拦截
- Dirb:Kali自带工具,成功发现关键路径
- 发现
/admin等敏感目录
- 发现
0x02 Shiro特征识别
- 在请求中添加Cookie:
rememberMe=1 - 观察响应头:
- 若存在
Set-Cookie: rememberMe=deleteMe,则高度疑似Shiro框架
- 若存在
- 其他特征:
- JS文件中可能包含
shiro关键字 - 登录页面可能有特定样式
- JS文件中可能包含
0x03 漏洞验证
1. 使用DNSLOG验证
- 工具:Shiro反序列化漏洞检测工具
- 检测方式:
- 发送特殊构造的rememberMe Cookie
- 观察DNSLOG平台是否有回连记录
2. 密钥检测
- 常见默认密钥列表:
kPH+bIxk5D2deZiIxcaaaA== 4AvVhmFLUs0KTA3Kprsdag== Z3VucwAAAAAAAAAAAAAAAA== ... - 使用工具自动测试已知密钥
0x04 漏洞利用
1. 内存马注入
使用专用工具注入内存shell:
- Shell类型选择:
- 蚁剑内存马
- 冰蝎内存马
- 配置参数:
- 自定义密码
- 设置Header(关键)
- 选择Tomcat版本(7/8/9)
2. 连接Webshell
以蚁剑为例:
- URL需要包含
ver参数 - 连接类型选择
CUSTOM - 配置正确的Header
- 使用设定的密码连接
3. 权限维持
- 工具提供一键卸载内存shell功能
- 也可手动清理注入的恶意代码
0x05 加密处理应对方案
当遇到前端加密时(如AES加密登录凭证):
1. 加密算法分析
示例AES加密特征:
- 密钥:
o7H8uIM2O5qv65l2 - 模式:ECB
- 填充:pkcs7
- 输出:base64
2. 使用jsEncrypter插件
搭建步骤:
- 创建AES文件夹
- 添加必要文件:
crypto-js.js(加密依赖)jsEncrypter_aes.js(主逻辑)
jsEncrypter_aes.js关键代码:
var key = CryptoJS.enc.Utf8.parse("o7H8uIM2O5qv65l2");
function jsEncrypt(burp_payload){
var encrypted = CryptoJS.AES.encrypt(burp_payload, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
使用流程:
- 用phantomjs运行js文件:
phantomjs jsEncrypter_aes.js - Burp中配置jsEncrypter插件
- 在Intruder等模块中使用加密后的payload
0x06 其他发现
用户名枚举漏洞
- 在"忘记密码"功能处
- 不同响应:
- "用户未设置邮箱信息" → 用户存在
- "用户不存在" → 用户不存在
- 使用top500用户名字典进行枚举
验证码绕过
- 使用OCR工具识别简单验证码
- 可能存在的逻辑缺陷
0x07 防御建议
-
Shiro安全配置:
- 升级到最新版本
- 禁用rememberMe功能或使用自定义密钥
- 设置
cipherKey为高强度随机值
-
系统防护:
- WAF防护反序列化攻击
- 限制可疑IP的访问频率
- 关键操作增加二次验证
-
日志监控:
- 监控rememberMe字段的异常使用
- 关注可疑的Java反序列化操作
0x08 总结
本次渗透测试的关键路径:
- 基础信息收集 → 2. 目录扫描发现后台 → 3. 识别Shiro特征 → 4. 反序列化漏洞验证 → 5. 内存马注入 → 6. 获取权限
经验教训:
- 不要依赖单一工具,多种工具组合使用
- 及时更新测试字典和漏洞库
- 前端加密不是绝对防护,可通过分析算法突破
- Shiro反序列化工具的选择很重要,推荐使用支持回显和内存马的最新工具
附录:工具列表
- Shiro反序列化利用工具(支持Tomcat 7/8/9)
- Burp Suite + jsEncrypter插件
- PhantomJS
- Dirb/Dirsearch目录扫描工具
- Nmap端口扫描器
- 蚁剑/冰蝎等Webshell管理工具