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

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

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

相关文章

8个增强 PHP 程序安全的函数

 安满是编程十分重要的一个方面。在任何一种编程言语中,都供给了许多的函数或许模块来保证程序的安全性。在现代网站运用中,常常要获取来自世界各地用户的输入,可是,咱们都知道“永久不能信任那些用户输入的数据...

Java Web 工程源代码安全审计实战,第 4 部分: 环境加固

前语 本文是 Java Web 工程源代码安全审计实战的第 4 部分,也是最终一部分,根据 WebGoat 工程,解说源码审计出产环境布置装备问题。相比较于前三部分各种高危缝隙的审计和整改。环境布置部...

30秒攻破恣意密码保护的PC:深化了解5美元黑客神器PoisonTap

近来,闻名硬件黑客Samy Kamkar运用5美元设备打造的黑客东西PoisonTap,只需30秒,就可以攻破设置有恣意暗码的电脑体系,并完成长时间后门装置。PoisonTap不是暴力破解暗码,而是...

怎么使用神经网络和Python生成指定形式的暗码

今日给咱们介绍的是Github上一个名叫PyMLProjects的项目,这个项意图意图是为了练习AI来学习人类结构暗码的形式,然后咱们就可以用AI来生成许多同一形式或品种的暗码了。这种办法或许可以用...

根底事情呼应中的Volatility作业流程

最近,我发现自己需求对完好内存转储进行一些查询。通过一段时间的搜索,我发现了Volatility-Labs的这篇文章,依据其间的辅导办法,我能够很好的来评价内存转储。当然,你或许会有更好、更深度的内存...