文章目錄
- xss簡介
- xss分類
-
- 存儲型(持續型)
- DOM型
- 反射型(非持續型)
- xss檢測
- xss利用
- xss修複
xss簡介
- xss(跨站腳本攻擊):攻擊者在網頁中嵌入用戶端腳本,通常是JS編寫的惡意代碼,當使用者使用浏覽器浏覽被嵌入惡意代碼的網頁時,惡意代碼将會在使用者的浏覽器上執行
- 本質:找輸入,找輸出,構造payload
- 原理:xss漏洞通常是通過php的輸出函數将javascript代碼輸出到html頁面中,通過使用者本地浏覽器執行的,是以xss漏洞關鍵就是尋找參數未過濾的輸出函數。XSS漏洞的本質是服務端分不清使用者輸入的内容是資料還是指令代碼,進而造成使用者輸入惡意代碼傳到服務端執行,實作竊取使用者資訊等攻擊
- 常見函數
- 輸出函數:
echo printf print print_r sprintf die var-dump var_export
-
trim(string,charlist)
函數移除字元串兩側的空白字元或其他預定義字元,預定義字元包括、\t、\n、\x0B、\r以及空格,可選參數charlist支援添加額外需要删除的字元。
-
mysql_real_escape_string(string,connection)
函數會對字元串中的特殊符号(\x 00,\n,\r,\,‘,“,\x1a)進行轉義。
-
stripslashes(string)
函數删除字元串中的反斜杠。
- 輸出函數:
- 危害:
1.網絡釣魚,盜取各類使用者的賬号,如機器登入帳号、使用者網銀帳号、各類管理者帳号;
2.竊取使用者Cookie,擷取使用者隐私,或者利用使用者身份進一步執行操作
3.劫持使用者(浏覽器)會話,進而執行任意操作,例如進行非法轉賬、強制發表日志等
4.強制彈出廣告頁面,刷流量等
5.進行惡意操作,例如任意篡改頁面資訊,删除文章等,傳播跨站腳本蠕蟲,網頁挂馬等
6.進行基于大量的用戶端攻擊,如DDOS攻擊
7.結合其它漏洞,如CSRF漏洞。
8.進一步滲透網站
9.擷取用戶端資訊,例如使用者的浏覽曆史、真實IP、開放端口、盜竊企業重要的具有商業價值的資料等;
10.控制受害者機器向其他網站發起攻擊;
11傳播跨站腳本蠕蟲等;
xss分類
存儲型(持續型)
存儲型(持久型):允許使用者存儲資料的web應用程式都可能會出現存儲型xss漏洞,當攻擊者送出一段xss代碼後被伺服器端接收并存儲,當攻擊者再次通路這個頁面時,這段xss被程式解讀出來響應給浏覽器造成xss跨站攻擊。将惡意的js腳本長期儲存在資料庫中,一般出現在留言闆,微網誌,評論
- 經過資料庫,後端語言進行資料處理,隻能測試,看不到源代碼
- 出現在留言闆,評論區,存到資料庫
- 發包->x=123->x.php->寫到資料庫某個表->x.php->回顯
DOM型
DOM型:文檔對象模型, 不需要伺服器響應,直接浏覽器的dom解析,與伺服器無關,完全是用戶端的事情。不需要與伺服器互動,隻發生在用戶端處理資料階段
- 通過操作HTML代碼,發送一個參數,結果沒有發包(F12看網絡),就是DOM型;JS代碼進行處理,可以看到源代碼
- 發包x=123->本地浏覽器的靜态源代碼->x.php(直接前端代碼就可處理)
HTML DOM樹
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL4FlaNpXSU9UeVpHW3BjMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzUTM3ATNzYTM3EzNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
反射型(非持續型)
反射型(非持久型):當使用者通路帶有xss代碼的URL請求時,伺服器端接收資料後處理,伺服器端接收資料後處理,然後把帶有xss代碼的資料發送到浏覽器,浏覽器解析這段代碼後,最終造成xss漏洞。一般是存在URL裡的,需要攻擊者提前構造一個惡意連結,來誘使客戶點
- 不經過資料庫,隻能通過測試判斷,看不到源代碼
- 發包->x=123->x.php->回包
- 彈出警告視窗,顯示xss:
<script>alert('xss')</script>
- 建立一個超連結,點選執行:
<a href='連結' onclick=alert('xss')>type</a>
- 進行重定向,當執行代碼的時候,頁面會跳轉至該網址:
or
<script>location='網址'</script>
<script>window.location='網址'</script>
以h1号字型在受害者浏覽器顯示THIS WEBSITE IS UNDER ATTACK内容。
innerHTML即文本内容,試圖構造payload替換了以前顯示的内容
<script>document.body.innerHTML="<div style=visibility:visible;><h1>THIS WEBSITE IS UNDER ATTACK</h1></div>";</script>
xss檢測
- 手工檢測XSS(考慮哪裡有輸入,輸入的地方在哪裡輸出)
-
可得得知輸出位置
輸入敏感字元
<、>、"、'、()
,在送出請求後檢視HTML源代碼,看這些輸入的字元是否被轉義
可輸入一些便于查找的字元,如
,在ctrl+F時便于查找AAAAA<>
-
無法得知輸出位置
在 web應用程式源代碼不對外公開的情況下,在測試XSS是無法得知輸入位置在何處顯示
eg:一個留言闆,
在div标簽中:
<div>XSS TEST</div>
,
在input标簽中:
<input type="text" name="content" value="XSS Test"/>
,
對于這種情況,通常會采用輸入“/>XSS Test”來測試,本質:閉合
-
-
全自動檢測XSS
XSSER、XSSF······
xss利用
- XSS會話劫持
- JS操作cookie:不使用使用者的賬号密碼就可登陸;
- 盜取使用者的cookie,
;利用burpsuite替換cookie,或者利用浏覽器自帶的控制台(console)替換document.cookie
- 盜取使用者的cookie,
- SWSSION會話:維持會話狀态的另一種形式,可能會存儲在cookie中;
- cookie,session差別:cookie是将資料存儲在用戶端,而session則是儲存在伺服器端,僅僅是在用戶端存儲一個ID;session必cookie要安全
- JS操作cookie:不使用使用者的賬号密碼就可登陸;
- XSS Framework架構
- XSS GetShell
- XSS蠕蟲
xss修複
XSS漏洞的本質是服務端分不清使用者輸入的内容是資料還是指令代碼,進而造成使用者輸入惡意代碼傳到服務端執行,實作竊取使用者資訊等攻擊
- 設定重要的 cookie資訊為 httpOnly
- 對輸入進行檢測和轉義
- 對使用者從連結擷取參數需要展示到頁面中需要校驗合法性
- 使用轉義函數進行轉義