1、漏洞概述
XSS 是指攻擊者在網(wǎng)頁中嵌入客戶端腳本,通常是 JavaScript 編寫的惡意代碼,當(dāng)用戶使 用瀏覽器瀏覽被嵌入惡意代碼的網(wǎng)頁時(shí)嘀韧,惡意代碼會(huì)在用戶瀏覽器上執(zhí)行揪阶。
?XSS 屬于 Web 前端攻擊,包括但不限于普通用戶你虹,網(wǎng)站管理員如果被攻擊绘搞,攻擊裝可 以劫持管理員的身份度網(wǎng)站服務(wù)器端進(jìn)行文件管理,數(shù)據(jù)管理等操作傅物。
2夯辖、漏洞原理
XSS 攻擊是在網(wǎng)頁中嵌入客戶端惡意腳本代碼,這些惡意代碼一般使用 JavaScript 編寫 JS(JavaScript 簡(jiǎn)稱)可以用 XSS 盜取用戶 Cookie董饰、改變網(wǎng)頁內(nèi)容蒿褂、URL 跳轉(zhuǎn)到惡意網(wǎng)站、監(jiān) 控鍵盤記錄卒暂、甚至 GetShell 等啄栓。
3漏洞利用
xss 分為3種 反射性 ?,存儲(chǔ)型 ?也祠,DOM型
反射性xss也稱非持久性xss昙楚,是最容易出現(xiàn)的一種xss
例子:
攻擊者使用 XSS 反射型漏洞盜取管理員 cookie 步驟。
1:用戶小 a 正在上 www.abc.com 論壇看帖子诈嘿。
2:攻擊者發(fā)現(xiàn) www.abc.com/xss.php 存在反射型漏洞堪旧,然后精心構(gòu)造 JS 代碼,此代碼可以 盜取用戶 cookie 發(fā)送到指定站點(diǎn) www.hacker.com
3:攻擊者將帶有反射型 XSS 漏洞的 URL 通過站內(nèi)短信發(fā)給用戶小 a奖亚,標(biāo)題為引起小 a 好奇 心的內(nèi)容淳梦,目的是為了讓用戶小 a 單擊鏈接。
4:假設(shè)用戶小 a 單擊了帶有 xss 漏洞的 url昔字,會(huì)把自己的 cookie 發(fā)送到網(wǎng)站 www.hacker.com
5:攻擊者接受到用戶小 a 的 會(huì)話 cookie爆袍,利用 cookie 以小 a 的身份登錄 www.abc.com 從 而劫持小 a 的登錄網(wǎng)站憑據(jù)進(jìn)行其它攻擊。
存儲(chǔ)型 XSS? 存儲(chǔ)型 XSS 又被稱為持久性 XSS,是最危險(xiǎn)的一種跨站腳本陨囊。? 允許用戶存儲(chǔ)數(shù)據(jù)的 Web 應(yīng)用都可能出現(xiàn)存儲(chǔ)型 XSS 漏洞弦疮,當(dāng)攻擊者提交一段 XSS 代碼后,被服務(wù)端接受并存儲(chǔ)蜘醋,當(dāng)攻擊者再次訪問某個(gè)頁面時(shí)挂捅,這段 XSS 代碼被程序輸出到瀏 覽器造成 XSS 跨站代碼攻擊,這就是存儲(chǔ)型 XSS堂湖。? 存儲(chǔ)型 XSS 與反射型 XSS闲先、DOM 型 XSS 相比,具有更高隱蔽性无蜂,危害性也更大伺糠,它們最 大區(qū)別在于反射型 XSS 與 DOM 型 XSS 執(zhí)行都必須依靠用戶手動(dòng)去觸發(fā),而存儲(chǔ)型 XSS 不需 要斥季。另外反射型 XSS 由于默認(rèn) IE 8 及以上瀏覽器训桶,其它現(xiàn)代瀏覽器例如 chrome,firefox 等 默認(rèn)已經(jīng)開啟攔截反射型 xss 漏洞酣倾,并且隨著瀏覽器補(bǔ)丁不斷升級(jí)舵揭,也修復(fù)了絕大多數(shù)繞過 代碼。以下是 IE 瀏覽器防護(hù)反射型 XSS 漏洞選項(xiàng):? ? 以下是一個(gè)常見存儲(chǔ)型 XSS 場(chǎng)景示例:? 在測(cè)試是否存在 XSS 時(shí)躁锡,首選要確定輸入點(diǎn)與輸出點(diǎn)午绳,例如,我們要在留言內(nèi)容上測(cè)試 XSS 漏洞映之,首先要尋找留言內(nèi)容輸出(顯示)的地方在標(biāo)簽內(nèi)還是在標(biāo)簽屬性內(nèi)拦焚,或者其它 地方,如果輸出的數(shù)據(jù)在屬性內(nèi)杠输,那么 XSS 代碼是不會(huì)被執(zhí)行的赎败。如:alert(1)” /> 以上 JS 代碼雖然成功插入到了 HTML 中,但卻無法執(zhí)行蠢甲,因?yàn)?XSS 代碼出現(xiàn)在 Value 屬 性中僵刮,被當(dāng)做值來處理,最終瀏覽器解析 HTML 時(shí)鹦牛,會(huì)把數(shù)據(jù)以文本的形式輸出在網(wǎng)頁中搞糕。 知道了輸出點(diǎn)后,可以根據(jù)相應(yīng)標(biāo)簽構(gòu)造 HTML 代碼來閉合能岩,插入 XSS 代碼為 “/>alert(1)”,最終在 HTML 文檔中為:alert(1)” /> 這樣就可以閉合 input 標(biāo)簽寞宫,使輸出的內(nèi)容不在 Value 屬性中萧福,從而造成 XSS 漏洞拉鹃。? 知道了最基本的測(cè)試原理后,下面看看具體的存儲(chǔ)型漏洞? 1:添加正常留言,昵稱為 xxser膏燕,留言內(nèi)容為“HelloWord”钥屈,查看前端源代碼
xxserHello World2016-10-11 11:27:38
2:如果現(xiàn)實(shí)區(qū)域不在 HTML 屬性內(nèi),則可以直接用 XSS 代碼注入坝辫。如果不能確定輸出具體 位置篷就,可以用模糊測(cè)試方案,代碼如下:alert(/stored xss/)普通注入? "/>alert(/stored xss/)閉合標(biāo)簽注入? '">alert(/stored xss/)閉合標(biāo)簽注入? 盜取 cookie 的 js 代碼后近忙,重新加載留言頁面竭业,XSS 代碼被瀏覽器執(zhí)行。? ? 攻擊者將帶有 XSS 代碼的留言提交到數(shù)據(jù)庫(kù)及舍,當(dāng)用戶查看這段留言時(shí)未辆,瀏覽器會(huì)把代碼認(rèn)為 正常的 JavaScript 代碼來執(zhí)行。所以锯玛,存儲(chǔ)型 XSS 具有更高的隱蔽性
檢測(cè) XSS
手工檢測(cè):
① 可得知輸出位置 輸入一些敏感字符咐柜,例如“<、>攘残、”拙友、’、()”等歼郭,在提交后查看 HTML 源代碼遗契,看這些 輸入的字符是否被轉(zhuǎn)義。在輸出這些敏感字符時(shí)病曾,很有可能程序已經(jīng)做了過濾姊途,這樣在尋找這些字符時(shí)就不 太容易,這時(shí)可以輸入“AAA<>”’&”字符串知态,然后在查找源代碼時(shí)直接查找 AAA 比較 方便捷兰。
② 無法得知輸出位置 很多 Web 程序源碼是不公開的,這時(shí)在測(cè)試 XSS 時(shí)就可能無法得知輸入數(shù)據(jù)到底在什 么地方顯示负敏,比如測(cè)試留言吧是否存在 XSS,在留言后贡茅,可能需要經(jīng)過管理員審核才能顯 示,這種情況無法知道數(shù)據(jù)在后臺(tái)管理頁面處于何種狀態(tài)其做,例如:? 在
標(biāo)簽中:
XSS Test
在標(biāo)簽中:對(duì)這種情況通常會(huì)輸入“”/> xss test”來測(cè)試顶考。
2:工具檢測(cè)
使用 Appscan,Burp Suite 或?yàn)g覽器 Web 滲透插件 hackbar 等均可妖泄。
工具的局限性在于如果提交測(cè)試代碼輸入框需要輸入驗(yàn)證碼或者短信驹沿,工具是無法識(shí)別 各類驗(yàn)證碼而順利提交攻擊代碼的。
修復(fù)漏洞
cookie 設(shè)置HTTPonly
setcookie($name, $value, $expire, $path, $domain, $secure, TRUE) ? ? //>=5.2
?header ("Set-Cookie: hidden=value; httponly", false);
/* ≤ PHP 5.1 */
第二種蹈胡,一個(gè)函數(shù)搞定
htmlspecialchars($html);