网络安全——网络渗透测试(网络扫描)

网络渗透测试

网络已经成为信息化社会不可或缺的基础设施,任何单位、机构甚至个人均可组建不同规模的网络。由于所组建的网络结构、功能各不相同,其安全性参差不齐,致使网络安全事件时有发生,网络攻击愈演愈烈,攻击行为已经从零碎的小规模攻击发展成为大规模的、分布式和手段多样化的攻击。例如,网络嗅探、端口扫描、漏洞扫描、口令破译、会话劫持、缓冲区溢出、拒绝服务/分布式拒绝服务(DoS/DDoS)​、恶意代码、SQL注入攻击、网站假冒、网络钓鱼,以及社会工程方法等。这使得人们不得不更为认真地审视网络的安全态势及改善方法。能否在网络组建之后、安全事件发生之前,通过测评来确保网络的安全性呢?渗透测试(Penetration Test)就是出于增强网络安全性这一目的,通过检测、分析、展现潜在的安全问题并帮助制定安全策略,以降低安全风险而提出的一种技术手段。本章主要讨论网络渗透测试方法学及其比较典型的渗透测试手段,旨在通过渗透测试,由"知彼"做到"知己"​,发现使用传统检测方法无法发现的网络攻击途径、方法和技术弱点,从而在网络安全漏洞、脆弱点被攻击者利用之前,对其未雨绸缪地进行修复、防护和加固。

1、渗透测试方法论

网络安全是当今社会普遍关注的重要问题之一。由于人们越来越依赖不同形式的网络技术、各种类型的网络系统和设备,以及数字产品和移动终端,因而对网络系统和设备的实际安全日益关注。为了应对过去、现在和将来网络安全事件的发生,例如身份盗用、信息窃取、服务中断,甚至网络犯罪,人们不得不对这些潜在的安全性问题进行测试、评估和修复,于是渗透测试方法论应运而生。渗透测试方法论所研究的主要内容是如何检测、分析、呈现网络安全问题,并推荐安全策略,以降低因安全事件引起的潜在风险。

1.1、渗透测试的定义

渗透测试并没有一个统一的标准定义,一些国际网络安全组织达成共识的通用说法是:渗透测试是渗透测试者通过模拟恶意黑客的攻击,来评估网络系统安全性的一种方法。渗透测试过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析。这个分析是从一个恶意攻击者可能存在的位置进行的,并且从这个位置有条件地主动利用安全漏洞。换言之,渗透测试是指渗透测试者在不同的位置(比如从内网、外网等位置)模拟黑客的各种网络攻击手段及工具,对所授权的某特定网络进行攻击测试,以期发现网络系统存在的漏洞及潜在的安全威胁,评估其安全性。测试结束后,针对网络系统的安全态势形成渗透测试报告,包括应进一步采取的安全策略,提交给网络所有者。

关于网络渗透测试的这种描述,强调的是基于增强网络安全性的目的,在得到授权的前提下,通过借鉴利用与恶意黑客相同的技术、策略和手段,对给定组织机构的网络安全问题进行检测和评估。在网络渗透测试中,常会涉及如下专业术语。

1.1.1、渗透测试者

渗透测试者通常指由组织机构在其内部或者外部实体(例如专门承担网络测试的职业机构)聘任的、从事网络安全渗透测试工作的专业技术人员。渗透测试者首先获取授权,然后利用与恶意黑客(攻击者)相同的技术、策略和手段,对给定组织机构的网络进行安全性调查、测试、分析和评估。渗透测试者与恶意黑客的区别在于目的,以及是否获得所评估网络系统所有者的法律授权许可。此外,渗透测试者不得向除用户指定人员之外的任何人透露测试结果。为保障双方权益,双方必须签署一份书面合同。合同规定哪些行为是违规的,以及在测试结束时,渗透测试者应当提交的内容。这么做既可以保护组织机构的信息财产,又可允许渗透测试者访问内部数据资源。

在实际渗透测试工作中,也常用渗透测试人员、道德黑客和白帽黑客等来称呼来指代渗透测试者。这些称呼也是恰当的,描述的是同一类人员。

1.1.2、黑客

在有些场合,​"什么人才算是黑客"一直是一个存在不同认识的话题,甚至有时还会将渗透测试者的角色误解为其职责之一。为避免混淆,必要时可将其描述为"恶意黑客"​,以区分其意图和技能。其实,黑客一词已有很长的历史。早期常指网络技术高超的人,其特征是对新技术具有好奇心和热情,并乐意花费时间探索网络系统内在工作机理和局限性。因此,黑客一词在网络技术行业具有双重含义,既可以描述软件程序员,也可以描述那些未经许可访问计算机和网络的人。随着网络技术的发展,黑客的技能也在变化。当今,互联网包括Wi-Fi、蓝牙、智能移动终端等,使得黑客能够比以往任何时候更加容易地展示他们高超的网络入侵技能,并形成不可抗拒的利益诱惑。起初在互联网上,黑客的许多入侵多是恶作剧,如篡改网页、窃听信息或类似的行为,但后来攻击的恶劣程度开始严重起来,使得黑客与网络犯罪联系起来。从法律上可以很清楚地对黑客进行分类:凡是盗窃机密信息、盗用服务、未经授权入侵网络、发布和/或传播非法信息、欺诈、编写传播恶意代码、未经授权更改数据信息、中断服务、网络恐怖主义等均视为恶意的黑客行为。

1.1.3、渗透测试的方法

与网络攻击相比,网络渗透测试有两个显著特点:①渗透测试是一个渐进的、持续的、兼具深度和广度的漏洞发现过程;②渗透测试是在获取到被测系统授权并且尽可能不影响业务系统正常运行的前提下,模拟攻击者使用的攻击方法进行的测试,通常有白盒测试、黑盒测试和灰盒测试3种方法之分。

1)黑盒测试

黑盒测试是指测试者对测试目标网络内部拓扑一无所知的情况下,模拟真实的入侵,对用户所需测试的网络系统或产品进行渗透测试。黑盒测试是一种最为接近外部攻击状况的测试方法,有时也称为外部测试。测试人员进行测试时,仅根据系统的功能和需求,而无须了解其内部实现细节。黑盒测试的重点是测试系统的输入和输出,以验证其行为是否符合预期。在黑盒测试中,测试人员不知道系统的内部结构、代码或逻辑,仅通过系统的接口和功能进行测试。测试人员通过设计测试用例,基于系统的规格说明、需求文档或用户手册,输入各种有效和无效的数据,观察系统的响应和输出结果,然后查验系统是否能够按预期工作。黑盒测试还能够对目标系统内部安全团队的检测与响应能力做出评估。

在测试结束之后,要对所发现的漏洞、安全风险及其业务影响等进行安全性评估,并形成测试总结报告。

