本文整理于https://wiki.teamssix.com/ 和 【小迪安全V2024】第93~94天笔记 —— 云安全攻防:对象存储 & 弹性计算
专注于概念解析,工具利用和搭配漏洞
云服务就是云厂商(阿里云、腾讯云、AWS等)提供的各种"租来的资源"。你不需要买服务器、搭机房,直接在云上买服务就能用。
对象存储就是一个超级网盘,专门用来存文件的。比如:
各大云厂商的对象存储叫法不一样:
| 云厂商 | 对象存储服务名 |
|---|---|
| 阿里云 | OSS(Object Storage Service) |
| 腾讯云 | COS(Cloud Object Storage) |
| 华为云 | OBS(Object Storage Service) |
| AWS | S3(Simple Storage Service) |
| 百度云 | BOS |
💡 一句话记住:OSS = 云上的网盘,存文件用的。
Bucket 就是对象存储里的 "文件夹",但这个文件夹的名字是全球唯一的,不能重名。
Bucket 的访问地址长这样:
https://[BucketName].oss-[RegionID].aliyuncs.com
举个例子:
https://test010010.oss-cn-beijing.aliyuncs.com
这里有一个oss连接工具 ossbrowser 1.0

对象存储的安全问题,80%都是因为管理员配置不当造成的。我们一个个来看:
场景:管理员把 Bucket 的访问权限设成了"公共读"。
后果:
如何判断?
AccessDenied,说明是私有的

实战利用:
场景:管理员不仅开了公共读,还开了 ListObject 权限。
后果:
如何判断?

实战利用:
场景:管理员把权限设成了"公共读写"。
后果:
如何利用?
用 BurpSuite 抓包,把 GET 请求改成 PUT 请求来上传文件:
httpPUT /test.txt HTTP/1.1 Host: target-bucket.oss-cn-beijing.aliyuncs.com Content-Length: 20 这是测试上传的内容
但注意一个坑:
OSS 本身只做存储,不做解析。你上传 PHP 木马,访问时只会被下载,不会被执行。所以直接传木马没用。
那上传文件有啥用?
这是对象存储里最危险、最有实战价值的漏洞!
很多网站为了好看,不用默认的 OSS 地址,而是用自己的子域名来访问:
用户访问:oss.xxx.com ↓ DNS解析(CNAME记录) ↓ test010010.oss-cn-beijing.aliyuncs.com ↓ 返回文件内容
场景:
test010010oss.xxx.com 绑定到这个 Bucket(添加 CNAME 解析)后果:
oss.xxx.com 还能 ping 通,还能解析NoSuchBucket(没有这个桶)步骤:
NoSuchBucket 错误test010010)oss.xxx.com,显示的是你上传的内容!⚠️ 关键点:
- 必须和对方用同一个云厂商
- 必须选同一个地域
- Bucket 名称必须完全一致
方法一:ping 域名
bashping oss.xxx.com
如果返回的地址是 *.oss-cn-*.aliyuncs.com 或类似格式,说明绑了 OSS。
方法二:看响应特征
NoSuchBucket → 可能可以接管AccessDenied → 桶存在但私有,不能接管方法三:用 FOFA 搜
body="NoSuchBucket"
所以这个时候我们就可以通过注册同名的mtinf桶来接管
AccessKey 是云厂商给用户的 "账号密码",用来调用云服务的 API。一般包含:
AccessKeyId(相当于用户名)AccessKeySecret(相当于密码)
拿到这对密钥,就等于拿到了云账号的部分或全部权限!
| 泄漏位置 | 说明 |
|---|---|
| JS 源码 | 前端 JS 文件里硬编码了密钥 |
| 小程序源码 | 反编译小程序后找到密钥 |
| APP 源码 | 反编译 APK 后找到密钥 |
| GitHub/Gitee | 代码托管平台的配置文件里泄漏 |
| 配置文件 | 网站源码里的 config 文件 |
| API 接口 | 接口返回的数据里带了密钥 |
| Heapdump 文件 | /actuator/heapdump 等内存转储文件 |
| 云厂商 | AccessKeyId 前缀特征 |
|---|---|
| 阿里云 | LTAI 开头 |
| 腾讯云 | AKID 开头 |
| 华为云 | AK 开头 |
| AWS | AKIA 开头 |
常用工具:
OSSBrowser(阿里云)、COSBrowser(腾讯云)cf(云环境利用框架),云鉴
使用指南这里先推荐在线的https://wiki.teamssix.com/cloudsword/
后面会出一篇文章的云鉴的使用 查找相关操作
jssearch aliyun
jsuse xxx
jsset ak_id 和secret
jsrun


cf的使用

jscf config


jscf alibaba ls


这里手动测试给个高一点的权限让他可以接管
jscf alibaba console
当然默认是crossfire 的用户也可以使用-u来指定
jscf alibaba console -u teamssix


直接登录

打完了可以注销
jscf alibaba console cancel

删除配置
jscf config del

