记一次AWS攻防场景演练

admin 2022年11月22日21:48:40评论123 views字数 2905阅读9分41秒阅读模式

 


攻击AWS漏洞环境

首先,我们将 aws 凭据添加到 aws cli。建议创建一个具有管理员权限的新用户以供 CloudGoat 使用。

然后我们将 IP 添加到白名单,以防止易受攻击的机器暴露在互联网上。

最后,我们可以启动场景。构建完成后,将添加一个名为 ec2_ssrf_<id > 的新目录。该目录包含一个名为 start.txt 的文件,其中包含用户solus的初始凭据

现在我们将这些键添加到 Pacu 中开始枚举。

aws configure --profile cloudgoatpython3 cloudgoat.py config whitelist --autopython3 cloudgoat.py create ec2_ssrf --profile cloudgoat.# Once the script is done, change into the Pacu directorypython3 pacu.py> set_keys


第 1 阶段 - 枚举 IAM 和 Lambda

首先,我们拥有用户 sol 的凭据,但我们对与该帐户关联的权限或资源一无所知。

我们将启动 Pacu 并运行iam__enum_permissions模块。不幸的是,结果表明我们没有 iam 权限。

接下来,让我们继续学习 Lambda 函数。运行lambda__enum模块表明我们找到了一个 Lambda 函数!

让我们去看看它的配置,看看我们是否可以提取任何信息。

# pacu.py

> run iam__enum_permissions
> run lambda__enum
# view the data returned from lambda__enum
> service
> data lambda

使用 Pacu 的内置函数,我们可以检查 Lambda 函数。

通过查看函数的配置,我们偶然发现了存储在函数环境变量中的访问密钥。

环境变量是在 AWS 的许多服务(包括 Lambdas)中查找secret的常用区域。

开发者不应将secret存储在环境变量中,而应研究其他解决方案,例如 Amazon Key Manage Server (KMS)。

记一次AWS攻防场景演练


让我们通过运行set_keys将它添加到我们的 pacu 会话来转向这个帐户。

设置新键后,我们重复枚举步骤。运行run ec2__enum 我们看到找到了一个 EC2 实例。

查看 pacu 中的 EC2 配置数据,我们发现 EC2 有一个公共 IP 。

在我们的浏览器上访问这个 IP 地址,我们发现服务器正在托管一个网站。

# pacu.py
> Set_keys
> run ec2__enum
> Data ec2

记一次AWS攻防场景演练


第 2 阶段 - 利用 SSRF 访问 AWS 元数据

从登陆页面和一个可疑的url参数来看,很明显我们需要执行服务器端请求伪造攻击 (SSRF)。

如果我们可以执行 SSRF 但它如何让我们获得更多权限?

答案是 AWS 元数据服务

每个 EC2 实例都可以通过调用实例内的特定端点来访问内部 aws 元数据。元数据包含实例使用的信息和凭证。我们可以使用这些凭据来提升我们的特权。

要查询元数据服务,我们需要 ec2 实例 ID。

我们可以通过简单地从下面的 URL 中省略它并允许网站告诉我们来获取实例 ID。或者,我们可以在 Pacu 返回的服务数据中找到实例 ID。在这种情况下,我们将使用元数据服务来查找实例 ID。


请求元数据服务

使用实例 id,可以通过将 id 附加到端点的末尾来从元数据端点请求凭据,就像这样

http://EC2_public_ip/?url=http://169.254.169.254/latest/meta-data/<instance-id>

记一次AWS攻防场景演练执行 SSRF 攻击时,我们看到 AWS 元数据端点已返回 EC2 实例使用的凭证。


第 3 阶段 - 转向 S3 存储桶

我们使用从 EC2 实例获得的凭据进行转换。我们重申我们对 lambda 和 EC2 的枚举步骤,但没有获得任何额外信息。由于那些是死胡同,另一个寻找secret的热门区域是 S3,所以让我们去搜索吧。

首先使用 aws cli,我们可以列出可用的 s3 存储桶。

从这里,我们找到一个名为 cg-secret-s3-bucket-<cgid> 的存储桶,我们可以使用 cli 列出存储桶中的文件。

在存储桶中,我们看到一个看起来很有前途的文件 admin-user.txt。使用 cp 下载文件,我们可以使用 cat 查看并找到更多凭据!

# bash cli
aws configure --profile ecgec2role aws s3 ls --profile cgec2roleaws s3 ls --profile cgec2role s3://cg-secret-s3-bucket-<cgid> s3 cp --profile cgec2role s3://cg-secret-s3-bucket-<cgid>/admin-user.txt ./cat admin-user.txt


第 3 阶段 - 转向 S3 存储桶

现在我们已经从文本文件中发现了管理员凭据,可以使用它们来拿到flag。

首先,使用新凭据配置 aws cli。现在我们应该有权执行阶段 1 中的 Lambda 函数。

我们使用 aws cli 列出函数,然后获取函数名称并调用它。

我们将输出保存到 out.txt,当我们 cat 文件时,我们看到“You Win!”

aws configure --profile cgadmin.
aws lambda list-functions --profile cgadmin
aws lambda invoke --function-name cg-lambda-<cloudgoat_id> ./out.txt.
cat out.txt
“You Win!”  


总结

在这个 EC2_SSRF CloudGoat 场景中,我们从一个非常有限的帐户开始,然后在 Lambda 函数的环境变量中找到了新的凭据。

开发人员不应将凭证留在环境变量中,因为任何具有列表权限的人都可以查看它们。使用这些凭证,我们发现了一个托管网站的 EC2 实例。

通过利用 Web 应用程序,我们能够通过查询内部元数据 API 获得另一组凭证。

使用 Ec2 凭据,我们枚举了 S3 存储桶,这使我们获得了管理员凭据。

希望渗透测试人员可以了解 AWS 环境中的错误配置以及如何利用它们,也希望安全工程师和蓝队能够从这个场景中吸取教训,并识别他们环境中的错误配置。



本文为译文,原文链接:https://rhinosecuritylabs.com/cloud-security/cloudgoat-aws-scenario-ec2_ssrf/


【火线Zone云安全社区群】

进群可以与技术大佬互相交流

进群有机会免费领取节假日礼品

进群可以免费观看技术分享直播

识别二维码回复【社区群】进群

记一次AWS攻防场景演练


记一次AWS攻防场景演练

火线Zone是[火线安全平台]运营的云安全社区,内容涵盖云计算、云安全、漏洞分析、攻防等热门主题,研究讨论云安全相关技术,助力所有云上用户实现全面的安全防护。欢迎具备分享和探索精神的云上用户加入火线Zone社区,共建一个云安全优质社区!

如需转载火线Zone公众号内的文章请联系火线小助手:hxanquan(微信)


记一次AWS攻防场景演练

//  火线Zone //

微信号 : huoxian_zone


记一次AWS攻防场景演练

点击阅读原文,加入社区,共建一个有技术氛围的优质社区!

原文始发于微信公众号(火线Zone):记一次AWS攻防场景演练

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年11月22日21:48:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次AWS攻防场景演练https://cn-sec.com/archives/1424290.html

发表评论

匿名网友 填写信息