使用“进程注入”完成无文件复生 WebShell

访客5年前关于黑客接单1041

上周末,一个好兄弟找我说一个很重要的方针shell丢了,这个shell之前是经过一个S2代码履行的缝隙拿到的,现在缝隙还在,不过web目录悉数不可写,问我有没有办法搞个webshell持续做内网。正好我之前一向有个经过“进程注入”来完成内存webshell的主意,于是就趁这个时机以Java为例做了个内存webshell出来(暂时叫它memShell吧),给咱们共享一下:)
前语
一般在浸透过程中,咱们通常会用到webshell,一个以文件的办法存在于Web容器内的歹意脚本文件。咱们经过webshell来让Web Server来履行咱们的恣意指令。如果在某些机选情况下,咱们不想或许不能在Web目录下面写入文件,是不是就束手无策了?当然不是,写入webshell并不是让Web Server来履行咱们恣意代码的仅有办法,经过直接修正进程的内存也能够完成这个意图。咱们只需具有一个web容器进程履行用户的权限,理论上就能够彻底操控该进程的地址空间(更切当的说是地址空间中的非Kernel部分),包含地址空间内的数据和代码。OS层进程注入的办法有许多,不过详细到Java环境,咱们不需要运用操作系统层面的进程注入办法。Java为咱们供给了更便利的接口:Java Instrumentation。
Java Instrumentation简介
先看下官方概念:java Instrumentation指的是能够用独立于应用程序之外的署理(agent)程序来监测和帮忙运行在JVM上的应用程序。这种监测和帮忙包含但不限于获取JVM运行时状况,替换和修正类界说等。简略一句话归纳下:Java Instrumentation能够在JVM发动后,动态修正已加载或许未加载的类,包含类的特点、办法。该机制最早于Java SE5 引进,Java SE6之后的机制相对于Java SE5有较大改善,由于现在Java SE5这种古玩等级的环境现已不多,此处不再赘述。
下面看一个简略的比如:首要新建3个Java工程Example、Agent和AgentStarter。
在工程Example中新建2个类:
Bird.java:
public class Bird {
    public void say()
    {
        System.out.println("bird is gone.");
    }
}
然后把编译后的Bird.class仿制出来,放到D盘根目录。然后把Bird.java再改成如下:
Bird.java:
public class Bird {
    public void say()
    {
        System.out.println("bird say hello");
    }
}
Main.java:
public class Main {
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        while(true)
        {
            Bird bird=new Bird();
            bird.say();
            Thread.sleep(3000);
        }   
    }
}
把整个工程打包成可履行jar包normal.jar,放到D盘根目录。在工程Agent中新建2个类:
AgentEntry.java:
public class AgentEntry {
   public static void agentmain(String agentArgs, Instrumentation inst)
           throws ClassNotFoundException, UnmodifiableClassException,
           InterruptedException {
       inst.addTransformer(new Transformer (), true);
        Class[] loadedClasses = inst.getAllLoadedClasses();
        for (Class c : loadedClasses) {
            if (c.getName().equals("Bird")) {
                try {
                    inst.retransformClasses(c);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
       System.out.println("Class changed!");
   }
}
Transformer.java:
public class Transformer implements ClassFileTransformer {
   static byte[] mergeByteArray(byte[]... byteArray) {
       int totalLength = 0;
       for(int i = 0; i if(byteArray[i] == null) {
               continue;

[1] [2] [3] [4] [5] [6]  黑客接单网

相关文章

针对HTTP的躲藏攻击面剖析(中)

为了增强用户体会度,现代Web网站架构中都包含了各式各样的“躲藏体系”,这些体系不只能够给用户供给各种额定的服务,并且还能够协助管理员提取网站各方面的剖析数据。可是,这些躲藏体系相同也是近些年里常常被...

HTTPie:WEB开发调试东西

还在用wget和curl?试试HTTPie吧  :) HTTPie (读作aych-tee-tee-pie)是指令行方法的HTTP客户端。可经过简略的http指令,可合作语法发送恣意HTTP恳求数据,...

如何逃逸Sysmon工具对DNS的监控-黑客接单平台

Sysmon是微软的一款轻量级的体系监控东西,最开端是由Sysinternals开发的,后来Sysinternals被微软收买,现在归于Sysinternals系列东西。它通过体系服务和驱动程序完成记...

开发一个基于Dalvik字节码的相似性检测引擎,比较同一款Android应用程序的不同版本之

上文咱们说过,《针对Dalvik字节码的类似性检测引擎,比较同一款Android运用程序的不同版别之间的代码差异》这篇文章计区分两个部分来解说,上文只介绍了怎么运用Quarkslab公司开发的diff...

你的网站是怎样被黑的

前语 这个标题的来历是@evilcos(余弦大大)在Github上共享的一个PPT,感兴趣的能够去他的repo下载。写这篇博客主要是想给自己最近业余时间学到的安全相关的常识做个总结,主要是关于网站常见...

SP eric靶机通关攻略-黑客接单平台

咱们好,今日给咱们带来的靶机是SP eric,这个靶机有两个flag,咱们的方针便是把它们都找出来,flag的方位现已供给,如下: · /root/flag.txt · /root/eric/flag...