原文: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 的升级命令。全部已安装的软件包将更新到存储库中找到的最新版本。
还有另一个 apt 命令用于更新系统。dist-upgrade将 BackTrack 升级到最新版本。例如,如果您正在运行 BackTrack 4,并希望升级而不是下载和安装最新版本的 BackTrack 5,您可以通过输入以下命令来实现:
注意
您无需担心依赖关系;全部这些都将由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 文本编辑器中。如果需要参考,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 终端会话中输入以下内容:
你将会看到以下格式的输出:
- 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变量,然后输出字符串"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
复制代码
- 按下Ctrl + O,然后按Enter确认保存您的数据。
- 按下Ctrl + X退出返回到终端屏幕。
- 键入nano DomainNames.txt。
- 在nano中输入以下内容:
注意
在以下列表中使用的example.com/net/org域名的地方,用您有权限测试的替换域名!!!
- example.com
- example.net
- example.org
复制代码
- 按下Ctrl + O,然后按Ctrl + X保存文件。
- 在终端中,我们需要通过输入以下命令使AutoM8文件可执行:
- root@bt:~# ./AutoM8
- "Getting name servers for [example.com]"Server: 8.8.8.8Address: 8.8.8.8#53Non-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.8Address: 8.8.8.8#53Non-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.8Address: 8.8.8.8#53Non-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 进行批处理
不必像使用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 命令调用:
结果将显示在屏幕上:
- 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 的最根本方法是使用:
- # ./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 的最根本用法如下:
这将快速查找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 地址位于美利坚合众国:
提示
您会发现输出格式会因注册商而异。花些时间熟悉差别的输出,这样您就会知道将来要在输出中搜索什么。这大概会在久远节流您大量时间。
防御步伐
当您或您的客户注册域名时,应选择隐私选项。这些选项将限定向公众提供的信息。数据将被隐私署理提供的信息更换。如果有需要与您联系的情况,他们将联系您的署理,署理将再通知您需要办理的问题。
利用搜索引擎为您工作
如果不有效地使用,搜索引擎大概会产生绝对的信息过载。您不仅可以找到有关目标财政状态的信息,还可以找到有关关键员工、用户名和暗码、秘密文件(如网络图表)、有关您使用或已安装的软件或硬件类型的信息,甚至系统是否处于默认状态的信息。这些信息如果落入错误的手中大概会造成毁灭性的结果。作为渗透测试人员,您的重点应该是提取这类信息,并向客户展示怎样利用这些信息来获取对客户最关键资产的访问权限(希望您也会告诉他们怎样办理问题!)。
提示
有些搜索引擎会缓存信息以便快速访问,还有一些搜索引擎会存档网站和文件多年。甚至有一些搜索引擎专门关注网络设备,如无线接入点或公共路由器、交换机、服务器等。
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 companyallintext在页面文本中搜索全部术语allintext:company nameintitle在页面标题中搜索术语intitle:ftpcache显示缓存页面cache:example.comphonebook搜索电话簿列表phonebook:CompanyNameauthor搜索 Google Groups 中特定作者的项目(使用 Google Groups 搜索)author:anonymousfiletype搜索特定类型的全部文档filetype:pdfsite限定搜索到特定站点(或域)site:example.comlink查找全部指向指定 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 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:00File Type : PPTMIME Type : application/vnd.ms-powerpointTitle : titleSubject : subjectAuthor : authorKeywords : keywordsComments : commentsLast Saved By : user nameRevision Number : 1Software : Microsoft PowerPointTotal Edit Time : 4.4 minutesCreate Date : 2007:02:09 16:23:23Modify Date : 2007:02:09 16:27:49Word Count : 4Category : categoryPresentation Target : On-screen ShowManager : managerCompany : companyBytes : 4610Paragraphs : 4Slides : 1Notes : 0Hidden Slides : 0MM Clips : 0App Version : 10 (0972)Scale Crop : 0Links Up To Date : 0Shared Doc : 0Hyperlinks Changed : 0Title Of Parts : Times, Blank Presentation, TitleHeading Pairs : Fonts Used, 1, Design Template, 1, Slide Titles, 1Code Page : 10000Hyperlink Base : hyperlink baseHyperlinks : http://owl.phy.queensu.ca/, http://www.microsoft.com/mac/#TEST, mailto:phil?subject=subjectCustom Text : customtextCustom Number : 42Custom Date : 2007:01:09 05:00:00Custom Boolean : 1Current 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,它就需要更新。打开一个终端窗口,方法是转到左上角菜单,选择应用程序|附件|终端,然后输入:
接着:
由于我们将使用这个系统作为典型网络上大概看到的示例,我们需要安装一些风趣的服务。
- 打开一个终端会话,输入以下命令,它将安装 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上键入:
在Ubuntu_TestMachine_1上键入:
如果一切设置精确,您应该看到类似以下截图的内容:
重启后保持 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反向查找强制反向查找。-NDNS 解析执行反向查找。-n无 DNS 解析不进行反向查找。-h帮助文本提供 Nmap 帮助文本。-6启用 IPv6扫描 IPv6。-A侵略性同时启动很多选项,如版本和脚本扫描。谨慎使用。-T(0-5)定时选项确定您希望扫描的侵略性。--scan_delay添加耽误在探测之间添加耽误。-sV服务版本探测服务软件版本。 有效的类型:
扫描类型标题功能-sAACK 扫描检查端口是否有状态。用于测试防火墙。-sPPing 扫描用于快速网络发现。-sRRPC 扫描定位 RPC 应用程序。大概会在乐成扫描的主机上留下日志条目。现在这是-sV的别名。-sSTCP SYN 扫描非常快速和隐蔽。半开放扫描。-sTTCP 扫描创建完整毗连。效率低下。非常吵闹的扫描类型,容易被注意到。-sUUDP 扫描确定某些 UDP 端口是否开放。-sXXMAS 扫描对某些防火墙设置有效的隐秘扫描。查找 RST 数据包以确定端口是否关闭。实用于扫描 UNIX 系统。-sL列表扫描列出将被扫描的 IP 地址。使用-n确保不会在网络上发送数据包。-sOIP 协议扫描搜索主机上正在使用的 IP 协议。-sMFIN/ACK隐蔽扫描。对基于 UNIX 的系统有效。查找 RST 数据包。-sI空闲扫描僵尸主机扫描,非常隐蔽的扫描。-sW窗口扫描查看 RST 数据包的 TCP 窗口值,以确定端口是开放还是关闭。 输出类型:
输出类型标题功能-oA全部可 grep,正常,XML。-oG可 grep格式化为 grep。-oXXML将结果输出到 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 "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 stop或service restart。
预备 PBNJ 数据库
预备 PBNJ 数据库,按以下步调进行:
- 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)
复制代码 我们已经创建了一个名为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 编辑几个项目:
- # 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.
复制代码- 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
复制代码 一旦我们登录,让我们尝试一些查询:
- +------------------+
- | 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_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,破解暗码,以及手动利用远程毛病。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |