《Metasploit渗透测试魔鬼训练营》第一章读书笔记

第1章 魔鬼训练营——初识Metasploit

20135301linux

1.1 什么是渗透测试

1.1.1 渗透测试的起源与定义

若是你们对军事感兴趣,会知道各国军队每一年都会组织一些军事演习来锻炼军队的攻防战术与做战能力。在信息科技的发源地——美国的军事演习中,将美军称为“蓝军”,将假想敌称为“红军”,而这种军事演习的方式也在20世纪90年代时,由美国军方与国家安全局引入到对信息网络与信息安全基础设施的实际攻防测试过程当中。由一群受过职业训练的安全专家做为“红队”(Red Team),对接受测试的防护方“蓝队”(Blue Team)进行攻击,以实战的方式来检验目标系统安全防护体系与安全响应计划的有效性。为此,美军和国家安全局等情报部门专门组建了一些职业化的“红队”(也称为Tiger Team),好比著名的美国国家安全局Red Cell团队、美国海军计算机网络红队等。web

  • 这种经过实际的攻击进行安全测试与评估的方法就是渗透测试(Penetration Testing,Pentest)。在20世纪90年代后期逐步开始从军队与情报部门拓展到安全业界。一些对安全性需求很高的企业开始采纳这种方式来对他们本身的业务网络与系统进行测试,而渗透测试也逐渐发展为一种由安全公司所提供的专业化安全评估服务。shell

  • 简而言之,渗透测试就是一种经过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具有业务影响后果安全隐患的一种安全测试与评估方式。数据库

  • 渗透测试过程通常须要对目标系统进行主动探测分析,以发现潜在的系统漏洞,包括不恰当的系统配置,已知或未知的软硬件漏洞,以及在安全计划与响应过程当中的操做性弱点等。而这一过程须要以攻击者的角度进行实施,一般涉及对大量发现安全漏洞的主动渗透与入侵攻击。渗透测试中发现的全部安全问题,它们所带来的业务影响后果评估,以及如何避免这些问题的技术解决方案,将在最终报告中呈现给目标系统的拥有者,帮助他们修补并提高系统的安全性。编程

  • 渗透测试目前已经成为系统总体安全评估中的一个组件部分,例如银行支付行业数据安全标准(PCI DSS)等都将渗透测试做为必须进行的安全测试形式。windows

  • 做为一种对抗性和定制要求都很是高的服务,渗透测试的完成质量依赖于实施人员即渗透测试者(Penetration Tester,Pentester)的技术能力、专业素养以及团队协做能力。提供渗透测试服务的安全公司或组织都须要由职业化渗透测试者组成的专业团队,这些渗透测试者通常被称为渗透测试工程师。api

  • 目前经济与信息化飞速发展,对于信息系统安全防护处于较低水平的中国而言,渗透测试工程师岗位数量缺口很大,高端人才极其稀缺,拥有很好的发展前景。而咱们把熟练掌握渗透测试方法、流程与技术,面对复杂渗透场景可以运用本身的创新意识、技术手段与实践经验,从而成功取得良好渗透测试效果的技术专家称为渗透测试师(Penetration Test Expert),这应该是全部对渗透测试领域感兴趣的技术人员追求的目标。浏览器

    1.1.2 渗透测试的分类

    渗透测试的两种基本类型包括:安全

  • 黑盒测试:设计为模拟一个对客户组织一无所知的攻击者所进行的渗透攻击。ruby

  • 白盒测试:渗透测试者在拥有客户组织全部知识的状况下所进行的渗透测试。两种测试方法都拥有他们各自的优点和弱点。

1.黑盒测试

黑盒测试(Black-box Testing)也称为外部测试(External Testing)。采用这种方式时,渗透测试团队将从一个远程网络位置来评估目标网络基础设施,并无任何目标网络内部拓扑等相关信息,他们彻底模拟真实网络环境中的外部攻击者,采用流行的攻击技术与工具,有组织有步骤地对目标组织进行逐步的渗透与入侵,揭示目标网络中一些已知或未知的安全漏洞,并评估这些漏洞可否被利用获取控制权或形成业务资产的损失。

黑盒测试还能够对目标组织内部安全团队的检测与响应能力作出评估。在测试结束以后,黑盒测试会对发现的目标系统安全漏洞、所识别的安全风险及其业务影响评估等信息进行总结和报告。

黑盒测试是比较费时费力的,同时须要渗透测试者具有较高的技术能力。在安全业界的渗透测试者眼中,黑盒测试一般是更受推崇的,由于它能更逼真地模拟一次真正的攻击过程。

2.白盒测试

白盒测试(White-box Testing)也称为内部测试(Internal Testing)。进行白盒测试的团队将能够了解到关于目标环境的全部内部与底层知识,所以这可让渗透测试者以最小的代价发现和验证系统中最严重的安全漏洞。若是实施到位,白盒测试可以比黑盒测试消除更多的目标基础设施环境中的安全漏洞与弱点,从而给客户组织带来更大的价值。

白盒测试的实施流程与黑盒测试相似,不一样之处在于无须进行目标定位与情报搜集;此外,白盒测试可以更加方便地在一次常规的开发与部署计划周期中集成,使得可以在早期就消除掉一些可能存在的安全问题,从而避免被入侵者发现和利用。

白盒测试中发现和解决安全漏洞所需花费的时间和代价要比黑盒测试少量多。而白盒测试的最大问题在于没法有效地测试客户组织的应急响应程序,也没法判断出他们的安全防御计划对检测特定攻击的效率。若是时间有限或是特定的渗透测试环节(如情报搜集)并不在范围以内,那么白盒测试多是最好的选项。

3.灰盒测试

以上两种渗透测试基本类型的组合能够提供对目标系统更加深刻和全面的安全审查,这就是灰盒测试(Grey-box Testing),组合以后的好处就是可以同时发挥两种基本类型渗透测试方法的各自优点。灰盒测试须要渗透测试者可以根据对目标系统所掌握的有限知识与信息,来选择评估总体安全性的最佳途径。在采用灰盒测试方法的外部渗透场景中,渗透测试者也相似地须要从外部逐步渗透进入目标网络,但他所拥有的目标网络底层拓扑与架构将有助于更好地决策攻击途径与方法,从而达到更好的渗透测试效果。

1.1.3 渗透测试方法与流程

要想完成一次质量很高的渗透测试过程,渗透测试团队除了具有高超的具体实践技术能力以外,还须要掌握一套完整和正确的渗透测试方法学。

虽然渗透测试所面临的目标组织网络系统环境与业务模式变幻无穷,并且过程当中须要充分发挥渗透测试者的创新与应变能力,可是渗透测试的流程、步骤与方法仍是具备一些共性,并能够用一些标准化的方法体系进行规范和限制。

目前,安全业界比较流行的开源渗透测试方法体系标准包括如下几个。

  • 安全测试方法学开源手册

由ISECOM安全与公开方法学研究所制定,最新版本为2010年发布的v3.0。安全测试方法学开源手册(OSSTMM)提供物理安全、人类心理学、数据网络、无线通讯媒介和电讯通讯这五类渠道很是细致的测试用例,同时给出评估安全测试结果的指标标准。

OSSTMM的特点在于很是注重技术的细节,这使其成为一个具备很好可操做性的方法指南。

  • NIST SP 800-42网络安全测试指南

美国国家标准与技术研究院(NIST)在SP 800-42网络安全测试指南中讨论了渗透测试流程与方法,虽然不及OSSTMM全面,可是它更可能被管理部门所接受。

  • OWASP十大Web应用安全威胁项目

