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

云渗透实战:解密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智能小助手)
公众号二维码

posted @ 2025-07-04 14:01  qife  阅读(46)  评论(0)    收藏  举报