網頁安全在當今的數位時代中,已經成為不可或缺的一環。隨著各種技術和網路的迅速發展,網站已經從簡單的資訊展示工具變成了進行商業、娛樂、學習和交流的重要平台。但同時,惡意攻擊者也在不斷地尋找各種漏洞,以企圖竊取敏感資料、進行網頁挾持或發布惡意軟體。因此,網頁安全不僅是網站擁有者的首要責任,更是確保網路環境健康、可靠的基石。只有當網站能夠提供安全的瀏覽環境時,用戶才能夠放心地使用,且企業和組織才能確保其品牌形象和資產不受損害。
本篇主要來介紹常見的XSS, 之前已經寫過很多篇類似的主題,下面是所有XSS相關連結
防範反射型XSS攻擊:保護您的網站免受跨站腳本漏洞影響的關鍵策略與技巧
網路攻擊面面觀:客戶端DOM Stored XSS與DOM Code Injection的區別及防範
這篇算是集大成吧,把所有XSS的攻擊都集合在一起,方便給大家有一個完整的了解,那麼首先就從XSS攻擊的定義開始吧!
- XSS(跨站腳本攻擊,Cross-Site Scripting)是一種常見的網頁應用程式安全漏洞。它允許攻擊者在受害者的瀏覽器上執行未經授權的腳本,通常是JavaScript。這些腳本能夠繞過許多網站的安全策略,從而讓攻擊者能夠竊取使用者資訊、操作受害者的會話、改變網頁的內容或進行其他惡意活動。
在了解了XSS的定義之後一定會有人好奇,這個攻擊到底是怎麼出現的,所以接下來簡介一下XSS 的起源和歷史背景!
其實這種攻擊手法已經存在了很長時間,但其名稱和現今我們所認識的形式並不是一開始就定義好的。
- 初期的識別:早在1990年代,隨著網頁變得越來越互動,使用者的輸入開始被嵌入到網頁中。這在當時的技術環境中創建了一個新的攻擊面向,但對這種新的安全問題的認識還很有限。
- 命名與普及認識:到了2000年左右,這種攻擊方式開始被安全社區廣泛討論。它被命名為”跨站腳本攻擊”(Cross-Site Scripting),縮寫為XSS,以與CSS(層疊樣式表)區分。儘管名稱中包含”跨站”,但XSS並不涉及多個網站;名稱是為了描述攻擊者如何注入腳本到另一個網站的上下文中。
- 安全社群的關注:隨著網頁應用的普及,XSS攻擊的潛在威脅也變得越來越大。OWASP(開放網頁應用安全項目)將XSS列為其著名的”十大網頁應用安全風險”中的一項。這增加了對XSS攻擊的關注度和意識。
- 演進與變種:原本的XSS概念已經擴展到包括多種類型,如儲存型、反射型和DOM型。每一種都有其特定的攻擊模式和潛在的風險。
如今,XSS仍然是網頁應用中的一大威脅,但隨著時間的推移,開發者和組織已經更加意識到其嚴重性,並投入更多資源來防範這類攻擊。安全實踐、工具和框架也在不斷進化,以更有效地防護XSS攻擊。
在了解了XSS攻擊的起源與歷史後,一定有人懷疑都存在這麼久了攻擊了,為何XSS 到現在還是如此普遍,我覺得近年來XSS越來越普遍的原因如下
輸入驗證和輸出編碼的缺乏:
網站應用程式經常需要接受用戶輸入,如表單、查詢參數或 cookies。如果這些輸入不被適當地驗證和清理,則可能容易受到 XSS 攻擊。 而輸出編碼是另一個常被忽視的部分。即使輸入被驗證過,但如果在輸出到 HTML 頁面時沒有被適當地編碼,則可能成為 XSS 的攻擊點。
複雜的前端技術:
現代網頁的前端技術,如 JavaScript、AJAX 和各種 JavaScript 框架,使得網頁更加動態和互動,但也增加了 XSS 攻擊的機會。
教育和知識的缺乏:
許多開發者可能對 XSS 或其他安全問題的實際影響並不完全了解,或者他們可能不知道如何適當地防範這些問題。
高獲利和簡單執行:
對於攻擊者來說,XSS 攻擊相對簡單,且可能獲得豐厚的報酬,例如竊取用戶資訊、發布惡意廣告、或作為其他攻擊的一部分。
複雜的應用程式邏輯:
越複雜的應用程式,越有可能存在安全漏洞。尤其當開發者需要處理各種不同的輸入和輸出情境時。
XSS 的主要類型
- 反映型 (Reflected XSS)
- 攻擊者提交的腳本被網站儲存下來,例如在留言板、評論或其他內容中。當其他用戶訪問該內容時,腳本就會在他們的瀏覽器上執行。
- 儲存型 (Stored XSS)
- 攻擊者透過URL參數傳遞惡意腳本,且該腳本不會儲存於網站上。當受害者點擊這個URL或被導向這個URL時,腳本在其瀏覽器上執行。
- DOM 基礎型 (DOM-based XSS)
- 這種攻擊涉及到網頁的DOM(文件物件模型)。攻擊者會修改DOM結構,導致惡意腳本的執行。
攻擊機制與範例
- 以下是常見的 XSS 攻擊向量
基本的腳本注入:
htmlCopy code
<script>alert('XSS');</script>
使用事件觸發器:攻擊者可能會在HTML元素的事件屬性中注入JavaScript代碼,如onmouseover、onload、onerror等。
htmlCopy code
<img src="fakeimage" onerror="alert('XSS');" />
基於DOM的XSS:透過修改DOM結構。
javascriptCopy code
document.location = 'javascript:alert("XSS")';
用JavaScript的eval()函數:這個函數可以執行字串中的JavaScript代碼,使其成為一個熱門的XSS攻擊目標。
javascriptCopy code
eval('alert("XSS")');
<iframe>標籤:嵌入一個惡意網站或腳本。
htmlCopy code
<iframe src="http://malicious.example.com/badscript.js"></iframe>
繞過過濾器:使用不同的編碼或大小寫變體來繞過對某些字符的過濾。
利用CSS:儘管不是直接的JavaScript,但可以用來做一些欺騙行為或破壞網站布局。
<base>標籤:改變相對URL的基礎,可能導致其他腳本或內容被誤加載。
5. XSS 的潛在風險
- 資料竊取
- 會話劫持
- 惡意軟體分發
6. 防護策略
- 輸入驗證
- 輸出編碼
- 使用 Content Security Policy (CSP)
- HTTP-only 和 Secure cookies 屬性
7. 新型與繁複的 XSS 攻擊技巧
- Mutated XSS(mXSS):這種XSS利用了瀏覽器解析器的行為異常來注入惡意內容。例如,某些HTML實體可能在某一環節被解析,但在其他地方不被解析。
- SVG文件注入:可縮放矢量圖形(SVG)允許嵌入JavaScript。如果網站接受上傳SVG而沒有正確地過濾或隔離它,可能會導致XSS攻擊。
- 在Web Workers中執行XSS:Web Workers允許在瀏覽器後台執行腳本。如果攻擊者能夠控制Web Worker的腳本源,則可能導致XSS。
- 利用Polyglots:Polyglots是可以在多個語境中執行的代碼片段。例如,一段可以同時作為JavaScript和HTML運行的代碼。這使攻擊者可以在多種場景中利用同一個載荷。
- 利用Service Workers:Service Workers是一種能夠攔截和控制網絡請求的腳本。如果攻擊者可以註冊惡意的Service Worker,則可以攔截和修改任何網站的請求。
- 利用模板注入:某些前端框架允許使用者輸入模板。如果沒有正確地過濾這些輸入,則可能導致XSS攻擊。
- 充分利用CSP報告:內容安全策略(CSP)通常用於防止XSS,但其報告功能也可能被攻擊者利用來洩露信息。
8. 工具和資源
- XSS 測試工具推薦(這些是從網路上收集來的,並不是每套都有用過)
- Firebug:此工具可以動態修改Html元素、查看網路狀況、查看DOM等,並且在Chrome上有Lite版本1。
- Temper Data:主要可以簡易地修改HTTP/HTTPS的Header及POST參數,不過它不能查看Response1。
- Live HTTP Headers:用於分析HTTP流量,可以Replay一個請求並對其中的內容進行修改1。
- Fiddler:此工具運行時需要掛Proxy,預設端口是8888,它不僅能查看和分析網路流量,也能修改Header、文本轉換等1。
- XSStrike:它是一個以Python編寫的Cross Site Scripting注入檢測工具,能夠使用多個解析器產生有效的payload來進行測試。它包含爬蟲測試、參數查找、模糊測試、防火牆檢測功能,並能夠掃描DOM XSS23。
- Google CSP Evaluator:Google提供的工具,可以用來驗證網站的Content Security Policy (CSP)配置,以及檢測XSS的弱點4。
這些工具各有特色,適合不同的測試需求,您可以根據您的需求來選擇合適的工具。不過需要注意的是,進行XSS測試時應確保具有相應的權限(因為是滲透測試的一種),以避免違法行為。