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