Web安全-CORS漏洞
目录
跨域资源共享(cors)可以放宽浏览器的同源策略,让不同的网站和不同的服务器之间通信
1. 同源策略
同源策略是一个非常重要的安全策略,它用于限制一个origin的文档或它加载的脚本如何能与另一个源的资源进行交互。简单来说就是:同源策略允许运行在页面的脚本如JavaScript可以无限制地访问同一个网站(同源)中其他脚本的任何方法和属性。这里提到的一个点:同源
什么是同源?
- 同协议(如:都是www)
- 同域名(域名和它的子域名不是同源)
- 同端口(如:都是80端口)
其实就是URL地址的前几个部分
同源策略就简单介绍到这里,想要详细了解的话可以点击这里
2. 什么是CORS
在这个web2.0的时代,同源策略的限制太多了,因此有了放宽同源策略限制的技术,那就是跨域资源共享(CORS)。
这种机制通过在HTTP头部添加字段,允许浏览器向跨域服务器发出XMLHttpRequest请求,从而克服AJAX只能同源使用的限制
在用浏览器发送时,会自动在请求头中添加Origin字段,服务端验证Origin字段是否被允许,如果允许,那就可以进行跨域访问了 {
CORS的标准定义是:通过设置HTTP头部字段,让客户端能够跨域访问资源。
CORS定义了两种跨域请求:
- 简单请求:使用设定的请求方式请求资源
- 非简单请求:先发送一个OPTION预检请求,验证请求源是否为服务端所允许的源,预检通过后,发送请求,请求资源
主要的头部字段:
- Origin:表明预检请求或实际请求的源站
- Access-Control-Request-Method:用于预检请求,其作用是将实际请求所使用的HTTP方法告诉服务端
- Access-Control-Request-Headers:用于预检请求,其作用是将实际请求所携带的头部字段告诉服务端
- Access-Control-Allow-Origin:该字段的值可以是请求时Origin字段的值,也可以是一个*( * 表示接受任意域名)
- Access-Control-Allow-Credentials :该字段是一个布尔值,为true的时候表示cookie可以包含在请求中一起发送给服务器
3. CORS的攻击与利用
漏洞利用的最终目的是:受害者只要访问一个攻击页面,攻击者就可以获取到敏感信息
3.1 有用户凭证的利用
Access-Control-Allow-Origin 值 | Access-Control-Allow-Credentials 值 | 是否可利用 |
---|---|---|
https://attacker.com | true | 是 |
null | true | 是 |
* | true | 否 |
3.2 没有用户凭证的利用
这种情况下是没有cookie传输的,所以攻击者很难拿到cookie。
Access-Control-Allow-Origin 值 | 是否可利用 |
---|---|
https://attacker.com | 是 |
null | 是 |
* | 是 |
上表中的null源是为了网页跳转或来自本地HTML文件。
3.2.1 利用null源
使用沙盒iframe来获取null源
|
|
使用上面的iframe产生一个类似于下面的请求:
|
|
服务器接收到null源返回类似于下面的报文:
|
|
3.3 利用XMLHttpRequest发包
- 在远程服务器上准备记录代码(用于获取敏感信息)
|
|
- 构建攻击页面
|
|
- 当受害者访问攻击页面,服务器上就会记录敏感信息
4. 几个利用工具
- Brupsuite自带cors检验,但误报率较高
- X-ray检测
- CORScanner
5. CORS的防御
- 严格校验来自请求数据包中的Origin的值
- 不要配置Access-Control-Allow-Origin字段的值为*
- 避免使用Access-Control-Allow-Credentials: true
- 避免使用OCRS
- 定义白名单
- 使用安全协议
- 限制缓存时间
- 仅配置所需的头部