XSS 跨站服務腳本攻擊

1、漏洞概述

XSS 是指攻擊者在網頁中嵌入客戶端腳本,通常是 JavaScript 編寫的惡意代碼,當用戶使 用瀏覽器瀏覽被嵌入惡意代碼的網頁時,惡意代碼會在用戶瀏覽器上執行。

?XSS 屬于 Web 前端攻擊,包括但不限于普通用戶,網站管理員如果被攻擊,攻擊裝可 以劫持管理員的身份度網站服務器端進行文件管理,數據管理等操作。

2、漏洞原理

XSS 攻擊是在網頁中嵌入客戶端惡意腳本代碼,這些惡意代碼一般使用 JavaScript 編寫 JS(JavaScript 簡稱)可以用 XSS 盜取用戶 Cookie、改變網頁內容、URL 跳轉到惡意網站、監 控鍵盤記錄、甚至 GetShell 等。

3漏洞利用

xss 分為3種 反射性 ?,存儲型 ?,DOM型

反射性xss也稱非持久性xss,是最容易出現的一種xss

例子:

攻擊者使用 XSS 反射型漏洞盜取管理員 cookie 步驟。

1:用戶小 a 正在上 www.abc.com 論壇看帖子。

2:攻擊者發現 www.abc.com/xss.php 存在反射型漏洞,然后精心構造 JS 代碼,此代碼可以 盜取用戶 cookie 發送到指定站點 www.hacker.com

3:攻擊者將帶有反射型 XSS 漏洞的 URL 通過站內短信發給用戶小 a,標題為引起小 a 好奇 心的內容,目的是為了讓用戶小 a 單擊鏈接。

4:假設用戶小 a 單擊了帶有 xss 漏洞的 url,會把自己的 cookie 發送到網站 www.hacker.com

5:攻擊者接受到用戶小 a 的 會話 cookie,利用 cookie 以小 a 的身份登錄 www.abc.com 從 而劫持小 a 的登錄網站憑據進行其它攻擊。

存儲型 XSS? 存儲型 XSS 又被稱為持久性 XSS,是最危險的一種跨站腳本。? 允許用戶存儲數據的 Web 應用都可能出現存儲型 XSS 漏洞,當攻擊者提交一段 XSS 代碼后,被服務端接受并存儲,當攻擊者再次訪問某個頁面時,這段 XSS 代碼被程序輸出到瀏 覽器造成 XSS 跨站代碼攻擊,這就是存儲型 XSS。? 存儲型 XSS 與反射型 XSS、DOM 型 XSS 相比,具有更高隱蔽性,危害性也更大,它們最 大區別在于反射型 XSS 與 DOM 型 XSS 執行都必須依靠用戶手動去觸發,而存儲型 XSS 不需 要。另外反射型 XSS 由于默認 IE 8 及以上瀏覽器,其它現代瀏覽器例如 chrome,firefox 等 默認已經開啟攔截反射型 xss 漏洞,并且隨著瀏覽器補丁不斷升級,也修復了絕大多數繞過 代碼。以下是 IE 瀏覽器防護反射型 XSS 漏洞選項:? ? 以下是一個常見存儲型 XSS 場景示例:? 在測試是否存在 XSS 時,首選要確定輸入點與輸出點,例如,我們要在留言內容上測試 XSS 漏洞,首先要尋找留言內容輸出(顯示)的地方在標簽內還是在標簽屬性內,或者其它 地方,如果輸出的數據在屬性內,那么 XSS 代碼是不會被執行的。如:alert(1)” /> 以上 JS 代碼雖然成功插入到了 HTML 中,但卻無法執行,因為 XSS 代碼出現在 Value 屬 性中,被當做值來處理,最終瀏覽器解析 HTML 時,會把數據以文本的形式輸出在網頁中。 知道了輸出點后,可以根據相應標簽構造 HTML 代碼來閉合,插入 XSS 代碼為 “/>alert(1)”,最終在 HTML 文檔中為:alert(1)” /> 這樣就可以閉合 input 標簽,使輸出的內容不在 Value 屬性中,從而造成 XSS 漏洞。? 知道了最基本的測試原理后,下面看看具體的存儲型漏洞? 1:添加正常留言,昵稱為 xxser,留言內容為“HelloWord”,查看前端源代碼

xxserHello World2016-10-11 11:27:38

2:如果現實區域不在 HTML 屬性內,則可以直接用 XSS 代碼注入。如果不能確定輸出具體 位置,可以用模糊測試方案,代碼如下:alert(/stored xss/)普通注入? "/>alert(/stored xss/)閉合標簽注入? '">alert(/stored xss/)閉合標簽注入? 盜取 cookie 的 js 代碼后,重新加載留言頁面,XSS 代碼被瀏覽器執行。? ? 攻擊者將帶有 XSS 代碼的留言提交到數據庫,當用戶查看這段留言時,瀏覽器會把代碼認為 正常的 JavaScript 代碼來執行。所以,存儲型 XSS 具有更高的隱蔽性


檢測 XSS

手工檢測:

① 可得知輸出位置 輸入一些敏感字符,例如“<、>、”、’、()”等,在提交后查看 HTML 源代碼,看這些 輸入的字符是否被轉義。在輸出這些敏感字符時,很有可能程序已經做了過濾,這樣在尋找這些字符時就不 太容易,這時可以輸入“AAA<>”’&”字符串,然后在查找源代碼時直接查找 AAA 比較 方便。

② 無法得知輸出位置 很多 Web 程序源碼是不公開的,這時在測試 XSS 時就可能無法得知輸入數據到底在什 么地方顯示,比如測試留言吧是否存在 XSS,在留言后,可能需要經過管理員審核才能顯 示,這種情況無法知道數據在后臺管理頁面處于何種狀態,例如:? 在

標簽中:

XSS Test

在標簽中:對這種情況通常會輸入“”/> xss test”來測試。

2:工具檢測

使用 Appscan,Burp Suite 或瀏覽器 Web 滲透插件 hackbar 等均可。

工具的局限性在于如果提交測試代碼輸入框需要輸入驗證碼或者短信,工具是無法識別 各類驗證碼而順利提交攻擊代碼的。

修復漏洞

cookie 設置HTTPonly

setcookie($name, $value, $expire, $path, $domain, $secure, TRUE) ? ? //>=5.2

?header ("Set-Cookie: hidden=value; httponly", false);

/* ≤ PHP 5.1 */

第二種,一個函數搞定

htmlspecialchars($html);

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容