本文的目的是深層次的分析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這個方式也許沒有這麼簡單進行xss,但對於黑客來說,還是有辦法的。function
xsstest()
在ie8下除錯模式下,我們可以看到externalinte***ce的**:
正常情況下,flash player會生成這樣的**:
try catch (e)對比自己寫的as**和生成的這段js**,可以猜測,flash player是以一種簡單的拼接字串的方式實現的。
稍稍做個小把戲,結果就可以注入**執行了。
是不是很神奇?怎麼做到的呢?為什麼url稍稍變化可以達到這樣呢。我們看看現在的
js**:
try catch(e){} //正好跟原來的雙引號對上了,結果,最後的catch也被替換了。。。也就是說,黑客可以寫自己的函式了,想怎麼執行都可以了。。。")) ; } catch (e)
至於為什麼這裡雙引號對上了,可以簡單猜測flash遇到字串中有雙引號的時候,只是簡單的以 \" 方式列印成js**,但如果使用者再惡意拼乙個\,就負負得正了。。。
(這裡__flash__toxml的**並不是關鍵點了,所以將在文章最後再列出)
第三種情況:
沒有對swf object的id沒有過濾
頁面載入flash,我們需要設定object或者embed的id,否則externalinte***ce會失效。而這個地方,也會被黑客利用。
我們看看實際執行的**:
try catch (e)看到這裡,應該發現跟上邊說的第二種情況很類似,黑客可以通過修改了object id,惡意閉合雙引號,達到目的。
接下來,簡潔的總結一下怎麼防xss。
對於第一和第三種情況,我們應該對字元進行過濾,例如用以下的兩個函式:
public對於第二種情況,我們應該盡量避免這樣跟js傳遞資料,但如果實在無法避免。可以用這樣的方式轉義字串:static
function checkjsfunctionvalid(functionname:string):boolean
public
static
function checkobjectidvalid():boolean
return
true
; }
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...