CORS跨域资源共享漏洞的复现、分析、利用及修复过程

这篇具有很好参考价值的文章主要介绍了CORS跨域资源共享漏洞的复现、分析、利用及修复过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Part1 前言 

CORS跨域资源共享漏洞与JSONP劫持漏洞类似,都是程序员在解决跨域问题中进行了错误的配置。攻击者可以利用Web应用对用户请求数据包的Origin头校验不严格,诱骗受害者访问攻击者制作好的恶意网站,从而跨域获取受害者的敏感数据,包括转账记录、交易记录、个人身份证号信息、订单信息等等

近几年在很多的渗透测试报告中,CORS跨域资源共享漏洞越来越多了。有的朋友实在挖不出漏洞,偶尔就会写上一个CORS跨域资源共享漏洞出一份报告,但是细究起来以下几个问题,却都模棱两可,搞不明白。

1. 什么是CORS漏洞?

2. 哪些情况下的CORS漏洞是高危漏洞?哪些情况下CORS漏洞是没有危害的?

3. CORS漏洞的怎么利用?

4. CORS漏洞的修补建议?

很多朋友以为Web应用返回Access-Control-Allow-Origin: *就是存在漏洞,其实这个判断是不完善的。本期作者自己写了一个Java的测试环境,给大家演示一下CORS漏洞的复现过程及利用过程,相信大家一看就明白了。

Part2 CORS漏洞测试结果 

首先给出最终测试结果,以下结论是自写Java代码搭建环境进行测试给出的结论,欢迎大家批评指正。首先使用burpsuite抓包对http请求添加Origin: http://www.attacker.com进行测试:

 1   如果返回头是以下情况,那么就是高危漏洞,这种情况下漏洞最好利用:

Access-Control-Allow-Origin: https://www.attacker.com

Access-Control-Allow-Credentials: true

 2   如果返回头是以下情况,那么也可以认为是高危漏洞,只是利用起来麻烦一些:

Access-Control-Allow-Origin: null

Access-Control-Allow-Credentials: true

 3   如果返回以下,则不存在漏洞,因为Null必须是小写才存在漏洞:

Access-Control-Allow-Origin: Null

Access-Control-Allow-Credentials: true

 4   如果返回以下,可认为不存在漏洞,因为CORS安全机制阻止了这种情况下的漏洞利用,也可以写上低危的CORS配置错误问题。

Access-Control-Allow-Origin: *

Access-Control-Allow-Credentials: true

 5   如果返回以下,可认为不存在漏洞,也可以写上低危的CORS配置错误问题。

Access-Control-Allow-Origin: *

 Part3 CORS跨域漏洞复现 

一般CORS漏洞的测试过程

首先复习一下常规的CORS漏洞测试过程:抓取一个能够返回个人敏感数据的HTTP请求包,添加Origin: http://www.xxx.com,查看返回头中是否包含“Access-Control-Allow-Origin: *”、“Access-Control-Allow-Credentials: true”,这里说明一点,如果返回包中这两个头同时存在,那么它其实是不存在CORS漏洞的。接下来依据Access-Control-Allow-Origin、Access-Control-Allow-Credentials的不同返回值的各种情况,分别写Java代码测试一下,是否能够获取敏感数据,大家就明白了。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程

  • 编写Java代码测试

接下来我用Java编写了两个Servlet代码模拟一个Web购物网站,用JS前端代码模拟攻击者构造的CORS漏洞利用html页面。

如下所示,首先是登录界面的servlet代码如下。

 CORS跨域资源共享漏洞的复现、分析、利用及修复过程

代码效果如下,用户输入用户名密码后,购物网站提示登录成功,这时候后台代码已经生成Cookie。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程

接下来用户访问PersonInfo页面,http://192.168.237.1:9999/Servlet/PersonInfo 会显示交易密码是123456。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程 

此页面对应的PersonInfo的Sevlet代码如下:

