bug bounty实例:框架注入攻击详解
字数 1538 2025-08-26 22:11:29

框架注入攻击详解与防御指南

1. 框架注入概述

框架注入(Frame Injection)是一种代码注入漏洞,属于OWASP 2017年前十大安全风险中的A1注入类别。这种攻击允许攻击者将恶意框架注入到目标网页中,从而控制页面行为或重定向用户到恶意网站。

1.1 基本概念

  • 框架(Frame/iframe): HTML元素,允许在一个网页中嵌入另一个网页
  • 框架注入: 攻击者通过某种方式将恶意框架注入到目标网页中
  • 同源策略(SOP): 浏览器安全机制,限制不同源之间的DOM访问

2. 框架技术的历史演变

2.1 早期框架技术

  • 20世纪90年代中期:网页可以随时将框架重定向到不同URL
  • 1999年:Georgi Guninski发现框架导航安全问题
    • 示例:花旗银行登录页面的iframe可被外部页面重定向

2.2 现代防护机制

  • 2006年:微软引入框架导航策略(IE7)
    • 规则:只有同源网站才能更改iframe地址
  • 同源策略(SOP)比帧导航策略更严格

3. 框架注入的危害

3.1 攻击影响

  1. 重定向攻击:将用户重定向到钓鱼网站
  2. 按键劫持(Keystroke Hijacking):捕获用户键盘输入
  3. 框架劫持(Frame Hijacking):控制目标网站中iframe的src属性

3.2 攻击示例代码

<!-- 早期IE中的跨框架脚本攻击 -->
<script>
function stealCredentials() {
  var loginFrame = window.frames["loginFrame"];
  var username = loginFrame.document.forms[0].username.value;
  var password = loginFrame.document.forms[0].password.value;
  // 发送到攻击者服务器
}
</script>

4. 框架注入与XSS的比较

4.1 相似点

  • 都是注入类漏洞
  • 都需要用户输入验证不严的入口点

4.2 不同点

特性 框架注入 XSS
攻击目标 主要针对框架结构 任意脚本执行
利用难度 相对简单 可能需要绕过过滤
防御措施 CSP的frame-src CSP的script-src
赏金价值 可能更高(视情况) 常见但价值可能较低

5. 实际案例分析:美联航漏洞

5.1 漏洞发现过程

  1. 目标:http://checkin.united.com/
  2. 发现点:SID参数存在注入漏洞
  3. 覆盖范围:60个区域受影响

5.2 技术细节

  1. 初始尝试:使用标准XSS payload失败

    • 原因:网站覆盖了原生函数(alert, confirm等)
  2. 解决方案:使用iframe重置覆盖函数

    <iframe src="javascript:'<script>alert(document.domain)</script>'"></iframe>
    
  3. 优化payload:(Brute Logic提供)

    <iframe src=javascript:alert(document.domain)></iframe>
    

5.3 原始继承(Origin Inheritance)技术

  1. 原理:使用伪协议生成空DOM,继承父文档源

    • 常用伪协议:about:, javascript:, data:
  2. 示例

    <iframe src="about:blank"></iframe>
    
    
  3. 优势

    • 绕过函数覆盖
    • 保持同源,符合SOP
    • 兼容所有主流浏览器

6. 防御措施

6.1 内容安全策略(CSP)

  1. frame-src指令:限制可加载iframe的来源

    Content-Security-Policy: frame-src 'self' https://trusted.com
    
  2. child-src指令:(替代frame-src)

    Content-Security-Policy: child-src 'none'
    
  3. script-src指令:防止XSS攻击

    Content-Security-Policy: script-src 'self'
    

6.2 其他防御措施

  1. X-Frame-Options头

    • DENY:完全禁止框架嵌套
    • SAMEORIGIN:只允许同源框架
  2. 输入验证与过滤

    • 严格验证用户输入
    • 对输出进行HTML编码
  3. 避免使用伪协议

    • 限制javascript:等伪协议的使用

7. 测试与验证

7.1 测试方法

  1. 检查所有用户输入点
  2. 尝试注入iframe标签
  3. 验证框架限制策略

