跨站腳本攻擊(Cross Site Scripting,簡稱 XSS,亦翻為跨網站的入侵字串)又有新的攻擊語法!此次觸發惡意腳本不需要用到 script 標籤(譬如 <script>alert(1)</script>),也不用 javascript 協定(譬如 javascript:alert(1)),而是 8 月 26 日所揭露的
<isindex type=image src=1 onerror=alert(1)>
<isindex>是一個很早就有但普遍少用的標籤,其功能與<form>、<input>、<textarea>,以及<select>類似,都可供使用者輸入資料。onerror 屬性也是鮮為人知。
各家瀏覽器在實現 HTML 的支援度不盡相同,各國語系又對編碼有所差異,這些都使得跨站腳本攻擊(XSS)的攻擊語法千變萬化,也讓駭客更能規避掉不少治標的防護機制,像是 WAF 解決方案,畢竟新的攻擊手法就要新的規則(好加在我們家的 WAF 可以幫你生規則,請參考你期望的 WAF 是? XD),源碼檢測才是治本的作法阿,從 Web 應用程式端利用編碼、過濾等方式讓這些奇奇怪怪的攻擊語法全部繳械!(請參考談源碼檢測: CodeSecure的架構與技術)
我們在各個常見瀏覽器平台(Microsoft Internet Explorer、Mozilla Firefox、Opera,以及Google Chrome)的測試結果是,這個跨站腳本攻擊(XSS)新攻擊語法僅適用於 IE 系列的瀏覽器(含最新的 IE8)。註:我們在下列示範中所採用的 alert(1) 字串可換成各種惡意腳本,而並非跨站腳本攻擊(XSS)只能做到跳出一個視窗打招呼。
<isindex type=image src=1 onerror=alert(1)>攻擊語法
稍加調整甚至不需要定義 src 屬性也可成功:
<isindex type=image onerror=alert(1) src=>攻擊語法
跨站腳本攻擊(XSS)不虧是名列最新 OWASP Top 2007(2007年 OWASP 十大 Web 資安漏洞)的榜首,「簡單好用、防不勝防」!
簡單來說,跨站腳本攻擊(XSS)的基本精神就是駭客在 HTML 文件中安插網頁腳本語言(譬如 JavaScript 或 VBScript),讓受駭方的瀏覽器在瀏覽網頁時進而去執行。這延伸兩個討論議題:
1. 為何駭客能夠在 HTML 文件中安插這些腳本?
在 Web 2.0 的時代,大部分的網頁或多或少都需要產生動態內容,都需要與使用者互動,一旦使用者所提供的資料(譬如惡意腳本字串)有機會成為動態輸出的 HTML 內容的一部份時,這樣惡意腳本就被成功地安插進原本合法無惡意的 HTML 文件了。這也是為何許多客戶最後選擇從源碼檢測著手,揪出這些進入點與輸出點,治本地解決跨站腳本攻擊(XSS)。
2. 為何瀏覽器會去執行這些腳本?
瀏覽器只是如實地遵循 W3C (World Wide Web Consortium) 所制定的 HTML 標準(目前最新版本為 HTML 4.01),正確地支援各語法標籤應表現的樣式與行為,因此當應該執行腳本時,就會執行這些腳本,儘管他們可能是惡意的,包括偷取 Cookie、置換網頁、轉址、攻擊其他網站等。