针对目前最广泛的Web应用层,为安全测试人员和开发者提供了如何识别与避免这些安全威胁的指南。OWASP十大Web应用安全威胁项目(OWASP Top Ten)只关注具备最高风险的Web领域,而不是一个普适性的渗透测试方法指南。

  • Web安全威胁分类标准

与OWASP Top Ten相似,Web应用安全威胁分类标准(WASC-TC)全面地给出目前Web应用领域中的漏洞、攻击与防范措施视图。

  • PTES渗透测试执行标准

2010年最新发起的渗透测试过程规范标准项目,核心理念是经过创建起进行渗透测试所要求的基本准则基线,来定义一次真正的渗透测试过程,并获得安全业界的普遍认同。

经过深刻了解这些开放的渗透测试方法标准,将有助于你对渗透测试创建起一个总体的知识与技能体系,全部这些方法标准背后的基本想法就是你的渗透测试过程应该按步骤实施,从而确保更加精确地评价一个系统的安全性。咱们没法在这里细致地介绍每个标准的细节,只是简要地介绍最新的PTES标准中定义的渗透测试过程环节。当你更加深刻地了解渗透测试技术以后,能够更进一步去了解这些渗透测试方法体系,并在实际的渗透测试实践中加以应用。

1.1.4 渗透测试过程环节

PTES渗透测试执行标准是由安全业界多家领军企业技术专家所共同发起的,指望为企业组织与安全服务提供商设计并制定用来实施渗透测试的通用描述准则。PTES标准项目网站为http://www.pentest-standard.org/,从2010年11月开始(目前还处于开发阶段),目前已经发布了BETA RELEASE版本。

PTES标准中定义的渗透测试过程环节基本上反映了安全业界的广泛认同,具体包括如下7个阶段。

  • 前期交互阶段

在前期交互(Pre-Engagement Interaction)阶段,渗透测试团队与客户组织进行交互讨论,最重要的是肯定渗透测试的范围、目标、限制条件以及服务合同细节。

该阶段一般涉及收集客户需求、准备测试计划、定义测试范围与边界、定义业务目标、项目管理与规划等活动。

  • 情报搜集阶段

在目标范围肯定以后,将进入情报搜集(Information Gathering)阶段,渗透测试团队能够利用各类信息来源与搜集技术方法,尝试获取更多关于目标组织网络拓扑、系统配置与安全防护措施的信息。

渗透测试者可使用的情报搜集方法包括公开来源信息查询、Google Hacking、社会工程学、网络踩点、扫描探测、被动监听、服务查点等。而对目标系统的情报探查能力是渗透测试者一项很是重要的技能,情报搜集是否充分在很大程度上决定了渗透测试的成败,由于若是你遗漏关键的情报信息,你将可能在后面的阶段里一无所得。

  • 威胁建模阶段

在搜集到充分的情报信息以后,渗透测试团队的成员们停下敲击键盘,你们聚到一块儿针对获取的信息进行威胁建模(Threat Modeling)与攻击规划。这是渗透测试过程当中很是重要,但很容易被忽视的一个关键点。

经过团队共同的缜密情报分析与攻击思路头脑风暴,能够从大量的信息情报中理清头绪,肯定出最可行的攻击通道。

  • 漏洞分析阶段

在肯定出最可行的攻击通道以后,接下来须要考虑该如何取得目标系统的访问控制权,即漏洞分析(Vulnerability Analysis)阶段。

在该阶段,渗透测试者须要综合分析前几个阶段获取并汇总的情报信息,特别是安全漏洞扫描结果、服务查点信息等,经过搜索可获取的渗透代码资源,找出能够实施渗透攻击的攻击点,并在实验环境中进行验证。在该阶段,高水平的渗透测试团队还会针对攻击通道上的一些关键系统与服务进行安全漏洞探测与挖掘,指望找出可被利用的未知安全漏洞,并开发出渗透代码,从而打开攻击通道上的关键路径。

  • 渗透攻击阶段

渗透攻击(Exploitation)是渗透测试过程当中最具备魅力的环节。在此环节中,渗透测试团队须要利用他们所找出的目标系统安全漏洞,来真正入侵系统当中,得到访问控制权。

渗透攻击能够利用公开渠道可获取的渗透代码,但通常在实际应用场景中,渗透测试者还须要充分地考虑目标系统特性来定制渗透攻击,并须要挫败目标网络与系统中实施的安全防护措施,才能成功达成渗透目的。在黑盒测试中,渗透测试者还须要考虑对目标系统检测机制的逃逸,从而避免形成目标组织安全响应团队的警觉和发现。

  • 后渗透攻击阶段

后渗透攻击(Post Exploitation)是整个渗透测试过程当中最可以体现渗透测试团队创造力与技术能力的环节。前面的环节能够说都是在循序渐进地完成很是广泛的目标,而在这个环节中,须要渗透测试团队根据目标组织的业务经营模式、保护资产形式与安全防护计划的不一样特色,自主设计出攻击目标,识别关键基础设施,并寻找客户组织最具价值和尝试安全保护的信息和资产,最终达成可以对客户组织形成最重要业务影响的攻击途径。

在不一样的渗透测试场景中,这些攻击目标与途径多是变幻无穷的,而设置是否准确而且可行,也取决于团队自身的创新意识、知识范畴、实际经验和技术能力。

  • 报告阶段

渗透测试过程最终向客户组织提交,取得承认并成功得到合同付款的就是一份渗透测试报告(Reporting)。这份报告凝聚了以前全部阶段之中渗透测试团队所获取的关键情报信息、探测和发掘出的系统安全漏洞、成功渗透攻击的过程,以及形成业务影响后果的攻击途径,同时还要站在防护者的角度上,帮助他们分析安全防护体系中的薄弱环节、存在的问题,以及修补与升级技术方案。

1.2 漏洞分析与利用

1.2.1 安全漏洞生命周期

在渗透测试流程中,核心内容是找出目标系统中存在的安全漏洞,并实施渗透攻击,从而进入到目标系统中。而这一过程最主要的底层基础是目标系统中存在的安全漏洞(Vulnerability)。安全漏洞指信息系统中存在的缺陷或不适当的配置,它们可以使攻击者在未受权状况下访问或破坏系统,致使信息系统面临安全风险。利用安全漏洞来形成入侵或破坏效果的程序就称为渗透代码(Exploit),或者漏洞利用代码。

围绕着安全漏洞生命周期所进行的攻防技术博弈一直以来都是安全社区永恒的话题,而一个典型的安全漏洞生命周期包括以下7个部分:

1)安全漏洞研究与挖掘:由高技术水平的黑客与渗透测试师开展,主要利用源代码审核(白盒测试)、逆向工程(灰盒测试)、Fuzz测试(黑盒测试)等方法,挖掘目标系统中存有的可被利用的安全漏洞。

2)渗透代码开发与测试:在安全漏洞挖掘的同时,黑客们会开发概念验证性的渗透攻击代码(POC),用于验证找到的安全漏洞是否确实存在,并确认其是否可被利用。

3)安全漏洞和渗透代码在封闭团队中流传:在发现安全漏洞并给出渗透攻击代码后,负责任的“白帽子”们采起的处理策略是首先通知厂商进行修补,而在厂商给出补丁后再进行公布;而“黑帽子”与“灰帽子”们通常在封闭小规模团队中进行秘密地共享,以充分地利用这些安全漏洞和渗透攻击代码所带来的攻击价值。

4)安全漏洞和渗透代码开始扩散:因为各类缘由,在封闭团队中秘密共享的安全漏洞和渗透代码最终会被披露出来,在互联网上得以公布,“黑帽子”们会快速对其进行掌握和应用,并在安全社区中开始快速扩散。