黑盒测试是比较费时费力的,同时需要渗透测试者具备较高的技术水平。在网络安全业界,黑盒测试通常备受推崇,因为它能比较逼真地模拟一次真正的网络攻击。

2)白盒测试

白盒测试是指在了解掌握用户组织所有网络资产信息的情况下进行的一种渗透测试。白盒测试也称为内部测试。进行白盒测试时,测试人员了解系统的内部结构、代码和逻辑,可以直接访问系统的源代码,能够以最小的代价发现和验证系统中最严重的安全漏洞。白盒测试能够发现较多的网络系统漏洞与弱点,可为用户提供更多的具有实用价值的信息。

白盒测试的优势在于发现和解决安全漏洞所需花费的时间和代价要比黑盒测试少得多;缺点是无法有效地测试用户组织的应急响应情况,也无法判断安全防护措施的功效。如果时间有限或是特定的渗透测试环节(如信息收集)并不在测试范围之内,白盒测试是一种比较好的测试方式。

3)灰盒测试

灰盒测试是一种介于白盒测试与黑盒测试之间的测试方法。在灰盒测试中,测试人员部分了解系统的内部结构和代码,但不完全掌握所有实现细节。与白盒测试不同,灰盒测试中的测试人员通常只了解网络系统的部分源代码、文档和设计规范等信息。他们利用这些有限的信息设计测试用例,验证系统的正确性、功能和性能。灰盒测试能够同时发挥两种基本类型渗透测试方法的各自优势,但需要渗透测试者能够根据对目标系统所掌握的有限信息选择评估整体安全性的最佳途径。在采用灰盒测试方法的外部渗透场景中,需要渗透测试者从外部逐步渗透进入目标网络,若熟悉目标网络的底层拓扑与架构,将有助于决策攻击途径与方法,获得更好的渗透测试效果。

1.1.4、网络渗透测试常用工具

网络安全渗透测试是一种合法且符合道德规范的活动,旨在评估网络系统的安全性并发现潜在的漏洞和弱点,所使用的渗透测试手段及工具与黑客攻击工具在功能上并无本质区别,区别仅在于使用目的。作为一名合格的网络渗透测试者,并且已经获得合法授权,有许多工具可用于执行网络安全渗透测试的各种任务。例如,可选用表所示的某些网络攻击工具进行网络渗透测试,其中几个常用工具的主要作用如下。

  • WireShark:一款流行的网络协议分析器,用于捕获和分析网络流量,侦测网络攻击和异常流量。
  • Nmap:一个具有命令行界面的网络扫描器,用于端口扫描和网络映射,确定哪些服务运行在哪些端口,并且能够推断计算机运行着哪种操作系统,功能非常强大。
  • Netcat:被称为"瑞士军刀",主要用于远程控制/正方向shell、telnet/获取系统banner信息、端口扫描、传输文件和目录、加密传输文件等。
  • Metasploit Framework(MSF):一种广泛使用的开源渗透测试工具套件,附带数千个已知的软件漏洞,并持续更新。该工具可以用于信息收集、漏洞探测及利用等渗透测试的全流程。在Kali Linux中自带Metasploit工具。
  • Pocsuite3:一款基于GPLv2许可证开源的远程漏洞测试框架。Pocsuite3采用Python3编写,支持验证、利用及shell三种模式,可以指定单个目标或者从文件导入多个目标,使用单个PoC或其集合进行漏洞的验证或利用;可以使用命令行模式进行调用。除此之外,还包含了一些基本的功能,如输出结果报告等。
  • Burp Suite:一种用于Web应用程序渗透测试的综合工具套件,包括代理服务器、漏洞扫描工具、攻击工具等。
  • Hydra:一种快速的网络登录密码破译工具,支持各种协议(如SSH、FTP、Telnet)的穷举攻击。
  • Aircrack-ng:一款用于Wi-Fi网络的安全评估和渗透测试工具,包括破解WEP和WPA/WPA2的加密密码。
  • John the Ripper:一种密码破译工具,可用于测试弱密码和口令哈希的强度。
  • Nessus:一种全面的漏洞扫描工具,用于发现系统中的已知漏洞和弱点。

这些网络渗透测试工具只是一小部分,根据具体的测试渗透需求,还有许多其他工具可供选择。重要的是再次强调,在进行渗透测试时,始终要遵守法律和道德准则,获得适当的授权,并且仅用于评估和提高系统的安全性。

1.2、组建一个渗透测试实验室

网络渗透测试是一种对计算机系统和设备、网络信息系统、网络安全性具有潜在危害的攻击行为,只是其目的与恶意攻击不同。作为一个渗透测试者,不能在日常运行的网络上公开演练自己的渗透测试技能。因为未经授权攻击(公共)目标系统是非法的。因此,需要一个可以进行软件测试和演练网络攻击而不会引发问题的实验环境。

拥有自己的渗透测试实验室后,可以在不同的配置和环境下尽情演练。在这种实验室中可以搭建多种不同的攻击环境,这将为渗透测试工作带来立竿见影的效果。在自己的实验室中进行渗透测试的另一个优点是,可以无所拘束地尝试所有希望实验的攻击工具和技术,而不必担心是否会导致灾难性后果,例如系统崩溃或摧毁目标系统(的确有可能)​。因为在实验室环境中,可以很容易地恢复和重建网络环境,然后再尝试其他测试方法。如果不拥有这样的实验环境,可能就没有那么容易。用于不同渗透测试目标的实验室环境会有所不同,有多种方法可以构建,但必须满足特定的硬件和软件要求,例如内存、处理器、网络配置及接入等方面的要求,以便使网络系统能够正常运行。

1.2.1、组建一个物理网络实验室

搭建、配置一个网络渗透测试实验环境是进行网络攻击技术实验的基础性工作。若条件允许,可以组建一个真实的物理网络实验室。一般说来,网络渗透测试实验环境应该是一种具备交换结构的局域网,其拓扑结构如图所示。在这种交换网络中,实验主机之间、实验组内各主机互联互通,并且实验主机可以访问应用服务器提供的各种服务,包括Web服务器、FTP服务器和DNS服务器等。

在该实验网中,应该具有两个以上独立的主机操作系统,如Windows、Linux操作系统,且任意两个操作系统可以通过以太网进行通信。同时在主机上安装相关的工具软件及程序语言编译环境,编程语言可选用Python、Java、Visual C++6.0等。为了能够捕获网络中的一些数据包并加以分析,应在主机上安装捕获数据包的软件,如常用的WireShark等。同时,还需要安装网络模拟器,如华为公司的图形化网络仿真平台eNSP等。

注意:网络渗透测试实验中的许多操作涉及网络攻击、入侵等操作,在做测试实验的过程中,主机上不要加载任何防火墙或者防病毒监控软件。