7.2 测试payload示例

<iframe src="javascript:alert(document.domain)"></iframe>
<iframe src="about:blank"></iframe>
<iframe src="data:text/html,<script>alert(1)</script>"></iframe>

8. 总结

框架注入是一种严重的安全威胁,可能导致用户重定向、会话劫持等攻击。通过实施严格的内容安全策略、正确设置安全头部以及对用户输入进行严格验证,可以有效防御此类攻击。安全研究人员在测试时应特别注意原始继承等高级技术,以全面评估系统的安全性。

框架注入攻击详解与防御指南 1. 框架注入概述 框架注入(Frame Injection)是一种代码注入漏洞,属于OWASP 2017年前十大安全风险中的A1注入类别。这种攻击允许攻击者将恶意框架注入到目标网页中,从而控制页面行为或重定向用户到恶意网站。 1.1 基本概念 框架(Frame/iframe) : HTML元素,允许在一个网页中嵌入另一个网页 框架注入 : 攻击者通过某种方式将恶意框架注入到目标网页中 同源策略(SOP) : 浏览器安全机制,限制不同源之间的DOM访问 2. 框架技术的历史演变 2.1 早期框架技术 20世纪90年代中期:网页可以随时将框架重定向到不同URL 1999年:Georgi Guninski发现框架导航安全问题 示例:花旗银行登录页面的iframe可被外部页面重定向 2.2 现代防护机制 2006年:微软引入框架导航策略(IE7) 规则:只有同源网站才能更改iframe地址 同源策略(SOP)比帧导航策略更严格 3. 框架注入的危害 3.1 攻击影响 重定向攻击 :将用户重定向到钓鱼网站 按键劫持(Keystroke Hijacking) :捕获用户键盘输入 框架劫持(Frame Hijacking) :控制目标网站中iframe的src属性 3.2 攻击示例代码 4. 框架注入与XSS的比较 4.1 相似点 都是注入类漏洞 都需要用户输入验证不严的入口点 4.2 不同点 | 特性 | 框架注入 | XSS | |------|---------|-----| | 攻击目标 | 主要针对框架结构 | 任意脚本执行 | | 利用难度 | 相对简单 | 可能需要绕过过滤 | | 防御措施 | CSP的frame-src | CSP的script-src | | 赏金价值 | 可能更高(视情况) | 常见但价值可能较低 | 5. 实际案例分析:美联航漏洞 5.1 漏洞发现过程 目标: http://checkin.united.com/ 发现点:SID参数存在注入漏洞 覆盖范围:60个区域受影响 5.2 技术细节 初始尝试 :使用标准XSS payload失败 原因:网站覆盖了原生函数(alert, confirm等) 解决方案 :使用iframe重置覆盖函数 优化payload :(Brute Logic提供) 5.3 原始继承(Origin Inheritance)技术 原理 :使用伪协议生成空DOM,继承父文档源 常用伪协议: about: , javascript: , data: 示例 : 优势 : 绕过函数覆盖 保持同源,符合SOP 兼容所有主流浏览器 6. 防御措施 6.1 内容安全策略(CSP) frame-src指令 :限制可加载iframe的来源 child-src指令 :(替代frame-src) script-src指令 :防止XSS攻击 6.2 其他防御措施 X-Frame-Options头 : DENY :完全禁止框架嵌套 SAMEORIGIN :只允许同源框架 输入验证与过滤 : 严格验证用户输入 对输出进行HTML编码 避免使用伪协议 : 限制javascript:等伪协议的使用 7. 测试与验证 7.1 测试方法 检查所有用户输入点 尝试注入iframe标签 验证框架限制策略 7.2 测试payload示例 8. 总结 框架注入是一种严重的安全威胁,可能导致用户重定向、会话劫持等攻击。通过实施严格的内容安全策略、正确设置安全头部以及对用户输入进行严格验证,可以有效防御此类攻击。安全研究人员在测试时应特别注意原始继承等高级技术,以全面评估系统的安全性。