CORS跨域资源共享漏洞的复现、分析、利用及修复过程 

接下来攻击者为了获取该购物网站用户的交易密码,精心构造了如下的attack.html页面放到Web服务器上,此时攻击URL是http://www.attacker111.com/attack.html。攻击者将此URL发给受害者浏览,受害者的交易密码将会被获取到。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程

  • 第1种情况:

首先看第1种情况,服务器返回如下消息头,这种情况下,非常好利用,所以漏洞定级是高危:

Access-Control-Allow-Origin: https://www.attacker.com

Access-Control-Allow-Credentials: true

这两个返回头表示应用程序允许来自任何Origin的任何脚本向应用程序发出CORS请求,这时候程序员的代码是这样写的:

CORS跨域资源共享漏洞的复现、分析、利用及修复过程

受害者访问攻击者构造好的URL之后,成功获取用户的敏感数据。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程

F12查看浏览器发出的请求,发现其带上了Cookie,成功绕过跨域的同源限制。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程 

 文章来源地址https://www.toymoban.com/news/detail-466204.html

  • 第2种情况:

服务器返回如下消息头,这种情况下,利用起来稍有困难,这里的null必须全部都是小写,漏洞仍然是高危。

Access-Control-Allow-Origin: null

Access-Control-Allow-Credentials: true

在这种情况下,应用程序HTTP响应头Access-Control-Allow-Origin的值始终为null。当用户指定null以外的任何值时,应用程序不会处理。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程

这时候访问http://192.168.237.199/attack.html,发现浏览器提示CORS策略错误。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程 

因为这时候的Origin不等于null

CORS跨域资源共享漏洞的复现、分析、利用及修复过程 

这里需要想办法让Origin等于null,于是攻击者构造如下js代码:

CORS跨域资源共享漏洞的复现、分析、利用及修复过程 

此时发现仍然可以成功获取用户的敏感数据。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程 

  • 第3种情况:

服务器返回如下消息头,这种情况下,其实是不存在漏洞的,如果非要牵强地说存在漏洞,可以协商CORS配置错误,毕竟设置为*本身就有问题。

Access-Control-Allow-Origin: *

Access-Control-Allow-Credentials: true

对应着java代码如下:

CORS跨域资源共享漏洞的复现、分析、利用及修复过程

 访问http://www.attacker111.com/attack.html发现,浏览器直接报错,看来这种情况根本不被安全策略所允许。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程

  • 第4种情况:

服务器返回如下消息头,这个就不演示了,只能说明CORS配置存在问题,但是没法获取敏感数据,漏洞评级应为中危或者低危。

Access-Control-Allow-Origin:*

  • Chrome浏览器测试结果

接下来换谷歌Chrome浏览器最新版本下测试,发现确实成功绕过了同源策略,发起了跨域请求,但是Chrome浏览器却没有为请求带上Cookie,所以漏洞利用有限。

CORS跨域资源共享漏洞的复现、分析、利用及修复过程

 Part4 修补建议 

1. Access-Control-Allow-Origin中指定的来源只能是受信任的站点,避免使用Access-Control-Allow-Origin: *,避免使用Access-Control-Allow-Origin: null,否则攻击者可以伪造来源请求实现跨域资源窃取。

2. 严格校验“Origin”值,校验的正则表达式一定要编写完善,避免出现绕过的情况。

3. 减少“Access-Control-Allow-Methods”所允许的请求方法。

4. 除了正确配置CORS之外,Web服务器还应继续对敏感数据进行保护,例如身份验证和会话管理等。

 

 

 

 

 

 

 