1.2.2、利用虚拟机建立一个虚拟实验环境

在许多情况下,由于物理条件的限制,难以组建实际的物理网络。另一个建立网络渗透测试实验环境的常用方法,是利用虚拟化技术构建虚拟实验环境。通常是采用在一台计算机上安装一套操作系统,然后利用虚拟机工具软件虚拟出几套操作系统。常用的操作系统,如Windows、Linux和Android等,以及常见的各种网络攻击工具,都可以快速简便地安装在虚拟机环境中。

1.2.3、安装虚拟机操作系统软件

VMware虚拟机的安装过程比较简单。首先,在一台计算机上安装一套操作系统,例如Windows10,然后安装虚拟机软件VMware。在Vmware官网下载Workstation 16 Profor Windows版本的VMware Workstation 16.0.0安装程序,并运行该安装程序。之后,按照系统的默认选项进行设置,即可完成安装。为方便实用,一般在VMware下虚拟出3套操作系统,例如Windows 7、Windows Server2012(或者Windows Server 2016)和Kali Linux或者Ubuntu。其中,Windows 7、Windows Server操作系统主要作为网络安全渗透测试的攻击对象(靶机)​,KaliLinux作为攻击机。虚拟机上的操作系统可通过虚拟网卡与实际主机的操作系统进行通信。在本示例中,物理主机上安装的是Windows 10操作系统。为了成功完成网络安全攻击与防御技术实验,虚拟机上的Windows操作系统不安装 任何补丁。在实验过程中,主机和虚拟机上都不要加载任何防火墙或者防病毒监控软件。下面特别介绍Kali Linux。

Kali Linux是一个用于网络渗透测试和安全审计的操作系统,是专门为网络分析人员、渗透测试人员设计的。它预装了600多个渗透测试和网络安全工具,且完全免费和开源,可从官方网站下载Kali Linux 64bit VMware版本,并安装到虚拟机中。Kali Linux的安装过程较为简单,对系统硬件的需求很小,几乎现在所有的计算机都可以满足其运行需求。

Kali Linux的操作使用方法较为简单。启动Kali Linux之后,可以看到一个与Windows相类似的图形化操作界面,该界面的上方有一个菜单栏,左侧有一个快捷工具栏。单击菜单上的"应用程序"​,可以打开一个下拉菜单,所有的工具按照功能不同分成13类,包括信息收集、漏洞分析、Web应用程序分析、数据库评估、密码攻击、无线攻击、逆向工程、漏洞利用工具、嗅探和欺骗、后渗透、取证、报告工具、社会工程学工具和系统服务等。当选中其中一类时,该类所包含的软件就会以菜单的形式展示出来,如图7.2所示。如果希望看到所有应用程序,可以单击左侧快捷工具栏最下方的显示程序按钮。这时直接双击图标就可以启动该工具。另外,也可以使用终端命令来打开该工具,具体使用方法参考Kali Tools官网。

Kali Linux的主要功能是网络"渗透测试和安全评估"​,当然它还具有许多其他用途,包括网络监控、取证分析、无线网络监控等,而且还能够安装在多种嵌入式设备和移动平台上使用。

1.3、渗透测试的基本流程

为了可靠地获得最完整和最有效的渗透测试结果,渗透测试需要有一套测试流程和方法。实施一次网络渗透测试,其过程与实施一次网络攻击大致相同,是非常复杂多变的,可以说没有固定的模式。一般说来,一次成功的渗透测试需要经过获取授权许可、信息收集、漏洞探测及验证、数据分析、渗透目标、维持访问、隐藏痕迹、推荐安全策略并输出测试报告等步骤。

1.3.1、获取授权许可

渗透测试是属于网络安全风险管理流程的一个重要组成部分,旨在提供网络安全问题的真实证据。无论是对系统内部还是外部进行风险评估,测试的项目可能包括应用程序、基础设施、通信链路、网络设备、安全措施及人员心理因素等,而且在许多情况下,渗透测试对目标系统而言是一种具有破坏性的攻击行为。因此,必须首先获取组织机构的授权许可,且应通过签订书面合同来明确许可范围。合同内容一般应包括:①要测试评估的系统或评估对象;②预知的安全风险;③测试时间、进度;④被测试目标系统的基本情况;⑤发现安全问题时应采取的措施;⑥测试结束时可交付的成果。

1.3.2、信息收集

知己知彼,方能百战不殆。信息收集是实施网络渗透测试的前期工作,通过这一环节可以找到对后续测试有用的信息。信息收集的方法很多,通常可以分为被动信息收集和主动信息收集两种类型:被动信息收集是指通过搜索引擎或者社交等方式,对目标系统资产信息进行提取,而不需要直接与目标系统进行互动或提出明确的数据请求。这种方式通常用于收集公开可获得的信息,而非秘密或私人数据。一些常见的被动信息收集方法包括DNS解析、子域名挖掘、网络爬虫爬取等。主动信息收集是指通过直接与目标系统进行互动或采取主动行动来获取信息。这种方式通常需要与目标系统进行交流、提出请求或进行调查。任何要求主动接触目标的方法都属于主动收集。

进行信息收集时,首先要与用户交流,确定目标的范围(如IP地址、域名、子网等)​、渗透程度、需求(如Web系统漏洞、业务逻辑漏洞)等,并制定详细的测试方案。然后收集目标系统的相关信息。这与攻击者在实施攻击时相同,可能要花费大量时间和精力去侦察目标,搜集目标系统的相关信息。例如扫描目标系统、探测网络拓扑、搜集目标主机的漏洞信息等。渗透测试者要选择弱点较多或价值较高的目标系统作为测试对象。可收集的目标信息包括:

  • (1)系统信息:目标主机的域名,IP地址、操作系统及版本、数据库系统及版本、网站类型、是否开启了DNS、邮件服务、WWW等;安装了哪些应用软件等。
  • (2)配置信息:目标系统是否使用缺省用户名和口令,是否禁用默认的系统管理员(SA)账号;是否限制根用户(root)登录;是否限制远程桌面等。
  • (3)人员信息:目标系统用户域名注册人员信息、管理员信息及用户信息等,包括QQ号、手机号、身份证号,以及爱好及特长等。
  • (4)漏洞信息:目标系统中有漏洞的软件名称、服务名称等。
  • (5)安全措施:目标系统所使用的安全设备、产品、系统软件等。
1.3.3、漏洞探测及利用

