<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 10\. Dom Xss 進階 [邂逅 eval] > 來源:[10\. Dom Xss 進階 \[邂逅 eval\]](http://www.wooyun.org/bugs/wooyun-2010-016197) ## 簡要描述 前面的教程,說到了顯式輸出和隱式輸出。但是不論怎么樣,因為最終 javascript 都會通過 document.write 或 innerHTML 將內 容輸出到網頁中,所以我們總是有辦法看到輸出到哪里。 但是有時候,我們的輸出,最終并沒有流向 innerHTML 或 document.write, 而是與 eval 發生了邂逅,我們該怎么挖掘并利用呢? ## 詳細說明 1\. 我們直接上例子。 ``` http://kf.qq.com/search_app.shtml?key=aaaaa ``` 和前面的不同之處,這次我們搜索源代碼和調試工具都看不到任何東西。 ![image](https://box.kancloud.cn/2016-03-23_56f250408c4f3.jpg) 2\. 這個時候,我們可以看看 Console,看看有沒有其它有用的東西~~ 一般來說,默認情況下,是不會有問題的。我們可以給參數加一些特殊符號。 這里我比較習慣用`\`,因為這玩意比較好使。當然你也可以用其它比較特殊的符號,比如雙引號,單引號,只是被過濾掉的幾率比較大。 這個時候,我們看看 Console 里面,多出了一條錯誤。 ![image](https://box.kancloud.cn/2016-03-23_56f25040a42a8.jpg) 我們可以點右側,直接定位到錯誤代碼。 ![image](https://box.kancloud.cn/2016-03-23_56f25040c12e4.jpg) 3\. 點進去后,可以看到是哪個地方出錯了。 ![image](https://box.kancloud.cn/2016-03-23_56f25040d80d6.jpg) 我們來看看這段代碼: ``` var getarg = function() { var url = window.location.href; var allargs = url.split("?")[1]; if (allargs!=null && allargs.indexOf("=")>0) { var args = allargs.split("&"); for(var i=0; i<args.length; i++) { var arg = args[i].split("="); eval('this.'+arg[0]+'="'+arg[1]+'";'); } } }; ``` 和上一節教程類似,這段代碼,實際上也是一個獲取地址欄參數的代碼。 比如,地址欄是 `key=aaaa;` 那么 `arg[0]` 就是字符串`'key'`, `arg[1]` 就是字符串 `'aaaa'`; 那么 eval 這句就是執行的 `eval('this.key="aaaa";')` ![image](https://box.kancloud.cn/2016-03-23_56f2504103461.jpg) 這樣一來 , `this.key="aaaa";`這句就被執行了。 4\. 如果這里我們把 key 換個寫法呢? ``` this.key="aaaa"; this.key;alert(1);//="aaaa"; ``` 如下圖: ![image](https://box.kancloud.cn/2016-03-23_56f2504114f96.jpg) 那么是不是將會執行我們的 `alert(1);`呢? 5\. 根據上面內容,我們可以構造代碼。 ``` http://kf.qq.com/search_app.shtml?key;alert(1);//=aaaa ``` HOHO~,如我們所愿的彈出了。 ![image](https://box.kancloud.cn/2016-03-23_56f2504125ae4.jpg) 6\. 不知道看完上面的,有沒有娃注意到,后面的 aaaa 不是也可以構造嗎? ``` this.key="aaaa"; ``` 換為 ``` this.key="aaa";alert(1);//"; ``` 確實是如此 :) ``` http://kf.qq.com/search_app.shtml?key=aaa";alert(1);// ``` 這個在 IE 下一樣是可以的。 但是這樣在 chrome 下卻不行。 原因其實上面一節教程也提到過。 chrome 會自動對`"`, `>`, `<` 進行轉換。 因而 `this.key="aaa";alert(1);//";` 會變成 `this.key="aaa%22;alert(1);//";` 從而失效。 7.上面就是本篇教程了,我們再來看看題外話。 其實以上問題,不是單獨存在的。在另外一個頁面也是存在的。 更多內容,參見本篇漏洞修復。 ## 修復方案 參照你們已經修復的類似文件即可。 ``` http://kf.qq.com/wsearch.shtml ``` 的 ``` http://kf.qq.com/js/wsearch.js ``` 本來上面這個文件也是存在漏洞的,估計這個位置已經被人報告給騰訊了,因而騰訊加了一次防御。我們看看騰訊的防御措施。 ``` var getarg = function(){ .... 省略相同部分... eval('this.' + arg[0] + '="' + HtmlAttributeEncode(arg[1]) + '";'); .... 省略相同部分... } ``` 也就是說,騰訊這里對后面的 `arg[1]` 進行了過濾。 接著,這個問題又被再次報告了,因而前些時候,騰訊又進一步做了修復。 ``` var getarg = function(){ .... 省略相同部分... if (arg[0] != null && arg[1] != null && (arg[0] == 'page' || arg[0] == 'count' || arg[0] == 'tag' || arg[0] == 'key' || arg[0] == 'total') ) { eval('this.' + arg[0] + '="' + HtmlAttributeEncode(arg[1]) + '";'); } .... 省略相同部分... } ``` 這一次,騰訊對 arg[0]進行了判斷。 哈,補了東墻,補西墻。 不過呢?補了這個 wsearch.js 文件,還有我們現在分析的這個(http://kf.qq.com/js/search_app.js](http://kf.qq.com/js/search_app.js) 文件。
                  <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>

                              哎呀哎呀视频在线观看