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

  • 可控点可以输入”.”,点号(因为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界面,两个窗口父子关系是满足的。