通过利用系统漏洞、密码破译、社交工程等手段,获得对目标系统有价值的信息后,要进一步获取目标系统未授权访问权限,探测各种漏洞,并利用漏洞实施入侵。

  • (1)漏洞探测:网络系统受到安全威胁的根本原因是系统中存在各种漏洞。漏洞探测就是利用收集到的各种信息探测是否存在漏洞。例如,使用漏洞扫描器寻找系统漏洞、检查Web服务器漏洞(配置问题)、Web应用漏洞(开发问题)等。
  • (2)漏洞验证:对探测发现的潜在漏洞进行验证。可以尝试猜测登录账号、口令等。常用的漏洞包括系统、应用软件、业务系统漏洞,通信协议漏洞等。验证方法包括弱口令检测、协议合规性测试等。
  • (3)获取目标访问权限:一般用户权限有限,测试者需要获取更高权限。提升权限的手段包括:窃听管理员口令,通过分析存储口令的文件获取管理员口令,利用漏洞提升权限(比如默认配置错误、缓冲区溢出等),植入木马等。
  • (4)扩散和控制:一旦取得对目标系统的控制,还应尽可能扩散到其他系统和网络中,以进一步扩大攻击范围和影响力。这可以通过横向移动、利用脆弱的网络连接或攻击其他相关系统来实现。
  • (5)操作和滥用权限:利用获取的访问权限,进行数据窃取、损坏、篡改或滥用等活动。这可能包括访问敏感信息,窃取认证凭证,进行金融欺诈、数据勒索等。
1.3.4、数据分析

对搜集到的目标信息进行数据分析,为下一步实施渗透测试做准备。数据分析包括以下手段及方式。

  • 绕过安全防御机制、防火墙等设备。
  • 定制渗透路径,寻找目标系统入侵突破口。
  • 绕过检测机制、流量监控、杀毒软件、恶意代码检测(免杀技术)等,躲避入侵防御系统(IDS)检测。
1.3.5、渗透目标

完成目标信息收集,并探测到目标系统的入口和漏洞后,即可针对目标系统展开实际的攻击测试。这一步主要是利用系统漏洞或弱点攻陷目标系统。实施网络攻击的目标包括:入侵目标主机、网络、服务;修改、删除、窃听数据;修改用户账号等。在这一环节用到的攻击手段可能包括:密码破译;流量嗅探;会话劫持;欺骗攻击;拒绝访问;SQL注入等。

1.3.6、维持访问

维持访问是指在获取了目标系统的访问权限后,对被攻击系统所开启的入口继续保持访问权限。一次成功的入侵通常要耗费攻击者的大量时间与精力,为了长期保持对已攻陷系统的访问权,在退出之前,需要提升权限并在系统中创建一些后门,以方便再次入侵。例如在系统中植入后门、隐藏或修改日志、篡改安全配置等,以便长期控制和操控被攻击系统。创建后门的具体方法有:开放不安全服务;修改配置文件,如系统启动文件、网络服务配置文件等;放宽文件许可权;修改系统的源代码,安装各种木马;创建隐蔽通道;安装嗅探器等。

1.3.7、隐藏痕迹

在成功获得系统最高管理员权限并入侵之后,攻击者可以随意修改系统中的文件,或再次进行信息摄取。然而,一旦入侵系统,就必然会留下痕迹。因此,在入侵系统之后,攻击者大多都会采取隐藏技术来消除自己的攻击行为或痕迹。隐藏痕迹的具体方法包括:

  • (1)隐蔽攻击源:隐蔽攻击者的网络位置(如IP、域名等),常用的手段是借助跳板主机或者代理服务器,或者伪造用户或IP地址。
  • (2)隐蔽攻击者的行踪:常用的手段为隐藏进程、隐藏网络连接、隐藏文件等。同时,为降低被管理者发现的可能性,还应清理攻击行为的痕迹。掩踪灭迹的常见方法包括:修改日志文件中的审计信息;修改时间戳,使日志文件数据紊乱;删除或停止审计服务进程;干扰入侵检测系统正常运行;修改完整性检测标签;躲避入侵检测系统(IDS)的检测等。
1.3.8、推荐安全策略,输出渗透测试报告

渗透测试的最后一步,也是最重要的一个环节,就是记录总结渗透测试工作,根据发现的安全隐患,推荐安全策略,并形成渗透测试报告,提交给签约用户。通常,需要记录整理的数据信息包括:

  • (1)所用的渗透测试工具,包括渗透测试过程中用到的代码、概念验证(Proof of Concept, POC)、利用系统漏洞进行渗透(Exploit)等。
  • (2)收集的系统信息,包括渗透测试过程中收集到的全部信息。
  • (3)漏洞信息,包括渗透测试过程中探测到的、所利用的漏洞,以及脆弱点位置等。

然后,按照与用户确定好的内容形成渗透测试报告。一般说来,报告应从概述渗透测试的过程开始,简洁明了地记录测试期间发生的事情,严谨分析漏洞成因、验证过程及其危害,并提出改进系统安全性的安全措施、修复建议及问题解决方案。

当然,以上只是网络渗透测试的一般流程,具体操作时可能会因用户的目标系统、技术手段和威胁类型而异。网络安全风险评估和监测的目标是在网络处于不同阶段时尽早侦测并阻止攻击行为的发生。

1.4、网络渗透测试示例

在此通过一个简单的渗透测试示例,进一步阐释网络渗透测试的流程,以及一些具体渗透测试技术及方法,如信息收集、漏洞探测及利用、密码破解等。

1.4.1、明确目标

通过与用户沟通后,确定渗透测试的目的以及范围。有时用户会提供比较完整、明确的目标范围,但在多数情况下,用户所提供的渗透测试范围并不完善。例如,本示例就仅仅提供了一个主站域名(www.nj*.edu.cn)​。

1.4.2、信息收集

一般而言,在收集信息时,应从多个不同来源尽可能多地收集信息,包括:①技术信息,如操作系统信息、网络配置信息、应用程序、IP地址范围等;②管理信息,如组织机构、公司简介、招聘程序、员工信息、电话簿等;③网络信息,如网络的物理位置、网站、基础设施数据,甚至包括网络摄像头、报警系统和移动设备等。信息收集是否完善将直接影响后续渗透测试的速度及深度。要收集的信息主要包括目标的IP地址、网段、域名和端口等。