5)恶意程序出现并开始传播:“黑帽子”们将在掌握安全漏洞和渗透代码基础上,进一步开发更易使用、更具自动化传播能力的恶意程序,并经过黑客社区社会组织结构和互联网进行传播。在此过程当中(或以前和以后),厂商完成补丁程序开发和测试,并进行发布。

6)渗透代码/恶意程序大规模传播并危害互联网:厂商发布补丁程序和安全警报将更进一步地让整个黑客社区了解出现新的安全漏洞和相应的渗透代码、恶意程序,更多的“黑帽子”们将从互联网或社区关系网得到并使用这些恶意程序,对互联网的危害也在这个阶段达到顶峰。

7)渗透攻击代码/攻击工具/恶意程序逐渐消亡:在厂商补丁程序、安全公司提供的检测和移除机制获得普遍应用后,相应的渗透代码、恶意程序将被“黑帽子”们逐渐抛弃,从而慢慢地消亡。

在安全漏洞生命周期中,从安全漏洞被发现到厂商发布补丁程序用于修补该漏洞以前的这段期间,被安全社区广泛地称为“0day”。因为在这段时间内,黑客们攻击存有该安全漏洞的目标能够达到百分之百的成功率,同时也能够躲避检测,所以“0day”的安全漏洞和对应的渗透代码对于黑客社区具备很高的价值,挖掘“0day”安全漏洞并给出渗透代码也成为高水平黑客的追求目标。即便在厂商发布了针对该安全漏洞的补丁程序和安全警报后,补丁程序也须要一段时间被接受、下载和应用,而一些不负责任的系统管理员极可能永远也不会去更新他们的系统,所以一些已公布的安全漏洞及相应的渗透代码对于不管“黑帽子”,仍是职业的渗透测试者而言都仍然具备价值。

1.2.2 安全漏洞披露方式

俗话说,纸老是包不住火的。一旦一个安全漏洞被发掘出来并编写出相应渗透代码以后,不管漏洞发现者以哪一种方式进行处理,这个漏洞老是会有被公开披露的一天。

而针对漏洞的公开披露策略与道德准则,在安全社区中曾爆发过无数次的辩论,在此咱们没法展开解释各类已有的披露规则与各方观点。概括起来,主要有以下四种主要的安全漏洞披露方式。

1.彻底公开披露

发现漏洞后直接向公众彻底公开安全漏洞技术细节,这将使得软件厂商须要赶在攻击者对漏洞进行恶意利用以前开发并发布出安全补丁,然而这一般是很难作到的,所以这种披露方式也被软件厂商称为不负责任的披露,会使得他们的客户因为漏洞披露而置于安全风险之中。

即使如此,仍是有一部分传统黑客认为只有这种方式才可以有效促使软件厂商重视起安全问题,这种观点在安全社区中仍有一些认同者。最重要的彻底公开披露渠道是著名的Full-Disclosure邮件列表。

2.负责任的公开披露

负责任的公开披露是在真正进行彻底公开披露以前,首先对软件厂商进行知会,并为他们提供一段合理的时间进行补丁开发与测试,而后在软件厂商发布出安全补丁,或者软件厂商不负责任地延后补丁发布时,再对安全社区彻底公开漏洞技术细节。

目前最被安全社区接受的是负责任的公开披露策略。

3.进入地下经济链

随着漏洞的经济价值逐步被安全研究者所认识,一部分黑客认为不该免费给软件厂商打工帮助他们抓bug,向软件厂商通报可以得到的一般只是厂商的一声“谢谢”,有时甚至连道谢也得不到。这种反差已经造就了安全漏洞交易市场的出现,如著名的TippingPoint公司的“Zero-Day Imitative”计划和iDefense公司的漏洞贡献者计划等,这些安全公司经过向安全研究人员收购高价值的安全漏洞,并出售给如政府部门等客户来赢取经济利益,同时也为安全研究人员带来更高的经济收益,而这些安全漏洞的售价一般在几百美圆至数万美圆之间,影响范围巨大且可以有效利用的安全漏洞售价甚至可能超出十万美圆。

在这种背景下,三位全球著名的黑客Dino Dai Zovi、Charlie Miller和Alex Sotrirov,在2009年的CanSecWest会议上打出了“No More Free Bugs”的横幅,这也引起了安全社区从新对安全漏洞信息的披露、出售与利用的伦理道德和策略进行争论。

4.小范围利用直至被动披露

因为并不是全部的漏洞发现者都会听从软件厂商所指望的披露策略,于是在安全社区所发现的安全漏洞中,也有至关一部分并无首先通报给软件厂商,而是在小范围内进行利用,进而逐步扩大影响范围,最终被恶意代码普遍利用从而危害庞大的互联网用户群体。这时一些安全公司会监测到野外活跃的渗透代码,并发现出背后所利用的安全漏洞。好比著名的Google公司遭受Aurora攻击事件,便揭示出是利用的MS10-002安全漏洞。

而不管以何种方式进行公开披露,已公布的安全漏洞信息都会被收集到业界知名的CVE、NVD、SecurityFocus、OSVDB等几个通用漏洞信息库中。

1.2.3 安全漏洞公共资源库

国内的安全漏洞信息库主要包括:

CNNVD:中国国家漏洞库,由中国信息安全测评中心维护(www.cnnvd.org.cn)。

CNVD:中国国家信息安全漏洞共享平台,由国家计算机网络应急技术处理协调中心(CNCERT/CC)维护(www.cnvd.org.cn)。