NoSuchBucketAccessKeyId,找到泄漏的密钥弹性计算就是云上的虚拟机。比如:
你租一台云服务器,上面跑网站、跑应用。
云服务器里有一个特殊的内网地址,用来存放这台服务器的"身份信息":
| 云厂商 | 元数据服务地址 |
|---|---|
| 阿里云 | http://100.100.100.200/ |
| 腾讯云 | http://metadata.tencentyun.com/ |
| 华为云 | http://169.254.169.254/ |
| AWS | http://169.254.169.254/ |
| Azure | http://169.254.169.254/ |
| 谷歌云 | http://metadata.google.internal/ |
元数据里有什么?

因为这个地址是内网地址,但云服务器上的应用如果存在 SSRF 漏洞,就可以让服务器自己请求这个地址,从而窃取临时凭证!

目标网站存在 SSRF 漏洞(比如图片加载、URL 访问等功能)。
第一步:探测是否存在 IAM/RAM 角色
http://目标网站/?url=http://169.254.169.254/latest/meta-data/
如果返回目录列表,说明存在元数据服务。
第二步:获取角色名称
http://目标网站/?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/
返回角色名,比如:ecs-default-role
第三步:获取临时凭证
http://目标网站/?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/ecs-default-role/
返回的内容类似:
json{
"AccessKeyId": "STS.XXXXXXX",
"SecretAccessKey": "xxxxxxxx",
"Token": "xxxxxxxx",
"Expiration": "2024-01-01T00:00:00Z"
}
🔥 拿到这个临时凭证,就等于拿到了云账号的权限!
用工具(如 cf、aws cli)配置好临时凭证,就可以:
cf 工具执行命令示例:
bashcf alibaba ecs exec -b
# 选择实例,直接获取 shell
这是云安全历史上最著名的案例之一:
169.254.169.254📌 核心教训:一个 SSRF 漏洞 + 元数据服务 = 整个云环境沦陷
| 问题 | 说明 |
|---|---|
| 外网暴露 | 云数据库开启了公网访问,且密码较弱 |
| 默认端口 | 使用默认端口(如 MySQL 3306、Redis 6379),容易被扫描 |
| 权限过大 | 数据库账号权限配置过高 |
| 白名单配置不当 | 允许任意 IP 连接 |
如果通过元数据或其他方式拿到的临时凭证权限足够大,攻击者可以:
cf 等工具的扫描功能自动探测| 防御措施 | 具体做法 |
|---|---|
| 最小权限原则 | Bucket 权限设为私有,不要开公共读写 |
| 禁用 ListObject | 不要配置显示目录结构的策略 |
| 自定义域名管理 | 删除 Bucket 时,同步删除 DNS 解析记录 |
| AccessKey 管理 | 不要硬编码在代码里,使用 RAM 角色临时凭证 |
| 定期轮换 | 定期更换 AccessKey |
| 防御措施 | 具体做法 |
|---|---|
| 升级 IMDSv2 | 使用加固模式的元数据服务(需要 PUT 请求获取 Token) |
| 禁用不必要的元数据 | 关闭不需要的元数据访问 |
| 修复 SSRF | 严格校验用户输入的 URL,禁止访问内网地址 |
| 最小权限角色 | 给 ECS 实例绑定的角色只授予必要的权限 |
| 网络隔离 | 使用安全组、VPC 限制访问 |
| 防御措施 | 具体做法 |
|---|---|
| 代码审计 | 检查 JS、配置文件、Git 仓库,防止密钥泄漏 |
| WAF 防护 | 部署 Web 应用防火墙,拦截恶意请求 |
| 监控告警 | 对异常 API 调用、AccessKey 使用进行告警 |
| 日志审计 | 开启云操作日志,便于溯源 |
| 工具 | 用途 |
|---|---|
OSSBrowser | 阿里云 OSS 管理工具 |
COSBrowser | 腾讯云 COS 管理工具 |
cf | 云环境利用框架(支持阿里云、AWS 等) |
wafw00f | WAF 识别工具 |
BurpSuite | 抓包改包、测试上传 |
FOFA | 网络空间测绘,搜 NoSuchBucket |
云安全攻防(第93~94天) │ ├── 对象存储 OSS(第93天) │ ├── 权限配置不当 │ │ ├── 公共读 → 文件可被下载 │ │ ├── ListObject → 目录遍历 │ │ └── 公共读写 → 任意文件上传 │ ├── 域名解析接管 │ │ ├── 原理:Bucket删了,DNS没删 │ │ ├── 判断:NoSuchBucket │ │ └── 利用:创建同名Bucket接管 │ └── AccessKey泄漏 │ ├── JS/小程序/APP/GitHub │ └── 拿到AK = 控制云资源 │ └── 弹性计算 ECS(第94天) ├── 实例元数据服务 │ ├── 地址:169.254.169.254(各厂商不同) │ └── 包含:实例信息 + 临时凭证 ├── SSRF + 元数据 = 窃取AK │ ├── 步骤1:探测角色 │ ├── 步骤2:获取角色名 │ └── 步骤3:获取临时凭证 ├── 云数据库 │ └── 外网暴露 + 弱口令 = 被入侵 └── AK控制台接管 └── 权限够大 = 整个云账号沦陷
💬云安全的核心思路就是——云上的东西和传统服务器本质上一样,只是换了个地方跑。对象存储就是网盘,弹性计算就是虚拟机,理解了这一点,云安全的漏洞也就不难理解了。关键是多动手实验,在真实环境里踩坑才能记得牢!