怎么分析反射型XSS

1、反射型 XSS

反射型 xss 是指應用程序通過 web 請求獲取不可信賴的數據,在未檢驗數據是否存在惡意代碼的情況下,便將其傳送給了 web 用戶。反射型 xss 一般由攻擊者構造帶有惡意代碼參數的 url,當 url 地址被打開時,特有的惡意代碼參數被 html 解析、執行,它的特點是非持久化,必須用戶點擊帶有特定參數的鏈接才能引起。小編以 java 語言源代碼為例,分析 cwe id 80: improper neutralization of script-related html tags in a web page (basic xss)?

2、 反射型 XSS 的危害

當用戶訪問一個帶有 XSS 代碼的 URL 請求時,服務器端接收數據后處理,然后把帶有 XSS 代碼的數據發送到瀏覽器,瀏覽器解析這段帶有XSS代碼的數據后,造成 XSS 漏洞,可能導致竊取目標網站的 Cookie 到攻擊者的服務器上,讀取用戶未公開的資料或Click劫持實施釣魚攻擊等。從2018年1月至11月,CVE 中共有126條漏洞信息與其相關。部分漏洞如下:

CVE 漏洞概述
CVE-2018-19091 tianti 是一款使用 Java 編寫的免費的輕量級 CMS 系統,目前提供了從后臺管理到前端展現的整體解決方案。其中 tianti 2.3 通過 tianti-module-admin / user /list userName 參數在用戶管理模塊中存在反射型 XSS 漏洞。
CVE-2018-14929 Matera Banco 1.0.0 容易受到多個反射型 XSS 的影響,正如 /contingency/web/index.jsp(又名主頁)url 參數所示。
CVE-2018-12996 ?ZohoManageEngine Applications Manager 提供了監視和管理 J2EE 底層結構、J2EE應用的解決方案。在 Zoho ManageEngine Applications Manager 13(Build13800)中反射型跨站腳本(XSS)漏洞允許遠程攻擊者通過參數 ‘method’ 向GraphicalView.do 注入任意 Web 腳本或 HTML。
CVE-2018-12090 LAMS 是由澳大利亞 Macquarie 大學,LAMS 國際有限公司和 LAMS 基金會聯合開發出來的一個基于 JAVA 的新一代學習軟件。在 3.1 之前的 LAMS 中存在未經身份驗證的反射型跨站腳本(XSS),允許遠程攻擊者在 forgetPasswordChange.jsp?key = 密碼更改期間通過操作未經過規范的 GET 參數來引入任意 JavaScript

3、示例代碼

示例源于Samate Juliet Test Suite for Java v1.3? (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE80_XSS__CWE182_Servlet_URLConnection_03.java。

3.1缺陷代碼

怎么分析反射型XSS怎么分析反射型XSS

上述示例代碼操作是獲取用戶的年齡,在第40行創建連接對象,在第44行創建輸入流獲得urlConnection對象響應的內容,在第52行從緩沖流中讀取一行數據,在第100行中,將獲得的數據去除所有的<script>標簽并向頁面輸出處理后的數據,即使過濾了<script>標簽,但仍然可以使用其他html標簽,在這里構造了惡意的url,但網站未做防護時,頁面會讀取到document.cookie的內容并輸入到頁面。這樣就造成了反射型 XSS。</script>

使用360代碼衛士對上述示例代碼進行檢測,可以檢出“反射型XSS”缺陷,顯示等級為高。從跟蹤路徑中可以分析出數據的污染源以及數據流向,在代碼行第100行報出缺陷,如圖1所示:

怎么分析反射型XSS圖1:反射型 XSS 檢測示例

3.2 修復代碼

怎么分析反射型XSS

在上述修復代碼中,由于頁面輸出的內容為用戶的年齡,在第96行,對響應的內容轉換為數字,這樣就過濾了其它 html 的字符,即使存在字符,代碼會報出異常,并不會造成反射型 XSS 的發生。

使用360代碼衛士對修復后的代碼進行檢測,可以看到已不存在“反射型XSS”缺陷。如圖2:

怎么分析反射型XSS

圖2:修復后檢測結果

4?、如何避免反射型 XSS

要避免反射型 XSS,需要注意以下幾點:

(1) 對用戶的輸入進行合理驗證(如年齡只能是數字),對特殊字符(如 、’、”等)以及<script>、javascript 等進行過濾。</script>

(2) 根據數據將要置于 HTML 上下文中的不同位置(HTML 標簽、HTML 屬性、JavaScript 腳本、CSS、URL),對所有不可信數據進行恰當的輸出編碼。

(3)?設置HttpOnly屬性,避免攻擊者利用XSS漏洞進行Cookie劫持攻擊。在 JavaEE 中,給Cookie添加HttpOnly的代碼如下:

怎么分析反射型XSS

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享