1. 程式人生 > >跨站指令碼攻擊xss學習

跨站指令碼攻擊xss學習

0、認識跨站指令碼

舉一個跨站指令碼的簡單例子。

假設一個頁面將使用者輸入的引數直接顯示到頁面之中。(比如有如下程式碼)

在實際的瀏覽器中,在param中提交的引數正常會展示到頁面之中。比如輸入下面的URL:

然後發現瀏覽器頁面的提供會變成這樣:

此時如果提交下面的URL:

會發現alert被執行了

 

    

1、跨站指令碼分類

跨站指令碼攻擊分為3類,反射型、儲存型和DOM Based XSS。

1、反射型xss。瀏覽器執行一個不可信的指令碼,並獲得伺服器的響應。通常黑客需要引誘使用者點選惡意連結來進行觸發。

2、儲存型xss。比如在伺服器的部落格文章中有惡意指令碼,那麼每個訪問該部落格的瀏覽器都會執行這段而已程式碼。

3、修改頁面的DOM節點形成的xss。(實際上也是瀏覽器執行不可信的指令碼,但還是單獨被列出為一類)

2、XSS Payload

XSS攻擊成功之後,攻擊者能夠對當前瀏覽器的頁面植入惡意指令碼,通過惡意指令碼,控制使用者瀏覽器。這些用來完成各種具體功能的惡意指令碼,被成為XSS Payload。

XSS Payload實際上就是javaScript指令碼(還可以是Flash或其他富客戶端的指令碼)。所以javascript能做到的事情,XSS Payload都能夠做到。

2.1 XSS Payload獲取Cookie(通過URL的param遠端載入一個指令碼,指令碼中載入一個圖片,將cookie放入圖片路徑)

從開頭的例子看到,通過URL的方式能夠使一個指令碼執行。

通過如下方式去載入一個遠端指令碼:

然後在evil.js中寫入獲取Cookie的程式碼(這段程式碼本身是載入一個圖片,但是通過請求一個圖片,將cookie放在請求的URL中):

即使最後該圖片路徑不存在,伺服器也會記錄下這次訪問的URL,也就是能獲取到cookie了。

獲取cookie後,使用使用者的cookie就可以偽造使用者登入,但是很容易被防範。

 2.2 強大的XSS Payload

模擬使用者的行為:

1、構建form表單

2、通過XMLHttpRequest傳送訊息

比如通過網路抓包來獲取某項行為的URL,然後模擬使用者傳送該URL

 

XSS釣魚:

偽造一個假的登入框或是頁面。

 

識別使用者瀏覽器:

1、讀取瀏覽器的UserAgent(可以偽造)

2、根據不同瀏覽器各自的獨特功能,識別瀏覽器獨有的物件

 

識別使用者安裝的軟體:

1、activex的classid

2、falsh的system.capabilities物件(軟體的專屬物件)

 

ccs訪問過的網站顏色不同會造成資訊洩漏

 

獲取真實IP:

javascript沒有直接介面,需要使用其他軟體完成,比如JRE

2.3 XSS攻擊平臺

Attack API

BeEF

XSS-Proxy

2.4 XSS Worm

2005地一個蠕蟲病毒

2007年百度空間蠕蟲病毒

2.5 除錯javascript

firebug

IE8 Developer Tools

Fiddler

HttpWatch

2.6 XSS 構造技巧

3、XSS防禦

HttpOnly:在cookie設定HttpOnly屬性,可以讓javascript讀取不到cookie

輸入檢查:比如排查有沒有像'<'或'>'等特殊字元

輸出檢查:將變數輸出成html時可以使用編碼或轉義字元的方式來防禦XSS攻擊,將比如將<轉義成&lt