freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

SRC必会技巧——CORS跨域漏洞
2024-06-09 19:14:30

一、同源策略介绍

同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读取对方的资源,所以,abc.com下的js脚本采用ajax读取def.com里面的文件数据是会被拒绝的。

同源策略限制了从同一源文件的文档或脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的重要安全机制。

二、解决跨域问题

由于同源策略的影响,当我们从一个域名的网页去请求另一个域名的资源时,就无法成功获取资源。如果我们想要成功获取资源,那么就要用到跨域。

跨域解决方案:jsonp,cors,postMessage。

三、CORS跨域资源共享

CORS跨域资源共享漏洞一般在于请求包当中Origin请求头,然后去观察相应包当中Access-Control-Allow-Origin当网站发起跨域资源请求时,服务端将返回协议,并且浏览器添加Origin。

1717930816_66658b40ca9ef4472daab.png!small?1717930817869

请求头当中添加Origin:www.abc.com随意输入一个网址,查看相应包发现Access-Control-Allow-Origin:www.abc.com内容随之改变。

在正常情况下,服务器端返回Access-Control-Allow-Origin:*的时候资源可以被本地域进行访问,当变成null表明可以被任意外域进行访问。

1717930837_66658b551df1c777f3826.png!small?1717930838362

如图所示请求,在请求包当中不存在origin协议但是发现相应包存在目标协议,则可以进行具体分析,在请求包当中添加Origin协议,测试是否可以进行外域访问,当然这一步的前提是查看是否相应包当中存在敏感信息,如果存在在进行跨域。

  1. 是否存在敏感信息。
  2. 相应包是否存在Access-Control-Allow-Origin
  3. 查看请求头是否有Origin,有则尝试跨域,无则添加Origin协议
  4. 查看是否相应包协议跟随请求包协议进行变化

我们这里对请求包和相应包进行一下详解:

request:

1  GET /resources/public-data/ HTTP/1.1
2  Host: bar.com
3  User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
4  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
5  Accept-Language: en-us,en;q=0.5
6  Accept-Encoding: gzip,deflate
7  Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
8  Connection: keep-alive
9  Referer: http://example.com/examples/access-control/simpleXSInvocation.html
10 Origin: http://example.com

response:

11  HTTP/1.1 200 OK
12  Date: Mon, 01 Dec 2020 00:23:53 GMT
13  Server: Apache/2.0.61 
14  Access-Control-Allow-Origin: *
15  Keep-Alive: timeout=2, max=100
16  Connection: Keep-Alive
17  Transfer-Encoding: chunked
18  Content-Type: application/xml

这里request是请求首部,在第十行Origin表明该请求来源于http://example.com.

response可以看到http://bar.com的服务端响应,响应中携带了响应首部字段Access-Control-Allow-Origin

使用OriginAccess-Control-Allow-Origin就能完成最简单的访问控制了,本例中,服务端返回的Access Access-Control-Allow-Origin:*表明,该资源可以被任意外域进行访问,如果服务端仅允许来自http://example.com的访问,该首部字段的内容如下:

Access-Control-Allow-Origin: http://example.com

如果跨域请求可以包含cookie的话,在服务端响应应该有这一字段:

Access-Control-Allow-Credentials: true

这样的话攻击者就可以利用这个漏洞来窃取已经在这个网站登录了的用户的信息(利用cookie)。

四、漏洞利用

1、这里以droabox靶场为例

1717930942_66658bbed63e1547f5cd7.png!small?1717930943541

这个接口会返回已经登录的用户信息数据,通过访问该网页的响应我们可以看到这里可能存在CORS跨域资源共享漏洞。

# web安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录