浅析同源方式执行(SOME)攻击
字数 1305 2025-08-18 11:37:16

同源方式执行(SOME)攻击详解

1. SOME攻击概述

SOME(Same Origin Method Execution)是一种利用同源策略和JSONP技术漏洞的攻击方式。与XSS盗取cookie或CSRF构造请求不同,SOME攻击的目的是直接执行脚本代码。

1.1 与相关攻击的区别

  • XSS:窃取用户cookie或会话信息
  • CSRF:构造伪造请求执行操作
  • SOME:直接执行目标脚本代码

2. 前置知识

2.1 同源策略(SOP)

同源策略限制不同源的脚本对当前文档的访问,但允许同源脚本间的完全交互。

2.2 JSONP技术

JSONP是一种跨域数据访问技术,通过动态创建<script>标签实现,允许用户控制执行的回调函数。

3. SOME攻击原理

攻击者利用JSONP回调函数的可控性,注入恶意代码在同源环境下执行DOM操作。

3.1 攻击流程

  1. 找到可控的JSONP回调点
  2. 构造恶意回调函数链
  3. 诱导用户访问恶意链接
  4. 目标页面DOM被恶意操作

4. 攻击条件

  1. 存在用户可控函数点:能够控制JSONP回调函数名
  2. 允许输入点号(.):用于构造方法调用链
  3. 同源环境:攻击页面与目标页面必须同源

5. 攻击复现示例

5.1 靶场示例

  1. 访问靶场页面:https://www.someattack.com/Playground/ColorPicker.php
  2. 正常回调URL:https://www.someattack.com/Playground/ColorPicker.php?callback=changeColor
  3. 恶意构造URL:https://www.someattack.com/Playground/ColorPicker.php?callback=box.nextElementSibling.nextElementSibling.nextElementSibling.firstElementChild.click

5.2 实现方式

  1. 父子窗口方式

    // 父窗口打开子窗口
    window.open('攻击页面');
    // 子窗口重定向到恶意URL
    location.replace('恶意URL');
    
  2. iframe方式(避免浏览器拦截):

    <iframe src="目标页面" name=b></iframe>
    <iframe name=a></iframe>
    <script>
      window.frames[0].open('目标页面','a');
      setTimeout(function(){
        window.frames[1].location.href = '恶意URL'
      },1000);
    </script>
    

6. 关键注意事项

  1. 同源要求:攻击页面与目标页面必须严格同源
  2. 窗口关系:需要父子窗口关系才能操作DOM
  3. 浏览器限制:直接使用window.open可能被浏览器拦截
  4. DOM路径:需要准确获取目标元素的DOM路径

7. 防御措施

  1. 静态回调函数名:使用固定、不可预测的回调函数名
  2. 白名单机制:服务器端维护合法回调函数名白名单
  3. 回调函数注册:实现回调函数注册机制
  4. 输入过滤:严格过滤回调参数中的特殊字符(如点号)
  5. CSP策略:实施严格的内容安全策略

8. 实际应用场景

  1. 社交媒体自动关注/点赞
  2. 自动授权操作
  3. 用户资料篡改
  4. 敏感操作执行

9. 工具与资源

  1. DOM路径获取工具:如Reference Generator插件
  2. EXP生成器:自动化生成攻击链
  3. SOME靶场:用于练习和测试

10. 总结

SOME攻击利用JSONP回调可控性和同源策略,通过精心构造的方法调用链实现对目标页面DOM的操作。防御关键在于严格控制回调函数的可控性和实施严格的安全策略。

同源方式执行(SOME)攻击详解 1. SOME攻击概述 SOME(Same Origin Method Execution)是一种利用同源策略和JSONP技术漏洞的攻击方式。与XSS盗取cookie或CSRF构造请求不同,SOME攻击的目的是直接执行脚本代码。 1.1 与相关攻击的区别 XSS :窃取用户cookie或会话信息 CSRF :构造伪造请求执行操作 SOME :直接执行目标脚本代码 2. 前置知识 2.1 同源策略(SOP) 同源策略限制不同源的脚本对当前文档的访问,但允许同源脚本间的完全交互。 2.2 JSONP技术 JSONP是一种跨域数据访问技术,通过动态创建 <script> 标签实现,允许用户控制执行的回调函数。 3. SOME攻击原理 攻击者利用JSONP回调函数的可控性,注入恶意代码在同源环境下执行DOM操作。 3.1 攻击流程 找到可控的JSONP回调点 构造恶意回调函数链 诱导用户访问恶意链接 目标页面DOM被恶意操作 4. 攻击条件 存在用户可控函数点 :能够控制JSONP回调函数名 允许输入点号(.) :用于构造方法调用链 同源环境 :攻击页面与目标页面必须同源 5. 攻击复现示例 5.1 靶场示例 访问靶场页面: https://www.someattack.com/Playground/ColorPicker.php 正常回调URL: https://www.someattack.com/Playground/ColorPicker.php?callback=changeColor 恶意构造URL: https://www.someattack.com/Playground/ColorPicker.php?callback=box.nextElementSibling.nextElementSibling.nextElementSibling.firstElementChild.click 5.2 实现方式 父子窗口方式 : iframe方式 (避免浏览器拦截): 6. 关键注意事项 同源要求 :攻击页面与目标页面必须严格同源 窗口关系 :需要父子窗口关系才能操作DOM 浏览器限制 :直接使用 window.open 可能被浏览器拦截 DOM路径 :需要准确获取目标元素的DOM路径 7. 防御措施 静态回调函数名 :使用固定、不可预测的回调函数名 白名单机制 :服务器端维护合法回调函数名白名单 回调函数注册 :实现回调函数注册机制 输入过滤 :严格过滤回调参数中的特殊字符(如点号) CSP策略 :实施严格的内容安全策略 8. 实际应用场景 社交媒体自动关注/点赞 自动授权操作 用户资料篡改 敏感操作执行 9. 工具与资源 DOM路径获取工具 :如Reference Generator插件 EXP生成器 :自动化生成攻击链 SOME靶场 :用于练习和测试 10. 总结 SOME攻击利用JSONP回调可控性和同源策略,通过精心构造的方法调用链实现对目标页面DOM的操作。防御关键在于严格控制回调函数的可控性和实施严格的安全策略。