到了这里,关于CORS跨域资源共享漏洞的复现、分析、利用及修复过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端调用DRI后端API出现跨域资源共享(CORS)问题解决办法

    目录 1. 引言 2. 跨源资源共享和实现方法 3. 在Django项目中配置django-cors-headers库 Reference 在进行后端API开发时,有时会遇到“跨域资源共享 (CORS) 请求...被阻止“的错误,如图1所示。本文讲解如何在使用DRF(Django REST Framework)的后端API开发项目中解决这个问题。 A cross-origin re

    2024年04月25日
    浏览(36)
  • 彻底理解前端安全面试题(3)—— CORS跨域资源共享,解决跨域问题,建议收藏(含源码)

    前端关于网络安全看似高深莫测,其实来来回回就那么点东西,我总结一下就是 3 + 1  = 4,3个用字母描述的【分别是 XSS、CSRF、CORS】 + 一个中间人攻击。当然 CORS 同源策略是为了防止攻击的安全策略,其他的都是网络攻击。除了这 4 个前端相关的面试题,其他的都是一些不常

    2024年02月01日
    浏览(36)
  • 通过HTTP隧道在Linux上实现跨域资源共享(CORS):打破数字世界的“门禁”

    在数字世界里,有时你会碰到一些“门禁”,它们阻止你访问某些资源,就像现实生活中的门禁系统一样。这些“门禁”就是所谓的跨域资源共享(CORS)限制。不过别担心,我们有一个绝妙的解决方案:通过HTTP隧道在Linux上实现CORS,让你轻松跨越这些“门禁”,畅游数字世

    2024年02月21日
    浏览(32)
  • Python flask跨域支持(Access-Control-Allow-Origin(CORS)跨域资源共享(访问控制允许来源:允许指定的来源进行跨域请求)浏览器同源策略、OPTIONS预检请求

    浏览器的同源策略(Same-Origin Policy)限制了跨域请求,如果不进行特殊处理,跨域请求将被浏览器拦截。 接口支持跨域能够允许浏览器跨域请求不被浏览器拦截。 下面是跨域请求的一些影响、优点和缺点: 优点 允许不同域名下的应用程序进行数据交互,提高了系统的灵活性

    2024年02月11日
    浏览(28)
  • HTTP 第六章 跨资源共享(CORS)

    跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该

    2024年02月22日
    浏览(32)
  • 【burpsuite安全练兵场-客户端13】跨来源资源共享(CORS)-4个实验(全)

       博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edusrc高白帽,vulfocus、攻防世界等平台排名100+、高校漏洞证书、cnvd原创漏洞证书,华为云、

    2024年02月02日
    浏览(27)
  • WEB攻防通用漏洞&跨域CORS资源&JSONP回调&域名接管劫持

    目录 一、同源策略(SOC) 二、跨域资源(COSP) 三、回调跨域(JSOP) 四、CORS资源跨域-敏感页面原码获取 五、JSONP 回调跨域-某牙个人信息泄露 六、子域名劫持接管 同源策略 (SOP)-“ 同源 ” 包括三个条件:同协议、同域名、同端口。 会检测数据包的来源在哪里,进而来判

    2024年02月01日
    浏览(50)
  • 【开源】基于JAVA的教学资源共享平台

    基于JAVA+Vue+SpringBoot+MySQL的教学资源共享平台,包含了课程管理、课程课件、授课中心、作业发布、课程评价、课程质量分析、交流互动模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,教学资源

    2024年01月19日
    浏览(45)
  • 云计算资源供应模型是指云计算所提供的资源供应方式,主要包括共享型资源和专属型资源。

    作者:禅与计算机程序设计艺术 云计算是一种将大数据、机器学习等技术应用到互联网的数据中心中,向用户提供更高级的计算服务的一种服务模式。其特点之一就是利用计算机硬件、网络和软件资源池作为计算基础设施(Infrastructure as a Service, IaaS)或平台服务(Platform as

    2024年02月06日
    浏览(32)
  • 【开源】基于JAVA语言的教学资源共享平台

    基于JAVA+Vue+SpringBoot+MySQL的教学资源共享平台,包含了课程管理、课程课件、授课中心、作业发布、课程评价、课程质量分析、交流互动模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,教学资源

    2024年01月20日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包