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 攻击影响
- 重定向攻击:将用户重定向到钓鱼网站
- 按键劫持(Keystroke Hijacking):捕获用户键盘输入
- 框架劫持(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 漏洞发现过程
- 目标:
http://checkin.united.com/ - 发现点:SID参数存在注入漏洞
- 覆盖范围:60个区域受影响
5.2 技术细节
-
初始尝试:使用标准XSS payload失败
- 原因:网站覆盖了原生函数(alert, confirm等)
-
解决方案:使用iframe重置覆盖函数
<iframe src="javascript:'<script>alert(document.domain)</script>'"></iframe> -
优化payload:(Brute Logic提供)
<iframe src=javascript:alert(document.domain)></iframe>
5.3 原始继承(Origin Inheritance)技术
-
原理:使用伪协议生成空DOM,继承父文档源
- 常用伪协议:
about:,javascript:,data:
- 常用伪协议:
-
示例:
<iframe src="about:blank"></iframe> -
优势:
- 绕过函数覆盖
- 保持同源,符合SOP
- 兼容所有主流浏览器
6. 防御措施
6.1 内容安全策略(CSP)
-
frame-src指令:限制可加载iframe的来源
Content-Security-Policy: frame-src 'self' https://trusted.com -
child-src指令:(替代frame-src)
Content-Security-Policy: child-src 'none' -
script-src指令:防止XSS攻击
Content-Security-Policy: script-src 'self'
6.2 其他防御措施
-
X-Frame-Options头:
DENY:完全禁止框架嵌套SAMEORIGIN:只允许同源框架
-
输入验证与过滤:
- 严格验证用户输入
- 对输出进行HTML编码
-
避免使用伪协议:
- 限制javascript:等伪协议的使用
7. 测试与验证
7.1 测试方法
- 检查所有用户输入点
- 尝试注入iframe标签
- 验证框架限制策略
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. 总结
框架注入是一种严重的安全威胁,可能导致用户重定向、会话劫持等攻击。通过实施严格的内容安全策略、正确设置安全头部以及对用户输入进行严格验证,可以有效防御此类攻击。安全研究人员在测试时应特别注意原始继承等高级技术,以全面评估系统的安全性。