• CORS跨域资源共享漏洞


    CORS漏洞其中已经存在很久了,但是国内了解的人不是很多,文章更是少只有少,漏洞平台也没有此分类。

    在DefConChina之后写了一篇算是小科普的文章。

    定义
    CORS,Cross-Origin Resource Sharing,跨源资源共享。
    CORS是W3C出的一个标准,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通。因为开发者需要进行跨域进行获取资源,应用场景,在a.com,想获取b.com中的数据,常用的2种方法进行跨域
    一种为JSONP,一种为CORS.前者再次不在描述,常见的为JSONP劫持。

    CORS请求示例:
    b.com想获取www.a.com/1.jpg的图片资源。
    代码如下:

    <!DOCTYPE html> 
    <html>
        <head>CORS Test</head>
        <body>
            <div id="img_Div"></div>
        <script type="text/javascript">  
            //XmlHttpRequest对象  
            function createXmlHttpRequest(){  
                if(window.ActiveXObject){ //如果是IE浏览器  
                    return new ActiveXObject("Microsoft.XMLHTTP");  
                }else if(window.XMLHttpRequest){ //非IE浏览器  
                    return new XMLHttpRequest();  
                }  
            }  
    
            function getFile() {
                var img_Container = document.getElementById("img_Div");
                var xhr = createXmlHttpRequest();
                xhr.open('GET', 'http://oss.youkouyang.com/1.jpg', true);
                xhr.setRequestHeader('Content-Type', 'image/jpeg');
                xhr.responseType = "blob";
                xhr.onload = function() {
                    if (this.status == 200) {
                        var blob = this.response;
                        var img = document.createElement("img");
                        img.onload = function(e) {
                            window.URL.revokeObjectURL(img.src); 
                        };
                        img.src = window.URL.createObjectURL(blob);
                        img_Container.appendChild(img);    
                    }
                }
                xhr.send(null);
            }
        </script>
        <div class="row">
            <input type="button" onclick="getFile()" value="Get" />
        </div>
        </body>
    </html>

    CORS安全机制
    在CORS中,相关的标准和浏览器厂商也推出了很多防范的相关标准。例如SOP等等。

    简单请求

    在简单请求中,如果请求符合2个标准,则会进行异步请求:
    1,GET、POST、HEAD..
    2,Content-Type验证,pplication/x-www-form-urlencoded;multipart/form-data;text/plain

    在简单请求中,浏览器进行跨域请求,会在请求中携带Origin,表面这是一个跨域。服务端会在接收中,通过自己的跨域规则进行验证。
    通过access-Control-Allow-Origin和Access-Control-Allow-Methods 如果验证成功,则会返回资源内容,如果验证失败,则返回403状态。

    预先请求
    在请求中,满足下面任意一个请求中,浏览器会首先发出OPTION请求,再去验证是否符合。


    在OWASP TOP 10中也有更详细的说明:
    http://blog.securelayer7.net/owasp-top-10-security-misconfiguration-5-cors-vulnerability-patch/
    在DefConChina中,陈建军分享的议题中解释的更清楚,有意向的可以找PPT或者视频

    实战请求COS之前发过一次CORS的蠕虫:
    http://evilcos.me/?p=590

    防御:
    在防御过程中,存在很多配置不当,或者配置错误的情况,例如使用*,或者使用多个域名list,或者使用null,或者nginx配置规则存在错误等等。

    相关工具:
    CORScanner // github

    参考:

    https://blog.csdn.net/saytime/article/details/51549888 

  • 相关阅读:
    一些术语
    Professional Frontend Engineering
    爱上阿森纳,爱上一种信仰
    ThinkPHP 和 UCenter接口的冲突
    这个城市
    来自Google的10条价值观
    如何将Gb2312转为unicode?
    未完成的代码(JS)
    微软也用PHP?!
    博客园对"公告"的Js进行了过滤
  • 原文地址:https://www.cnblogs.com/sevck/p/9035422.html
Copyright © 2020-2023  润新知