xss漏洞發生在前端,攻擊的是瀏覽器的解析引擎javascript
xss就是讓攻擊者的javascript代碼在受害者的瀏覽器上執行php
xss攻擊者的目的就是尋找具備xss漏洞的網頁,讓受害者在不知情的狀況下,在有xss漏洞的網頁上執行攻擊者的js代碼html
xss是提早埋伏好漏洞陷阱,等着受害者上鉤。前端
既然攻擊者是執行javascript代碼,因此攻擊的語句應該能讓javascript運行。java
javascript運行條件:"<script></script>"標籤中,onclick=事件屬性中數據庫
xss的攻擊payload必定知足上述條件瀏覽器
xss學習主要是以測試看到效果爲主,一般的明顯效果就是使用alert彈個框,彈框意味着咱們的js執行了。服務器
xss攻擊,必定牢記「輸入輸出」,輸入指的是攻擊者對服務器網頁輸入惡意代碼,輸出指的是瀏覽器接收到代碼後能解析並輸出到前端。cookie
xss的原理就是開發者沒有對輸入內容進行過濾,致使經過攻擊者精心構造的前端代碼,輸入後和原有的前端代碼產生混淆,造成新的頁面語句,而且新的頁面語句能被瀏覽器解析並輸出。dom
xss測試步驟:
一、找到輸入點,隨便亂輸,輸完字符後,查看輸出。
二、打開網頁源代碼,在源代碼中查看輸出的位置。
三、以testxss.php爲例
輸出的位置:<input type="text" value="abcd">
咱們的目的是進行xss攻擊,執行js代碼。執行js代碼的條件是要有script標籤或事件屬性。
<script>alert(1)</script> 這個是必定能在頁面上執行彈警告框的
若是咱們直接輸入上述代碼,會變成:
<input type="text" value="<script>alert(1)</script>"> 這個並不符合html的語法
爲了使alert能夠執行,就須要把上面的內容變換一下:
<input type="text" value=""><script>alert(1)</script>"> 變成這樣的話,就是input和script兩個標籤都能執行
所以,咱們的輸入就變成
"><script>alert(1)</script>
那此時瀏覽器在解析的時候,就會解析出兩個元素,一個是input,一個是script,從而執行了咱們在script中的js代碼,完成了xss攻擊
要使用事件屬性觸發:
<img src=1 onclick="alert(1)">
payload1:"><img src=1 onclick="alert(1)">
payload2: " onclick="alert(1)
反射型XSS
咱們構造好一個urlxss的payload,發送給受害者,受害者點擊惡意連接後會在受害者的瀏覽器上執行惡意代碼。反射型xss是一次性的,並且比較容易被發現。一般惡意鏈接會被修改爲短連接,或釣魚圖片的形式。
存儲型xss
存儲型又叫永久性xss,常見於留言板。由於存儲型xss的頁面會將用戶輸入的內容存入到數據庫內,因此當其餘人每訪問一次的時候,服務器都會從數據庫將攻擊者輸入的內容調取到前端瀏覽器解析,所以每一次訪問就至關於一次xss攻擊。
以dvwa靶場中的存儲型xss爲例:xss(stored)
這是一個留言板,攻擊者輸入的惡意代碼被存入數據庫,當其餘受害者訪問該留言板的時候,後臺就會把數據庫的惡意代碼調取到前端能夠被解析的位置,天然每一次訪問都會中招。
DOM型xss
不與服務器交互,本質上也是一種反射型xss。主要利用js使用dom對前端html進行操做時候產生的漏洞。DOM型xss的難點就在於經過閱讀javascript來肯定輸出的位置,纔好構建輸入的payload。
DOM型XSS可經過開發者工具觀察js變化
實戰中如何利用xss呢?
經過xss獲取受害者cookie信息。
條件:
一、有一個xss漏洞頁面;
二、攻擊者須要一個xss信息接收平臺
實驗目的:獲取受害者cookie,並以受害者的身份瀏覽網站。
實驗工具:攻擊者接收xss平臺:192.168.100.1 攻擊者帳號:gordonb/abc123
服務器:裝有dvwa的網站 192.168.100.200 受害者帳號: admin/password
實驗過程:攻擊者gordonb在目標網站上設下xss陷阱,當受害者中坑後會把cookie信息發給攻擊者,攻擊者就用受害者的cookie訪問網站。
XSS經常使用測試語句:
<script>alert(1)</script>
<img src=1 onerror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
<input onfocus=write(1) autofocus>