浅析跨域资源共享协议相关安全问题(下)

在上一篇文章中,我主要描述了,CORS是什么,CORS的工作流程,CORS漏洞产生的背景以及CORS漏洞产生的原因,在本篇中,我主要来讲述,如何挖掘CORS漏洞,如何利用CORS漏洞,以及如何修复CORS漏洞或者说避免产生CORS漏洞。

 

一、如何挖掘CORS漏洞?

方式一:curl命令

curl http://victim.com/user/userinfo.php -H "Origin:https://hacker.com/" -I

如果相应包中出现下面这种组合,则说明存在CORS漏洞

Access-Control-Allow-Origin: example.com
Access-Control-Allow-Credentials: true

如果Access-Control-Allow-Origin是根据用户输入动态生成那么我们就不需要去fuzz 服务器的匹配规则或者白名单了,否则我们就需要进行fuzz,用于发现其允许跨域请求的子域名或者其匹配规则,当然orgin值为null也是值得尝试的。

方法二:burpsuit手动测试方法

首先通过burp的匹配和替换功能,在发包的时候添加Origin头,Origin头的值,可以随便给出,如下图所示,但是这种情况的话,只能挖掘那种服务器根据用户输入动态生成Access-Control-Allow-Origin标头值的情况,原因我在上一篇文章中已经讲过,这里不再赘述。

然后我们通过配置HTTP history的过滤器,使用下图所示的配置,以便于我们更容易的看到相应的返回结果。

接下来就是,使用开启burp代理的浏览器,并且把burp的拦截功能关掉,然后尽可能的把我们需要测试的网站所有的页面都浏览一遍(如果网站可以登录,就登录后再开始浏览,重点包括用户的个人主页,个人信息页,以及一些该网站上用户的私有资源。

在一通访问过后,如果我们在经过过滤的burp的HTTP history中看到了如下图所示的数据包记录,并且查看返回包,类似下图中的这种字段组合,那么说明该站点存在CORS漏洞。

如果我们使用的是burp的专业版,也可以通过burp自带的扫描器来发现CORS漏洞,不过这种会存在误报,发现问题后,还是需要手动验证。

方式三:自动化扫描工具

CORScanner 是一个 python 工具,旨在发现网站的 CORS 错误配置漏洞。它可以帮助网站管理员和渗透测试人员检查他们所针对的域/url 是否具有不安全的 CORS 策略。

https://github.com/chenjj/CORScanner

基础用法:

列出所有基本选项:python cors_scan.py -h
检查特定域的 CORS 错误配置: python  cors_scan.py -u http://example.com -v
检查带有特定标头的 CORS 错误配置: python cors_scan.py -u example.com -d "Cookie: test"
检查多个域/URL 的 CORS 错误配置: python cors_scan.py -i top_100_domains.txt -t 100

二、如何利用CORS漏洞?

这里的CORS漏洞利用演示主要利用了burp官方提供的在线实验室,burp官方提供了三个CORS漏洞相关的在线实验室,限于篇幅限制我这里只演示其中的一个,感兴趣的师傅可以通过下面这个链接找到这些在线实验室进行cors漏洞的利用及学习。

可用于实验的平台:https://portswigger.net/web-security/cors

 

当我们配置好这些然后,通过 Burp Suite 代理我们的浏览器,关闭拦截,然后登陆下图这个网站并且访问我们的用户个人信息界面

我们在HTTP History看到请求用户信息的这个包,服务器返回的header头中出现了我们前面讲述的ACAO和ACAC头并且ACAC设置为ture,那么说明存在CORS漏洞

该在线实验室还给我们提供了可以用于攻击的服务器,下面这张图显示了,我们攻击者服务器构造的恶意页面的内容,意思就是说,受害者点击我们的恶意链接后,浏览器解析我们的页面,然后会发送一个跨域请求,去获取这个网站上该用户个人的个人信息,然后将结果返回到我们攻击服务器的日志中。

从下面这张图我们可以看到,当用户点击我们的恶意链接后,我们可以在日志页面看到我们通过CORS漏洞获取到的用户的个人信息。

三、如何修复或者避免CORS漏洞?

1、仔细评估是否开启CORS,如果不必要就不要开启CORS。

2、如果是绝对必要的话,要定义“源”的白名单。尽量不使用正则表达式配置,不要配置“Access-Contol-Allow-Origin”为通配符“*”,同时严格校验来自请求的Origin值。

3.如果可能的话避免使用“Credentials”头,由于“Access-Control-Allow-Credentials”标头设置为“true”时允许跨域请求中带有凭证数据,因此只有在十分必要时才应配置它。此头部也增加了用户个人信息泄露的风险,因此有必要对其进行保护。

4.避免将null列入白名单,来自内部文档和沙盒请求的跨域资源调用可以指定null来源。应针对私有和公共服务器的可信来源正确定义CORS标头。

5.CORS定义了浏览器的行为,绝不能替代服务器端对敏感数据的保护-攻击者可以直接从任何可信来源伪造请求。因此,除了正确配置的CORS之外,Web服务器还应继续对敏感数据应用保护,例如身份验证和会话管理。

6、限制使用的方法,通过“Access-Control-Allow-Methods”头部,还可以配置允许跨域请求的方法,这样可以最大限度地减少所涉及的方法。

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

四、参考文献:

我在写这两篇文章的时候,参考了下面的这些大佬的文章或者相关机构的手册,推荐对CORS机制以及CORS漏洞相关内容感兴趣的师傅可以通过阅读下面的这些文章,以便于更加深入的CORS相关的安全知识。

同源策略相关知识https://www.anquanke.com/post/id/86078

同源策略相关概念细节https://www.cnblogs.com/wudeyun/p/13296912.html

XMLHttpRequest相关:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest

关于CORS请求包过程中的一些细节:https://lightless.me/archives/review-SOP.html#_label2

CORS基础概念相关:https://portswigger.net/web-security/cors

CORS涉及到的所有概念细节:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

CORS运行机制的细节:https://portswigger.net/web-security/cors/access-control-allow-origin

CORS漏洞挖掘方法:https://mp.weixin.qq.com/s/cUg9jUM_DkPrIaVmKghK4Q

CORS漏洞介绍及利用笔记:https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties

CORS漏洞利用思路:https://www.geekboy.ninja/blog/exploiting-misconfigured-cors-cross-origin-resource-sharing/

CORS漏洞高级利用方法相关知识:https://www.freebuf.com/articles/web/204023.html

CORS漏洞高级利用方法: https://www.corben.io/advanced-cors-techniques/

CORS漏洞高级利用案例:https://www.corben.io/tricky-CORS/

CORS漏洞防御方法https://blog.csdn.net/qq_43571759/article/details/105838128

本文作者:南城夕雾, 转载请注明来自FreeBuf.COM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值