第一课 介绍
在关于***测试的很多课程当中,我们更加关注破解阶段,在该阶段中我们会尝试使用各种技术或者利用漏洞来攻破目标。但在本门课程中,我们将把注意力聚焦在Meterpreter上,它是Metasploit中最先进的payload之一。我们在攻破目标主机之后能做些什么?这是Meterpreter擅长解决的问题。Meterpreter为我们提供了许多功能,可以让我们更轻松的探索目标主机。在本课程中,我们将更深入的了解Meterpreter,看看它是如何在后***阶段发挥作用的。
我们之所以要使用payloads,是为了达到某些特殊的目的,但这需要克服一些困难。payloads通过在被攻破的系统中创建新的进程来开展工作,因此很肯能会触发警报而被防病毒软件轻松中止。另外,payloads仅限于执行某些特定任务或执行shell可以运行的特定命令。为了克服这些困难,Meterpreter应运而生。
Meterpreter是Metasploit的一个命令解释器,它充当有效负载并通过使用内存中DLL注入和本机共享对象格式来工作。它运行在已攻破的进程中,因此不会产生新的进程。这使它更加隐蔽也更具威力。
图1: MSF与目标主机建立连接
第一步,破解之后将payload发送到目标主机。该阶段在给定的地址和端口上建立回连到msfconsole的TCP连接。接下来,msfconsole发送第二阶段的DLL注入payload。在成功注入之后,它会发送Meterpreter DLL建立合适的通讯渠道。最后,Meterpreter加载扩展组件,例如:stdapi和priv。所有这些扩展都使用TLV协议通过TLS加载。由于Meterpreter与目标之间使用了加密的通讯方式,这也成为了它的一个重要优点。
让我们快速总结一下Meterpreter相对于特定payloads的优势:
1)它运行于被攻破的进程之上,因此不会创建新的进程;
2)它可以在进程之间轻松迁移;
3)它完全驻留在内存中,因此不向磁盘写入任何内容;
4)它使用加密通讯;
5)它使用了信道化的通信系统,因此我们一次可以使用多个信道;
6)它提供了一个平台,可以快速轻松地编写扩展。
本课程将介绍如何通过使用Meterpreter提供给我们的各种命令和脚本来探索目标计算机。我们首先会分析普通的Meterpreter命令,然后我们将进一步设置不同的通讯渠道,运用网络命令、键盘嗅探等等。最终,我们将讨论scraper Meterpreter脚本,该脚本可以创建一个目录,其中包含有关目标用户的各种信息。在本课程中,我们主要关注于能够帮助我们探索被攻破系统的命令和脚本。
那么,让我们一起来深入学习Meterpreter吧!
第二课 理解Meterpreter的核心命令
首先,我们要使用Meterpreter的命令并理解它们的功能。它作为一个后***阶段使用的工具,我们需要让被攻破的主机来执行命令。我们用Metasploitabe3作为目标,用Microsoft Windows身份验证的用户代码执行漏洞利用模块(Microsoft Windows Authenticated User Code Execution exploit module)来攻破主机。
准备工作
为了避免每次在我们想要使用Meterpreter命令时都要重新设置Microsoft Windows身份验证的用户代码执行漏洞利用模块,我们将利用Metasploit框架的一个特征——资源脚本。资源脚本能够把我们在使用Metasploit时从自动重复性的工作中解脱出来。
操作步骤
1、Metasploit框架自带了很多资源脚本,它们来自于社区的贡献,你可以在目录/usr/share/metasploit-framework/scripts/resource/中找到它们:
图2: 查看资源脚本
2、为了创建我们自己的资源脚本,我们只需要执行模块,使用makerc命令创建资源文件,该文件中包括有从头到尾的所有命令:
图3: 使用makerc命令创建资源文件
3、生成的资源脚本包含以下内容:
图4: 查看生成的资源文件内容
4、如果要使用资源脚本,应先登陆MSF控制台msfconsole,使用-r选项,后跟资源脚本的路径:
图5: 使用资源脚本
5、在攻破目标主机之后,由于我们使用了windows/meterpreter/reverse_tcp作为payload,我们就会获得一个Meterpreter会话。我们可以从使用“?”命令开始,它会列出所有可用的Meterpreter命令及其简介:
图6: 使用“?”命令
6、我们来看一看一些有用的系统命令:
1)background:该命令用于将当前会话移至后台,以便在需要时可以再次使用。这在我们拥有多个活动的Meterpreter会话时很有用。
2)getuid:该命令返回目标计算机上正在运行的用户名或我们闯入时的用户名:
图7: 使用getuid命令
3)getpid:该命令返回我们当前正在运行Meterpreter的进程ID:
图8: 使用getpid命令
4)ps:该命令会列出目标主机上所有正在运行的进程。它便于我们识别在目标上运行的各种服务和软件:
图9: 使用ps命令
5)sysinfo:这是一条方便的命令,用于快速查看系统信息,例如:操作系统和系统架构:
图10: 使用ps命令
6)shell:该命令将为我们带来一个shell提示符:
图11: 使用shell命令
7)exit:该命令用来终结Meterpreter会话。它也可以用来终结shell会话然后返回Meterpreter。
除此之外还有很多有用的系统命令可以用来探索被攻破的目标主机并从中获取信息,在此就不一一赘述,留给大家自行探索。你会发现使用这些Meterpreter命令探索目标非常简单,而不用它们工作将变得很困难。在下面的课程中,我们将介绍一些更高级的Meterpreter命令。
工作原理
Meterpreter就像一个命令解释器。它旨在通过命令理解并响应各种参数调用。它位于被攻破主机的进程中,与***者的机器建立客户端/服务器的通讯系统,如下图所示:图12: Meterpreter功能示意图
上图演示了Meterpreter的功能概述。一旦通讯渠道建立好,我们可以将命令调用发送到Meterpreter服务器, 并将其响应返回给我们的计算机。在后面的课程中我们将进一步理解***机与目标机之间的通讯细节。