Web應(yīng)用進行XSS漏洞測試發(fā)表于:2015-09-16來源:作者:火龍果軟件點擊數(shù):266
標簽:軟件測試
對 WEB 應(yīng)用進行 XSS 漏洞測試,不能僅僅局限于在 WEB 頁面輸入 XSS 攻擊字段,然后提交。繞過 JavaScript 的檢測,輸入 XSS 腳本,通常被測試人員忽略。下圖為 XSS 惡意輸入繞過 JavaScript 檢
對 WEB 應(yīng)用進行 XSS 漏洞測試,不能僅僅局限于在 WEB 頁面輸入 XSS 攻擊字段,然后提交。繞過 JavaScript 的檢測,輸入 XSS 腳本,通常被測試人員忽略。下圖為 XSS 惡意輸入繞過 JavaScript 檢測的攻擊路徑。 ![]() 常見的 XSS 輸入 XSS 輸入通常包含 JavaScript 腳本,如彈出惡意警告框:<script>alert("XSS");</script> XSS 輸入也可能是 HTML 代碼段,譬如: 網(wǎng)頁不停地刷新 <meta http-equiv="refresh" content="0;"> 嵌入其它網(wǎng)站的鏈接 <iframe src=http://xxxx width=250 height=250></iframe> XSS (Cross Site Scripting) Cheat Sheet 維護了一份常見的 XSS 攻擊腳本列表,可用來作為檢測 WEB 應(yīng)用是否存在 XSS 漏洞的測試用例輸入。初次接觸 XSS 攻擊的開發(fā)人員可能會對列表提供的一些 XSS 輸入不是很理解,本文第二部分將會針對不同代碼上下文的 XSS 輸入作進一步的解釋。 很多工具可以在瀏覽器發(fā)送 Get/Post 請求前將其截取,攻擊者可以修改請求中的數(shù)據(jù),從而繞過 JavaScript 的檢驗將惡意數(shù)據(jù)注入服務(wù)器。以下是一些常用的截取 HTTP 請求的工具列表。
筆者曾經(jīng)使用 TamperIE 對 WEB 應(yīng)用進行安全性測試。TamperIE 小巧易用,能夠截取 IE 瀏覽器發(fā)送的 Get/Post 請求,甚至能繞過 SSL 加密。不過 TamperIE + IE7 工作不穩(wěn)定。IE7 提供了對 IPV6 的支持,如果你并不計劃測試你的 Web 應(yīng)用對 IPV6 的支持,建議還是使用 TamperIE + IE6 的組合。 如圖2所示: TamperIE 繞過客戶端瀏覽器 JavaScript 的校驗,在 POST 請求提交時將其截取,用戶可以任意修改表單輸入項 name 和 message 的值,譬如將 message 的值修改為 "<script>alert(“XSS hole!!”);</script>",然后點擊 ”Send altered data” 按鈕,將修改后的惡意數(shù)據(jù)發(fā)送給 Web 服務(wù)器。 ![]() 圖 2. 使用 TamperIE 截取 Post 請求 在輸出端對動態(tài)內(nèi)容進行編碼 對一個 Web 應(yīng)用而言,其動態(tài)內(nèi)容可能來源于用戶輸入、后臺數(shù)據(jù)庫、硬件狀態(tài)改變或是網(wǎng)絡(luò)信息等。動態(tài)內(nèi)容特別是來自用戶輸入的動態(tài)內(nèi)容很有可能包含惡意數(shù)據(jù),從而影響網(wǎng)頁的正常顯示或是執(zhí)行惡意腳本。將動態(tài)內(nèi)容安全地顯示在瀏覽器端與動態(tài)內(nèi)容所處的上下文背景有關(guān),譬如動態(tài)內(nèi)容處在 HTML 正文、表單元素的屬性、或是 JavaScript 代碼段中。對于一個基于 PHP 語言的 Web 應(yīng)用,當(dāng)執(zhí)行"echo"、"print"、"printf"、"<?=" 等語句時表示正在處理動態(tài)內(nèi)容。本節(jié)將首先介紹 PHP 提供的庫函數(shù) htmlspecialchars()的用法,此函數(shù)能將 5 個 HTML 特殊字符轉(zhuǎn)化為可在網(wǎng)頁顯示的 HTML 實體編碼;然后將介紹一些常見背景下的 XSS 攻擊輸入,以及如何在輸出端對動態(tài)內(nèi)容進行轉(zhuǎn)義、編碼從而避免 XSS 攻擊。 使用 PHP 的 htmlspecialchars() 顯示 HTML 特殊字符 從上文列舉的 XSS 惡意輸入可以看到,這些輸入中包含了一些特殊的 HTML 字符如 "<"、">"。當(dāng)傳送到客戶端瀏覽器顯示時,瀏覽器會解釋執(zhí)行這些 HTML 或JavaScript 代碼而不是直接顯示這些字符串。< > & “ 等字符在HTML語言中有特殊含義,對于用戶輸入的特殊字符,如何直接顯示在網(wǎng)頁中而不是被瀏覽器當(dāng)作特殊字符進行解析? HTML字符實體由 & 符號、實體名字或者 # 加上實體編號、分號三部分組成。以下為 HTML 中一些特殊字符的編碼。有的字符實體只有實體編號,沒有對應(yīng)的實體名字,譬如單引號。 ![]() PHP 提供了htmlspecialchars()函數(shù)可以將 HTML 特殊字符轉(zhuǎn)化成在網(wǎng)頁上顯示的字符實體編碼。這樣即使用戶輸入了各種 HTML 標記,在讀回到瀏覽器時,會直接顯示這些 HTML 標記,而不是解釋執(zhí)行。htmlspecialchars()函數(shù)可以將以下五種 HTML 特殊字符轉(zhuǎn)成字符實體編碼: 原文轉(zhuǎn)自:http://www./Test/201407161.asp |
|
來自: liu_guoping > 《安全性測試》