乌云安全漏洞报告平台:民间组织(http://www.wooyun.org/)。

SCAP中文社区:由本书做者王珩、诸葛建伟等人发起的民间组织项目(http://www.scap.org.cn/)。

国外的安全漏洞信息库主要包括:

CVE:(Common Vulnerability and Exposures,通用漏洞与披露)已成为安全漏洞命名索引的业界事实标准,由美国国土安所有资助的MITRE公司负责维护,CVE漏洞库为每一个确认的公开披露安全漏洞提供了索引CVE编号,以及一段简单的漏洞信息描述,而这个CVE编号就做为安全业界标识该漏洞的标准索引号。

NVD:(National Vulnerability Database,国家漏洞数据库)是美国政府官方根据NIST的SCAP标准协议所描述的安全漏洞管理信息库,具体由美国国土安所有下属的NCSD国家网际安所有门US-CERT组负责维护。截至2013年4月,NVD库目前包括了近6万条CVE安全漏洞详细信息。

SecurityFocus:起源于业内著名的Bugtraq邮件列表。2002年SecurityFocus网站被Symantec公司所收购,从Bugtraq邮件列表中也演化出SecurityFocus安全漏洞信息库,为业界的安全研究人员提供全部平台和服务上最新的安全漏洞信息。

OSVDB:(Open Source Vulnerability DataBase,开源漏洞数据库)由HD Moore参与发起,由安全社区建立的一个独立的、开源的安全漏洞信息库,为整个安全社区提供关于安全漏洞的准确、详细、及时、公正的技术信息,来促使软件厂商与安全研究人员更友好、更开放地合做,消除开发和维护私有安全漏洞信息库所带来的冗余工做量和花费。截至2013年4月,OSVDB库可以覆盖7万多个产品,已包含91?000多个安全漏洞的详细信息。

针对这些已知安全漏洞的公开渗透代码资源也会在安全社区中流传与共享,目前安全社区比较知名的渗透攻击代码共享站点包括Metasploit、Exploit-db、PacketStorm、SecurityFocus等,CORE Security、VUPEN等则提供商业的渗透代码订阅服务。

1.3 渗透测试神器Metasploit

1.3.1 诞生与发展

1.Metasploit横空出世

2.Metasploit风暴来袭

3.Metasploit全新回归

4.Metasploit全面扩展

1.3.2 渗透测试框架软件

Metasploit项目由著名黑客HD Moore于2003年开始开发,最先做为一个渗透攻击代码的集成软件包而发布。渗透攻击也是目前Metasploit最强大和最具吸引力的核心功能,Metasploit框架中集成了数百个针对主流操做系统平台上,不一样网络服务与应用软件安全漏洞的渗透攻击模块,能够由用户在渗透攻击场景中根据漏洞扫描结果进行选择,并可以自由装配该平台上适用的具备指定功能的攻击载荷,而后经过自动化编码机制绕过攻击限制与检测措施,对目标系统实施远程攻击,获取系统的访问控制权。

Metasploit的出现使得一些渗透测试的初学者也可以像在黑客电影中演的那样“优雅潇洒”地进行渗透攻击,告别了以前使人崩溃与望而却步的繁杂过程:

搜索公开渗透代码→编译→测试→修改代码→实施→失败→不断调试直至成功

正由于如此,Metasploit在发布以后很快获得了安全社区的青睐,成为黑客们与安全职业人员必备的渗透测试工具之一。

除了渗透攻击以外,Metasploit在发展过程当中逐渐增长对渗透测试全过程的支持,包括情报搜集、威胁建模、漏洞分析、后渗透攻击与报告生成。

  • 情报搜集阶段

Metasploit一方面经过内建的一系列扫描探测与查点辅助模块来获取远程服务信息,另外一方面经过插件机制集成调用Nmap、Nessus、OpenVAS等业界著名的开源网络扫描工具,从而具有全面的信息搜集能力,为渗透攻击实施提供必不可少的精确情报。

  • 威胁建模阶段

在搜集信息以后,Metasploit支持一系列数据库命令操做直接将这些信息汇总至PostgreSQL、MySQL或SQLite数据库中,并为用户提供易用的数据库查询命令,能够帮助渗透测试者对目标系统搜集到的情报进行威胁建模,从中找出最可行的攻击路径。

  • 漏洞分析阶段

除了信息搜集环节可以直接扫描出一些已公布的安全漏洞以外,Metasploit中还提供了大量的协议Fuzz测试器与Web应用漏洞探测分析模块,支持具备必定水平能力的渗透测试者在实际过程当中尝试挖掘出“零日”漏洞,并对漏洞机理与利用方法进行深刻分析,而这将为渗透攻击目标带来更大的杀伤力,并提高渗透测试流程的技术含金量。

  • 后渗透攻击阶段

在成功实施渗透攻击并得到目标系统的远程控制权以后,Metasploit框架中另外一个极具威名的工具Meterpreter在后渗透攻击阶段提供了强大功能。

Meterpreter能够看作一个支持多操做系统平台,能够仅仅驻留于内存中并具有免杀能力的高级后门工具,Meterpreter中实现了特权提高、信息攫取、系统监控、跳板攻击与内网拓展等多样化的功能特性,此外还支持一种灵活可扩展的方式来加载额外功能的后渗透攻击模块,足以支持渗透测试者在目标网络中取得立足点以后进行进一步的拓展攻击,并取得具备业务影响力的渗透效果。

从技术角度来讲,Meterpreter让它的“前辈们”(如国外的BO、BO2K,以及国内的冰河、灰鸽子等)黯然失色。

  • 报告生成阶段

Metasploit框架得到的渗透测试结果能够输入至内置数据库中,所以这些结果能够经过数据库查询来获取,并辅助渗透测试报告的写做。

而商业版本的Metasploit Pro具有了更增强大的报告自动生成功能,能够输出HTML、XML、Word和PDF格式的报告,并支持定制渗透测试报告模板,以及支持遵循PCI DSS(银行支付行业数据安全标准)与FIMSA(美国联邦信息安全管理法案)等标准的合规性报告输出。

正是因为Metasploit最新版本具备支持渗透测试过程各个环节的如此众多且强大的功能特性,Metasploit已经成为安全业界最受关注与喜好的渗透测试流程支持软件。

Metasploit软件的用户群体也首先面向职业的渗透测试工程师,以及非职业地从事一些渗透测试学习与实践的安全技术爱好者。Metasploit或许是绝大多数渗透测试者最明智的渗透测试工具首选。

真正处于防护一线的网络与系统管理员们也应该熟悉和深刻掌握Metasploit,可以自主地对所管理的信息网络进行例行性的白盒式渗透测试,这将有效发现其中的安全薄弱点,在因为真正的入侵发生致使本身挨训甚至丢掉饭碗以前,可以作出有效的补救与防御措施。此外,Metasploit还能够被软件、设备和安全产品测试人员们所使用,特别是在他们工做范围内的某款软件或设备被爆出公开利用的零日安全漏洞时,能够利用Metasploit来重现渗透攻击过程,定位安全漏洞并分析机理,从而修补软件与设备,而诸如IDS、IPS、杀毒软件等安全产品的测试人员,也可使用Metasploit来检验产品的检测性能,以及针对Metasploit强大免杀与逃逸技术的对抗能力。

1.3.3 漏洞研究与渗透代码开发平台

当初,HD Moore的理想目标是,让Metasploit成为一个开放的漏洞研究与渗透代码开发的社区公共平台,而这一理想在Metasploit的发展过程当中正在得以实现。

当咱们在Exploit-db、SecurityFocus等公共渗透代码发布平台上不断发现大量的以Metasploit渗透攻击模块的格式进行编写,可以直接集成到Metasploit框架中进行灵活应用的代码发布时,咱们知道已经进入了“Metasploit时代”了!

在“Metasploit时代”以前,黑客社区中的漏洞研究与渗透代码开发是一种“无序化”的状态,你们使用各自掌握的辅助工具和经验挖掘软件安全漏洞,并使用他们本身喜欢的编程语言来开发概念验证性渗透代码(POC),组装上我的珍藏的Shellcode。一般只针对有限的目标版本环境作过初步测试以后,就根据他们本身的“黑客哲学”在直接公开披露、负责任地通告厂商,或进入地下经济链等多种披露策略中作出选择,让他们所发现的安全漏洞和编写的渗透代码进入到安全社区。

采用这种漏洞研究与渗透开发方式所产生的渗透代码每每“鱼龙混杂、混沌不堪”,PacketStorm就是聚集了大量采用此种方式进行安全漏洞彻底公开披露的一个表明性网站,每月几乎都有数百个来自安全社区的漏洞披露与渗透代码发布。对于具备超级信息搜索能力、多种编程语言理解能力、较高渗透技术水平的高级渗透测试师而言,这种聚集大量漏洞与渗透代码的公共信息仓库无疑是一个宝贵的财富,他们有能力在渗透测试过程当中快速找到可利用的公开漏洞信息与POC代码,并可以快速经过编译、测试和修改使用到他们本身的渗透过程当中。

然而技术能力还不够到位的数量占绝大多数的技术爱好者与初学者,则对这些资源既爱又恨,一方面对找到针对新公开漏洞的渗透代码而欣喜不已,另外一方面又没有能力发挥出它的实际效用,这种感觉相信绝大多数体验过这一过程的读者们都深有感悟。而HD Moore当初建立Metasploit的想法相信也和他在渗透测试服务中一直遭赶上述境遇是密切相关的。

在“Metasploit时代”,黑客们就能够充分利用Metasploit中针对大量服务协议的Fuzz测试器来辅助他们的漏洞挖掘过程;在发现漏洞以后,他们还可使用一些调试型的攻击载荷来让漏洞机理分析与利用过程变得更加简单。此外,Metasploit中集成的一系列功能程序可让他们充分剖析目标程序,并精肯定位出利用过程可能依赖的关键指令与地址;在编写渗透代码时,他们也无须从头开始编写代码,从Metasploit开源代码库中找出一个攻击相似目标的模块做为模板,而后将关注点集中在漏洞触发与利用的独特过程,而其余的攻击载荷、协议交互等均可以直接利用框架所提供的支持模块。这样的编写方式不只省时省力,更为重要的是还具备更为灵活的特性,能够自由的组装任意的攻击载荷;而在测试阶段,黑客们也能够直接使用Metasploit生成测试用例,并能够在多个目标系统测试成功基础上,为渗透代码加上更多的目标系统配置选项,从而提示渗透代码的通用性与鲁棒性。

Metasploit最伟大之处,就是将漏洞研究与渗透代码开发从彻底的“手工做坊”形式提高到了初具雏形的“工业化生产方式”,这种贡献足以让它载入安全技术发展的光辉史册。

1.3.4 安全技术集成开发与应用环境

Metasploit的目标还不只限于提供一个渗透测试全过程支持框架软件,也不限于做为安全社区的一个开放式漏洞研究与渗透代码开发平台,而是做为一个安全技术的集成开发与应用环境。

你能想象实现这一目标以后Metasploit所具备的能量,以及它在安全社区中的地位吗?那时,Metasploit将成为安全社区中最具影响力的开源框架平台和创新策源地,大量的新技术从这里产出,快速转换成可实际应用与实施的工具,并可以与Metasploit平台上的其余工具相互配合,从而汇集出强大的能量光束,穿透渗透测试过程当中的全部目标系统,以及进行安全测试的全部软硬件产品。那时HD Moore和Metasploit核心开发人员则会成为神一级的人物,接受着你们的顶礼膜拜。而这并非虚无缥缈的幻想,Metasploit正在稳健地迈向这一目标。

首先,Metasploit做为一个开源项目,提供了很是优秀的模块化框架与底层基础库的支持,若是你认同开源理念,彻底能够用Metasploit模块的方式来实现新技术与新想法,并贡献到Metasploit的开源代码库中,让安全社区的其余黑客们和渗透测试者都可以分享你的发现与创新。

其次,Metasploit提供了灵活的插件机制和命令行批处理文件机制,已经集成了Nmap、Nessus、OpenVAS等安全社区中重量级的开源或共享安全软件,以及一些极具特点的专项渗透测试工具,如社会工程学工具包SET、自动化攻击软件包Fast Track、无线网络攻击套件Karmetasploit等。而若是指望将本身开发或者社区共享的安全工具加入到Metasploit集成环境中,也能够利用这些机制完成一个“桥”插件,来为Metasploit社区作出贡献。

最后,Metasploit的最新版本实现一个能够远程调用Metasploit内建功能的RPC API接口,利用该接口可让你更好地使Metasploit和其余一些安全工具进行互操做。

Metasploit社区正在经过一系列努力,朝着构建安全技术集成化开发与应用环境这一宏伟目标前进,是否能达成这一终极目标让咱们拭目以待,若是有兴趣和能力,让这一天来的更快些,请贡献出你的智慧和力量吧。

1.4 Metasploit结构剖析

1.4.1 Metasploit体系框架

虽然Metasploit仍在活跃地开发与变化着,但总体体系结构从v3版本以来保持着相对的稳定。v4版本在用户界面、对渗透测试全过程提供更好支持、数据库融合与互操做性等方面有了很是大的变化,但其体系结构仍延续了v3系列版本中已趋于成熟稳定的总体框架,而并不是像以前每次大版本升级都伴随着体系框架的重构。

Metasploit的设计尽量采用模块化的理念,以提高代码复用效率。在基础库文件(Libraries)中提供了核心框架和一些基础功能的支持;而实现渗透测试功能的主体代码则以模块化方式组织,并按照不一样用途分为6种类型的模块(Modules);为了扩充Metasploit框架对渗透测试全过程的支持功能特性,Metasploit还引入了插件(Plugins)机制,支持将外部的安全工具集成到框架中;Metasploit框架对集成模块与插件的渗透测试功能,经过用户接口(Interfaces)与功能程序(Utilities)提供给渗透测试者和安全研究人员进行使用。

此外,Metasploit在v3版本中还支持扩展脚本(Scripts)来扩展攻击载荷模块的能力,而这部分脚本在v4版本中将做为后渗透攻击模块(Post),以统一化的组织方式融入到模块代码中,而这些扩展脚本也将被逐步移植和裁剪。

  • 基础库文件

Metasploit的基础库文件位于源码根目录路径下的libraries目录中,包括Rex、framework-core和framework-base三部分。

Rex(Ruby Extension)是整个Metasploit框架所依赖的最基础的一些组件,为Metasploit开发者进行框架和模块开发提供了一些基础功能的支持,如包装的网络套接字、网络应用协议客户端与服务端实现、日志子系统、渗透攻击支持例程、PostgreSQL及MySQL数据库支持等。

framework-core库负责实现全部与各类类型的上层模块及插件的交互接口。

framework-base库扩展了framework-core,提供更加简单的包装例程,并为处理框架各个方面的功能提供了一些功能类,用于支持用户接口与功能程序调用框架自己功能及框架集成模块。

  • 模块
    auxiliary模块位于/msf3/modules/auxiliary/下。
    Exploits模块位于/msf3/modules/exploits/下。
    Payloads模块位于/msf3/modules/payloads/下。
    Nops模块位于/msf3/modules/nops下。
    Encoders模块位于/msf3/modules/encoders/下。

模块是经过Metasploit框架所装载、集成并对外提供的最核心的渗透测试功能实现代码。按照在渗透测试过程各个环节中所具备的不一样用途,分为辅助模块(Aux)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击载荷模块(Payloads)、空指令模块(Nops)和编码器模块(Encoders)。这些模块都拥有很是清晰的结构和一个预先定义好的接口,能够被装载到Metasploit框架中,并可组合支持信息搜集、渗透攻击与后渗透攻击拓展等渗透测试任务。后面的小节将对这六类不一样类型的模块进行更进一步的介绍。

  • 插件

Metasploit框架的插件是一类定义比较松散,可以扩充框架的功能,或者组装已有功能构成高级特性的组件。插件能够集成现有的一些外部安全工具,如Nessus、OpenVAS漏洞扫描器等,为用户接口提供一些新的功能命令、记录全部的网络记录或提供创新的渗透测试功能。

  • 接口

Metasploit框架提供了多种用户使用接口,包括msfconsole控制台终端、msfcli命令行、msfgui图形化界面、armitage图形化界面以及msfapi远程调用接口等。本书将在1.6节说明与演示如何经过这些接口使用Metasploit的基本渗透攻击功能,并在后继章节中深刻全面地介绍如何使用Metasploit支持渗透测试全过程。

  • 功能程序

除了经过上述的用户使用接口访问Metasploit框架主体功能以外,Metasploit还提供了一系列可直接运行的功能程序,支持渗透测试者与安全研究人员快速地利用Metasploit框架内部能力完成一些特定任务。好比msfpayload、msfencode和msfvenom能够将攻击载荷封装为可执行文件、C语言、JavaScript语言等多种形式,并能够进行各类类型的编码。msf*scan系列功能程序提供了在PE、ELF等各类类型文件中搜索特定指令的功能,能够帮助渗透代码开发人员定位指令地址。本书在后继章节中也会介绍到如何在渗透测试过程当中利用这些Metasploit功能程序。

1.4.2 辅助模块

Metasploit为渗透测试的信息搜集环节提供了大量的辅助模块支持,包括针对各类网络服务的扫描与查点、构建虚假服务收集登陆密码、口令猜想破解、敏感信息嗅探、探查敏感信息泄露、Fuzz测试发掘漏洞、实施网络协议欺骗等模块。辅助模块可以帮助渗透测试者在进行渗透攻击以前获得目标系统丰富的情报信息,从而发起更具目标性的精准攻击。本书将在后继章节详细介绍支持情报搜集的辅助模块。

此外,Metasploit辅助模块中还包含一些无须加载攻击载荷,同时每每不是取得目标系统远程控制权的渗透攻击,例如拒绝服务攻击等。

1.4.3 渗透攻击模块

渗透攻击模块是利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,以植入和运行攻击载荷,从而得到对远程目标系统访问权的代码组件。渗透攻击模块是Metasploit框架中最核心的功能组件,虽然v4版本以后,Metasploit将继续沿着从最初一个单纯的渗透攻击软件向能够支持渗透测试全过程的框架平台这一方向继续发展,渗透测试模块目前在Metasploit框架中所占据的关键位置仍没法撼动,并且其数量、规模在截至2013年4月的最新版本v4.7.0中达到1084个,这也是其余类型模块没法比拟的。

你能够在Metasploit源码目录的modules/exploits子目录下找到全部的渗透攻击模块源代码,浏览源码路径你会发现Metasploit是以目标系统的操做系统平台,以及所针对的网络服务或应用程序类型来对这些渗透攻击模块进行分类的。目前v4.7.0版本中的渗透攻击模块按照操做系统平台分类后的数量分布状况如表1-3所示,其支持Windows、Linux、Apple iOS、Mac OS X、UNIX(包括AIX、BSDi、FreeBSD、HPUX、IRIX、Solaris等分支版本)、NetWare等不一样操做系统平台,其中最受关注的仍是目前最流行的Windows操做系统,其针对48个网络服务和应用分类拥有787个渗透攻击模块,其余拥有较多模块的有UNIX(78个)、Linux(64个)和Mac OS X(16个),而Multi平台类中包含一些跨平台的网络服务或应用程序中存在的安全漏洞,如Samba、Tomcat、Firefox等,也拥有115个。

Metasploit框架中渗透攻击模块能够按照所利用的安全漏洞所在的位置分为主动渗透攻击与被动渗透攻击两大类。

主动渗透攻击所利用的安全漏洞位于网络服务端软件与服务承载的上层应用程序之中,因为这些服务一般是在主机上开启一些监听端口并等待客户端链接,所以针对它们的渗透攻击就能够主动发起,经过链接目标系统网络服务,注入一些特殊构造的包含“邪恶”攻击数据的网络请求内容,触发安全漏洞,并使得远程服务进程执行在“邪恶”数据中包含的攻击载荷,从而获取目标系统的控制会话。针对网络服务端的主动渗透攻击属于传统的渗透攻击,在Metasploit中占据主流位置,此外近几年也出现了Web应用程序渗透攻击、SCADA工业控制系统服务渗透攻击等新的热点领域。

被动渗透攻击利用的安全漏洞位于客户端软件中,如浏览器、浏览器插件、电子邮件客户端、Office与Adobe等各类文档阅读与编辑软件。对于这类存在于客户端软件的安全漏洞,咱们没法主动地将数据从远程输入到客户端软件中,所以只能采用被动渗透攻击方式,即构造出“邪恶”的网页、电子邮件或文档文件,并经过架设包含此类恶意内容的服务端、发送邮件附件、结合社会工程学攻击分发并诱骗目标用户打开、结合网络欺骗和劫持技术等方式,等目标系统上的用户访问到这些邪恶内容,从而触发客户端软件中的安全漏洞,给出控制目标系统的Shell会话。由于客户端软件的被动渗透攻击可以绕过防火墙等网络边界防御措施,因此近几年获得迅猛的发展,风头已经盖过了传统的网络服务端渗透攻击。最多见的两类被动渗透攻击为浏览器软件漏洞攻击和文件格式类漏洞攻击。

1.4.4 攻击载荷模块

攻击载荷是在渗透攻击成功后促使目标系统运行的一段植入代码,一般做用是为渗透攻击者打开在目标系统上的控制会话链接。在传统的渗透代码开发中,攻击载荷只是一段功能简单的Shellcode代码,以汇编语言编制并转换为目标系统CPU体系结构支持的机器代码,在渗透攻击触发漏洞后,将程序执行流程劫持并跳转入这段机器代码中执行,从而完成Shellcode中实现的单一功能,好比在远程系统中添加新用户、启动一个命令行Shell并绑定到网络端口上等。而开发渗透代码时,每每是从之前的代码中直接将Shellcode搬过来或作些简单的修改,一些不太成熟的Shellcode还会依赖于特定版本系统中的API地址,从而使其通用性不强,在不一样版本系统上可能出现运行不正常的状况,所以开发人员不只须要有汇编语言知识和编写技能,还须要对目标操做系统的内部工做机制有深刻理解。

Metasploit框架中引入的模块化攻击载荷彻底消除了安全研究人员在渗透代码开发时进行Shellcode编写、修改与调试的工做代价,而能够将精力集中在安全漏洞机理研究与利用代码的开发上。此外,Metasploit还提供了Windows、Linux、UNIX和Mac OS X等大部分流行操做系统平台上功能丰富多样的攻击载荷模块,从最简单的增长用户帐号、提供命令行Shell,到基于VNC的图形化界面控制,以及最复杂、具备大量后渗透攻击阶段功能特性的Meterpreter,这使得渗透测试者能够在选定渗透攻击代码以后,从不少适用的攻击载荷中选取他所中意的模块进行灵活地组装,在渗透攻击后得到他所选择的控制会话类型,这种模块化设计与灵活组装模式也为渗透测试者提供了极大的便利。

Metasploit攻击载荷模块分为独立(Singles)、传输器(Stager)、传输体(Stage)三种类型。

独立攻击载荷是彻底自包含的,可直接独立地植入目标系统进行执行,好比“windows/shell_bind_tcp”是适用于Windows操做系统平台,可以将Shell控制会话绑定在指定TCP端口上的攻击载荷。在一些比较特殊的渗透攻击场景中,可能会对攻击载荷的大小、运行条件有所限制,好比特定安全漏洞利用时可填充邪恶攻击缓冲区的可用空间很小、Windows 7等新型操做系统所引入的NX(堆栈不可执行)、DEP(数据执行保护)等安全防护机制,在这些场景状况下,Metasploit提供了传输器(Stager)和传输体(Stage)配对分阶段植入的技术,由渗透攻击模块首先植入代码精悍短小且很是可靠的传输器载荷,而后在运行传输器载荷时进一步下载传输体载荷并执行。目前Metasploit中的Windows传输器载荷能够绕过NX、DEP等安全防护机制,能够兼容Windows 7操做系统,而由传输器载荷进一步下载并执行的传输体载荷就再也不受大小和安全防护机制的限制,能够加载如Meterpreter、VNC桌面控制等复杂的大型攻击载荷。传输器与传输体配对的攻击载荷模块以名称中的“/”标识,如“windows/shell/bind_tcp”是由一个传输器载荷(bind_tcp)和一个传输体载荷(Shell)所组成的,其功能等价于独立攻击载荷“windows/shell_bind_tcp”。Metasploit所引入的多种类型载荷模块使得这些预先编制的模块化载荷代码可以适用于绝大多数的平台和攻击场景,这也为Metasploit可以成为通用化的渗透攻击与代码开发平台提供了很是有力的支持。

1.4.5 空指令模块

空指令(NOP)是一些对程序运行状态不会形成任何实质影响的空操做或无关操做指令,最典型的空指令就是空操做,在x86 CPU体系架构平台上的操做码是0x90。

在渗透攻击构造邪恶数据缓冲区时,经常要在真正要执行的Shellcode以前添加一段空指令区,这样当触发渗透攻击后跳转执行Shellcode时,有一个较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算误差等缘由形成的Shellcode执行失败,提升渗透攻击的可靠性。Metasploit框架中的空指令模块就是用来在攻击载荷中添加空指令区,以提升攻击可靠性的组件。

1.4.6 编码器模块

攻击载荷模块与空指令模块组装完成一个指令序列后,在这段指令被渗透攻击模块加入邪恶数据缓冲区交由目标系统运行以前,Metasploit框架还须要完成一道很是重要的工序——编码(Encoding)。若是没有这道工序,渗透攻击可能彻底不会奏效,或者中途就被检测到并阻断。这道工序是由编码器模块所完成的。

编码器模块的第一个使命是确保攻击载荷中不会出现渗透攻击过程当中应加以免的“坏字符”,这些“坏字符”的存在将致使特殊构造的邪恶数据缓冲区没法按照预期目标彻底输入到存有漏洞的软件例程中,从而使得渗透攻击触发漏洞以后没法正确执行攻击载荷,达成控制系统的目标。

典型的“坏字符”就是0x00空字节,在大量漏洞所在的字符串操做函数中,输入字符串中的空字节会被解释为字符串的末尾,这样会将后面内容进行截断,从而使得攻击载荷没有完整地被运行,致使攻击失败。此外还有一些渗透攻击场景中,网络输入必须经过明文协议进行传输,从而须要攻击载荷的内容都是可打印字符,甚至于字母与数字字符,这时除了这些可接受字符以外的所有字符,对这个渗透攻击场景而言,就全落入了“坏字符”的范畴了。

每一个渗透攻击模块根据它的漏洞利用条件与执行流程会有多个不一样的“坏字符”,渗透代码开发者须要进行测试并将它们标识出来,在Metasploit的渗透攻击模块中存在一个BadChars字段,专门用来列出须要避免的“坏字符”列表,让Metasploit选择编码器对攻击载荷进行编码时可以绕开这些“使人崩溃”的家伙们。

编码器的第二个使命是对攻击载荷进行“免杀”处理,即逃避反病毒软件、IDS入侵检测系统和IPS入侵防护系统的检测与阻断。经过各类不一样形式的编码,甚至是多个编码器的嵌套编码,可让攻击载荷变得面目全非,避免载荷中含有一些安全检测与防护机制可以轻易识别的特征码,从而可以达到“免杀”的效果。

固然,“杀”与“免杀”像“矛”和“盾”同样,永远处于不停对抗博弈的过程当中,一些新的编码器和编码技术发布以后,反病毒公司与安全厂商也会随之研发可以应对这些技术,从而对编码后的攻击载荷进行有效检测的技术方法,而后安全社区的黑客们也会针对安全厂商的检测技术发掘它们的弱点,并开发出新的编码技术。这一过程构成了安全社区中永恒的攻防技术博弈,而这也是这个技术领域最具魅力的地方。

另外值得一提的是,采用编码器对攻击载荷进行编码以后,每每会形成编码后载荷体积增大,而每一个渗透攻击模块可以植入的邪恶缓冲区大小是受到漏洞触发条件限制的(一般在渗透攻击模块的Space字段中指明),所以Metasploit在自动为攻击载荷选择编码器进行编码时,可能会找不出合适的编码器,既可以将编码后的载荷大小控制在空间限制以内,又要彻底避免出现“坏字符”,这种状况下会出现“No encoders encoded the buffer successfully”错误,这可能让你摸不着头脑,难道那就一筹莫展了吗?

如今告诉你Metasploit的解决之道。还记得前面提到过的分阶段植入攻击载荷模式吗?选择一个传输器和一个传输体配对构成的攻击载荷,可以以短小精悍的传输器来避免编码以后超出空间限制,而后在运行传输器载荷以后就再也不受到空间大小的约束,就可无拘无束地下载执行你所任意指定的传输体攻击载荷了。

1.4.7 后渗透攻击模块

后渗透攻击模块(Post)是Metasploit v4版本中正式引入的一种新类型的组件模块,主要支持在渗透攻击取得目标系统远程控制权以后,在受控系统中进行各式各样的后渗透攻击动做,好比获取敏感信息、进一步拓展、实施跳板攻击等。

正如前面已经提到的那样,后渗透攻击模块将替代Meterpreter和Shell攻击载荷中的一些扩展脚本,完成在目标系统上进一步攻击功能的组件代码。后渗透攻击模块须要经过Meterpreter或Shell控制会话加载到目标操做系统平台上运行,所以目前Metasploit框架中是按照操做系统平台来组织此类模块的,v4版本支持Windows、Linux、Mac OS X、Solaris平台,及Multi跨平台的一些应用软件信息搜集。如今支持最完善的Windows平台上,已有的后渗透攻击模块包括敏感信息搜集、键击记录、本地特权提高以及本地会话管理等。

在后渗透攻击阶段,Metasploit框架中功能最强大、最具发展前景的模块是Meterpreter,Meterpreter做为能够被渗透攻击植入到目标系统上执行的一个攻击载荷,除了提供基本的控制会话以外,还集成了大量的后渗透攻击命令与功能,并经过大量的后渗透攻击模块进一步提高它在本地攻击与内网拓展方面的能力。

本书将在第9章全面展现Meterpreter所具备的功能,以及对后渗透攻击阶段的支持能力。

1.5 安装Metasploit软件

1.5.2 在Windows操做系统上安装Metasploit

Metasploit在Windows操做系统上的安装很是简单,Metasploit已经为Windows用户提供了很好的支持,能够从Metasploit主站的下载页面中获取到Full版和Mini版的安装包。

在遇到问题后经过搜索引擎查找,看别人是否碰见过相同问题,并找到他们成功的解决方法,这是很是有效的一种手段,你们必定要掌握。可是要注意的是:

1)有些问题搜索中文页面可能找不到,但能够搜索英文页面会找获得,毕竟国内安全圈的技术人员数量要比全世界的少不少,有些工具和技术也可能不多有国内的技术人员去实践。

2)还有不少问题多是第一个遇到,这时候就靠本身经过实践去解决了。固然能够在一些相关的邮件列表和社区交流渠道中询问,但最终仍是要靠本身的能力去解决。

