56:程式碼審計-JAVA專案Filter過濾器及XSS挖掘
思維導圖
看構成,看指向,看配置,看程式碼-->尋繞過
web.xml檢視Filter過濾器
- 名字,對應class,觸發url,生效規則等
Filter是JavaWeb中的過濾器,用於過濾URL請求。通過Filter我們可以實現URL請求資源許可權驗證、使用者登入檢測等功能。
Filter是一個介面,實現一個Filter只需要重寫init、doFilter、destroy方法即可,其中過濾邏輯都在doFilter方法中實現。
Filter和Servlet一樣是JavaWeb中最為核心的部分,使用Servlet和Filter可以實現後端介面開發和許可權控制,當然使用Filter機制也可以實現MVC框架,Struts2實現機制就是使用的Filter。
Filter的配置類似於Servlet,由<filter>和<filter-mapping>兩組標籤組成,如果Servlet版本大於3.0同樣可以使用註解的方式配置Filter。
案例1:Filter過濾器配置啟用及檢視
<1>看構成-->常規類-->web.xml-->找到過濾器配置
<2>看指向
-->shiro為框架過濾器,<filter-class>指向外部專案庫,觸發請求為/admin/*地址
-->jfinal為自主編寫過濾器,<filter-class>指向內部專案庫,觸發請求為/*,即所有地址
<3>看配置,看程式碼,尋繞過思路-->找觸發規則,可以通過<filter-class>標籤找到過濾器程式碼,主要由init、doFilter、destroy方法構成,其中doFilter方法中是核心程式碼。
案例2:Demo程式碼測試引用過濾器測試
<1>看構成-->常規類-->web.xml-->找到過濾器配置
<2>看指向-->xsscheck為自寫過濾器,<filter-class>指向內部專案庫,觸發請求為/servlet/*地址
<3>看配置,看程式碼,尋繞過思路-->找觸發規則,可以通過<filter-class>標籤找到過濾器程式碼,分析過濾邏輯。
<4>測試,訪問servlet/xss.jsp頁面時,觸發過濾器。
案例3:Jeesns過濾器分析繞過防護程式碼
JEESNS是一款基於JAVA企業級平臺研發的社交管理系統,依託企業級JAVA的高效、安全、穩定等優勢,開創國內JAVA版開源SNS先河,JEESNS可以用來搭建門戶、論壇、社群、微博、問答、知識付費平臺等。
- 開發語言:JAVA
- 資料庫:MYSQL
- JAVA開發框架:SpringBoot2+Mybatis
- 前臺前端開發框架:ZUI+JQuery+Bootstrap
- 前臺模板引擎:Freemarker
<1>首先看jeesns-v1.3原始碼,在web.xml中找到xss過濾器
<2>找到過濾規則。
<3>找到核心原始碼。可以看到,xss過濾使用的是替換方法,這種方式不夠嚴謹,很容易被繞過。
<4>xss原理是輸出不受控制,那當我們測試這個漏洞時,可以直接通過功能點測試,也可以全域性搜尋輸出函式,然後找到對應的介面進行測試。經過測試,發現使用如下payload繞過過濾。
<svg/onLoad=confirm(1)> <img src="x" onerror=confirm(0)>
<5>jeesns-v1.4修復了這個漏洞,我們看下它的原始碼,瞭解它是如何修復的。
同樣的步驟,在web.xml中找到xss過濾器。
找到過濾規則。
找到核心原始碼。可以看到,xss過濾使用了正則表示式等方式,過濾規則更加嚴謹。
但是這個過濾規則是否足夠嚴謹呢?事實上,它也是可以繞過的。payload如下
http://localhost:8080/error?msg=%3CScript%3Eprompt(/xss/)%3C/Script%3E
參考:https://www.seebug.org/vuldb/ssvid-97940
案例4:Struts2框架類過濾器簡要分析測試
Struts2攔截器的配置和使用:http://c.biancheng.net/view/4106.html
Struts2攔截器的配置是在 struts.xml 檔案中完成的,它通常以 <interceptor> 標籤開頭,以 </interceptor> 標籤結束。
在struts.xml中找interceptor關鍵字,沒找到,但是發現這個檔案引用了struts-default.xml檔案
開啟struts-default.xml檔案,發現攔截器,通過class 屬性找到指定攔截器的實現類,分析過濾邏輯,尋找繞過方法。