S3 与存储暴露
公开存储桶
S3 与存储暴露 是 CoddyKit 上的免费 Ethical Hacking Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ethical Hacking Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ethical Hacking Academy 课程共包含 4 节课。
存储桶为何会泄露数据
AWS S3、Azure Blob 和 GCP Cloud Storage 等对象存储,是云数据泄露最常见的来源之一。存储桶易于创建,也容易配置错误。
- 意外设置为公开读取或公开 write
- 使用可预测、容易猜到的名称
- 存储桶策略或 ACL 范围过宽
单个公开存储桶就可能泄露数百万条记录。
S3 的命名方式
S3 存储桶名称必须全局唯一,并且会映射到可预测的 URL。这种可预测性正是能够进行枚举的原因。
任何猜中有效存储桶名称的人都可以探测其访问级别。
# Two equivalent S3 URL forms
https://my-bucket.s3.amazonaws.com/
https://s3.amazonaws.com/my-bucket/
# Region-specific endpoint
https://my-bucket.s3.eu-west-1.amazonaws.com/检测公开存储桶
最快的测试方式是发送未经身份验证的请求。HTTP 状态码会告诉您访问状态。
- 带有 XML 列表的 200 — 允许公开列出内容
- 403 AccessDenied — 存储桶存在,但为私有
- 404 NoSuchBucket — 存储桶不存在
# Anonymous listing attempt
curl -s https://example-data.s3.amazonaws.com/
# Anonymous via the AWS CLI (no signing)
aws s3 ls s3://example-data --no-sign-request暴力猜测存储桶名称
攻击者会根据公司名称和常见后缀生成候选名称,然后逐一测试。工具可以大规模自动执行这一过程。
典型模式:company-backups、company-dev、company-logs、company-assets。
# Permutate and probe bucket names from a keyword
cloud_enum -k example
# Dedicated S3 enumerator
s3scanner scan --bucket-file candidates.txt公开读取与公开 write
公开访问有两种形式,而公开 write 远比公开读取危险。
- 公开读取 — 攻击者下载您的数据(数据泄露)
- 公开 write — 攻击者上传或覆盖对象
公开 write 会导致网页篡改、在您的域名下托管恶意软件;如果存储桶提供网站或软件资源,还可能引发供应链攻击。
# Test for public write (DANGEROUS - only with authorization)
aws s3 cp test.txt s3://example-data/ --no-sign-request
# If this succeeds, the bucket allows anonymous uploads.容易误解的“Block Public Access”
AWS 在账户和存储桶两个层级都提供Block Public Access设置。这些设置功能强大,但经常被误解。
- 账户级设置会覆盖存储桶策略
- 如果启用了 BPA,即使策略允许访问,存储桶也可能仍是私有的
- 反过来,禁用 BPA 可能会突然暴露多个存储桶
务必检查实际生效的访问权限,而不要只检查某一项策略。
# Inspect block-public-access configuration
aws s3api get-public-access-block --bucket example-data
aws s3api get-bucket-policy-status --bucket example-dataAzure Blob 暴露
Azure 将对象存储在存储账户中的container内。配置错误会将某个 container 的公开访问级别设置为 blob 或 container。
存储账户名称同样是全局唯一且可预测的。
# Azure blob URL pattern
https://exampleacct.blob.core.windows.net/container/file.txt
# Anonymous list attempt against a public container
curl -s 'https://exampleacct.blob.core.windows.net/backups?restype=container&comp=list'GCP Cloud Storage 暴露
通过向 allUsers 或 allAuthenticatedUsers 主体授予读取角色,可以将 Google Cloud Storage 存储桶设为公开。
其暴露模式与 S3 相似:名称可预测、可匿名探测,以及公开的 IAM 绑定。
# Anonymous list of a GCS bucket
curl -s https://storage.googleapis.com/example-bucket/
# Check IAM bindings for allUsers (authenticated)
gsutil iam get gs://example-bucket攻击者会在其中寻找什么
公开存储桶只是入口,真正有价值的是其中的内容:
- 数据库转储和备份
- 包含机密的源代码和
.envfiles - 云凭证和 API 密钥
- 客户 PII(个人数据)
- 内部文档和配置
即使是一个很小的泄露 file,也可能包含能够进一步提升权限、最终控制整个账户的密钥。
修复与加固
修复存储暴露问题需要采用分层措施:
- 在账户级别启用Block Public Access
- 移除公开 ACL,以及
allUsers/allAuthenticatedUsers授权 - 使用限定到特定主体的存储桶策略
- 启用加密和访问日志记录
- 持续运行配置扫描,以发现新出现的公开存储桶
负责任地处理暴露的数据
发现一个充满真实数据的公开存储桶,会带来重大的道德和法律责任。
- 不要下载超出证明暴露所需最小范围的数据
- 绝不要外传或留存客户 PII
- 立即并安全地报告
- 遵守范围和交战规则
目标是证明访问确实存在,而不是收集数据。
快速检查
向 S3 存储桶 URL 发送匿名请求后返回 HTTP 403 AccessDenied。这说明了什么?
回顾:S3 与存储暴露
您已经了解了对象存储如何泄露数据,以及如何安全地进行测试。
- 存储桶名称全局唯一且可预测,因此可以进行枚举
- HTTP 状态码会揭示访问状态:200(公开)、403(私有)、404(不存在)
- 公开 write 比公开读取更危险
- 同样的模式也适用于 Azure Blob 和 GCP Cloud Storage
- 使用 Block Public Access 和遵循最小权限原则的策略进行修复
下一节:元数据服务与 SSRF,一条云环境特有的攻击链。
常见问题解答
「S3 与存储暴露」课时是免费的吗?
是的 — 「S3 与存储暴露」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ethical Hacking Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ethical Hacking Academy 课程共包含 4 节课。
「S3 与存储暴露」这节课中我会学到什么?
公开存储桶 你通过在浏览器中直接运行的动手代码来练习 Ethical Hacking Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ethical Hacking Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ethical Hacking Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「S3 与存储暴露」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ethical Hacking Academy 课中编写并运行代码吗?
能。每节 Ethical Hacking Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。