3)当你解决一个别人没遇到的问题后,最好可以在社区中分享你的经验,这才是“黑客之道”。

Metasploit框架安装完成以后,能够在菜单项中的Metasploit Update来获取Metasploit的更新模块与特性。在执行UAC控制的Windows 7系统上,须要以管理员权限执行Metasploit Update才能进行正常更新。安装完成以后,就能够在菜单项中一样以管理员权限执行“Metasploit Console”,来使用Metasploit框架。

在Windows上,绝大多数的Metasploit框架特性都可以正常使用,除了依赖于原始套接字的SYN Scan、pSnuffle等模块,依赖于Lorcon2的一些Wi-Fi模块等,而须要绑定到139或445端口上的smb_relay模块,则须要特殊配置后才能使用。

1.5.3 在Linux操做系统上安装Metasploit

因为Metasploit框架所须要的Ruby解释器、RubyGems、Subversion和一系列依赖软件在不少Linux发行版默认安装中并不支持,所以经过源码安装Metasploit很是烦琐,感兴趣的读者请参考https://community.rapid7.com/docs/DOC-1405。Metasploit提供一个通用二进制安装包,能够比较便捷地在Linux环境中安装Metasploit。该安装包对如下32位或64位Linux发行版都支持。

Red Hat Enterprise Linux

