首頁  >  文章  >  運維  >  怎麼分析反射型XSS

怎麼分析反射型XSS

PHPz
PHPz轉載
2023-05-13 20:13:042114瀏覽

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>標籤並向頁面輸出處理後的數據,即使過濾了<script></script>標籤,但仍然可以使用其他html標籤,在這裡建構了惡意的url,但網站未做防護時,頁面會讀取到document.cookie的內容並輸入到頁面。這樣就造成了反射型 XSS。

使用360程式碼衛兵對上述範例程式碼進行偵測,可以檢出「反射型XSS」缺陷,顯示等級為高。從追蹤路徑中可以分析出資料的污染源以及資料流向,在程式碼行第100行報出缺陷,如圖1所示:

怎麼分析反射型XSS圖1:反射XSS 偵測範例

3.2 修正程式碼

怎麼分析反射型XSS

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

使用360程式碼衛兵對修復後的程式碼進行偵測,可以看到已不存在「反射型XSS」缺陷。如圖2:


怎麼分析反射型XSS

圖2:修正後偵測結果

4 、如何避免反射XSS

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

(1) 對使用者的輸入進行合理驗證(如年齡只能是數字),對特殊字元(如