美文网首页信息安全黑客
Linux下Meterpreter执行原理浅析

Linux下Meterpreter执行原理浅析

作者: 慕长风啊 | 来源:发表于2019-11-02 20:51 被阅读0次

    前言

    针对Meterpreter的投递流程和原理分析,网上已有一部分相关资料了

    但是大多是基于Windows系统,Linux下的分析资料好像并不全面。

    为此,我从源码入手,简单的分析了Linux下Meterpreter的生成和执行流程,以下记录了部分过程

    说明

    研究对象: linux/x86/meterpreter/reverse_tcp

    这种staged类型的payload,攻击过程通常是先由服务端生成一段shellcode

    接着可以选择msf自带的各种shellcode_loader,不过其特征都太明显,通常都是自己去对shellcode做免杀

    在我这篇博客中就提到过一种简单的技巧 —— 记一则免杀技巧

    Meterpreter的执行流程主要分两个阶段,第一阶段就是上述shellcode的执行

    这段shellcode也被称作stager,其作用只是简单的与服务端建立连接,然后开始接受第二阶段服务端发送的stage并执行

    针对这段shellcode网上已经有很多很详细的分析资料了,感兴趣的可以自行查阅

    下面我主要从源码分析第二阶段的执行流程

    先简单的提一下

    Stage部分由两个文件组成,一段shellcode和一份ELF格式的可执行文件

    后者是C编写的跨平台的meterpreter,在新版的msf中被称作mettle,而该shellcode可以看成是mettel的加载器

    开始

    直接进入相关代码来看stage的生成过程

    image 可以看到,以上代码是服务端在连接建立后的相关处理,首先生成第二阶段要用到的payload image

    跟进generate_stage函数

    image

    继续跟进,在mettle.rb中找到payload生成的关键函数

    image

    发现是从现有文件中读取得来,定位到目标文件

    image

    可知,第二阶段用到的主体文件就是这个mettle.bin

    注意,此时还未发送该payload,回到前面接着往下看

    image

    对stage做编码和加密等处理,暂时先不管,继续往下看

    image

    可以看到,这里发送了midstager,这是第二阶段发送的第一个shellcode

    跟进generate_intermediate_stage函数,去看看它的生成过程

    image image

    为了方便阅读,我把源码中两函数上下调换了位置

    可以看出,midstager是由一段固定的汇编代码生成的shellcode,只是需要的payload长度和入口偏移地址等参数不同

    shellcode.rb中的具体生成过程这里就不跟进了

    回到最开始的stager.rb继续分析

    image

    最后就是一些信息的打印和stage的发送了

    以上就是第二阶段的一个大致流程

    结语

    后面的实践中,我简单地提取了几条规则,然后复现了一波并在流量中捕获到了相关特征,证实了我上述分析的正确性

    这次针对Meterpreter的分析,原本是为了做恶意流量检测

    但是在实际场景中,深入理解其具体的执行流程,可以做更多有意思的事

    比如在之前的学习过程中,我看到很多大佬都重写了一些加载器,有的甚至自写了Meterpreter的服务端

    到了真正的攻防对抗场景中,只有深入理解攻击原理,才能激发更多有意义的idea

    而只有具备扎实的基本功,才有能力将这些idea落地

    相关文章

      网友评论

        本文标题:Linux下Meterpreter执行原理浅析

        本文链接:https://www.haomeiwen.com/subject/hkmhbctx.html