Metasploit payloads模块理解

文章介绍了payload的概念,它在网络攻击中指的是成功利用漏洞后在目标系统执行的代码,如shellcode。shellcode是用汇编语言编写的,用于植入进程并执行特定任务。MetasploitFramework的Payloads模块包含多种payload,分为staged(分阶段)和single(单一)类型,用于不同的攻击策略。文章还详细阐述了MSF中payload的分类和投递方式,以及如何通过Metasploit创建和配置payload。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、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模块

Metasploit提供了发送不同payload的能力,这些payload可以在目标系统上打开shell。MSF的payload模块位于modules/payloads{adapter,singles,stagers,stages}/platform>>,4个目录对应4种payload:

  • adapter:adapter封装single payloads以将它们转换为不同的格式。例如,可以将普通的单个有效负载single payload包装在Powershell适配器中,这将生成一个Powershell命令来执行该有效负载。
  • singles:可独立运行的payload(添加用户,启动notepad.exe等),不需要下载额外的组件来运行。
  • stagers:负责建立Metasploit与目标系统之间的连接通道。在处理分阶段payload时非常有用。“分阶段payload”将首先在目标系统上上传一个stager,然后下载剩余的payload(stage)。这提供了一些优势,因为与一次发送的完整payload相比,payload的初始大小相对较小。
  • stages:由stagers下载,这将允许你使用更大的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,因为我们提供的是解释代码而不是二进制代码。

四、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/
[4] https://www.offsec.com/metasploit-unleashed/payloads/

### Burp Suite Payload 的作用及应用场景 Payload 是指在网络请求中可以被修改的数据部分,在 Web 安全测试过程中扮演着至关重要的角色。通过向目标应用程序发送精心设计的 payload 数据,可以帮助识别潜在的安全漏洞。 #### 1. 测试 SQL 注入漏洞 SQL 注入是一种常见的攻击方式,利用该漏洞可使数据库执行恶意命令。为了检测是否存在此类风险,可以通过构造特定形式的 SQL 查询语句作为 payload 发送至服务器端验证其响应行为是否异常来判断是否有注入点存在[^4]。 ```sql ' OR '1'='1 ``` #### 2. 跨站脚本 (XSS) 检测 跨站点脚本攻击允许攻击者将恶意 JavaScript 或 HTML 片段插入网页并显示给其他用户查看。此时就可以把 `<script>alert(1)</script>` 这样的代码片段当作 payload 来尝试触发浏览器弹窗警告框从而证明 XSS 存在的可能性。 ```html <script>alert(1);</script> ``` #### 3. 文件上传漏洞探测 对于支持文件上传功能的应用程序来说,如果缺乏严格的文件类型校验机制,则可能成为黑客实施进一步渗透活动的重要入口之一。因此有必要针对这一环节开展针对性强的有效载荷测试工作,比如上传带有 `.php` 后缀名却伪装成图片格式的 PHP 反序列化 shell 文件等特殊类型的附件来进行审查确认系统防护措施是否到位。 ```bash evil.php.jpg ``` #### 4. Cookie 和会话管理缺陷分析 Cookie 经常用来保存用户的登录状态和其他个性化配置信息等内容;而 session 则负责跟踪不同客户端之间的交互过程。所以当涉及到这两方面内容时也可以考虑采用适当的方式调整它们所携带的信息字段值(如 `username=admin&password=secret`),以此观察服务端返回的结果变化情况进而发现更多隐藏问题所在之处。 ```http Cookie: sessionId=malicious_value; username=admin; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值