当前位置: 首页 > news >正文

AWS S3枚举基础

解题

拿到网站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 对列目录的控制作用。
http://www.jsqmd.com/news/145099/

相关文章:

  • 苍穹外卖——DAY3
  • scheme 符号求导
  • 深入解析:在 Ubuntu 上安装 MySQL 的详细指南
  • 基于樽海鞘算法(SSA)的极限学习机(ELM)回归预测对比:BP、GRNN、ELM与SSA - ELM
  • AI提示系统的商业模式的用户分层:提示工程架构师的3个方法
  • [补档] 记于 2025.03.09 晚
  • 意识、物理规律与宿命论
  • 使用Gradio构建AI前端 - RAG召回测试
  • loupeR软件包 | 手动下载 | 上传执行文件 | 改barcode为10x格式
  • 云原生密钥管理:Sealed Secrets与Vault
  • 基于深度学习的电动车头盔佩戴检测系统
  • 嚯,拼多多也开奖了
  • OpenAI ChatGPT功能大升级,NVIDIA斯坦福开源游戏AI,通义千问Qwen Code生态扩展,中国AI产业突破万亿大关
  • 艾曲波帕联合治疗方案:肿瘤放化疗后血小板低的优化策
  • 分布式ID之雪花算法
  • 2026年最新权威AI编程软件评测和推荐
  • 实用指南:Spring Boot:DTO、VO、BO、Entity 的正确工程化分层
  • 基于springboot二手物品交易平台系统(源码+lw+部署文档+讲解等)
  • 虚拟机操作系统选择指南(2025)
  • 权威报告与专家共识加持,五大专家推荐宝宝敏感肌纸尿裤品牌助力宝宝远离干红痒 - 速递信息
  • DDD笔记 | 领域驱动设计(DDD)实战
  • STM32F103 学习笔记-21-串口通信(第1节)-串口通信协议简介
  • 快速幂
  • 学长亲荐8个AI论文软件,研究生论文写作不再难!
  • nt!MiInitializeLoadedModuleList分析和全局变量nt!PsLoadedModuleList初始化和LoaderBlock->LoadOrderListHead的关系非常重要
  • 私有知识库:数字时代的知识守护者
  • 【课程设计/毕业设计】基于Java的网上宠物店管理系统基于java的宠物用品店系统【附源码、数据库、万字文档】
  • 【mac如何连接redis】很好用的一款Redis客户端
  • Java计算机毕设之基于Java的网上宠物店管理系统宠物种类管理、宠物信息管理、食品类型管理(完整前后端代码+说明文档+LW,调试定制等)
  • transformer-explainer