測試跨站點指令碼(XSS)


只要應用程式獲取不受信任的資料並將其傳送到用戶端(瀏覽器)而未經驗證,就會發生跨站點指令碼(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)跳脫所有不受信任的資料。
  • 對於那些需要特殊字元作為輸入的應用程式,在將它們作為有效輸入接受之前,應該有健全的驗證機制。