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. 点击按钮后,您将看到如何创建 AWS 账户。根据信息填写表格。如果您使用学生邮箱地址,您可以获得额外的好处:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.2 – 账户创建表格

  1. 填写完表格后,点击继续,您将收到一封电子邮件,其中会有问候语并欢迎您加入 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. 点击它后,你会看到左下角有一个标有启动实例的按钮。左侧下拉窗格中还有实例选项。点击启动实例开始构建你的第一个 EC2 实例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.5–EC2 启动

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

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

  1. 选择 Amazon 机器镜像:前往 Amazon 市场搜索一个镜像来安装在你的 EC2 实例上。如前所述,我们将使用CentOS 7作为示例:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.6–EC2 操作系统

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

  2. 之后,你将需要创建一个新的虚拟私有云VPC)网络,你的 EC2 实例可以驻留在其中。VPC 充当一个允许 VPC 内其他实例之间进行安全通信的网络。它还允许通过 VPN 连接 VPC 之外的连接:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.7–创建 VPC

  1. 之后,你需要创建一个子网,让你的主机可以连接到。确保你记住 VPC 和子网,以备设置其他实例时使用:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.8–创建 VPC 第 2 部分

  1. 接下来,您将被提示关于操作系统的存储。分配的存储空间将足够进行练习:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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. 您需要创建一个密钥对,以便连接到您的实例。确保将密钥对保存在一个不会丢失的地方。您需要使用该密钥来访问实例。以下截图说明了命名密钥为AWS Pentest。随意命名您喜欢的内容:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.11 – 创建密钥对

  1. 一旦您命名了密钥对,下载并将其保存在安全的地方。确保保存密钥,并在原始密钥丢失时制作副本。您将无法从实例中检索密钥。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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. 与之前一样,我们需要确保打开正确的端口。请注意3389端口是打开的。端口3389是与RDP相关联的端口。正确设置这一点可以确保您以后可以连接到 Windows 主机:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.14 – Windows 2008 EC2 开放端口

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

  2. 要获取密码,只需右键单击 Windows 实例,然后选择获取 Windows 密码。如果刚刚设置了 Windows 主机,可能需要最多 4 分钟才能解密密码:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.15 - Windows 2008 EC2 密码检索

  1. 通过输入加密密码来解密密码,如图所示。在字段中放入密码后,单击解密密码外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.16 - 解密 Windows 密码

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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.19 - Kali 秘钥

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.22 - PuTTY 密钥配置

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

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

  2. 一旦主机名配置好,确保端口设置为22以进行SSH连接:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1.23 - PuTTY 连接

  1. 现在我们准备连接到我们的实例。点击.ppk文件:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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

现在您的服务器已设置为匿名登录。 本书的后面,在第三章**,探索渗透测试和 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. 一旦连接,您将能够启动一个全新的数据库中充满了漏洞的 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 - 文件菜单中选择导入虚拟设备…

  1. 在那之后,您需要导入我们在步骤 1中下载的 Kali Linux .ova文件。.ova文件是一个 VirtualBox 格式的文件,它允许我们将虚拟镜像直接导入到 VirtualBox 中,几乎没有任何努力:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2.2 - 导入 Kali Linux .ova 文件

  1. 选择新镜像后,您需要更改虚拟机的名称。在这种情况下,我们将名称更改为AWS Kali。如果您将名称更改为其他内容,请确保记住您的命名,以便在本书中使用 Kali Linux 机器。我们还关闭USB 控制器功能,因为我们不会使用它:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2.3 - 虚拟设备设置窗口

  1. 现在让我们启动我们的 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 的输出

恭喜!您现在已经学会了在 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 的输出

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

  1. 回到您打开 Metasploit 的终端,并使用search命令查找 TCP 端口扫描程序。语法应该类似于search TCP portscan。其中的一个最初的结果将是auxiliary/scanner/portscan/tcp。让我们使用它来扫描我们的机器:
