记一次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特征识别

  1. 在请求中添加Cookie:rememberMe=1
  2. 观察响应头:
    • 若存在Set-Cookie: rememberMe=deleteMe,则高度疑似Shiro框架
  3. 其他特征:
    • JS文件中可能包含shiro关键字
    • 登录页面可能有特定样式

0x03 漏洞验证

1. 使用DNSLOG验证

  • 工具:Shiro反序列化漏洞检测工具
  • 检测方式:
    • 发送特殊构造的rememberMe Cookie
    • 观察DNSLOG平台是否有回连记录

2. 密钥检测

  • 常见默认密钥列表:
    kPH+bIxk5D2deZiIxcaaaA==
    4AvVhmFLUs0KTA3Kprsdag==
    Z3VucwAAAAAAAAAAAAAAAA==
    ...
    
  • 使用工具自动测试已知密钥

0x04 漏洞利用

1. 内存马注入

使用专用工具注入内存shell:

  • Shell类型选择
    • 蚁剑内存马
    • 冰蝎内存马
  • 配置参数
    • 自定义密码
    • 设置Header(关键)
    • 选择Tomcat版本(7/8/9)

2. 连接Webshell

以蚁剑为例:

  1. URL需要包含ver参数
  2. 连接类型选择CUSTOM
  3. 配置正确的Header
  4. 使用设定的密码连接

3. 权限维持

  • 工具提供一键卸载内存shell功能
  • 也可手动清理注入的恶意代码

0x05 加密处理应对方案

当遇到前端加密时(如AES加密登录凭证):

1. 加密算法分析

示例AES加密特征:

  • 密钥:o7H8uIM2O5qv65l2
  • 模式:ECB
  • 填充:pkcs7
  • 输出:base64

2. 使用jsEncrypter插件

搭建步骤

  1. 创建AES文件夹
  2. 添加必要文件:
    • 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();
}

使用流程

  1. 用phantomjs运行js文件:phantomjs jsEncrypter_aes.js
  2. Burp中配置jsEncrypter插件
  3. 在Intruder等模块中使用加密后的payload

0x06 其他发现

用户名枚举漏洞

  • 在"忘记密码"功能处
  • 不同响应:
    • "用户未设置邮箱信息" → 用户存在
    • "用户不存在" → 用户不存在
  • 使用top500用户名字典进行枚举

验证码绕过

  • 使用OCR工具识别简单验证码
  • 可能存在的逻辑缺陷

0x07 防御建议

  1. Shiro安全配置

    • 升级到最新版本
    • 禁用rememberMe功能或使用自定义密钥
    • 设置cipherKey为高强度随机值
  2. 系统防护

    • WAF防护反序列化攻击
    • 限制可疑IP的访问频率
    • 关键操作增加二次验证
  3. 日志监控

    • 监控rememberMe字段的异常使用
    • 关注可疑的Java反序列化操作

0x08 总结

本次渗透测试的关键路径:

  1. 基础信息收集 → 2. 目录扫描发现后台 → 3. 识别Shiro特征 → 4. 反序列化漏洞验证 → 5. 内存马注入 → 6. 获取权限

经验教训

  • 不要依赖单一工具,多种工具组合使用
  • 及时更新测试字典和漏洞库
  • 前端加密不是绝对防护,可通过分析算法突破
  • Shiro反序列化工具的选择很重要,推荐使用支持回显和内存马的最新工具

附录:工具列表

  1. Shiro反序列化利用工具(支持Tomcat 7/8/9)
  2. Burp Suite + jsEncrypter插件
  3. PhantomJS
  4. Dirb/Dirsearch目录扫描工具
  5. Nmap端口扫描器
  6. 蚁剑/冰蝎等Webshell管理工具
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进行详细扫描: 结果示例: 3. 目录扫描 尝试多种工具进行目录扫描: Dirsearch :设置延迟和随机UA,但可能被防护机制拦截 Dirb :Kali自带工具,成功发现关键路径 发现 /admin 等敏感目录 0x02 Shiro特征识别 在请求中添加Cookie: rememberMe=1 观察响应头: 若存在 Set-Cookie: rememberMe=deleteMe ,则高度疑似Shiro框架 其他特征: JS文件中可能包含 shiro 关键字 登录页面可能有特定样式 0x03 漏洞验证 1. 使用DNSLOG验证 工具:Shiro反序列化漏洞检测工具 检测方式: 发送特殊构造的rememberMe Cookie 观察DNSLOG平台是否有回连记录 2. 密钥检测 常见默认密钥列表: 使用工具自动测试已知密钥 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关键代码 : 使用流程 : 用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管理工具