xss(跨站腳本攻擊)
xss是指攻擊者在網頁中嵌入客戶端腳本,一般是javascript編寫的惡意代碼,當用戶使用瀏覽器瀏覽被嵌入惡意代碼的網頁時,惡意代碼將在用戶的瀏覽器上被解析執行。重點是「腳本」這兩個字,腳本主要有javascript和actionscript。
要想深刻的研究xss,必需要精通javascript,javascript能作到什麼效果,xss的威力就有多強大。javascript
危害
javascript能夠用來獲取用戶的Cookie、改變頁面內容、url轉跳,那麼存在xss漏洞的網站,就能夠盜取用戶cookie、黑掉頁面、導航到惡意網站,而攻擊者僅僅須要向頁面中注入javascript代碼中。
*~盜取管理員cookie
*~XSS Worm
*~掛馬(水坑攻擊)
*~鍵盤記錄
*~利用網站重定向
*~修改網頁內容
攻擊場景
在各種sns、郵件系統、開源流行的Web應用、BBS、微博等社交場景中,前端攻擊普遍實施與關注。主要是一些大型網站纔有價值。
*~支持html解析和javascript解析的客戶端,如:html文檔、flash、pdf等
*~url的參數,回顯到網頁上
*~from表單提交的內容出如今網頁上,如:暱稱、郵箱、簡介、留言
分類
主要分三類:反射型、存儲型、DOM型(還有flash xss、mxss)。
1.反射型xss
反射型xss也被稱爲非持久性xss,是如今最容易出現的一種xss漏洞。發送出請求時,xss代碼出如今url中,最後輸入提交到服務器,服務器解析後在響應內容中出現這段xss代碼,最後瀏覽器解析執行。
簡單流程:
用戶訪問帶有xss代碼的url請求
服務器端接收數據處理,而後返回帶有xss代碼的數據發送給瀏覽器php
瀏覽器解析帶有xsss代碼的數據後,最終形成xss漏洞
可能攻擊流程:
•用戶aaa在網站www.xxx.com瀏覽網頁
•攻擊者hacker發現www.xxx.com/xss.php存在反射型XSS漏洞,而後精心構造JavaScript代碼,構造的代碼的功能爲盜取用戶 Cookie併發送到指定站點www.xxser.com
•hacker將帶有反射型XSS漏洞的URL經過站內信發給aaa,站內信爲一些誘惑信息,目的是使用戶aaa點擊
•假設用戶aaa點擊了帶有XSS漏洞的URL,則aaa的Cookie將被髮送到www.xxser.com
•hacker獲取aaa的Cookie後能夠以aaa的身份登錄www.xxx.com,從而獲得aaa的敏感信息
二、存儲型XSS
存儲型XSS又被稱之爲持久性XSS,它是最危險的一種跨站,相比反射型XSS和DOM型XSS具備更高的隱蔽性,因此危害更大由於它不須要用戶手動觸發。 容許用戶存儲數據的web程序均可能存在存儲型XSS漏洞,當攻擊者提交一段XSS代碼後,被服務器端接收並存儲,當全部瀏覽者訪問某個頁面時都會被XSS,其中最典型的例子就是留言板。
測試技巧:
•首先肯定輸入點和輸出點,好比留言,若留言輸出(顯示)的地方是標籤內,則XSS代碼會被執行,但若輸出在屬性內,則不會執行, 如:<input type="text" name="content" value="<script>alert(/xss/)</script>" />
•肯定輸出點後根據相應的標籤構造HTML代碼來閉合,如:" /><script>alert(1)</script><",最終在html中爲: <input type="text" name="content" value="" /><script>alert(1)</script><"" /> 測試步驟:
添加正常留言,用firebug快速查找顯示標籤,若顯示區域不在html屬性內則能夠直接使用XSS代碼注入
若不能得知內容輸出的位置,能夠使用模糊測試方案,XSS代碼以下:
a. <script>alert(document.cookie)</script> //普通注入
b. " /><script>alert(document.cookie)</script> //閉合標籤注入
c. </textarea>'"><script>alert(document.cookie)</script> //閉合標籤注入
3.反射型DOM
DOM即文本對象模型,DOM一般表明在html、xhtml和xml中的對象,使用DOM能夠容許程序和腳本動態的訪問和更新文檔的內容、結構和樣式。它不須要服務器解析響應的直接參與,觸發XSS靠的是瀏覽器端的DOM解析,能夠認爲徹底是客戶端的事情。
DOM的規定以下: • 整個文檔是一個文檔節點 • 每一個HTML標籤是一個元素節點 • 包含在HTML元素中的文本是文本節點 • 每一個HTML屬性是一個屬性節點 • 節點與節點之間都有等級關係html
HTML的標籤都是一個個節點,這些節點組成了DOM的總體結構:節點樹前端