1. 程式人生 > >XSS學習筆記(入門篇)

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="javascript&#116&#58alert("挺難的");">

五.產生自己的事件(在不能依靠屬性值跨站的基礎上)

由於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>標籤對其進行呼叫。