浅析同源方式执行(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 攻击流程
- 找到可控的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 实现方式
-
父子窗口方式:
// 父窗口打开子窗口 window.open('攻击页面'); // 子窗口重定向到恶意URL location.replace('恶意URL'); -
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. 关键注意事项
- 同源要求:攻击页面与目标页面必须严格同源
- 窗口关系:需要父子窗口关系才能操作DOM
- 浏览器限制:直接使用
window.open可能被浏览器拦截 - DOM路径:需要准确获取目标元素的DOM路径
7. 防御措施
- 静态回调函数名:使用固定、不可预测的回调函数名
- 白名单机制:服务器端维护合法回调函数名白名单
- 回调函数注册:实现回调函数注册机制
- 输入过滤:严格过滤回调参数中的特殊字符(如点号)
- CSP策略:实施严格的内容安全策略
8. 实际应用场景
- 社交媒体自动关注/点赞
- 自动授权操作
- 用户资料篡改
- 敏感操作执行
9. 工具与资源
- DOM路径获取工具:如Reference Generator插件
- EXP生成器:自动化生成攻击链
- SOME靶场:用于练习和测试
10. 总结
SOME攻击利用JSONP回调可控性和同源策略,通过精心构造的方法调用链实现对目标页面DOM的操作。防御关键在于严格控制回调函数的可控性和实施严格的安全策略。