精通 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 的操作系统:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_04.png

图 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中显示的屏幕:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_05.png

图 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 显示的是应看到的界面:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_06.png

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

VirtualBox

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

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

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_07.png

图 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 环境并非基于容器的技术,但它虚拟化硬件并共享物理主机的硬件资源:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_09.png图 1.9:使用 Docker 成功安装 Kali Linux

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

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_10.png

图 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:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_12.png

图 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. 最后一步是重启计算机,以便计算机名称的更改能在域中反映出来:https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_33.png

    图 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

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_37.png

图 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所示的屏幕:https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_38.png

    图 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所示:https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_39.png

    图 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 
    

    https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_40.png

    图 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 描述了我们设置的实验架构,用于在我们定义的目标上进行渗透测试:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_46.png

图 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相同的界面:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_47.png

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

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

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_01_48.png

图 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 的主机,这使得攻击者能够进一步缩小目标范围并进行横向移动。我们将在后续章节中学习此内容:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_02_11.png

图 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" 

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_02_19.png

图 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列出了关于目标的机密信息:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_02_20.png

图 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所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_02_24.png

图 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 的界面。
intraceKali 的较新版本没有预装此工具,因此测试者需要在终端运行 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:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_03_18.png

图 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 设备被添加时,会自动识别。
dnmapnmapnmap 是标准的网络枚举工具。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 与目标系统进行通信时也能使用。然而,这并不是一个详尽的列表:

命令示例描述
nslookupnslookup``Server nameserever.google.com``Set type=any``ls -d anydomain.comnslookup 用于查询 DNS。示例命令展示了如何使用 nslookup 进行 DNS 区域传输。
net viewnet view该命令显示计算机/域和其他共享资源的列表。
net sharenet share list="c:"该命令用于管理共享资源,并显示本地系统上所有共享资源的相关信息。
net usenet use \\[targetIP] [password] /u:[user]``net use \\[targetIP]\[sharename] [password] /u:[user]该命令用于连接同一网络上的任何系统,也可用于检索网络连接列表。
net usernet user [UserName [Password &#124; *] [options]] [/domain]``net user [UserName {Password &#124; *} /add [options] [/domain]]``net user [UserName [/delete] [/domain]]该命令显示与用户相关的信息,并执行与用户帐户相关的活动。
arparp /a``arp /a /n 10.0.0.99``arp /s 10.0.0.80 00-AA-00-4F-2A-9C该命令显示并修改 ARP 缓存中的条目。
routeroute 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 路由并修改这些信息。
netstatnetstat -n -o该命令显示本地系统上所有活动的 TCP 连接和端口;即显示监听中的连接、已建立连接和在网络适配器 IP 地址上等待的连接。
nbtstatnbtstat /R``nbtstat /S 5``nbtstat /a Ip该命令显示 NETBIOS 信息,通常用于识别某个 IP 的 MAC 地址,这可用于 MAC 欺骗攻击。
wmicwmic process get caption,executablepath,commandline``netsh wlan show profile "profilename" key=clearwmic 被用于攻击者执行所有典型诊断;例如,系统的 Wi-Fi 密码可以通过一条命令提取。
regreg 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 命令被大多数攻击者用于保存注册表配置单元,以进行离线密码攻击。
forfor /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.txtfor 循环可以在 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 

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_03_28.png

图 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 中:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_03_35.png

图 3.35:用户有权查看的 Azure 门户详情

表 3.7 提供了一些在枚举 Microsoft Azure 云服务时非常有用的命令:

命令示例描述
az ad user listaz 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 listaz ad group list --output=json --query='[].{Group:displayName,Description:description}'该命令将提供与租户关联的所有组的完整列表
az ad group member listaz 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 listaz ad app list --output=table --query='[].{Name:displayName,URL:homepage}'``az ad app list --output=json --identifier-uri='<uri>'该命令将提供我们在 Azure AD 中可用的应用程序列表
az ad sp listaz 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 脚本,并尽可能截图:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_03_36.png

图 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所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_03_37.png

图 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显示了对目标的成功侦察输出:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_03_38.png

图 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

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_04_11.png

图 4.11:加载 OWASP ZAP 2.11.1

应用程序启动后,它应该询问您是否希望会话是持久的还是临时的。根据您的情况做出最合适的选择。这个扫描器的一个特点是它可以作为独立的自动扫描器使用,也可以作为代理工具来测试被测试的网络应用程序的相关部分。在开始扫描活动之前,更新所有插件以最大化输出。如果选择使用自动扫描器,该工具应该显示以下屏幕,以输入目标 URL 并选择使用传统爬虫和/或 AJAX 爬虫。如果选择了 AJAX 爬虫,则该应用程序将使用浏览器遍历网站上的每个链接,并为下一阶段(执行主动扫描)捕获它们。使用手动/代理方法来保持网络流量/网页请求低,并集中在不创建巨大噪音的情况下测试,避免触发警报或导致拒绝服务。与其他扫描器不同,此工具可能产生虚警:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_04_12.png

图 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 所示:

https://github.com/OpenDocCN/freelearn-kali-pt2-zh/raw/master/docs/ms-kali-adv-pentest-4e/img/B17765_04_23.png

图 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 应用程序。

下一章重点讲解攻击者杀伤链中最重要的部分——利用阶段。物理安全是获取数据系统访问权限的一种方法(如果你能启动系统,就能获得根权限!)。物理访问还与社会工程学密切相关,社会工程学是利用人类的信任来进行攻击的艺术。这是攻击者实现其目标的阶段。典型的利用活动包括通过利用不良的访问控制进行横向升级,以及通过窃取用户凭证进行纵向升级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值