电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 742 人浏览分享

JAVA代码审计XSS及Filter动态代理过滤

[复制链接]
742 0
1.介绍

最近写了个小玩意儿 主要功能为用户信息管理 例如新增 删除 添加等。但在没写过滤之前 全是xss

所以拿出来给大家进行简单分析,后续通过动态代理进行过滤。

QQ截图20211203164209.png

2.代码分析

这里就只分析用户添加的页面了 可以看到在未做任何过滤的情况触发XSS

QQ截图20211203164304.png

QQ截图20211203164327.png

在add.jsp页面发现了Servlet

400.png

之后跟进该Servlet,通过获取用户输入进行发送到Service Service在发送到Dao进行处理

399.png

398.png

Dao层用的是JDBCtemplate实现,经过测试发现如果使用PreparedStatement连接数据库的话
PreparedStatement会过滤掉常见的XSS代码

<script>alert(xss)</script>
<img src=x onerror=alert(1) />...

但是PreparedStatement过滤一般常用的确实可以 但是鸡肋一点的话,就很轻松绕过了。

<input onmouseover=alert(1)>//鸡肋点的语句...

626.png

在AddServlet可以看到 最后进行了重定向 而ListUser就是首页

resp.sendRedirect("/Students/ListUser");

跟进AddServlet之后,可以发现该Servlet执行了findALL(),该方法其实就是service层-->Dao层的
查询全部用户信息并存储到了list中。之后设置setAttribute之后进行了请求转发到list.jsp

29.png

跟进list.jsp之后,可以发现将用户的信息使用JSTL遍历出并显示。全程毫无过滤。

28.png


3.Filter动态代理过滤

这里本人简单写了一下过滤。只过滤了< >标签。后续可以根据自己需求进行改进。

写的很简单 就不多说了。

@WebFilter("/*")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, Filter
Chain filterChain) throws IOException, ServletException {
        ServletRequest servlet = (ServletRequest)Proxy.newProxyInstance(servletRequest.getClass
().getClassLoader(), servletRequest.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                if(method.getName().equals("getParameter")){
                    String value = (String)method.invoke(servletRequest,args);//获取输入的value
                    value = value.replaceAll(">","*");//将值替换
                    value = value.replaceAll("<","*");
                    return value;
                }else{
                    System.out.println("没有匹配成功");
                }
                return method.invoke(servletRequest,args);
            }
        });
        filterChain.doFilter(servlet,servletResponse);
    }
    @Override
    public void destroy() {

    }
}

之后可以发现过滤成功

26.png

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.