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

  • 相关阅读:
    解密时遇到 填充无效 无法被移除
    固态硬盘SSD,机械硬盘HDD,4K速度对比。
    onsubmit ajax return false 无效
    chrome flash
    ubuntu base make 未找到命令
    winrar 压缩命令
    查看耗时长,CPU 100% 的SQL
    【转】SQL Server日志文件过大 大日志文件清理方法 不分离数据库
    安装老版本redis .NET 客户端
    python2.0_day22_web聊天室二
  • 原文地址:https://www.cnblogs.com/zhengna/p/15188128.html
Copyright © 2011-2022 走看看