Flash XSS 漏洞詳解 根治的好辦法

2021-09-09 04:13:45 字數 3455 閱讀 7919

本文的目的是深層次的分析flash的externalinte***ce的xss漏洞,並提出比較有效的解決方案。

首先,我們看看什麼情況下,會出現xss。

第一種情況:

把flashvars傳入的引數(或者其他能被別人控制的方式)當externalinte***ce.call的第乙個引數

package}}

注意,這裡通過flashvars傳遞了乙個引數,是js的函式。這種方式比較常見,swf可以做成通用,放到不同的業務中使用,每次只需要傳入對應的js函式即可。但是,這裡就存在漏洞了。

在瀏覽器中,構造url: xsstest.swf?jsfunction=alert(/xss/),訪問swf,並以get引數的形式傳入flashvars,結果,造成了

甚至更狠一點,jsfunction=function()。。。

當然,這麼惡作劇alert一下,貌似對小白使用者沒什麼損失,但如果在function內呼叫這個網域名稱的cgi,就能帶來很大的驚喜了~~~因為這裡能獲取到對應的cookie,時間有限,具體攻擊的方式,這裡不多說。

第二種情況:

把flashvars傳入的引數(或者其他能被別人控制的方式)當externalinte***ce.call的第二和第三個引數

這次,我們使用這段**:

public

function

xsstest()

這個方式也許沒有這麼簡單進行xss,但對於黑客來說,還是有辦法的。

在ie8下除錯模式下,我們可以看到externalinte***ce的**:

正常情況下,flash player會生成這樣的**:

try  catch (e)
對比自己寫的as**和生成的這段js**,可以猜測,flash player是以一種簡單的拼接字串的方式實現的。

稍稍做個小把戲,結果就可以注入**執行了。

是不是很神奇?怎麼做到的呢?為什麼url稍稍變化可以達到這樣呢。我們看看現在的

js**:

try catch(e){} //

")) ; } catch (e)

正好跟原來的雙引號對上了,結果,最後的catch也被替換了。。。也就是說,黑客可以寫自己的函式了,想怎麼執行都可以了。。。

至於為什麼這裡雙引號對上了,可以簡單猜測flash遇到字串中有雙引號的時候,只是簡單的以  \"  方式列印成js**,但如果使用者再惡意拼乙個\,就負負得正了。。。

(這裡__flash__toxml的**並不是關鍵點了,所以將在文章最後再列出)

第三種情況:

沒有對swf object的id沒有過濾

頁面載入flash,我們需要設定object或者embed的id,否則externalinte***ce會失效。而這個地方,也會被黑客利用。

我們看看實際執行的**:

try  catch (e)
看到這裡,應該發現跟上邊說的第二種情況很類似,黑客可以通過修改了object id,惡意閉合雙引號,達到目的。

接下來,簡潔的總結一下怎麼防xss。

對於第一和第三種情況,我們應該對字元進行過濾,例如用以下的兩個函式:

public

static

function checkjsfunctionvalid(functionname:string):boolean

public

static

function checkobjectidvalid():boolean

return

true

; }

對於第二種情況,我們應該盡量避免這樣跟js傳遞資料,但如果實在無法避免。可以用這樣的方式轉義字串:

str.replace( /[\"\\]/g , function(d:string, b:*, c:*));
簡單解釋一下,這裡把雙引號和反斜槓這樣比較敏感的字元,替換為轉義表示。再輸出成js**時,正好又還原回去了。

例如:

\\\"\\\"})));}catch(e)//

變成了     \134\42\134\42})));}catch(e)//

附帶額外的在ie8 開發工具中抓獲到的**:

function

__flash__arraytoxml(obj)

return s+"";}

function

__flash__argumentstoxml(obj,index)

return s+"";}

function

__flash__objecttoxml(obj)

return s+"";}

function

__flash__escapexml(s)

function

__flash__toxml(value)

else

if (type == "undefined"

) else

if (type == "number"

) else

if (value == null

) else

if (type == "boolean"

) else

if(value instanceof date)

else

if(value instanceof array)

else

if (type == "object"

) else

}function

__flash__addcallback(instance, name)

}function

__flash__removecallback(instance, name)

檔案上傳漏洞詳解

檔案上傳漏洞是指使用者上傳了乙個可執行的指令碼檔案,並通過此指令碼檔案獲得了執行伺服器端命令的能力。這種攻擊方式是最為直接和有效的。上傳的檔案可以是木馬,病毒,惡意指令碼等等。檔案上傳 本身並沒有任何問題,但是檔案上傳後,伺服器怎麼處理 解釋檔案就成了乙個問題。如果伺服器的處理邏輯做得不夠安全,則會...

XXE 原理漏洞詳解

1 什麼是xxe漏洞 xxe漏洞全程xml external entity injection 即xml外部實體注入漏洞,xxe漏洞發生在應用程式解析xml輸入時,沒有禁止外部實體的載入,導致可載入惡意外部檔案,造成檔案讀取,命令執行 內網埠掃瞄 攻擊內網 發起dos攻擊等危害 可以模擬sql注入解...

檔案上傳漏洞詳解

檔案上傳功能漏洞筆記 檔案上傳漏洞之程式設計師未對上傳的檔案進行嚴格的上傳和過濾,導致使用者可以利用上傳功能向伺服器上傳木馬 病毒 惡意指令碼 webshell等。檔案上傳 本身沒有問題,有問題是檔案上傳後伺服器的處理和解析邏輯。製作指令碼檔案上傳至web伺服器 php aspx jscript a...