Fedora and Fedora Core

CentOS

Slackware

Ubuntu

Arch Linux

能够从Metasploit主站的下载页面根据体系结构(32位或64位)来选择下载彻底版的Linux二进制安装包,而后运行以下命令:

$ chmod +x framework-*-linux-full.run

$ sudo ./framework-*-linux-full.run

$ hash –r

安装过程结束以后,就能够在系统路径上使用全部的Metasploit框架命令了。如以root权限运行msfupdate进行Metasploit更新等。

经过上述过程安装完二进制依赖软件包以后,还须要确认这些依赖软件在你的Linux平台上是可用的。首先,从主站下载页面下载UNIX源码包,而后执行以下命令:

$ tar xf framework-*.tar.gz

$ sudo mkdir -p /opt/metasploit3

$ sudo cp -a  msf3/ /opt/metasploit3/msf3

$ sudo chown root:root -R /opt/metasploit3/msf3

$ sudo ln -sf /opt/metasploit3/msf3/msf* /usr/local/bin/

而后使用最新的Subversion客户端软件,经过checkout命令检查最新的Metasploit框架源码:

$ sudo rm -rf /opt/metasploit3/msf3/

$ sudo svn checkout https://www.metasploit.com/svn/framework3/trunk /opt/metasploit3/msf3/

