前言

对当前环境下的网络安全而言,渗透测试是核心工作之一。渗透测试通过进行实质意义上的入侵式安全测试,对目标的安全性进行完全分析,这有助于识别目标系统主要组件中硬件或软件方面的潜在弱点(即安全漏洞)。渗透测试之所以重要,是因为其有助于从黑客的视角来识别目标系统的威胁与弱点,并且在发现目标中存在的安全漏洞之后,可以实时地对其进行渗透利用以评估漏洞的影响,然后采用适当的补救措施或打补丁,以便保护系统免遭外部攻击,从而降低风险因素。

决定渗透测试可行性的最大因素是对目标系统相关信息的了解情况。在不具备目标系统先验知识的情况下,就只能实施黑盒测试。在黑盒测试工作中,渗透测试人员只能“白手起家”,一点一滴地收集目标系统的相关信息。而在白盒测试中,测试人员已全面掌握目标系统的相关信息,此时需要做的工作是识别目标系统中存在的已知(或未知)弱点。这两种渗透测试方法都有相当的难度,并且每种环境都会有特定的需求。业界专家提炼了一些关键步骤,这些步骤对几乎所有形式的渗透测试都是至关重要的,包括以下几点。

目标发现与枚举 :识别目标,收集目标相关的基本信息,但不与目标建立任何形式的物理连接。

漏洞识别 :通过扫描、远程登录、网络服务等多种方法,统计出目标系统中运行的软件和提供的服务。

漏洞利用 :对目标系统软件或服务中存在的已知或未知漏洞进行利用。

漏洞利用后的控制程度 :成功地进行漏洞利用后,攻击者在目标系统中具备的访问控制权限级别。

报告 :针对发现的漏洞及其可能的应对措施提出建议。

这些步骤看起来很简单,但事实上,要对运行着大量服务的高端系统进行全面的渗透测试,需要花费数天甚至数月的时间才能完成。渗透测试之所以是一项耗时的任务,原因在于渗透测试以“试错法”技术作为基础。对漏洞的渗透与利用依赖于大量的系统配置要素,如果不去实践尝试,就不可能确定某一个特定的漏洞是否能够成功利用。试想一下,以对运行着10项服务的Windows操作系统进行漏洞利用为例,渗透测试人员必须对这10种不同服务中是否存在已知漏洞进行全面的分析与识别。而且在识别之后,才能开始漏洞利用的过程。这还只是仅需要考虑一个系统的小型场景,如果面对的是包含大量类似系统的整个网络,我们又该怎样逐一地对其进行测试呢?

这就是渗透测试框架发挥作用的地方。渗透测试框架可以将多个测试过程进行自动化实现,例如网络扫描、基于可用服务及其版本信息的漏洞识别、自动式漏洞利用等。渗透测试框架为测试人员提供了一个全面的控制面板,测试人员可以借助控制面板对所有测试活动进行有效的管理,同时还可以对目标系统进行有效监控,从而加快渗透测试进程。渗透测试框架的另一个优势是报告生成。利用渗透测试框架,可以自动保存渗透测试结果,并生成测试报告以备后续使用,或者与远程工作的其他人员共享。

本书旨在帮助读者掌握当前应用最为广泛的测试框架之一—Metasploit。Metasploit框架是一个开源平台,有助于创建实用型漏洞利用工具,并提供了渗透测试需要的其他核心功能。本书将带领读者畅游Metasploit世界,并介绍怎样使用Metasploit进行有效的渗透测试。此外,本书还将涉及Metasploit框架之外的其他一些扩展工具,并讨论怎样提高其功能以便提供更好的渗透测试体验。

本书内容

第1章,给安全专业人员的Metasploit快速提示 ,将带领读者初探Metasploit与渗透测试,对Metasploit框架及其体系结构、库等内容进行初步认识。要使用Metasploit框架进行渗透测试,需要先对其进行安装,本章将介绍怎样使用虚拟机构建自己的渗透测试环境。然后讨论怎样在不同的操作系统上进行安装,最后对Metasploit的使用进行初步尝试,并对其使用界面进行介绍。

第2章,信息收集与扫描 ,这是渗透测试的第一步,本章从最传统的信息收集方式开始,然后介绍怎样使用 Nmap 进行高级扫描。本章在内容上还涵盖了一些其他工具,例如Nessus与NeXope。与Nmap相比,NeXope提供了一些额外的信息,从而弥补了Nmap的不足。最后,讨论 Dradis 框架,渗透测试人员广泛使用这一框架与远程的其他测试人员共享测试结果和报告。

