写点什么

云渗透实战:解密 AWS CTF 挑战中的秘密

作者:qife
  • 2025-07-04
    福建
  • 本文字数:2111 字

    阅读完需:约 7 分钟

云渗透实战:解密 AWS CTF 挑战中的秘密

导语:大家好,今天我将展示如何在不同的场景中对云环境进行渗透测试。这些实际上都是 CTF 挑战,属于 THM Hackfinity Battle Encore 挑战赛的一部分。让我们开始吧!

Hackfinity Battle Encore 挑战

欢迎来到 Hackfinity Battle CTF!


tryhackme.com

挑战第一部分

第一个挑战给出了一些 AWS 凭证用于测试:


Access Key: AKIAU2VYTBGYDDZ5Z7UW  Secret Access Key: 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  AWS Region: us-west-2
复制代码


我使用这些凭证进行了身份验证,现在我是 user0。尝试列出 S3 桶但没有任何结果,我们没有执行此操作的权限。


接下来需要找出该账户中运行了哪些 AWS 服务。为此我们可以使用这个工具:GitHub - shabarkin/aws-enumerator


运行该工具后发现有一个服务正在运行:SECRETMANAGER。


我们可以使用以下查询与 SECRETMANAGER 交互:


aws secretsmanager list-secrets
复制代码


这里可以看到列出了一个 Secret 名称,我们可以用以下查询提取 Secret:


aws secretsmanager get-secret-value --secret-id secret-flag
复制代码


这样我们就获得了第一个 Flag。

挑战第二部分

这个挑战给出了一个钓鱼网站,需要找出被盗数据存储在哪里,并尝试获取受害者用户列表:


http://darkinjector-phish.s3-website-us-west-2.amazonaws.com
复制代码


在 URL 末尾添加一些随机路径后,我们发现这个网站内容托管在 S3 桶中:


Bucket: darkinjector-phish
复制代码


接下来尝试匿名列出桶内容,并获得了关于捕获登录的数据。我将其下载到我的 VM 中:


aws s3 ls s3://darkinjector-phish/ --no-sign-request
复制代码


最后我获得了所有捕获的用户名和密码以及 Flag:


aws s3 cp s3://darkinjector-phish/captured-logins-093582390 . --no-sign-request
复制代码

挑战第三部分

这个挑战又给出了一些 AWS 凭证和一个 S3 桶用于测试:


Access key ID: AKIAU2VYTBGYPMQKPQ6W  Secret Access Key: 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  Bucket Name: secret-messages
复制代码


使用这些凭证登录后,我现在是 user1。接下来我列出了桶中的所有内容并下载到 VM 中。


这是一个使用对称密钥的 AWS KMS 加密数据。我们可以使用给定的 KeyId 解密,但需要修改一些数据。将 CiphertextBlob 放入文件(Base64 解码形式),应该如下所示。


但当我尝试用 AWS CLI 解密时被阻止了,因为没有足够的权限使用解密标志:


aws kms decrypt --key-id arn:aws:kms:us-west-2:332173347248:key/b7a11be8-2a95-429e-978c-36a18a0d3e81 --ciphertext-blob fileb://msg.enc --output text --query Plaintext
复制代码


接下来我使用 aws-enumerator 工具列出所有服务,注意到 IAM 正在运行。于是尝试列出 AWS 角色。


搜索后发现一个有趣的角色,因为在描述中显示该角色可用于加密和解密 Cipher 的消息。


让我们获取该角色的凭证,使用以下命令:


aws sts assume-role --role-arn arn:aws:iam::332173347248:role/crypto-master --role-session-name new-session
复制代码


将这些凭证导出到终端后,就可以进行解密了。运行以下命令后我们获得了解密文本和 Flag:


aws kms decrypt --key-id arn:aws:kms:us-west-2:332173347248:key/b7a11be8-2a95-429e-978c-36a18a0d3e81 --ciphertext-blob fileb://msg.enc --output text --query Plaintext | base64 -d
复制代码

挑战第四部分

这个挑战给出了 AWS 凭证:


aws_access_key_id: AKIAW3MEEAJXEHALYRUS  aws_secret_access_key: 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  region: us-east-1
复制代码


首先尝试列出所有 AWS 服务,发现多个服务正在运行:S3、IAM、DYNAMODB。


首先尝试列出所有 S3 桶,发现 1 个,但没有权限列出桶对象。于是尝试 AWS 桶版本控制。如果不了解 AWS 桶版本控制,可以参考这篇博客:AWS s3 Bucket Versioning Discloses Secrets


执行以下命令后列出了其他桶版本:


aws s3api list-object-versions --bucket redteamapp-bucket --query "Versions[?VersionId!='null']"
复制代码


有多个 VersionId 可以测试。我逐一尝试后找到了一个有效的,下载了旧的 index.html 文件并打开。


这是网站和第一个 Flag。查看页面源代码后发现了一些有趣的内容。


它通过 url 参数在 AWS 域上执行 POST 请求。这里可以尝试 SSRF。尝试访问内部数据但无果。接着尝试使用 file://模式(SSRF)获取内部数据。获取/etc/passwd 后得到了文件内容,确认了 SSRF。


在/proc/self/environ 中获得了 AWS Lambda 凭证。在/var/task/flag2.txt 中获得了第二个 Flag。


在使用 Lambda 凭证执行任何操作前,我们可以枚举 AWS IAM 角色以寻找下一步的有趣数据。从中获得了一个 Dev 角色:


redteamapp-dev-role
复制代码


这个角色连接到 redteamapp-lambda-role-szx0n1l0 角色。接着使用 Lambda 凭证进行身份验证,现在我是 redteamapp-lambda 用户。


有了这个用户访问权限,我可以获取 redteamapp-dev-role 角色的凭证。使用以下命令完成:


在这个挑战之前我们看到 DYNAMODB 正在运行。这是 AWS 完全托管的 NoSQL 数据库服务。我们可以查询这个数据库来检索数据(之前无法操作是因为没有 dev-role 凭证)。


最终获得了最后一个 Flag。通过这种方式可以利用 AWS 漏洞。希望你能学到新东西。


感谢阅读!


如果喜欢请不要忘记点赞和关注我获取更多文章。


Linkedin个人资料


Happy Hacking~更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
云渗透实战:解密AWS CTF挑战中的秘密_AWS安全_qife_InfoQ写作社区