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/*地址

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

-->jfinal为自主编写过滤器,<filter-class>指向内部项目库,触发请求为/*,即所有地址

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

<3>看配置,看代码,寻绕过思路-->找触发规则,可以通过<filter-class>标签找到过滤器代码,主要由init、doFilter、destroy方法构成,其中doFilter方法中是核心代码。

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

案例2:Demo代码测试引用过滤器测试

<1>看构成-->常规类-->web.xml-->找到过滤器配置

<2>看指向-->xsscheck为自写过滤器,<filter-class>指向内部项目库,触发请求为/servlet/*地址

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

<3>看配置,看代码,寻绕过思路-->找触发规则,可以通过<filter-class>标签找到过滤器代码,分析过滤逻辑。

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

<4>测试,访问servlet/xss.jsp页面时,触发过滤器。

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

案例3:Jeesns过滤器分析绕过防护代码

JEESNS是一款基于JAVA企业级平台研发的社交管理系统,依托企业级JAVA的高效、安全、稳定等优势,开创国内JAVA版开源SNS先河,JEESNS可以用来搭建门户、论坛、社区、微博、问答、知识付费平台等。

  • 开发语言:JAVA
  • 数据库:MYSQL
  • JAVA开发框架:SpringBoot2+Mybatis
  • 前台前端开发框架:ZUI+JQuery+Bootstrap
  • 前台模板引擎:Freemarker

<1>首先看jeesns-v1.3源码,在web.xml中找到xss过滤器

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

<2>找到过滤规则。

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

<3>找到核心源代码。可以看到,xss过滤使用的是替换方法,这种方式不够严谨,很容易被绕过。

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

<4>xss原理是输出不受控制,那当我们测试这个漏洞时,可以直接通过功能点测试,也可以全局搜索输出函数,然后找到对应的接口进行测试。经过测试,发现使用如下payload绕过过滤。

<svg/onLoad=confirm(1)>

<img src="x" onerror=confirm(0)>

<5>jeesns-v1.4修复了这个漏洞,我们看下它的源码,了解它是如何修复的。 

同样的步骤,在web.xml中找到xss过滤器。

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

找到过滤规则。

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

找到核心源代码。可以看到,xss过滤使用了正则表达式等方式,过滤规则更加严谨。

56:代码审计-JAVA项目Filter过滤器及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文件

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

打开struts-default.xml文件,发现拦截器,通过class 属性找到指定拦截器的实现类,分析过滤逻辑,寻找绕过方法。

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

 

56:代码审计-JAVA项目Filter过滤器及XSS挖掘

上一篇:[84题]Linux运维常见笔试题(填空题)


下一篇:[LeetCode 26.] 删除有序数组中的重复项