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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM