云存储服务中的存储桶(Bucket)如果配置不当,会引发严重的安全风险。本文将通过实际案例,记录几种常见的存储桶相关漏洞,包括存储桶遍历、任意文件上传等,并介绍相应的检测工具与方法。
存储桶遍历
存储桶遍历漏洞允许未授权用户列出存储桶内的所有对象。当存储桶的策略(Policy)或访问控制列表(ACL)配置过于宽松时,攻击者可以直接访问类似 ?list-type=2 这样的参数来获取完整的文件列表。

通过编写简单的Python脚本,可以自动化提取存储桶内的文件信息。下图展示了一个脚本的运行结果,成功遍历并统计了存储桶内的数千个文件。

任意文件上传
案例一:成功上传覆盖
测试目标存储桶是否允许匿名用户使用PUT方法上传或覆盖任意文件。若请求返回状态码200,通常意味着上传成功。

上传成功后,访问对应的文件URL,若能成功下载或看到预期内容(例如内容为“1”),则证实了任意文件上传漏洞的存在,攻击者可借此覆盖重要文件或上传恶意脚本。
案例二:中国移动EOS服务器的特殊要求
在对中国移动的EOS(对象存储)服务进行测试时,直接上传文件可能会遇到411 Length Required错误,提示MissingContentLength。

这说明该服务器强制要求显式指定Content-Length请求头。因此,在利用漏洞进行安全测试时,需要根据上传内容的类型,手动计算并携带正确的Content-Length值。
# 上传普通文件(自动计算并携带 Content-Length)
curl -X PUT \
-H "Content-Length: $(wc -c < your-file.txt)" \ # 计算文件字节数
-H "Content-Type: application/octet-stream" \
-T your-file.txt \
"https://xxx.xxx.eos.chinamobile.com/your-object-key"
# 上传空内容(强制指定 Content-Length: 0)
curl -X PUT \
-H "Content-Length: 0" \
-d "" \
"https://xxx.xxx.eos.chinamobile.com/empty-object-key"

指定浏览器以HTML格式解析
有时,直接访问存储桶中的对象(如.jpg, .txt文件)会触发浏览器下载,而非直接渲染。此时,可以尝试在URL后附加参数 ?response-content-type=text/html,指示服务器告知浏览器以HTML格式解析响应内容。
?response-content-type=text/html
如果成功,原本是图片或文本的文件可能会被当作HTML代码执行。下图展示了一个被成功解析并弹出警告框的案例。

但需要注意的是,此操作通常需要存储桶配置了相应的策略来覆盖响应头,否则可能会收到类似 ForbiddenResponseHeaderWrite 的权限错误。

手动检测存储桶漏洞效率较低,可以使用自动化工具。BucketTool是一款浏览器插件,能方便地对当前页面的存储桶URL进行一键检测。
在谷歌浏览器中,只需在页面上右键,选择“用 BucketTool 检测”。

插件会弹出窗口,提示输入待检测的存储桶URL。


检测开始后,插件会自动化测试存储桶的可遍历性、文件上传和删除权限等,并直观地展示结果。

点击检测记录中的“展示细节”,可以查看完整的HTTP请求与响应数据包,便于深入分析漏洞原理。

综合扫描工具dddd
除了浏览器插件,还有一些命令行工具可以进行更全面的资产发现与漏洞扫描。例如,工具dddd.exe在扫描过程中能够自动识别存储桶端点,并检测出任意文件删除、任意文件上传、对象列表等相关的安全风险。

扫描报告中标记出的高危链接,直接访问可能触发XSS等攻击。

总结
存储桶的安全配置是云安全中至关重要的一环。管理员应严格遵守最小权限原则,定期审计存储桶的ACL和Policy设置,避免因配置疏忽导致数据泄露或服务被篡改。对于安全研究人员而言,了解这些常见的漏洞模式和利用手法,并使用自动化工具进行渗透测试,是提升云环境安全防护能力的有效途径。