XSS學習筆記(入門篇)
最近的學習速度挺快的,對於寒假的計劃是對於各種知識點都瞭解大概並且基本懂得原理,在開學之後對相關書籍深入研究!
這裡我就先總結下幾個XSS應用的例子吧。
一.利用< >標記注射html / javascript
如果可以隨心所欲引入< >標記,那麼就可以通過script輸入有javasript編寫的惡意指令碼程式碼。
eg:<script>alert("你妹的")</script>
所以說xss filter首當其衝要過濾轉義的就是< >,<script>等字元
二.利用html標籤屬性值執行xss
很多html標籤屬性都支援javascript:[coed]偽協議的形式。關於這個偽協議做下說明:“真”協議用來在因特網上的計算機之間傳輸資料包,如HTTP協議(http://)、FTP協議(ftp://)等;而偽協議則是一種非標準化的協議,JavaScript:偽協議讓我們通過一個連結來呼叫JavaScript函式。
eg:(用偽協議呼叫popUp函式)<a href = "javascript:popUp('http://www.example.com/');">Example</a>
ps:在支援javascript:偽協議的瀏覽器中能正常執行,如ie6。
這種方法由於不是所有的瀏覽器都支援偽協議所以就有了侷限性,而且也不是所有的標記的屬性值都能產生xss,通常只有引用檔案的屬性才能出發xss,如這些屬性:href , lowsrc , bgsound , action , dynsrc.......
那麼這裡使用者就可以利用部分html標記的屬性值來進行XSS,下面是個例子:
<img src="javascript:alert("你妹的");">
<a href="javascript:alert("Web")">xss</a>
所以xss filter就也要過濾javascript,VBscript等關鍵字。
三.空格回車Tab
那麼當xss filter把< >,javascript都過濾之後,使用者仍然能夠通過空格回車Tab鍵繞過限制。
eg:<img src="javas cript:alert("安全")"width=100>
那麼為什麼會這樣呢??javascript語句通常以分號結尾,如果javascript引擎確定一個語句是完整的,而這一行的結尾是換行符,那麼就可以省略分號。這裡要注意引擎不會把換行符解釋為語句的終止符,畢竟並不是一個完整的語句,引擎會繼續處理髮現的的內容,知道遇到分號或者發現語句完整。因此使用者可以像下面這種例子一樣構造程式碼繞過限制。eg:
<img src="javas
cript:
alert("還是") width=100>
這樣用回車符就可以成功執行xss了.
四.對標籤屬性值轉碼
除了上述方法,對於html標記屬性值的過濾使用者還可以通過編碼處理來繞過限制,因為html中屬性值本身就支援ASCII碼形式。
eg:
<img src="javascript:alert("挺難的");"> ps:上面替換成下面就ok了
<img src="javascriptt:alert("挺難的");">
五.產生自己的事件(在不能依靠屬性值跨站的基礎上)
由於javascript和html之間的互動是通過事件來實現的,事件就是使用者或者瀏覽器自身執行的某個動作,比如click,mouseover(當滑鼠指標移動到影象上時執行一段 JavaScript),load等,而響應事件的函式也就叫做事件處理函式。
eg:
<input type="button" value="click me" onclick="alert("click me")"/>
這是一個html程式碼中的事件處理程式,執行程式碼,當點選click me之後會出發onclick事件,然後執行當中的javascript程式碼。
事件能說明使用者何時做了某些事情或者頁面何時載入完畢,事件有三個不同的類別:使用者介面(滑鼠,鍵盤),邏輯(處理的結果),變化(對文件進行修改)。既然事件能夠讓javascript執行,那麼也就說明使用者能夠用它執行xss.
<img src="#" onerror=alert("但是")> 這裡的onerror是img標記的一個事件,只要頁面中發生錯誤,就觸發該事件
<div style="background-color:red" onmouseenter="alert("安全")">xss</div> onmouseenter當滑鼠進入選區執行程式碼
-------=------------=----------------------------=-------------------------=----------------------------=------------------------------=------------------------------=-------------------------=----------------------=-
Shellcode的呼叫
shellcode(指利用一個漏洞時所執行的程式碼)
exploit(指完整編好的漏洞利用工具)
poc(一段證明漏洞存在的程式碼片段)
在傳統xss運用之中,shellcode一般寫進頁面中直接執行,不過實際環境中會遇到很多阻撓,比如伺服器端程式的過濾,輸入字元有長度限制等。所以攻擊者常常把shellcode寫在遠端伺服器上,然後使用<script>標籤對其進行呼叫。