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

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

上周末,一个好兄弟找我说一个很重要的方针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]  黑客接单网

相关文章

做了这么多年的兄弟,才知道我们不一样!请不要将工控系统中的IT(信息技术)和OT(运营

在工业操控体系(ICS)的安全办理中,安全办理一般被分为3大块:物理设备的安全、IT安全和运营安全(工厂安全和体系完整性)。 现在在工业操控体系(ICS)的安全办理中,信息技能(IT)安全测验变得越来...

PHP序列化与反序列化解读

花费了点时刻研讨了下PHP序列化,写在这儿。一是便利自己知识点回忆,二是协助相同有疑问的人,欢迎纠正过错,不喜勿喷. 0×01.确认装备文件 首要体系运用的ubuntu apt-get install...

代码审计系列第二节——SQL注入

 经过第一节给咱们简略介绍了一下代码审计简略运用,那么第二节,咱们来介绍一下,使用东西和手艺进行缝隙发掘。为了咱们能对sql注入有更好的学习和收成。引荐咱们几个学习php根底的网站 Imooc.co...

我的日志剖析之道:简略的Web日志剖析脚本

长话短说,作业的原因是这样的,因为作业原因需求剖析网站日志,服务器是windows,iis日志,在网上找了找,github找了找,竟然没找到,看来只要自己着手锦衣玉食。 那么剖析办法我大致可分为三种:...

中、小企业怎么自建免费的云WAF

概述 WEB进犯是十几年来黑客进犯的干流技能,国内的大厂们早已把WAF作为安全基础设施的标配,市面上也有许多安全厂商供给了WAF产品或云WAF服务。 关于没有自己安全团队,却又饱尝sql注入、xss...

Modbus TCP流量剖析

Modbus协议 Modbus是全球第一个真实用于工业现场的总线协议,ModBus选用主/从(Master/Slave)方法通讯。最大可支撑247个隶属控制器,但实践所支撑的隶属控制器数还得由所用通讯...