# 14\. Flash Xss 入門 [navigateToURL]
> 來源:[14\. Flash Xss 入門 \[navigateToURL\]](http://www.wooyun.org/bugs/wooyun-2010-016512)
## 簡要描述
接下來,我們將講解 Flash Xss。由于烏云及社會各界的白帽子的上報,騰訊目前已經對絕大多數可能存在問題的 Flash 進行了修復。 使得我在尋找真實案例時著實麻煩了不少。但是為了使得本教程足夠完善和系統,我還是很艱難的找出了一些可以參考的例子。例子本 身危害可能不大,但是希望能夠借助例子給新手們描述清楚比較基本的東西。
Flash 的 actionscript 腳本目前網絡上存在 2 種版本,即 2.0 與 3.0,本次教程先以 as3.0 為例。同時教程還會在如何使用搜索引擎搜 索,如何查找關鍵詞及構造利用代碼方面進行詳細的講解。
## 詳細說明
1\. 首先,第一步,我們需要找到存在缺陷的 FLASH 文件。如何找到這類文件呢?最好的辦法,當然是 GOOGLE 搜索。但是其 實很多人是不太會用搜索引擎。或者知道怎么用,但是不知道該如何搜索關鍵詞。因而教程的開始,我們來說一說,如何搜索關鍵詞。
2\. 基本語句肯定是 `site:qq.com filetype:swf` 意思是,限定域名為 qq.com 文件類型為 FLASH 文件。
3\. 顯然這樣會搜索出很多 FLASH 文件,不利于我們后續的漏洞查找,所以我們需要輸入某個關鍵詞來進一步縮小范圍。這里我列舉一 些尋找關鍵詞的方式。
1\. 已知存在缺陷的 FLASH 文件名或參數名,如:swfupload,jwplayer 等
2\. 多媒體功能的 FLASH 文件名,如:upload,player, music, video 等 3.3 調用的外部配置或數據文件后綴,如: xml, php 等
3\. 前期經驗積累下來的程序員特征參數名用詞,如: 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 文件
- 1. 什么都沒過濾的入門情況
- 2. 輸出在&lt;script&gt;&lt;/script&gt;之間的情況
- 3. 輸出在 HTML 屬性里的情況
- 4. 寬字節復仇記 [QQ 郵箱基本通用]
- 5. 反斜線復仇記
- 6. 換行符復仇記
- 7. 寬字節、反斜線與換行符一起復仇記
- 8. Dom Xss 入門 [顯式輸出]
- 9. Dom Xss 入門 [隱式輸出]
- 10. Dom Xss 進階 [邂逅 eval]
- 11. Dom Xss 進階 [善變 iframe]
- 12. Dom Xss 進階 [路徑 con]
- 13. Dom Xss 實例 [Discuz X2.5]
- 14. Flash Xss 入門 [navigateToURL]
- 15. Flash Xss 進階 [ExternalInterface.call 第一個參數]
- 16. Flash Xss 進階 [ExternalInterface.call 第二個參數]
- 17. XSS 過濾器繞過 [通用繞過]
- 18. XSS 過濾器繞過 [猥瑣繞過]
- 19. 存儲型 XSS 入門 [什么都沒過濾的情況]
- 20. 存儲型 XSS 入門 [套現繞過富文本]
- 21. 存儲型 XSS 進階 [猜測規則,利用 Flash addCallback 構造 XSS]