当从用户处拿到目标网站的域名后,首先要判断该域名是否存在内容分发网络(CDN)​。假如,示例公司的网站主服务器部署在A地,当有一个用户在B地访问时,由于A、B两地的地理位置相距较大,便会造成网站可用性降低。若使用了CDN的服务,CDN的中心服务器便会将在A地的网络主站服务器内容,通过中心平台下发到距离B地较近的CDN服务器中。当B地的用户访问此网站时,通过域名访问到的是CDN的服务器,从而提高网站的可用性。现阶段,大型网站多数都使用了CDN服务。实施渗透测试时,要判断目标网站是否使用了CDN服务。因为当目标网站是公司的真正网站时,若未能分辨出是真实网站还是CDN,将会导致后续的渗透测试全部实施到了CDN服务器上。判断目标网站是否使用了CDN,比较简便的方法是利用ping测速工具对域名进行监测。如果在不同的地理位置去ping网站域名,所得到的IP地址必然是不一样的。如果查出来的IP地址数量大于一个,说明这些IP地址并不是真实的服务器地址。当查出来的是2~3个IP地址,同时这2~3个IP地址属于同一个地址的不同运营商时,很可能这2~3个IP地址都是服务器的出口地址,而该服务器部署在内网中,使用了不同运营商的映射进行互联网访问。如果有多个IP地址且分布在不同的地域时,基本可以确定该网站使用了CDN服务。实施渗透测试时需要绕过CDN。绕过CDN获取网站真实IP信息的方法较多,例如:

  • (1)通过内部邮箱获取网站真实IP。多数情况下,邮件服务系统都是部署在公司内网上,并且没有经CDN解析。可以通过目标网站的邮箱注册或订阅邮件等功能,让网站的邮箱服务器给自己发送邮件,查看邮件的原始邮件头可以获得包含邮件服务器的IP地址。
  • (2)查看域名的历史解析记录。
  • (3)子域名地址查询。CDN服务是收费的,有些网站线上查询工具为节约开支,往往只会为网站的主站和部分流量较大的子站购买CDN服务。这时只查看子站或者旁站的IP地址,可猜测出网站的真实IP地址。
  • (4)利用nslookup查询。通过查询域名的NS、MX、TXT记录,有可能找到真实目标网站的IP地址。

搜集完网站的真实IP地址后,还需要对网站域名的whois信息进行收集。whois的查询方法可以通过命令行接口进行查询;也可以利用线上查询工具进行查询。

1.4.3、漏洞探测

在搜集完所需信息之后,下一步即可进行漏洞探测。漏洞探测的目的是找出可能存在的安全威胁。如何进行漏洞探测呢?一般通过自动扫描工具结合人工操作以及之前所搜集的信息来挖掘漏洞。目前,使用较多的漏洞扫描工具包括AWVS(Acunetix Web Vulnerability Scanner)​、Nessus、AppScan等。

  • (1)AWVS是一款知名的网络漏洞扫描工具,通过网络爬虫测试网站安全、检测流行的Web应用攻击,如跨站脚本、SQL注入等,使用也较为简单。
  • (2)Nessus是一款广泛使用的系统漏洞扫描和分析软件,提供主机漏洞扫描等功能,且内含随时更新的漏洞数据库,检测速度快,准确性高。Nessus有家用和商用两个版本。
  • (3)AppScan是一款强大的应用程序及网站安全测试工具,安装在Windows系统上,可以对网站等Web应用进行自动化漏洞扫描和安全测试。
1.4.4、漏洞验证

完成漏洞探测后要进行漏洞验证,验证所发现的漏洞是否真实存在,以及对目标网络可能造成多大的危害。这一步要特别谨慎小心,对于可能造成较大危害的漏洞,要防患于未然。条件允许时最好在本地搭建一个与实际环境相同的测试环境进行验证,以免给用户造成经济损失,也可以利用公开的资源(如国家信息安全漏洞库)查找对应的历史漏洞进行分析。

1.4.5、漏洞利用

验证确实存在漏洞后要进行数据分析,分析漏洞位置以及如何利用,分析相同漏洞的案例,然后进行漏洞精准利用。漏洞利用成功之后,就打开了目标系统服务的缺口,进而获得所需要的信息,如网络架构、域控服务器、用户数据等信息。在渗透测试过程中往往一开始取得的是一个普通用户的shell,进一步操作要从普通用户权限提权至管理员或者System权限。这时需要利用系统漏洞、软件漏洞或配置不当进行提权。有许多方式方法用于提升访问权限。当成功获取目标系统的访问权限后,常需要植入后门,以便持久维持访问。例如,利用Kali Linux提供的MSF获得一个Meterpreter shell后,通过Merterpretershell可方便地进行后渗透攻击。

  • (1)在靶机上创建用户。建立会话连接后,使用如图7.3所示的几条命令可在靶机上创建用户,用户名/口令为hacker/hacke123,并将创建的用户添加到管理员组。该用户可以使用hacker/hacke123登录到靶机。
  • (2)通过persistence模块植入后门。该模块是一款使用自动安装方式的持久性后门程序,利用它可以创建注册表和文件。通过persistence-h可详细查看其命令语法。通过渗透攻击获取一个meterpreter shell后,执行如下示例指令:

其中,192.168.184.128是攻击机的IP。执行该指令后,在靶机的C: /Windows/TEMP/下创建一个vbs文件(持久脚本)​,即在靶机上植入了持久性后门。该持久性后门会自动在靶机上运行,同时添加注册表键值,让靶机在系统登录、用户登录、开机运行时,会持续不断地自动连接攻击机。成功运行后,创建一个新的会话,运行结果如图所示。

至此,一次比较完整的渗透测试可以告一段落,后续进行信息整理,编写成渗透测试报告,向用户提出有针对性的漏洞修复建议和办法。

2、网络扫描

在搜集了与目标系统相关的信息之后,即可对目标系统实施各种网络扫描。扫描是一个含义非常广泛的术语,涵盖了多种不同的技术,主要是端口扫描、系统类型探测、漏洞挖掘与利用等,其中每一种都是某种特定类型的扫描,每种扫描方法都可以有效地单独使用,若配合运用能发挥它们各自更强大的能力。

2.1、端口扫描

一般说来,在执行端口扫描之前,需要定位活动目标系统,即检测存活系统。如果在信息收集阶段获得了目标网络的IP地址范围,就有了一个可用于扫描的目标列表。为提高效率,应确定哪些IP地址具备关联系统,以作为进一步的工作目标。检测活动系统的最简单方法是使用ping进行扫描。ping扫描就是通过ping命令查明给定系统状态。如果系统回复了ping命令,则系统为在线状态,可继续对其进行端口扫描。如果系统没有响应,则主机可能离线或不可访问,因而当前不能作为目标。

端口扫描是针对个体IP地址进行的扫描,目的是识别某个特定系统上开启和关闭的端口。每个开启的端口都可能有一个与之关联的可供网络攻击所利用的服务。例如,要向一个Web服务器发送信息,需要连接IP地址及端口。端口分为熟知端口、注册端口及动态端口。熟知端口是指那些在日常操作中最常用的端口,其范围是0~1023。例如FTP服务总是运行在21号端口上,Telnet运行在23号端口上,常见的Web服务端口是80。注册端口是指除了熟知端口以外被认定为可供其他应用程序使用的端口,其范围是1024~49151。动态端口的范围是49152~65535,用于支持在前两个端口范围中没有被正式注册的应用程序流量。网络系统上的端口可以是TCP或UDP连接,而连接的形式能够决定服务的形式,因此,可以向目标开放的端口发送探测数据包,根据目标主机返回的信息判断端口是否存活以及所提供的服务类型。常见的端口扫描方法如表所示。

