Web應用進行XSS漏洞測試

發表于:2015-09-16來源:uml.org.cn作者:火龍果軟件點擊數: 標簽:軟件測試
對 WEB 應用進行 XSS 漏洞測試,不能僅僅局限于在 WEB 頁面輸入 XSS 攻擊字段,然后提交。繞過 JavaScript 的檢測,輸入 XSS 腳本,通常被測試人員忽略。下圖為 XSS 惡意輸入繞過 JavaScript 檢

  對 WEB 應用進行 XSS 漏洞測試,不能僅僅局限于在 WEB 頁面輸入 XSS 攻擊字段,然后提交。繞過 JavaScript 的檢測,輸入 XSS 腳本,通常被測試人員忽略。下圖為 XSS 惡意輸入繞過 JavaScript 檢測的攻擊路徑。

  常見的 XSS 輸入

  XSS 輸入通常包含 JavaScript 腳本,如彈出惡意警告框:<script>alert("XSS");</script>

  XSS 輸入也可能是 HTML 代碼段,譬如:

  網頁不停地刷新 <meta http-equiv="refresh" content="0;">

  嵌入其它網站的鏈接 <iframe src=http://xxxx width=250 height=250></iframe>

  XSS (Cross Site Scripting) Cheat Sheet 維護了一份常見的 XSS 攻擊腳本列表,可用來作為檢測 WEB 應用是否存在 XSS 漏洞的測試用例輸入。初次接觸 XSS 攻擊的開發人員可能會對列表提供的一些 XSS 輸入不是很理解,本文第二部分將會針對不同代碼上下文的 XSS 輸入作進一步的解釋。

  測試工具

  很多工具可以在瀏覽器發送 Get/Post 請求前將其截取,攻擊者可以修改請求中的數據,從而繞過 JavaScript 的檢驗將惡意數據注入服務器。以下是一些常用的截取 HTTP 請求的工具列表。

Paros proxy (http://www.parosproxy.org)
Fiddler (http://www.fiddlertool.com/fiddler)
Burp proxy (http://www.portswigger.net/proxy/)
TamperIE (http://www.bayden.com/dl/TamperIESetup.exe)

  筆者曾經使用 TamperIE 對 WEB 應用進行安全性測試。TamperIE 小巧易用,能夠截取 IE 瀏覽器發送的 Get/Post 請求,甚至能繞過 SSL 加密。不過 TamperIE + IE7 工作不穩定。IE7 提供了對 IPV6 的支持,如果你并不計劃測試你的 Web 應用對 IPV6 的支持,建議還是使用 TamperIE + IE6 的組合。

  如圖2所示: TamperIE 繞過客戶端瀏覽器 JavaScript 的校驗,在 POST 請求提交時將其截取,用戶可以任意修改表單輸入項 name 和 message 的值,譬如將 message 的值修改為 "<script>alert(“XSS hole!!”);</script>",然后點擊 ”Send altered data” 按鈕,將修改后的惡意數據發送給 Web 服務器。

  圖 2. 使用 TamperIE 截取 Post 請求

  在輸出端對動態內容進行編碼

  對一個 Web 應用而言,其動態內容可能來源于用戶輸入、后臺數據庫、硬件狀態改變或是網絡信息等。動態內容特別是來自用戶輸入的動態內容很有可能包含惡意數據,從而影響網頁的正常顯示或是執行惡意腳本。將動態內容安全地顯示在瀏覽器端與動態內容所處的上下文背景有關,譬如動態內容處在 HTML 正文、表單元素的屬性、或是 JavaScript 代碼段中。對于一個基于 PHP 語言的 Web 應用,當執行"echo"、"print"、"printf"、"<?=" 等語句時表示正在處理動態內容。本節將首先介紹 PHP 提供的庫函數 htmlspecialchars()的用法,此函數能將 5 個 HTML 特殊字符轉化為可在網頁顯示的 HTML 實體編碼;然后將介紹一些常見背景下的 XSS 攻擊輸入,以及如何在輸出端對動態內容進行轉義、編碼從而避免 XSS 攻擊。

  使用 PHP 的 htmlspecialchars() 顯示 HTML 特殊字符

  從上文列舉的 XSS 惡意輸入可以看到,這些輸入中包含了一些特殊的 HTML 字符如 "<"、">"。當傳送到客戶端瀏覽器顯示時,瀏覽器會解釋執行這些 HTML 或JavaScript 代碼而不是直接顯示這些字符串。< > & “ 等字符在HTML語言中有特殊含義,對于用戶輸入的特殊字符,如何直接顯示在網頁中而不是被瀏覽器當作特殊字符進行解析?

  HTML字符實體由 & 符號、實體名字或者 # 加上實體編號、分號三部分組成。以下為 HTML 中一些特殊字符的編碼。有的字符實體只有實體編號,沒有對應的實體名字,譬如單引號。

  PHP 提供了htmlspecialchars()函數可以將 HTML 特殊字符轉化成在網頁上顯示的字符實體編碼。這樣即使用戶輸入了各種 HTML 標記,在讀回到瀏覽器時,會直接顯示這些 HTML 標記,而不是解釋執行。htmlspecialchars()函數可以將以下五種 HTML 特殊字符轉成字符實體編碼:

原文轉自:http://www.uml.org.cn/Test/201407161.asp

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97