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

                    原文地址:http://drops.wooyun.org/tips/1985

                    作者:piaca

                    0x00 前面的話


                    對于如何檢測 Flash 中的 XSS,每個人都有自己的方法,無論是使用成型的自動化工具(比如 swfscan)還是自己開發自動化工具(先反編譯,再對 actionscript 代碼審計)還是直接人工對代碼進行審計。都能夠檢測到 Flash 中存在的 XSS 漏洞。但是這些方法會存在一些問題,如:

                    在這里我們來探討一種動態檢測 Flash 中 XSS 的方法,該方法有自己的優點,但是也有比較明顯的缺點,所以本文的標題定位于“探討”。

                    0x01 原理


                    所謂動態檢測,就是通過程序加載 Flash 插件,然后再載入 Flash 文件,對事件和錯誤信息進行捕捉,再對信息分析來判斷 Flash 中是否存在 XSS 漏洞。

                    先來看下面兩張圖,以 Firefox 瀏覽器為例:

                    enter image description here

                    Firefox 訪問 http://test.com/xss.swf?alert=1,Flash 成功執行 JS 代碼,彈出對話框。

                    enter image description here

                    Firefox 訪問 ,Flash 執行 JS 報錯,顯示錯誤詳細信息。Firefox 能夠顯示 Flash 執行 JS 錯誤時的詳細錯誤信息。

                    到這里也就明白檢測的原理了,就是:

                    0x02 具體實現


                    具體如何實現呢?我們不會真的調用 Firefox,而是直接采用一套開源的可以解析 JS 的工具包:CasperJS。下面看下 CasperJS 官網的一段介紹:

                    CasperJS is an open source navigation scripting & testing utility written in Javascript for the PhantomJS WebKit headless browser and SlimerJS (Gecko).
                    

                    CasperJS 目前支持兩種引擎:PhantomJS(WebKit內核)和 SlimerJS(Gecko內核)。Gecko內核就是 Firefox 所使用的內核,又通過 CasperJS 文檔了解到,使用 SlimerJS 引擎時候可以通過 loadPlugins 來加載 Flash 插件。

                    所以我們就可以通過 CasperJS 來完成我們的功能需求,下面是代碼實現:

                    flash_detect.js

                    #!js
                    var casper = require('casper').create({
                        pageSettings: {
                            loadImages:  true, 
                            loadPlugins: true // load flash plugin
                        },
                        logLevel: "info",
                        verbose: false
                    });
                    
                    casper.start('about:blank', function() {});
                    
                    // catch alert 
                    casper.on('remote.alert', function(message) {
                        this.echo('{"type": "alert", "msg":"' + message + '"}');
                    });
                    
                    // catch page error info
                    casper.on('page.error', function(message, trace) {
                            this.echo('{"type": "error", "msg":"' + message + '"}');
                    });
                    
                    var url = casper.cli.get(0);
                    
                    casper.thenOpen(url, function() {
                            this.wait(2000, function(){})   // delay 2's
                    });
                    
                    casper.run();
                    

                    代碼很簡單,就是通過 CasperJS 來訪問 Flash 文件,然后捕捉頁面中的錯誤信息和 alert 事件。在這里有一點需要注意就是有的 Flash 不會立即執行 JS 代碼,所以我們在打開一個 Flash 文件后,在當前的頁面停留 2 秒。

                    0x03 執行效果


                    我們剛才那個 Flash 文件用這個檢測代碼檢測下看看效果 ,如下:

                    #!bash
                    piaca at piaca in ~/source$ casperjs --engine=slimerjs flash_detect.js "http://test.com/xss.swf?alert=1"
                    {"type": "alert", "msg":"1"}
                    
                    piaca at piaca in ~/source$ casperjs --engine=slimerjs flash_detect.js "http://test.com/xss.swf?alert=1\\\""
                    {"type": "error", "msg":"SyntaxError: missing ) after argument list"}
                    

                    0x05 寫在后面的話


                    實際中我通過訪問網上的一些業務,把其中的 Flash 抓下來,然后通過程序去檢測,效果還是不錯的。當然這其中包括我們自己業務中的 Flash XSS 漏洞。

                    但是目前的檢測程序只能是一個 Demo,要想在生產環境中使用,還需要解決以下問題:

                    上面幾個問題并不是致命的問題,我們可以通過多種方法去解決,但是正如前面所說的這個檢測程序有個致命的缺點,那就是:

                    所以本文僅僅做自動化檢測 Flash 中 XSS 漏洞的探討,如果你有好的方法,希望能與我交流。thx。

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

                                      这里只有精品视频