以上扫描方法具有较低的网络活动痕迹和较高的扫描速度,除全连接扫描外,只建立了部分TCP连接,这使得它们成为一种常用的端口扫描技术,用于评估目标主机的安全性,检测可能的漏洞。用于网络端口扫描的工具比较多,如nmap工具,可根据需要酌情选择使用,使用说明见其官网的参考指南。对于Kali Linux系统自带的nmap,其各类型的扫描命令参数含义及使用方法可利用命令nmap-help帮助查询。nmap是一个命令行界面的扫描器,其使用格式为:

其中,scan type表示扫描类型;options表示扫描选项;target specification表示扫描目标地址。常见的扫描类型参数如表7.3所示。扫描之后,可以看到一些端口状态,如open(开放的)​,filtered(被过滤的)​,closed(关闭的)等。例如:

  • (1)全连接(TCP Connect)扫描。使用参数"-sT"对目标IP的端口进行全连接扫描。例如对192.168.184.156的445号端口进行全连接扫描的命令如下:
  • (2)半连接(TCP SYN)扫描。使用参数"-sS"对目标IP的端口进行半连接扫描。例如对192.168.184.156进行半连接扫描的命令如下:
  • (3)UDP端口扫描。使用参数"-sU"进行UDP端口扫描。例如:

2.2、目标系统类型探测

通过端口扫描已经能够识别出目标系统上开启或关闭的端口,但还需要获取更多的信息,如目标主机上运行的是什么操作系统、开放了哪些网络服务等。对于入侵者来说,发现运行在目标系统上的服务,就可以利用这些软件上的漏洞入侵目标。对于网络安全维护者来说,也可以提前发现系统的漏洞,从而防御入侵。

每种操作系统都有独特的指纹,识别操作系统和网络服务就是找出可以表明其存在的证据。一般说来,有主动和被动协议栈指纹识别两种探测方法。主动探测技术是指使用特殊构造的数据包,将响应结果与已知响应的数据库进行比较,从而获知两者的区别。被动探测是指使用嗅探器抓取目标系统的数据包,通过分析响应来寻找出目标系统的细节信息。

2.2.1、协议栈指纹主动探测

扫描器主动向目标系统发送特殊格式的数据包,并根据目标系统返回的信息进行判断。这种方式可能会被入侵检测系统(IDS)检测出来。

1)FIN探测报文

向目标主机发送一个只有FIN标志的TCP数据包到一个打开的端口。如果目标主机使用的是Windows操作系统,则会返回一个FIN/ACK报文,从而可以确定目标主机使用的是Windows操作系统。

2)ACK序号

向目标主机发送一个带有FIN/PSH/URG标志的TCP数据包到一个关闭的TCP端口。如果目标主机使用的是Windows操作系统,则返回一个序号为初始序号加1的ACK报文。

3)ISN(初始化序列号)

在响应一个连接请求时,Windows系统采用一种与时间相关的模型生成TCP初始化序列号(ISN)​:其增量等于两次连接之间的时间差(以毫秒计)​。

4)TOS(服务类型)

TOS是IP数据包中的一个字段,现已改为区分服务(DiffServ)​。对目标主机某个关闭的端口发送连接请求,若目标主机为Windows操作系统,则回应的ICMP端口不可达消息包中TOS的值为0。

5)特殊端口

若主机的操作系统是Windows,则会开放一些特殊的端口,比如137、138、139和445。

2.2.2、协议栈指纹被动探测

协议栈指纹主动探测需要主动向目标系统发送数据包,容易被对方的入侵检测系统(IDS)捕获。为了隐秘地识别远程操作系统,可使用协议栈指纹被动探测。被动探测在原理上和协议栈指纹主动探测相似,但不是主动发送数据包,而是通过监控目标主机通信方法推测其操作系统类型。因此,被动探测成功的前提是攻击者必须在网络的通信枢纽上,通过诸如端口镜像等方式,利用嗅探器捕获并分析目标主机发出的数据包。在TCP/IP会话中,以下几个基本属性常被用于识别操作系统的类型。

  • 数据包存活期(Time To Live, TTL):操作系统设置的发出数据包的生存期。
  • 窗口尺寸(Window Size):操作系统设置的数据窗口长度。
  • 不分片位(Don't Fragment, DF):操作系统设置的是否允许分片。

若目标主机的操作系统为Windows,属性值为:TTL=128;Window Size=0x402e; DF=0。

若目标主机的操作系统为Solaris,属性值为:TTL=255;Window Size=0x2789; DF=1。

2.2.3、网络服务类型探测

网络服务类型探测主要是确定目标网络中开放端口上绑定的网络应用服务类型和版本,以获取更多关于目标系统的信息,从而支持进一步的操作系统辨识和漏洞识别。

1)操作系统指纹识别

使用nmap扫描器,利用"-O"选项开关执行对操作系统的探测,也可以使用"-A"来同时启用操作系统检查和版本检测。nmap命令格式如下:

2)旗标抓取和探测

识别操作系统及其服务的一个简便有效方法是"旗标抓取"​。所谓旗标(banner)是指在第一次连接时,目标软件给出的软件名称、版本号等信息。通过旗标抓取可以获得目标系统的大量信息,至少可以识别出正在目标系统上运行的各项服务,进而对目标系统潜在的弱点展开研究。

许多端口扫描工具可以在识别开放端口(通常预示着一项可利用的服务)的同时进行旗标抓取。例如,使用Telnet抓取旗标的方法是在命令行提示符中输入命令:

即可根据输入的IP地址或主机域名返回结果。抓取旗标的方法多种多样,也可以利用nmap来实现操作系统类型的识别和banner抓取,运行结果如图7.6所示。

2.3、漏洞挖掘与利用

漏洞挖掘与利用是网络渗透测试中的一个重要概念。漏洞是指网络硬件、软件或策略上存在的安全缺陷或脆弱点(Security Vulnerability)​,可以被黑客用来获取未经授权的访问权限或执行恶意操作。网络系统不可避免存在漏洞,例如,TCP/IP协议栈从设计之初就缺乏安全的总体架构和设计,软件实现的缺陷、软件源代码的急剧膨胀也会带来漏洞。重要的是通过漏洞扫描及时发现漏洞,通过分析、测试和审查网络系统或软件,寻找出潜在的安全漏洞,即漏洞挖掘。漏洞挖掘的目的是发现漏洞并将其报告给相关的组织机构,以便修复漏洞并提高网络系统的安全性。

2.3.1、漏洞库及漏洞识别