如今,使用如下语句测试Ruby环境是否可用:

$ ruby /opt/metasploit3/msf3/msfconsole

若是MSF终端可以正常启动,并无任何报警,那么你的Ruby可以支持Metasploit框架的基本功能了。

接下来该测试RubyGems了,从http://www.rubygems.org/下载最新版本的tar包,并执行如下命令:

$ tar -xf rubygems-*.tar.gz

$ cd rubygems*

$ sudo ruby setup.rb install

经过以下指令来验证RubyGems是否正常工做:

$ ruby -rrubygems -rreadline -ropenssl -rirb -rdl -riconv -e 'p :OK'

1.6 了解Metasploit的使用接口

为了适应不一样的用户使用需求,Metasploit框架提供多种不一样方式的使用接口,其中最直观的是msfgui图形化界面工具,而最流行且功能最强大是MSF终端,此外还特别为程序交互提供了msfcli命令行程序,在v3.5版本以前还提供过基于Web界面的msfweb接口。

1.6.1 msfgui图形化界面工具

msfgui图形化界面工具是Metasploit初学者最易上手的使用接口,轻松地单击鼠标,输入目标IP地址,就可使用Metasploit强大功能渗透进入目标系统。

在Back Track命令行终端中运行msfgui启动Metasploit图形化界面工具,将显示如图1-4所示的msfgui界面。