$ use auxiliary/scanner/portscan/tcp
  1. 加载模块后,键入options命令以查看我们需要设置的参数。options命令列出了模块的所有参数。不同的模块将有不同的需要设置的参数:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2.7 - 选项命令的输出

  1. 在本章中,我们唯一需要设置的参数是RHOSTS。现在,RHOSTS代表ifconfig命令来发现您的机器的 IP。在这种情况下,我的机器的 IP 是192.168.1.5外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2.8 - 运行 ifconfig 的输出

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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 中创建一个新项目

  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 Inspector 的信息:https://aws.amazon.com/inspector/

  • Python 网站和资源:https://www.python.org

  • NMAP 网站和资源:https://www.nmap.org

第二部分:云渗透测试 - 利用 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://github.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 输出

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

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

WHOIS 命令

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

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

  1. 启动你的 Kali Linux 机器。

  2. 打开终端。

  3. 输入以下命令:

$ whois packtpub.com

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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 存储桶

现在我们对使用 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 存储桶

注意我们获得了一些更多的信息,比如 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 - 公钥和私钥示意图

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

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

启动 Metasploit

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

确保 Metasploit 已经启动:

$ msfdb run

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3.8-Metasploit 控制台

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

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

使用 Metasploit 进行 TCP 扫描

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

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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 进行端口扫描

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

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

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

使用 Metasploit 进行 ACK 扫描

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

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3.12 – ACK 扫描

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

$ use auxiliary/scanner/portscan/ACK

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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 扫描

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

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

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

使用 Kali 进行连接

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

  1. 首先,您需要使用一个名为“管理员”的工具。有一个参数允许在终端中输入密码,但是这是以明文显示的。最佳做法(稍后会详细介绍)是不要以明文显示密码:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3.15 - 通过 rdesktop 连接 RDP

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3.17 - Windows 桌面

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

连接 Windows

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

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

  2. 就像以前一样,我们将输入我们的 AWS 实例的公共 DNS 名称,以及用户名“管理员”来开始连接:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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 – 可用区的冗余

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

重要提示

你可以在这里找到更多关于可用区的信息: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 服务列表

  1. 您的屏幕顶部应该有以下内容。注意您屏幕顶部的S3图标:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

  1. 现在您可以点击 S3 图标,然后转到 S3 存储桶页面。这就是我们开始创建存储桶的地方!点击上面写着创建存储桶的图标开始:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4.6 – S3 存储桶仪表板

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

重要提示

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

  1. 下一个屏幕将显示配置选项。在企业环境中,这是您开始考虑通过分配加密和日志记录来保护您的存储桶的起点。但是,对于此操作,我们将保持所有内容未选中:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4.8 – S3 存储桶配置选项

  1. 接下来,我们将希望将存储桶设为公开。如果这是一个真实的场景,我们会避免设置一个这样的存储桶;然而,我们希望确保存储桶对我们的实验目的是公开的。公开的存储桶是导致 S3 成为主要漏洞的攻击的大多数来源。通过取消阻止所有公共访问,你将使存储桶对任何人都是公开的:外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4.9 – S3 存储桶配置选项

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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 用户

现在我们了解了如何创建用户,让我们看看如何配置它们用于我们的 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 控制台查看文本文件

回顾一下,这是我们完成 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 存储桶访问视图

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

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

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

效果允许

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

AWS 服务Amazon S3

操作所有操作

ARN您的存储桶的 ARN

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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 存储桶策略

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

了解策略属性

了解策略的每个部分意味着什么以及它的作用是至关重要的。您不需要了解 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 - 列出存储桶的内容并将文件复制到存储桶中

  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 的输出

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

在接下来的部分,我们将讨论一个略有不同的主题。我们将讨论脚本编写以及如何在 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 脚本

完成后,按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 - 列出存储桶的文件

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 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

  1. 你会看到一个横幅,上面写着**“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 数据库。

进一步阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值