浅析同源方式执行(SOME)攻击

栏目: Json · 发布时间: 6年前

内容简介:* 本文作者:Str3am,本文属FreeBuf原创奖励计划,未经许可禁止转载SOME(Same Origin Method Execution),同源方式执行,不同于 XSS 盗取用户 cookie 为目的,直接劫持 cookie 经行操作,和 CSRF 攻击很类似,不同的是 CSRF 是构造一个请求,而 SOME 则希望脚本代码被执行。 非常感谢兔子师傅@Homaebic在分享会上的分享,才有了这篇文章。想要理解SOME攻击,必须先对同源策略和JSONP技术有所了解,JSONP我理解为一种用户可控制j

* 本文作者:Str3am,本文属FreeBuf原创奖励计划,未经许可禁止转载

SOME(Same Origin Method Execution),同源方式执行,不同于 XSS 盗取用户 cookie 为目的,直接劫持 cookie 经行操作,和 CSRF 攻击很类似,不同的是 CSRF 是构造一个请求,而 SOME 则希望脚本代码被执行。 非常感谢兔子师傅@Homaebic在分享会上的分享,才有了这篇文章。

0×01 原理及危害

想要理解SOME攻击,必须先对同源策略和JSONP技术有所了解,JSONP我理解为一种用户可控制js执行函数的跨域数据访问技术,详细可以参见这篇文章或者百度。

SOME攻击

正是由于JSONP可以控制执行函数的特性,产生了SOME攻击,主要危害比如点击链接后自动关注微博,自动点赞,自动授权等。

0×02 攻击条件

  1. 存在用户可控函数点,读取用户输入执行对应javascript代码(即寻找JSONP点,通常以get方法callback名传入)
  2. 可控点可以输入”.”,点号(因为SOME攻击主要还是操作网页DOM)

0×03 SOME复现

这里通过一个大佬写的SOME靶场来练习复现,除了靶场,还有查找dom工具,exp生成,SOME原理介绍,很不错的一个学习网站。

浅析同源方式执行(SOME)攻击

Same Origin Method Execution

点击第一个 Vulnerable Example 项目,并打开一个子网页,在颜色轮盘上选择任意颜色,发现父网页标签背景会根据选择改变。

浅析同源方式执行(SOME)攻击

子网页其实就是一个JSONP可控点,当我们点击轮盘中的任意颜色后它的连接如下:

https://www.someattack.com/Playground/ColorPicker.php?callback=changeColor

现在我们想要做的就是控制callback参数,访问之后自动点击父页面的红色按钮。

利用第二个 Reference Generator 项目介绍的谷歌插件,这是一个可以自动获取元素DOM位置的插件。

浅析同源方式执行(SOME)攻击

右键即可获取,可在控制台中用click事件测试是否获取正确。

浅析同源方式执行(SOME)攻击

修改子页面参数如下:

https://www.someattack.com/Playground/ColorPicker.php?
callback=box.nextElementSibling.nextElementSibling
.nextElementSibling.firstElementChild.click

访问之后弹窗,按钮被点击,SOME攻击实现。

浅析同源方式执行(SOME)攻击

兔子师傅演示的时候打开了两个网页some1和some2,打开some1后,用windiow。open方式打开some2页面,等some1页面加载完之后,some2地址location.replace到payload实现攻击。

我在实际测试的时候发现,当我打开第一个页面,然后直接开启一个新的页面访问payload,第一个页面是不会弹窗的,但是两个页面都是满足同源策略的,按理说执行脚本代码是没问题的,参阅文章后发现,要实现DOM操作,两个界面还必须满足父窗口和子窗口关系,这样子窗口才能够操作到父窗口的DOM,否则执行操作的时候会提示元素找不到的错误。兔子师傅这里是在some1下用window.open打开的some2界面,两个窗口父子关系是满足的。

同时,还需要注意一点的是,因为很多浏览器禁止window.open的原因(谷歌和火狐会禁止),兔子师傅的方法局限性很大,柠檬师傅采用了两个iframe的办法,避免了拦截,也很好的保证了同源性。附上柠檬师傅的代码

<iframe src="https://www.someattack.com/Playground/" name=b></iframe>
        <iframe name=a></iframe>
        <script>
        window.frames[0].open('https://www.someattack.com/Playground/','a');
        setTimeout(
          function(){
            window.frames[1].location.href = 'https://www.someattack.com/Playground/ColorPicker.php?callback=document.body.firstElementChild.lastElementChild.lastElementChild.lastElementChild.previousSibling.previousSibling.lastElementChild.click'
          }
        ,1000);
</script>

0×04 漏洞防御

  1. 回调函数使用静态函数命名,限制该函数的调用范围。
  2. 谷歌的解决方法是,把回调函数加入服务器端的白名单。
  3. Hayak建议,注册回调函数。

参考链接:

https://www.someattack.com/Playground/

http://blog.safedog.cn/?p=13

http://www.aqniu.com/hack-geek/5075.html

* 本文作者:Str3am,本文属FreeBuf原创奖励计划,未经许可禁止转载


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

你必须知道的213个C语言问题

你必须知道的213个C语言问题

范立锋、李世欣 / 人民邮电出版社 / 2010-6 / 45.00元

《你必须知道的213个C语言问题》精选了213个在C语言程序设计中经常遇到的问题,目的是帮助读者解决在C语言学习和开发中遇到的实际困难,提高读者学习和开发的效率。这些问题涵盖了C语言与软件开发、C语言基础、编译预处理、字符串、函数、键盘操作、文件、目录和磁盘、数组、指针和结构、DOS服务和BIOS服务、日期和时间、重定向I/O和进程命令、C语言开发常见错误及程序调试等内容,均是作者经过充分的调研,......一起来看看 《你必须知道的213个C语言问题》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具