为了演示Metasploit的使用方法,这里将针对Linux Metasploitable靶机环境Samba网络服务的usermap_script安全漏洞进行渗透攻击,以得到对靶机的远程控制权。

从msfgui菜单项中选择Exploits→multi→samba→usermap_script,将显示对该渗透攻击模块进行参数配置的对话框,如图1-5所示,攻击目标Target为默认的自动探测,并在下拉框中选择一个攻击载荷,这里咱们选择bind_netcat,该攻击载荷运行后将在目标主机上启动“瑞士军刀”netcat并绑定Shell到一个开放端口上,而后咱们在RHOST参数框中填入攻击目标主机,即Linux Metasploitable的IP地址(10.10.10.254),单击Run exploit按钮以后,就触发了渗透攻击的过程。

1.6.2 msfconsole控制台终端

MSF终端是Metasploit框架中功能最强大、最丰富且支持最好的用户接口,虽然对于新人而言,较图形化界面上手稍微要困难一些,一旦了解MSF终端的命令语法,你将很快体验到它的强大功能与操做便利。与图形化界面等其余Metasploit用户接口相比,MSF终端拥有以下优点:

提供一站式的交互接口,可以访问Metasploit框架中几乎每一项功能与特性,并且能够直接执行外部的Shell命令和第三方工具(如Nmap等),这使得你能够在MSF终端中完成绝大部分的渗透测试工做。

提供很是便利且符合Linux操做习惯的交互,支持命令的tab补全,用户配置的保存与装载等功能,在用户熟悉该交互环境时能够提供很是高效的操做接口。

MSF终端也是目前更新最及时,而且最稳定的Metasploit用户接口。

1.6.3 msfcli命令行程序

  • msfcli命令行程序是Metasploit框架为脚本自动化处理及与其余命令行工具互操做而设计的一种用户接口,它能够直接从命令行Shell执行,并容许你经过Linux的管道机制将结果输出重定向给其余程序进行处理。当你须要针对一个网络中的大量系统进行同一安全漏洞的渗透测试与检查,msfcli将是特别适用的Metasploit框架调用接口,你能够针对一个系统配置好msfcli的命令行参数,而后写一段简单的Shell脚原本对一组IP地址进行依次测试,并将结果输出到日志文件中以供查询和进一步分析。

  • 相比较于MSF终端,msfcli命令行程序的弱点在于所支持的功能特性较少,如尚不支持将结果输入到后台数据库中,同时只能处理一个Shell从而使得对客户端攻击不太实用,以及不支持MSF终端中的高级自动化渗透特性(如db_autopwn等)。

1.7 小结

要点以下:

  • 渗透测试(Penetration Testing)是一种经过模拟恶意攻击者的技术与方法,挫败目标系统安全控制措施,取得访问控制权,并发现具有业务影响后果安全隐患的一种安全测试与评估方式。渗透测试具备两种基本类型:黑盒测试与白盒测试,结合二者的称为灰盒测试。

  • 要想完成一次质量很高的渗透测试过程,渗透测试团队须要掌握一套完整和正确的渗透测试方法学。目前业界流行的渗透测试方法学有OSSTMM、NIST SP800-4二、OWASP Top 十、WASC-TC和PTES等。

  • 渗透测试主要包括前期交互、情报搜集、威胁建模、漏洞分析、渗透攻击、后渗透攻击和报告7个阶段。

  • 渗透测试流程中最核心和基本的内容是找出目标系统中存在的安全漏洞,并实施渗透攻击。

  • Metasploit是一个开源的渗透测试框架软件,也是一个逐步发展成熟的漏洞研究与渗透代码开发平台,此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境。

  • Metasploit是由HD Moore于2003年建立的开源项目,2004年发布Metasploit v2版本并被黑客社区普遍接受,2006年以黑马姿态跻身SecTools最受欢迎安全工具五强之列,2007年发布了以Ruby语言彻底重写后的v3版本,目前最新的v4版本是2011年发布的,截至2013年4月,最新版本是v4.6.0。

  • Metasploit框架中最重要的是辅助模块、渗透攻击模块、后渗透攻击模块、攻击载荷模块、空指令模块和编码器模块这六类模块组件,提供了多种使用接口和一系列的功能程序,支持与大量第三方安全工具进行集成应用。

  • Metasploit最方便的使用平台是Back Track,功能最强大的使用接口是MSF终端。

相关文章
相关标签/搜索