原文: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 的说明。一旦你安装并运行起来,你就可以跟着进行,无论使用哪种操作系统作为虚拟测试环境的主机。
- 访问www.virtualbox.org/。
- 点击页面左侧的下载链接。
- 下载 Windows 主机 x86/amd64 的最新版本VirtualBox。
- 开始安装(根据你的系统配置,你可能需要以管理员身份开始安装)。
- 在初始设置窗口点击**下一步>**。
- 确保安装位置是你想要安装程序的位置,并且选择所有要安装的选项,然后点击**下一步>**。
- 选择你喜欢的桌面快捷方式选项,然后点击**下一步>**。
- 如果你想使用之前选择的设置进行安装,请点击是。
- 点击安装以继续安装。这一步可能需要一些时间,具体取决于你的系统性能。你可能会被要求安装设备软件,此时你需要点击弹出窗口中的安装。
提示
这可能会发生多次;在我的情况下,它弹出了四次,然后我的防火墙通知我请求权限将额外的网络添加到我的防火墙设置中。
- 点击完成以打开 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 准备虚拟客户机
- 一旦获得 BackTrack ISO,就是开始的时候了。
- 通过从开始菜单中选择它来启动 Oracle VM VirtualBox Manager。
- 点击左上角的新建图标。
- 在新建虚拟机向导屏幕上点击下一步按钮。
- 您将被提示输入客户机的名称。输入
BT5_R1_Tester1
,选择Linux作为操作系统,Linux 2.6(32 位或64 位)作为版本,然后点击下一步。 - 在内存屏幕上,您需要使用滑块选择基本内存大小。如果您的系统内存超过 2GB,您应该为此系统使用至少512MB。您仍然可以使用较少的内存来跟随示例,但可能会遇到一些系统滞后。选择完内存大小后,点击下一步。
- 虚拟硬盘:确保选择了启动盘复选框,并且也选择了创建新硬盘单选按钮,然后点击下一步。
- 一个新的弹出窗口将打开,应选择VDI(VirtualBox 磁盘映像)。点击下一步。
- 在要求选择虚拟磁盘存储详细信息时,选择动态分配,然后点击下一步继续安装。
- 现在是选择存储虚拟客户机文件的位置的时候。选择位置文本输入字段右侧的文件夹图标。
- 创建并选择一个名为
APT_VirtualLab
的新文件夹,我们将在其中存储专门用于此实验室的所有客户机。确保您选择的驱动器有足够的空间来存储多个虚拟机。 - 将虚拟磁盘的大小至少设置为 10 GB。我们将在整本书中广泛使用这台机器,尽管从技术上讲可能,但最好避免调整 VDI 的大小。点击下一步继续。
- 验证摘要页面上的数据是否准确,并点击创建。
- 如果一切顺利,您将再次看到 VirtualBox Manager 应用程序窗口,其中包含您的新客户机。
- 我们希望为这台机器提供两个网络适配器。选择BT5_R1_Tester1,然后点击设置,接着点击左侧菜单栏上的网络选项。
- 点击适配器 2,选择启用网络适配器复选框。
- 附加到:下拉框需要设置为内部网络。
- 将名称:文本框更改为Vlab_1,然后点击确定。
现在,您已完成了在虚拟磁盘上安装操作系统所需的准备工作。当准备其他操作系统时,这个过程并不会有太大变化,而 VirtualBox 使许多配置更改变得微不足道。有时,您可能希望调整客户机的设置以提高其性能。尝试一些设置将让您了解这个工具的强大之处。
注意
您可以随时更改虚拟机的设置。但是,有时您需要在更改之前关闭客户机。
在虚拟磁盘映像上安装 BackTrack
现在虚拟机已安装,我们准备安装 BackTrack。感谢 Backtrack-Linux.org 团队的辛勤工作,这个过程简单而不复杂。
- 打开VM VirtualBox Manager,在屏幕左侧选择您的BT5_R1_Tester1虚拟机。单击应用程序顶部栏上的大启动图标以启动虚拟机实例。
- 您的机器现在将启动。由于我们尚未选择要用于引导系统的映像,因此我们需要使用菜单选项来进行选择,这些选项将出现在初始系统初始化之前。
- 您可能会收到一个信息窗口,解释自动捕获键盘选项已打开。单击确定按钮以继续系统初始化。
- 首次运行向导只会在第一次启动虚拟机时出现。它允许您轻松选择要引导的 ISO。
- 也可以在虚拟机设置的存储类别中添加安装媒体。
- 单击下一步继续。
- 在选择安装媒体屏幕上,您需要单击媒体源栏右侧的文件夹图标。然后,您需要浏览到下载 BackTrack ISO 的文件夹,并选择它,使其显示在以下截图中。准备好后,单击下一步。
- 验证您的摘要信息,然后单击开始启动机器。如果机器在
boot:
命令处停顿,请按Enter,系统将继续引导。允许其完全加载 LiveCD(默认引导选项)。您可能会收到键盘主机捕获消息。根据需要单击确定。 - 在
root@root:~#
提示处输入**startx
。 - 现在,我们在虚拟机上运行了 BackTrack ISO,我们需要添加持久性,以便我们所做的更改保留下来。单击安装 BackTrack图标开始短暂的安装过程:
- 选择您喜欢的语言,然后单击前进。
- 让安装程序知道您所在的地区。这将影响您的时间设置,并且还将有助于选择距离您更近的服务器进行更新。单击前进继续。
- 选择您喜欢的键盘布局,然后单击前进。
- 为了简单起见,我们将使用整个可用磁盘空间而不是手动分区。选择擦除并使用整个磁盘单选按钮,然后单击前进。
- 单击安装以初始化更改。这个阶段可能需要几分钟才能完成。
- 安装完成后,您需要重新启动系统。单击立即重启按钮,然后卸载 ISO。您需要选择设备 | CD/DVD 设备 | **{您的 BackTrack ISO 映像名称}*。这将在系统重新启动之前弹出 ISO 映像。按Enter*重新启动。
探索 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。在显示启动画面和许可协议后(需要接受许可协议),您将看到主应用程序工作区。
添加节点
要添加一个节点,按下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 框架使用一个由所有团队成员共享的密码。在密码字段中输入您选择的密码。
注意
永远不要重复使用密码!
单击初始化按钮继续。这将设置新密码并接受默认的 Meta-Server 选项。
现在您可以在登录字段中选择一个新的用户名。用户登录字段仅用于信息目的,不会影响工作区域。在密码字段中输入共享服务器密码。单击登录按钮后,您将看到 Dradis 的主要工作区。
我们将通过创建一个新的分支来设置我们的 Dradis 环境,以代表我们的渗透测试。这些分支允许您根据各种用户创建的标准来管理您的发现。
- 单击应用程序窗口顶部显示的添加分支按钮。
- 新的分支将准备好供您重命名。用
PracticePenTest
覆盖分支#2,然后按Enter。 - 右键单击PracticePenTest,然后选择添加子项以开始您的层次结构。
- 尝试一下并添加额外的文件夹。开始考虑如何安排数据以便轻松访问和管理。
这是一个项目树的示例,可以在渗透测试期间用于数据收集:
导出项目模板
测试将包括一系列计划阶段和程序,这些阶段和程序在不同测试之间变化不大。为了充分利用这一事实,我们将创建一个可重复使用的模板。
选择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
文件,然后单击打开。
单击上传将完成导入。处理数据需要一些时间。处理所需的时间与您拥有的数据量成正比。
导入已将附加节点添加到我们的树中。可以通过使用鼠标左键拖动它将
127.0.0.1
扫描结果移动到PracticePenTest节点中的任何位置。通过将
127.0.0.1
扫描结果移动到 PracticePenTest 的逻辑层次结构中,现在可以轻松地将其与此渗透测试和其他相关数据关联起来。
将数据导出到 HTML
使用这种类型的集中式数据收集的一个好处是,您可以在注释上设置某些标志,以便将数据导出为 PDF、MS Word 或 HTML 格式。
Dradis 已经启动运行,我们需要选择PracticePenTest节点,并在项目树右侧的工作区点击添加注释按钮。在弹出的编辑器中输入"This is a note",然后点击保存。这将把您的注释添加到列表中。
注意
这些注释对于您的渗透测试至关重要,应该经过深思熟虑并清晰地书写。避免使用只在当前上下文中有意义的注释,因为您可能需要在以后重新访问这些注释。
Dradis 分类字段
您并不总是希望将所有内容导出到报告格式中。为了解决这个问题,Dradis 开发团队添加了Category字段。该字段将标记要导出到各种可用格式中的数据。在这种情况下,我们将双击**"This is a note."右侧列出的默认类别文本。从下拉菜单中选择HTMLExport ready**选项。
要查看我们的数据,请在顶部工具栏上选择导出选项,然后单击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.org
和
example.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
可以从单个命令行提示符中运行,因此您可以轻松地创建一个自动化提取有关许多域名或主机名信息的脚本,然后将输出放入文本文件中。
- 在 BackTrack 中,打开一个终端会话,输入
nano AutoM8
,然后按下Enter键。 - 在 nano 编辑器中,输入以下代码,我们使用
#!/bin/sh
来启动bourne shell,将DomainNames.txt
文件中的每个行项目解析为HOSTNAME
变量,然后输出字符串"Gettingname 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
- 按下Ctrl + O,然后按Enter确认保存您的数据。
- 按下Ctrl + X退出返回到终端屏幕。
- 键入
nano DomainNames.txt
。 - 在nano中输入以下内容:
注意
**在以下列表中使用的
example.com/net/org
域名的地方,用您有权限测试的替代域名!!!**
example.com
example.net
example.org
- 按下Ctrl + O,然后按Ctrl + X保存文件。
- 在终端中,我们需要通过输入以下命令使
AutoM8
文件可执行:
# chmod +x AutoM8
- 现在输入以下命令运行
AutoM8
脚本:
# ./AutoM8
- 您应该看到类似以下格式的输出:
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.
- 现在输入:
# ./AutoM8 > NameServerListing.txt
# cat NameServerListing.txt
您现在已经创建了一个名为
AutoM8
的简单脚本,可以用来将输出附加到任何您喜欢的文件中。我们通过使用
cat
来查看
NameServerListing.txt
文件已经验证了这一点。
提示
挑战自己,使以前的代码更加高效和可重用。本书中您将学到的几种工具可以以这种方式自动化。尝试使用
grep
和
awk
以更清晰的方式解析出您的结果。
理想情况下,您将使用具有 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.com
的
A
记录包含
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
上执行区域传输所需的步骤。与本书中讨论的所有内容一样,你需要有适当的权限来为你的客户执行这种类型的活动。
- 打开一个 BackTrack 终端窗口。
- 输入以下内容并按Enter:
# dig @ns1.example.com example.com axfr
- 审查结果:
; <<>> DiG 9.7.0-P1 <<>> @ns1.example.com example.com axfr
; (1 server found)
;; global options: +cmd
; Transfer failed.
我们的结果表明传输失败了。在这种情况下,域名服务器的管理员已经正确地禁用了执行区域传输的能力。现在我们将尝试同一域上的另一个域名服务器,看看它是否也禁用了区域传输。
- 类型:
# dig @ns16.example.com example.com axfr
- 审查结果:
; <<>> 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
本节讨论的任何选项都可以在缩短输出结果时使用。这使得可以轻松使用诸如
awk
和
grep
之类的工具来进一步操作你的结果。
列出 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.com
和
example.net
的
A
记录,然后请求对
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 命令格式来执行这些批处理作业。
- 我们将首先使用 BackTrack 中包含的 nano 文本编辑器创建一个新的 TXT 文件。在 BackTrack 中打开终端 shell,然后键入
nano digginIt.txt
。 - 在 nano 中键入以下代码。请注意,每个命令都需要单独一行才能正常运行:
+nocmd +noall +answer example.com
+nocmd +noall +answer example.net
+nocmd +noall +answer example.org ns
- 按下Ctrl + O保存文件。
- 按下Ctrl + X退出返回到终端。
- 使用 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。
创建自定义单词列表
如果我们已经知道要检查什么,或者我们有一个更适合的单词列表,因为我们了解正在测试的站点的命名约定,那么建议制作自定义单词列表。
- 使用
nano myWordList.txt
打开 Nano。 - 键入以下内容:
irc
mail
mail1
testmachine1
testmachine
www
www1
ns
- 按下Ctrl + O,然后按Enter,将文件写入
myWordList.txt
。 - 按下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 空间,查找同一人或公司拥有的其他网站的信息,甚至关键员工的电话号码和地址。这种侦察被认为是被动的,因为它不直接联系客户拥有的资产来获取信息。
我们需要找到已注册域名的注册商以获取有用的信息。以下是一些顶级注册商的列表。
AFRINICwww.afrinic.netAPNICwww.apnic.netARINws.arin.netIANAwww.iana.comICANNwww.icann.orgLACNICwww.lacnic.netNROwww.nro.netRIPEwww.ripe.netInterNicwww.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,您可以找到连接到互联网的设备的信息。除了允许您按 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 ExplorerWeb 应用程序,允许您输入站点和查询修饰符以自动化您的 GHDB 查询。www.secapps.com/a/ghdbSite Digger 3.0搜索谷歌缓存。找到各种信息。需要.NET Framework 3.5 才能运行。www.mcafee.com/us/downloads/free-tools/sitedigger.aspxThe Harvester从搜索引擎和 PGP 服务器中搜索子域、主机名、用户、员工电子邮件和姓名。包含在 BackTrack 中或code.google.com/p/theharvesterLullar.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/images
的
FotoStation.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)驱动器。
在安装过程中选择以下设置:
- 你的名字是什么:学生
- 你想用什么名字登录:学生
- 选择一个密码:1easyPassword
- 这台计算机的名字是什么?:Phobos
- 需要我的密码登录:已选择
一旦你成功安装了 Ubuntu,它就需要更新。打开一个终端窗口,方法是转到左上角菜单,选择应用程序|附件|终端,然后输入:
# sudo apt-get update
接着:
# sudo apt-get upgrade
由于我们将使用这个系统作为典型网络上可能看到的示例,我们需要安装一些有趣的服务。
- 打开一个终端会话,输入以下命令,它将安装 Apache、MySQL 和 PHP:
# sudo apt-get install lamp-server
- 安装将继续,在下载了一些文件之后,你将需要输入你选择的MySQL根用户的密码。
- 确认你的密码并按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_1在
192.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
,端口为
21
和
79
。尽管我们无法确定端口是否打开,但我们知道它们以某种方式存在于目标机器上。
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
上面的系统并不理想,但应该可以用作僵尸主机。难度评级越高,你尝试使用这台机器作为僵尸的可能性就越小。此外,生成是顺序的事实将提高扫描成功的可能性。
让我们回顾一下空闲扫描的概念:
- 向僵尸主机发送 SYN/ACK,然后僵尸主机会返回一个带有片段标识号(IPID)的 RST。
- 一个特制的数据包带有僵尸主机的 IP 地址被发送到目标机器。
- 目标机器上的关闭端口会导致向僵尸主机发送一个 RST,此时什么也不会发生。另一方面,打开的端口会导致目标机器用我们伪造的数据包的 IP 地址回复一个 SYN/ACK,这又会导致我们的僵尸主机向目标机器发送一个 RST,一旦它意识到没有有效的连接。IPID 现在已经增加了!
- 我们通过向僵尸主机发送另一个 SYN/ACK 并检查 IPID 是否增加了 2 次来关闭循环,一次是为了我们的 RST,一次是为了目标机器的 RST。
- 重复直到所有目标机器的端口都被探测到!
当看到僵尸扫描是如何工作的时候,很容易看出空闲扫描的正确使用可以有助于减缓蓝队(防御安全专业人员)的速度。
那么,这个命令的语法是什么?有这么大的能力,肯定很难吧?当您查看以下命令结构时,您可能会感到惊喜:
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.88
到
192.168.1.111
:
责任转嫁——僵尸做了这件事!
从 Wireshark 的结果来看,我们看到之前的 Nmap 命令在我们的网络上从
192.168.1.88
到
192.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,25
和
443
。
提示
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
,而且它还具有
capa
和
APOP
功能。我们现在也知道该系统将支持连接到
SSLv2
,这是一个已知的易受攻击的协议,我们可能可以利用它来获取优势。
向数据库添加新脚本
所有这些预加载的脚本都很棒,但是如果您想要将其他脚本添加到您的工具库中,无论是因为您自己编写了它们,还是因为您信任的某人提供了最新和最棒的东西,并且您想在执行渗透测试时利用它,那么这可能非常简单!
- 将
script .nse
文件添加到其他 Nmap NSE 脚本所在的目录中。 - 运行以下命令以更新通过类别捆绑脚本的数据库:
# nmap -script-updatedb
- 现在您可以通过 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 脚本,并传递了目标 IP
192.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 stop
或
service 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)
MySQL
BTpbnj
数据库中有两个表。
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_on
和
machine_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,os
和
created_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,破解密码,以及手动利用远程漏洞。
版权归原作者 绝不原创的飞龙 所有, 如有侵权,请联系我们删除。