前幾個月發現了一種有趣的XSS漏洞,這種漏洞攻擊一次後XSS代碼就會被存儲下來,以後每次訪問被XSS的網站這個「木馬」都會再自動執行。我在網上沒有找到相關的資料,這裡姑且稱之為「存儲型XSS」(如果有朋友之前看到過類似的文檔,歡迎指教)。
原理其實也很簡單,流程如下:
XSS 代碼被提交給網站-->網站把XSS代碼SetCookie給瀏覽器-->瀏覽器再次請求網站時提交包含XSS代碼的 Cookie-->網站從Cookie中取出包含XSS代碼的某變量並將該變量作為頁面內容的一部分返回給客戶端-->客戶端執行XSS代碼
XSS代碼除了存儲在客戶端的Cookie中,也可能存儲在服務器端,不過這種情形應該比較少。
比較常見的例子是提供多種語言支持的網站。用戶在網站上設定要使用的語言,然後這個語言變量會被存儲在Cookie或服務器端數據庫。如在一些網頁中可以看到類似這樣的函數:
function getLocal() {
var local;
local = 'zh_CN';
return local;
}
其中的local變量可能就是從客戶端提交的Cookie或服務器數據庫中取出的。客戶端請求如下URL:
http://tk.xfocus.org/setlocale.php?locale=zh_CN';return local;}alert("XSS");function dummy(){a='
「zh_CN';return local;}alert("XSS");function dummy(){a='」就會被作為語言信息存儲下來。瀏覽器再去請求網站頁面時,上面的函數就會變成這樣:
function getLocal() {
var local;
local = 'zh_CN';return local;}alert("XSS");function dummy(){a='';
return local;
}
由於語言信息是需要全局使用的,所以一般網站的每個頁面都會包含上面的代碼。這樣,「木馬」就長存於「操作系統」中了。以後被攻擊者每次訪問該網站的每一個頁面,都會執行這些XSS代碼。
註: 本文轉載自網路 非原創
轉載自 YeZi 原文