前言
看到标题的第一反应,大家可能感觉本文讲的是一些老套数,比如select/*xasdasdsa*/等等垃圾字符绕过,在平时代码审计项目中,遇到了很多白名单过滤,现实情况就是,根本不允许使用特定语句和方法,比如一些存在注入的代码中,明明有注入但是碰到了白名单过滤。洞就送在眼前了,只需要变通一下,就可以成为一个新的洞了。
代码审计
这里根据以往审计过程,过滤的代码。自己重现了一下。
如下是Filter过滤,在本文中,我过滤掉了增删改查等关键字。因为在注入中多数都是靠这几个函数来玩。
public class SQLFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void destroy() {
Filter.super.destroy();
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
String sql = servletRequest.getParameter("sql");
System.out.println(sql);
if (StrUtil.containsAnyIgnoreCase(sql, new CharSequence[]{"INSERT ", "SELECT ", "UPD