首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入了解CORS数据劫持漏洞

CORS介绍

CORS(跨源资源共享)是一种用于在Web应用程序中处理跨域请求的机制。当一个Web应用程序在浏览器中向不同的域(源)发起跨域请求时,浏览器会执行同源策略,限制了跨域请求的默认行为。同源策略要求Web应用程序只能访问与其本身源(协议、域名和端口)相同的资源。

然而,在某些情况下,我们希望允许来自其他源的跨域请求,例如使用AJAX进行跨域数据访问或在前端应用程序中嵌入来自不同域的资源(如字体、样式表或脚本)。这时就需要使用CORS来解决跨域请求的限制。

CORS通过在服务器端设置响应头来进行配置。当浏览器发起跨域请求时,服务器可以通过设置特定的CORS响应头来告知浏览器是否允许该请求。常见的CORS响应头包括以下几个:

:指定允许访问该资源的源。可以是具体的源(如http://example.com)或通配符(),表示允许来自任意源的访问。

:指定允许的HTTP方法(如GET、POST、PUT等)。

:指定允许的请求头字段。

:指定是否允许发送身份凭证(如cookies、HTTP认证等)。

:指定预检请求(OPTIONS)的有效期,以减少对服务器的频繁请求。

在前端代码中,如果要发送跨域请求,可以通过对象或添加额外的请求头来指示浏览器发起CORS请求。浏览器会自动在发送请求时检查响应中的CORS头信息,并根据配置决定是否允许该请求。

具体可参考MDN DOC

漏洞介绍

因为需要配置CORS响应头来告知浏览器是否允许该请求,所以如果配置不当,就可能导致攻击者通过恶意网站或代码执行跨域请求,从而获取或篡改用户的敏感数据(危害和CSRF类似,不过可以劫持返回的内容)。

漏洞复现

环境搭建

实战过程中,主要是以及设置为,这样才能劫持到数据,简单的漏洞复现环境如下:

php代码,保存为

简易启动php web服务

复现过程

直接打开会提示

unauth

根据代码,需要在Cookie中设置字段

[!NOTE]

浏览器默认SameSite是Lax,的情况下无法发送至第三方上下文中,所以需要设置一下,不然无法劫持!

设置后刷新就可以拿到数据了,我们假设这是敏感数据,后续即使对这个数据进行劫持。

auth

假设是目标,测试过程中在请求数据包头添加字段,观察响应包,发现Origin可控,且,还没有验证referer,就说明可以劫持了。

ac

编写POC如下:

放到第三方网站上,可见成功劫持

success特别说明

如果要CORS携带Cookie,同时成功利用该漏洞,需要满足如下几个条件

Cookie的属性值为,但目前浏览器默认几乎都是

响应头中的不能为通配符,而是应指定具体的域名,否则只能发起请求,无法获取到响应

服务器的响应头需要包含

在发起Ajax请求时,需要将设置为。

修复建议

限制的值为可信源,尽可能设置白名单,不能为,也不能为

避免的值为

设置(允许的 HTTP 方法)、(允许的请求头)

挖掘技巧

可以在burpsuite中勾选替换条件,自动增加Origin

burp

然后从响应头中查看是否可控Origin以及是否包含

resp

也可以挂着xray去扫,不过误报率可能会比较高,大多都不是敏感信息,没啥意思,不过反正都需要人工去判断,看个人喜好吧。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230517A00Y5800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券