第3章,操作系统漏洞评估与利用 ,主要讨论目标系统中运行的、尚未打补丁的操作系统中漏洞的发现与利用。利用操作系统漏洞成功率高,并且操作简便。还讨论对几种流行的操作系统的渗透测试,例如Windows XP、Windows 7及Ubuntu等,包括这些操作系统中常见的、已知的一些漏洞,以及怎样在Metasploit中利用这些漏洞来突破目标机器。

第4章,客户端漏洞利用与防毒软件规避 ,讨论怎样使用Metasploit进行客户端漏洞利用的主题。本章在内容上涉及一些流行的客户端软件,例如Microsoft Office、Adobe Reader及IE浏览器。本章还进一步讨论如何规避或关闭客户端防病毒软件,以防止目标系统产生告警信息。

第5章,使用 Meterpreter 探索已攻陷目标 ,讨论漏洞利用成功后的下一个步骤。Meterpreter 是一款在漏洞利用成功之后使用的工具,包含一些功能,有助于在攻陷的目标机器中获取更多信息。本章还包括一些有用的渗透测试技术,例如权限提升、文件系统访问、键盘截获窃听等。

第6章,高级Meterpreter脚本设计 ,通过介绍构建自己的Meterpreter脚本、使用API组合工作等高级主题,本章使读者对Metasploit知识的认识进入一个新高度。通过本章的学习,读者可以更灵活地运用Metasploit,因为可以根据渗透测试的实际场景,自己设计实用脚本,并将其融入到Metasploit框架中使用。本章还包括一些高级的“后渗透”概念,例如劫持、哈希注入及持续连接等内容。

第7章,使用模块进行渗透测试 ,本章将读者的注意力转移到Metasploit中另一个重要方面:模块。Metasploit框架中收集整合了大量模块,不同的模块适用于不同的特定场景。本章包括Metasploit中一些重要的辅助性模块,也包括怎样构建自己的Metasploit模块。需要注意的是,准确理解本章内容需要一些关于Ruby脚本的基本知识。

第8章,使用漏洞利用代码 ,通过讨论怎样将任意的攻击代码转换为Metasploit模块,本章将终极武器加入到Metasploit库中。本章涉及一些高级主题,将向读者讲解怎样构建自己的Metasploit攻击代码,并在框架中进行使用。由于本章不可能涉及Metasploit框架中的所有漏洞利用代码,建议读者可以将本章作为手册,以便为Metasploit库之外的漏洞利用代码进行测试时提供参考。本章还涉及模糊测试模块,该模块可用于对任何漏洞构建自己的概念性验证代码。最后,本章以一个完整的实例作为结尾,包括怎样对一个应用程序进行模糊测试、怎样发现缓冲区溢出漏洞,以及怎样构建针对该漏洞的Metasploit模块。

第9章,使用Armitage ,简单讨论Armitage,它是最流行的Metasploit模块之一。Armitage为 Metasploit 框架提供了一个图形化界面,并提供一些点击式的漏洞利用选项增强Metasploit框架功能。本章重点关注Armitage的一些重要方面,例如快速发现漏洞、多目标处理、标签间移位,以及成功渗透后的处理等内容。

第10章,社会工程学工具包 ,这是本书的最后一章,介绍Metasploit框架中的另一个重要扩展—社会工程学工具包(Social Engineer Toolkit,SET),用于生成利用目标用户的疏忽大意对目标进行渗透的测试用例。本章内容涉及SET相关的一些基本攻击手段,包括钓鱼攻击、网站攻击、USB感染攻击等。

阅读本书的先决条件

为在阅读过程中重现和实践本书介绍的一些场景,读者需要准备两套系统,一套作为渗透测试实施系统,一套作为目标系统。另一种方法是,只需准备一套系统,之后使用虚拟化软件在其上建立测试环境。

此外,读者还需要准备一个 BackTrack5的 ISO 镜像文件,其中已包含预先安装的Metasploit和本书中讨论的其他工具。另一种方法是,从官方网站下载适合于读者的操作系统平台的Metasploit。

本书读者对象

本书的目标读者既包括专业的渗透测试人员,也包括希望体验这一工具的 Metasploit新手,书中包含了适合每个人的全部内容。本书采用了易于阅读、理解和场景再现的“食谱”结构,从初学者层次的渗透测试基础知识讲起,自然地过渡到专家级的高级知识和技能。因此,各个层次的读者都可以很容易地阅读和理解本书的内容。此外,本书需要读者具备扫描、漏洞利用和Ruby脚本的基本知识。

本书体例

figure_0011_0001 提示框中的警告或重要提示以如此形式出现。

figure_0011_0002 技巧与窍门则以这样的形式出现。