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 属性找到指定拦截器的实现类,分析过滤逻辑,寻找绕过方法。