山南市网站建设_网站建设公司_版式布局_seo优化
2025/12/26 21:31:53 网站建设 项目流程

解题

拿到网站http://dev.huge-logistics.com我们先可以对其进行基础的信息搜集,https://s3.amazonaws.com/dev.huge-logistics.com/static/favicon.png我们可以发现云资源

aws s3 ls s3://dev.huge-logistics.com --no-sign-request 利用这个我们可以查看S3 存储桶的顶层逻辑目录

image

在看到众多目录的时候,我们可以采取递归的方法挨个尝试

image

尝试过后发现有zip文件可以下载

下载后发现是 PowerShell 脚本文件

image

其硬编码泄露了AK/SK以及区域标识符

通过aws configure授权访问

image

重新访问发现

image

已近有权限去访问期目录了,但是当前账户的权限不够,还需要提权。当前没办法只能查看其它目录文件

image

我们可以通过xml文件发现

image

有了新的AK/SK尝试,发现是admin账户

image

到这一步我们已经可以拿到flag了

思考

我们可以进一步查看为什么我们不能再浏览器上查看却能在AWS CLI 上请求成功
image

{"Version": "2012-10-17","Statement": [{"Sid": "PublicRead","Effect": "Allow","Principal": "*",  // 所有用户(匿名+授权)"Action": "s3:GetObject",  // 读取/下载文件"Resource": ["arn:aws:s3:::dev.huge-logistics.com/shared/*","arn:aws:s3:::dev.huge-logistics.com/index.html","arn:aws:s3:::dev.huge-logistics.com/static/*"]},{"Sid": "ListBucketRootAndShared","Effect": "Allow","Principal": "*",  // 所有用户"Action": "s3:ListBucket",  // 列目录"Resource": "arn:aws:s3:::dev.huge-logistics.com","Condition": {"StringEquals": {"s3:delimiter": "/","s3:prefix": ["", "shared/", "static/"]  // 仅允许列根目录、shared/、static/}}},{"Sid": "AllowAllExceptAdmin","Effect": "Allow","Principal": {"AWS": ["arn:aws:iam::794929857501:user/it-admin",  // 管理员用户(XML 里的 prod-admin)"arn:aws:iam::794929857501:user/pam-test"   // 低权限测试用户]},"Action": ["s3:Get*", "s3:List*"],  // 允许读取、列出所有操作"Resource": ["arn:aws:s3:::dev.huge-logistics.com","arn:aws:s3:::dev.huge-logistics.com/*"]},{"Sid": "ExplicitDenyAdminAccess","Effect": "Deny",  // 显式拒绝(优先级最高)"Principal": {"AWS": "arn:aws:iam::794929857501:user/pam-test"},"Action": "s3:*",  // 所有 S3 操作(下载、读取、删除等)"Resource": "arn:aws:s3:::dev.huge-logistics.com/admin/*"  // 仅 admin/ 目录}]
}

我们可以发现在Bucket策略里面想要匿名执行列目录,必须满足

  1. 请求里带 prefix 参数(值可以是空字符串 ""shared/static/);
  2. 请求里带 delimiter 参数,且值必须是 /

在AWS CLI 里面会默认执行这两个参数的执行,但在浏览器里面直接访问是不会有这两个参数的,故会被拒绝。

s3.amazonaws.com/dev.huge-logistics.com/(未加参数)

dev.huge-logistics.com.s3.amazonaws.com/?prefix=&delimiter=/(加了参数)

总结

  1. 核心原因:桶策略要求 ListBucket 必须带 prefix(空 /shared//static/)和 delimiter=/ 参数;
  2. 行为差异:CLI 自动加参数→匹配条件→成功;浏览器不加参数→不匹配→失败;
  3. 突破方法:在浏览器 /cURL 中手动添加这两个参数,就能绕过 “请求格式导致的拒绝”;
  4. 关键考点:S3 桶策略的 Condition 条件校验,以及 prefix/delimiter 对列目录的控制作用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询