在全球范围内,随着计算机系统普及应用和网络基础设施的建设,各类漏洞规模急剧扩大,为了有效量化管理,国际上不同组织提出了各类漏洞管理标准。国外如MITRECVE(Common Vulnerabilities and Exposures)​、CWE、NIST NVD、Symantec BUGTRAQ等;国内如中国信息安全测评中心维护的CNNVD国家漏洞库、国家互联 网应急中心CNCERT维护的CNCVE、CNVD等。各组织按照自身所关注的漏洞范围不同,组织建设并发布各自的漏洞库,但这些漏洞库也存在着部分交叠和重复。其中,以MITRE CVE标准最具代表性,所收录的漏洞最早、范围最全,目前该漏洞库已经收录数十万多条漏洞。

漏洞扫描一般需要根据通用漏洞的形成机理及其所造成的外部表现形式予以检测判断。漏洞是否可以被检测到,取决于漏洞的安全性缺陷,并非所有的漏洞都可能被准确无误地识别。一般说来,漏洞扫描的具体实施效果依赖以下因素。

  • (1)漏洞PoC(Proof of Concept)是否公开。PoC是通用漏洞存在的原理证明。
  • (2)系统指纹信息采集的准确度。PoC依赖于漏洞的形成机理,并非所有漏洞都具有PoC,但所有标准组织收录的通用漏洞都会记录漏洞存在的系统,应用类型和版本,尽管修复漏洞后会更新其版本号,但只要具有标准漏洞库的数据,原则上就能识别出目标系统,进而判断是否存在相应漏洞。
  • (3)漏洞EXP(Exploit)是否存在。EXP是指按照通用漏洞缺陷原理,针对相应漏洞实例加以利用。EXP与PoC不同,PoC侧重于检测和识别,而基于EXP可构建针对特定漏洞的攻击工具。从构成安全威胁的角度看,具有EXP的漏洞是攻击者重点关注的对象;以漏洞扫描用途而言,可以通过对应的EXP进行漏洞利用,并从原理上验证漏洞的存在。
2.3.2、网络漏洞扫描

漏洞扫描用于定位和识别目标系统中的漏洞,其工作原理是通过检查编码、端口、变量、banner等信息来寻找脆弱点。漏洞扫描是渗透测试的一个重要组成部分,有被动式和主动式两种扫描方式。被动式扫描是指基于主机之上,对系统中不恰当的设置、脆弱的口令以及其他与安全规则有抵触的对象进行检查。主动式扫描是基于网络的,通过执行一些脚本文件模拟对系统进行攻击,并记录系统的反应,从而发现其中的漏洞。被动式扫描也称为系统安全扫描,主动式扫描也称为网络安全扫描,而网络安全扫描又有不同的技术类型。

根据漏洞的属性和利用方法,漏洞可以分为操作系统漏洞、应用服务漏洞和配置漏洞等类别。操作系统漏洞主要指操作系统本身由于实现中的问题而造成的漏洞。该类漏洞主要集中在网络协议栈的实现部分。应用服务漏洞是指各种应用在处理服务请求时存在的漏洞,由于应用服务种类繁多且具体的实现也不会经过严格的测试,往往存在很多漏洞。配置漏洞是指在配置网络服务时,由于忽略了安全要求而产生的漏洞。

2.3.3、漏洞扫描器及其使用

通常,实施漏洞扫描需要借助一些自动化工具来检测网络系统是否存在安全漏洞。这类自动化工具通常被称为漏洞扫描器。漏洞扫描器通常会附带一个用于识别目标系统漏洞的特征库,并定期进行更新。漏洞扫描就是利用特征库里的脚本与目标系统的反馈信息进行匹配;如果能够匹配上就说明存在某一个漏洞。

漏洞扫描器在识别漏洞的过程中,会向目标系统发送大量的数据包,有时候会导致目标系统拒绝服务或被扫描数据包阻塞,扫描行为也会被系统中的入侵检测设备发现。漏洞扫描器扫描出的结果通常会有很多误报(报告发现的漏洞实际并不存在)或者漏报(未报告发现漏洞但漏洞实际存在)​。因此,需要对扫描结果进行人工分析,确定哪些漏洞是实际存在的。这个过程就叫作漏洞验证,它是渗透测试过程中不可缺少的一步,只有验证漏洞存在的真实性才能对漏洞进行深度利用。

目前,有许多漏洞扫描工具可以深入探测系统漏洞,比较知名的一款漏洞扫描器为AWVS(Acunetix WebVulnerability Scanner)​。AWVS通过网络爬虫测试目标网站安全,检测流行的安全漏洞,例如SQL注入、命令注入、XSS、目录遍历等。AWVS的安装使用也比较简单,具体安装使用方法可访问Acunetix中国官方网站。

Kali Linux提供了许多漏洞扫描工具,其中,nmap既能作为信息搜集工具也能作为漏洞探测工具。另一个是开源安全漏洞检测工具Metasploit(MSF)​。Msfconsole提供了一个一体化的集中控制台,可用于测试网络的安全性、识别漏洞、攻击目标等。Metasploit包含多个模块,包括扫描器、漏洞验证工具、漏洞利用工具、载荷生成器等。这 些工具可以协同工作,使得渗透测试更加高效、准确。由于Kali Linux中的Metasploit渗透测试框架是集成在系统中的,不是单独安装的,不支持使用msfupdate命令更新,若要更新需随系统程序一起更新。在Kali Linux环境下使用如下命令更新升级MSF:

1)准备工作

首先,检查确定渗透测试系统与靶机可以互相ping通。然后做以下几项准备工作。

  • (1)初始化数据库。

(2)创建/删除/切换工作区/检索信息。

  • (3)扫描数据。例如:
  • (4)查看扫描结果的常用命令。

2)Metasploit的基本使用

在Kali Linux终端输入msfconsole启动MSF终端,如图7.7所示。启动终端之后,可输入help命令列出MSF终端所支持的命令列表,包括核心命令集和后端数据库命令集。Metasploit包含多个模块,其中6个常用模块及使用方法如下。

  • (1)auxiliary(辅助探测模块)。该模块通常不会直接攻击目标,主要用于扫描、信息收集、嗅探、指纹识别、口令猜测等。例如,auxiliary/scanner/http/dir_scanner是一个HTTP目录扫描器,可以通过扫描网站目录来查找敏感文件或目录。
  • (2)exploits(漏洞利用模块)。即对漏洞进行攻击的代码。该模块利用已知的系统漏洞攻击靶机,它可以尝试多种具体漏洞的攻击方法,并自动选择最有效的攻击方式。例如,exploit/windows/smb/ms17_010_eternalblue是一个利用MS17-010漏洞的模块,可以通过SMB协议在Windows系统上执行代码。漏洞利用模块的路径为usr/share/metasploitframework/modules/exploits。若进入Windows平台可以看到针对不同服务的漏洞利用;进入smb服务,可列出Windows中经常曝出漏洞的服务,例如永恒之蓝漏洞(ms17_010),如图所示。
  • (3)payloads(攻击载荷模块)。该模块用来建立靶机与攻击机稳定的连接,可返回shell,也可以进行程序注入。Metasploit支持多种类型的payload,包括反向连接Shell、Meterpreter Shell、VNC注入等。例如,payload/windows/meterpreter/reverse_tcp是一个Windows系统的Meterpreter反向Shell Payload,可以建立与靶机的反向连接并提供完全的系统访问权限。当在Metasploit中执行show payloads命令之后,会显示一个可使用的payload列表:
  • (4)encoders(编码器模块)。该模块用于将payload进行加密或编码,以绕过入侵检测系统(IDS)的检测。encoders模块通常会使用多种技术进行混淆和伪装。例如,encoder/x86/shikata_ga_nai就是一个常用的x86编码器,可以将payload进行混淆和伪装,以规避IDS的检测。
  • (5)post(后渗透攻击模块),用于获取目标主机控制权后的渗透攻击,如获取敏感信息、跳板攻击等操作。
  • (6)nops(空指令模块),用以产生缓冲区填充的非操作性指令。

