1. 程式人生 > 其它 >DOM XSS

DOM XSS

DOM XSS是Reflected XSS 或者Stored XSS的變種.

前提條件是: 目標網站使用DOM elements

DOM XSS與其他兩種XSS的區別在於: DOM XSS不需要server參與, 靠client的DOM解析. 換句話說, 惡意js程式碼不存在於服務端的http響應中, 而是直接插入在了受害者的瀏覽器上.

比如一個網站有如下一個HTML頁面:

<HTML>
<TITLE>Welcome!</TITLE>
Hi
<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
<BR>
Welcome to our system
</HTML>

indexOf是將name=作為一個整體, 取它的下標 (url第一個字元是下標0). 所以indexOf("name=")+5 取的是使用者名稱第一個字元的下標

substring切割字串, 表示從第幾個位置開始擷取到第幾個位置結束. 如果只有一個引數, 表示從這個位置開始一直擷取到最後.

通常這個頁面作為使用者歡迎頁面, 例如: (這時document.write顯示的內容為Joe)

http://www.vulnerable.site/welcome.html?name=Joe

然而,如下的一個請求會產生xss攻擊:

  http://www.vulnerable.site/welcome.html?name=
  <script>alert(document.cookie)</script>

原因是:
受害者的瀏覽器接收到這個連結,開啟http://www.vulnerable.site/welcome.html頁面。受害者的瀏覽器會解析DOM,DOM包含一個物件叫document,document裡面有個URL屬性,它的值是當前頁面的URL。當解析器到達javascript程式碼,它會執行它並且修改受害者瀏覽器的HTML頁面。程式碼中document.write中的字串將會在解析時嵌入到HTML中,並且立即解析,同時,javascript程式碼會找到(alert(…))並且在同一個頁面執行它, 在受害者的網頁會彈出一個顯示cookie的彈窗。

這是發生在受害者瀏覽器將請求發給伺服器之前的, 所以DOM XSS不需要伺服器參與.