1. 程式人生 > 其它 >56:程式碼審計-JAVA專案Filter過濾器及XSS挖掘

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 屬性找到指定攔截器的實現類,分析過濾邏輯,尋找繞過方法。