DOM XSS
阿新 • • 發佈:2021-07-11
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不需要伺服器參與.