通过加密语言机绕过身份验证
字数 1393 2025-08-10 16:34:39

通过加密预言机绕过身份验证 - 详细技术分析

1. 漏洞背景

本案例演示了如何利用加密预言机(Encryption Oracle)漏洞绕过身份验证机制。该漏洞存在于一个Web应用程序中,允许攻击者通过精心构造的加密Cookie来提升权限至管理员账户。

2. 漏洞环境分析

2.1 初始发现

  • 登录凭证:wiener:peter
  • 存在"记住登录"功能,生成加密Cookie:CLaBQxXK7jjl8irpHHxq6jc0HJqzyyGlh0up7tP7WZc=
  • 评论功能中,无效输入会重定向并设置notification Cookie,其值为加密的错误消息

2.2 关键功能点

  1. 加密点:修改邮箱功能会将错误消息加密存储在notification Cookie中
  2. 解密点:重定向页面会解密并显示notification Cookie的内容

3. 漏洞利用步骤详解

3.1 信息收集

  1. 发现stay-logged-in Cookie的明文格式为username:timestamp
  2. 通过Date.now()获取当前时间戳
  3. 确认解密点可以解密stay-logged-in的值

3.2 加密机制分析

  1. 对称加密:明文长度与密文长度直接相关
  2. 固定前缀:错误消息"Invalid email address: "(23字节)会在加密前添加
  3. 块大小要求:加密算法要求16字节的倍数

3.3 构造管理员Cookie

  1. 初始尝试

    • 提交administrator:timestamp作为邮箱地址
    • 系统生成加密值,但包含无用前缀
  2. 去除前缀

    • 将密文解码为十六进制
    • 删除前23字节(对应无用前缀)
    • 重新编码为Base64
  3. 块大小调整

    • 发现解密报错:密码密文分块必须是16的倍数
    • 解决方案:
      a. 在明文前添加9个填充字符:xxxxxxxxxadministrator:timestamp
      b. 加密后,从十六进制数据开头删除32字节
      c. 确保最终密文长度符合块大小要求
  4. 最终构造

    • 生成有效的管理员Cookie值
    • 替换stay-logged-in参数值
    • 更新session值

3.4 权限提升

  1. 访问/admin端点,成功进入管理员面板
  2. 执行删除操作:/admin/delete?username=carlos

4. 技术要点总结

  1. 加密预言机:应用程序暴露了加密/解密功能,允许攻击者研究加密机制
  2. 明文格式username:timestamp的Cookie格式是关键突破口
  3. 块加密特性
    • 对称加密保持长度关系
    • 需要满足块大小要求
  4. 攻击技巧
    • 利用固定前缀进行长度操作
    • 通过填充和截断调整密文结构
    • 精心构造的输入可以生成有效的特权凭证

5. 防御建议

  1. 避免在客户端存储敏感加密数据
  2. 对加密功能实施严格的访问控制
  3. 使用非对称加密或签名验证重要凭证
  4. 避免在错误消息中暴露加密/解密功能
  5. 实施HMAC验证确保Cookie完整性
  6. 对管理员功能实施多因素认证

6. 扩展思考

  1. 类似漏洞可能存在于其他使用客户端加密的场景
  2. 时间戳验证不严可能导致重放攻击
  3. 加密算法的选择和使用方式对安全性至关重要
  4. 开发过程中应避免将加密功能暴露给终端用户

通过本案例,我们深入理解了加密预言机漏洞的利用方式和防御策略,这对Web应用程序的安全设计和测试具有重要参考价值。

通过加密预言机绕过身份验证 - 详细技术分析 1. 漏洞背景 本案例演示了如何利用加密预言机(Encryption Oracle)漏洞绕过身份验证机制。该漏洞存在于一个Web应用程序中,允许攻击者通过精心构造的加密Cookie来提升权限至管理员账户。 2. 漏洞环境分析 2.1 初始发现 登录凭证: wiener:peter 存在"记住登录"功能,生成加密Cookie: CLaBQxXK7jjl8irpHHxq6jc0HJqzyyGlh0up7tP7WZc= 评论功能中,无效输入会重定向并设置 notification Cookie,其值为加密的错误消息 2.2 关键功能点 加密点 :修改邮箱功能会将错误消息加密存储在 notification Cookie中 解密点 :重定向页面会解密并显示 notification Cookie的内容 3. 漏洞利用步骤详解 3.1 信息收集 发现 stay-logged-in Cookie的明文格式为 username:timestamp 通过 Date.now() 获取当前时间戳 确认解密点可以解密 stay-logged-in 的值 3.2 加密机制分析 对称加密:明文长度与密文长度直接相关 固定前缀:错误消息"Invalid email address: "(23字节)会在加密前添加 块大小要求:加密算法要求16字节的倍数 3.3 构造管理员Cookie 初始尝试 : 提交 administrator:timestamp 作为邮箱地址 系统生成加密值,但包含无用前缀 去除前缀 : 将密文解码为十六进制 删除前23字节(对应无用前缀) 重新编码为Base64 块大小调整 : 发现解密报错:密码密文分块必须是16的倍数 解决方案: a. 在明文前添加9个填充字符: xxxxxxxxxadministrator:timestamp b. 加密后,从十六进制数据开头删除32字节 c. 确保最终密文长度符合块大小要求 最终构造 : 生成有效的管理员Cookie值 替换 stay-logged-in 参数值 更新session值 3.4 权限提升 访问 /admin 端点,成功进入管理员面板 执行删除操作: /admin/delete?username=carlos 4. 技术要点总结 加密预言机 :应用程序暴露了加密/解密功能,允许攻击者研究加密机制 明文格式 : username:timestamp 的Cookie格式是关键突破口 块加密特性 : 对称加密保持长度关系 需要满足块大小要求 攻击技巧 : 利用固定前缀进行长度操作 通过填充和截断调整密文结构 精心构造的输入可以生成有效的特权凭证 5. 防御建议 避免在客户端存储敏感加密数据 对加密功能实施严格的访问控制 使用非对称加密或签名验证重要凭证 避免在错误消息中暴露加密/解密功能 实施HMAC验证确保Cookie完整性 对管理员功能实施多因素认证 6. 扩展思考 类似漏洞可能存在于其他使用客户端加密的场景 时间戳验证不严可能导致重放攻击 加密算法的选择和使用方式对安全性至关重要 开发过程中应避免将加密功能暴露给终端用户 通过本案例,我们深入理解了加密预言机漏洞的利用方式和防御策略,这对Web应用程序的安全设计和测试具有重要参考价值。