作者:心傷的瘦子
來自:PKAV技術宅社區
網址:http://www.pkav.net
---------------------------------------------------------------------------------
簡要描述:
接下來,我們將講解FlashXss。由於烏雲及社會各界的白帽子的上報,騰訊目前已經對絕大多數可能存在問題的Flash進行了修復。使得我在尋找真實案例時着實麻煩了不少。但是爲了使得本教程足夠完善和系統,我還是很艱難的找出了一些可以參考的例子。例子本身危害可能不大,但是希望能夠藉助例子給新手們描述清楚比較基本的東西。
Flash的actionscript腳本目前網絡上存在2種版本,即2.0與3.0,本次教程先以as3.0爲例。同時教程還會在如何使用搜索引擎搜索,如何查找關鍵詞及構造利用代碼方面進行詳細的講解。
詳細說明:
1.首先,第一步,我們需要找到存在缺陷的FLASH文件。如何找到這類文件呢?最好的辦法,當然是GOOGLE搜索。但是其實很多人是不太會用搜索引擎。或者知道怎麼用,但是不知道該如何搜索關鍵詞。因而教程的開始,我們來說一說,如何搜索關鍵詞。
2.基本語句肯定是site:qq.com filetype:swf
意思是,限定域名爲qq.com 文件類型爲FLASH文件。
3.顯然這樣會搜索出很多FLASH文件,不利於我們後續的漏洞查找,所以我們需要輸入某個關鍵詞來進一步縮小範圍。這裏我列舉一些尋找關鍵詞的方式。
3.1 已知存在缺陷的FLASH文件名或參數名,如:swfupload,jwplayer等
3.2 多媒體功能的FLASH文件名,如:upload,player,music,video等
3.3 調用的外部配置或數據文件後綴,如:xml,php等
3.4 前期經驗積累下來的程序員特徵參數名用詞,如:callback,cb,function等
4.結合以上經驗,本例使用其中第三條:
我們搜索:site:qq.com filetype:swf inurl:xml
可以找到這個FLASH
http://imgcache.qq.com/liveportal_v1/swf/carousel.swf?v=20101111&dp=http://v.qq.com/doco/pic.xml
5. 如果你對FLASH有一定了解或者你天資聰慧的話,通過以上地址,你或許能猜到這個FLASH會調用http://v.qq.com/doco/pic.xml這個XML文件的數據,爲了看看是什麼數據,我們可以使用抓包軟件【這裏我使用的是charles web proxy】來看看。
6. 我們看看http://v.qq.com/doco/pic.xml的內容,對應着FLASH來看。
7. 這裏我們重點關注的是xml裏的<link>結點。也就是當我們點擊圖片時,會跳轉到link所指向的地址。
8.接着我們先說下基礎知識。要實現上面點擊圖片,打開鏈接的功能,在FLASH裏通常以以下代碼來實現的。
當圖片點擊時執行 函數A
函數A內容如下:
//as3.0版本
navigateToURL(new URLRequest(link), "_self");
//as2.0版本
getURL(link,"_self");
其中link就是被打開的鏈接。
9. 但是這裏存在一個問題,如果link是 "javascript:alert(1)"
那麼就可以執行JS代碼了。這裏的點擊執行代碼的效果類似於網頁裏的
<a href="javascript:alert(1)">點我彈出1</a>
10. 基於以上基礎知識,我們可以先來反編譯一下騰訊的FLASH文件,看看是不是上面這樣的。
這裏我用到的反編譯軟件是 actionscript viewer 2009。
把下載好的FLASH文件,拖到軟件裏,然後把AS都保存出來,保存爲文本文件。
如上圖,我們可以看到AS代碼具有目錄結構,這種是AS3的。如果不是這樣目錄的樣子,則是AS2的代碼。
由於我們要定位的是使用到 link 的代碼。 我們打開保存的as代碼,進行搜索。
可以看到,當點擊圖片時,直接將數據裏的link作爲參數傳遞到了 URLRequest中。
11. 既然如此,我們把http://v.qq.com/doco/pic.xml 給下載下來,
將xml文件裏的 <link> 部分修改一下。
12. 上傳修改後的pic.xml到我們自己的服務器。
13. 這樣一來, 騰訊的http://imgcache.qq.com/liveportal_v1/swf/carousel.swf 就會跨域加載我們的 http://itsokla.duapp.com/pic.xml 文件。
14. 既然是跨域加載,有必要說點基礎知識。 FLASH跨域請求的流程大致如下:
15. 因而,我們要允許來自imgcache.qq.com的FLASH文件,訪問我們的xml文件才行。
在我們自己網站的根目錄下,放置一個 crossdomain.xml
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.qq.com" />
</cross-domain-policy>
16. 最後,看看我們的效果。點擊圖片時,觸發。
危害較小,僅供學習。
漏洞證明:
見詳細說明
修復方案:
對XML中傳入的link url進行正則判斷
或者
限制加載第三方網站的XML文件