只要應用程式獲取不受信任的數據並將其發送到客戶端(流覽器)而未經驗證,就會發生跨站點腳本(XSS)。這允許攻擊者在受害者的流覽器中執行惡意腳本,這可能導致用戶會話劫持,破壞網站或將用戶重定向到惡意站點。
下麵我們借助一個簡單圖表瞭解這個漏洞的威脅代理,攻擊向量,安全弱點,技術影響和業務影響。
- 威脅代理 - 內部/外部用戶或管理員發送給系統的不受信任的數據。
- 攻擊者的方法 - 發送不受信任的數據/基於簡單的攻擊,漏洞利用目標解釋器的語法。
- 安全弱點 - 非常普遍。如果從流覽器發送的數據未正確驗證,則會發生。
- 如何發現缺陷 - 代碼演練很容易發現大多數XSS漏洞。通過測試易於發現。
- 技術影響 - 攻擊者劫持用戶會話在受害者流覽器上執行腳本,破壞網站。
- 業務影響 - 影響數據,聲譽受到影響。
XSS的類型
- 存儲的XSS - 存儲的XSS也稱為持久性XSS,當用戶輸入存儲在目標伺服器上時發生,例如資料庫/消息論壇/注釋字段等。然後受害者能夠從Web應用程式檢索存儲的數據。
- 反射的XSS - 當Web應用程式在錯誤消息/搜索結果中立即返回用戶輸入或用戶作為請求的一部分提供的輸入並且不永久存儲用戶提供的數據時,發生反射的XSS - 也稱為非持久性XSS。
- 基於DOM的XSS - 基於DOM的XSS是一種XSS形式,當數據源在DOM中時,接收器也在DOM中,並且數據流永遠不會離開流覽器。
示例
應用程式在構造中使用不受信任的數據而不進行驗證。特殊字元應該被轉義。
http://www.webpage.org/task/Rule1?query=try
攻擊者將流覽器中的查詢參數修改為 -
http://www.webpage.org/task/Rule1?query=<h3>Hello from XSS"</h3>
手動實踐
第1步 - 登錄Webgoat並導航到跨站點腳本(XSS)部分。執行存儲的跨站點腳本(XSS)攻擊。以下是該場景的快照。
第2步 - 根據場景,我們以用戶名:Tom
和密碼tom
登錄,如方案本身所述。點擊“查看個人資料”,進入編輯模式。由於tom
是攻擊者,它將 Javascript 腳本注入這些編輯框。
<script>
alert("HACKED")
</script>
第3步 - 更新結束後,Tom
會收到一個警告框並顯示 "HACKED"
的消息,應用程式容易受到攻擊。
第4步 - 現在按照方案,我們需要以jerry(HR)
身份登錄並檢查jerry
是否受注入腳本的影響。
第5步 - 以Jerry
身份登錄後,選擇Tom
並單擊"view profile"
,如下所示。
在從Jerry
的帳戶中查看tome
的個人資料時,也會看到相同的消息框。
第6步 - 此消息框只是一個示例,但實際的攻擊者可以執行的不僅僅是顯示消息框。
預防機制
- 開發人員必須確保它們根據HTML上下文(例如放置數據的正文,屬性,JavaScript,CSS或URL)轉義所有不受信任的數據。
- 對於那些需要特殊字元作為輸入的應用程式,在將它們作為有效輸入接受之前,應該有健全的驗證機制。
上一篇:
測試失效的驗證
下一篇:
不安全的直接對象引用