Metasploit的常用命令:

3)Meterpreter

Meterpreter是一款后渗透工具,属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型payload。该工具是基于"内存dll注入"理念实现的,能够通过创建一个新进程并调用注入的dll来让目标系统运行注入的dll文件。

当运行exploit命令之后,会开启一个reverse TCP监听器监听本地的6666端口,即攻击机的本地地址(lhost)和端口号(lport)​。若运行成功,则出现命令提示符meterpreter>,输入"​?​"可查看Meterpreter的命令,帮助进入后渗透阶段的相关操作。

4)漏洞探测及利用示例

在此以MS17_010(永恒之蓝漏洞)为例介绍运用Metasploit实施漏洞探测的主要步骤及其方法。准备工作先是查看是否已关闭了靶机的防火墙,是否开启了远程桌面;然后进行漏洞扫描,查看靶机端口开启情况。例如,使用nmap命令扫描靶机查看是否开启了445端口,如图所示。

可以看到端口445处于开启状态,而永恒之蓝利用的就是445端口的SMB服务,即操作系统溢出漏洞。然后,使用search命令搜索相关漏洞。例如,使用search命令查找与永恒之蓝漏洞相关的模块,如图所示,找到了5个模块,前2个是辅助模块,后3个是漏洞利用模块。也可以使用search EternalBlue type: exploit命令过滤出其中的攻击模块。

由上述扫描结果可知,auxiliary/scanner/smb/smb_ms17_010是永恒之蓝扫描模块,exploit/windows/smb/ms17_010_eternalblue是永恒之蓝攻击模块。

实施漏洞探测及利用可分为三个环节:一是扫描探测漏洞;二是进行漏洞利用;三是后渗透攻击。

(1)扫描探测漏洞。使用辅助模块查看靶机是否含有ms17-010漏洞,其流程如下。

  • ①用use命令选定要利用的模块。例如使用smb_ms17_010进行漏洞探测,命令为:

    用show options命令可查找该模块需要配置或需要修改的参数。

  • ②用set设置要探测的目标主机。例如:set rhost192.168.184.153,则设置靶机IP地址为192.168.184.153(使用set rhosts设置靶机的IP范围,探测该范围内是否存在漏洞)​。

  • ③设置靶机端口。例如:set rhport 445(默认445,若nmap探测到的bios端口不是445,需变更)​。输入showoptions命令可查看需要配置或修改的参数。

  • ④用exploit命令或者run命令,执行ms17_010的辅助性脚本对所设置的IP主机进行漏洞探测。

执行上述各条命令后,漏洞探测的运行结果如图所示。

(2)漏洞利用。使用use exploit选择漏洞攻击模块,对漏洞进行利用。就本示例来说,具体操作流程如下。

  • ①选用攻击模块:useexploit/windows/smb/ms17_010_eternalblue;继而可以用show options查找该模块需要配置或需要修改的参数,例如,需要填写的靶机IP地址等。
  • ②设置攻击载荷、靶机IP、攻击机IP,接收反弹的shell。 然后,利用show options查看配置信息是否正确。
  • ③用exploit或run,发起实际的渗透攻击。利用MS17-010漏洞攻击靶机的具体步骤及其命令执行情况如图所示。

(3)后渗透攻击。 运行exploit,当出现命令提示符meterpreter>后,表示成功建立会话。接着,输入shell即可切换到靶机的windows cmd_shell。若出现部分英文字符乱码,可输入chcp 65001予以解决,如图所示。然后,对靶机可使用DOS命令进行操作,例如,使用"netuser root 123456/add"命令创建新用户root,使用"netlocalgroup administrators root/add"命令将用户root添加至管理员组。使用"exit"命令退出目标系统,返回meterpreter会话。

获取靶机系统控制权后,在meterpreter会话中可利用post后渗透模块进行一系列的后渗透攻击操作,主要包括:

例如,使用hashdump命令可获取靶机的Hash值,如图所示。进一步,将该Hash值保存到mbhash.txt文件中,可利用Kali Linux的hashcat对其进行破解。

在实际渗透测试中,上述方法、步骤可以灵活运用,对不同的渗透测试所用步骤可能不同。例如,可以将攻击代码写入configure.rc(以.rc结尾的文件)的配置文件中,并使用命令msfconsole-r configure.rc即可实现自动渗透测试。

需要强调的是,经授权的漏洞挖掘及利用是一项合法的研究活动,许多网络安全专家、研究人员和企业都从事这方面的工作。他们通过发现和报告漏洞来帮助改善系统的安全性。然而,擅自利用漏洞进行非法攻击是违法活动。总而言之,漏洞挖掘及利用是网络安全领域中重要的研究和应用活动,从中可以找到系统中存在的弱点并加以修复,以保障网络安全。

相关推荐
fish-man1 小时前
ceshi ceshi yixia
网络·安全·web安全
anxiao_m1 小时前
2026制造业云桌面选型攻略,不同生产场景适配方案汇总
大数据·网络·数据库
吹什么轩3 小时前
linux网络:TCP套接字基础
linux·网络·tcp/ip
志栋智能3 小时前
安全超自动化:构建全方位安全可观测性的基础
网络·安全·自动化
mqiqe4 小时前
线程调度与 Schedulers:Project Reactor 并发模型的核心引擎
java·开发语言·网络
略略略咯咯5 小时前
网络协议-study
网络·网络协议
TJHHH.5 小时前
XSS-labs-master
前端·web安全·xss
爱学习的程序媛6 小时前
通信协议完整梳理
网络·网络协议·信息与通信·通信协议
故乡dee云6 小时前
华为云国际服务器连不上怎么办?安全组、端口、IP 和网络排查方法
服务器·网络·华为云