【技术原创】vSphere开发指南2——vSphere Web Services API
2021-07-13 11:04:20 Author: www.4hou.com(查看原文) 阅读量:156 收藏

导语:本文介绍了通过vSphere Web Services API实现vCenter Server同虚拟机交互的方法,开源实现代码vSphereWebServicesAPI_Manage.py,记录开发细节。

0x00 前言

在上篇文章《vSphere开发指南1——vSphere Automation API》介绍了通过vSphere Automation API实现vCenter Server同虚拟机交互的方法,但是vSphere Automation API有些操作不支持低版本的vCenter(<vSphere7.0U2),导致通用性不够,本文将要介绍更为通用的实现方法——vSphere Web Services API。

0x01 简介

本文将要介绍以下内容:

· vSphere Web Services API开发细节

· 已开源工具SharpSphere的分析

· 开源代码vSphereWebServicesAPI_Manage.py

0x02 vSphere Web Services API开发细节

参考文档:

https://code.vmware.com/apis/968

https://code.vmware.com/docs/11721/vmware-vsphere-web-services-sdk-programming-guide

Python实现代码的参考资料:

https://github.com/vmware/pyvmomi-community-samples

为了提高效率,这里我们基于Python SDK pyvmomi进行实现

具体细节如下:

(1)登录操作

调用SmartConnect,传入用户名和明文口令。

具体细节可在安装pyvmomi后,从文件/lib/site-packages/pyVim/connect.py中查看。

(2)查看虚拟机配置

通过创建ContainerView托管对象进行查询。

相比于vSphere Automation API,获得的内容更加全面。

例如,vsphere-automation-sdk-python不支持获得每个虚拟机对应的UUID,但可以通过pyvmomi获得。

(3)向虚拟机发送文件

使用方法InitiateFileTransferToGuest,需要传入以下六个参数:

· vm,指定要操作的虚拟机

· auth,登录虚拟机的凭据

· guestFilePath,向虚拟机发送的文件保存路径

· fileAttributes,向虚拟机发送的文件属性

· fileSize,文件大小

· overwrite,指定是否覆盖

执行成功后,返回文件对应的uri。

使用PUT方法访问uri,data字段为发送的文件内容,这里的文件内容需要使用二进制格式进行发送。

具体实现代码如下:

微信截图_20210616141443.png(4)从虚拟机下载文件

使用方法InitiateFileTransferFromGuest,必须传入以下三个参数:

· vm,指定要操作的虚拟机

· auth,登录虚拟机的凭据

· guestFilePath,需要下载的虚拟机文件路径

执行成功后,返回指定文件对应的uri。

使用GET方法访问uri,在获取文件内容时需要区分文本格式和二进制格式,文本格式可以使用r.text读取,二进制格式可以使用r.content读取。

具体实现代码如下:

微信截图_20210616141537.png0x03 已开源工具SharpSphere的分析

https://github.com/JamesCooteUK/SharpSphere

c#开发,与Cobalt Strike兼容。

支持以下功能:

· 作为C2服务器

· 代码执行

· 文件上传

· 文件下载

· 查看虚拟机配置

· Dump内存

其中,Dump内存的实现流程如下:

· 获得虚拟机快照,如果没有就创建快照文件(.vmem)

· 将快照下载到本地,通过创建文件uri的方式进行下载

· 通过WinDbg和Mimikatz解析快照文件,导出lsass进程中的凭据

目前暂不支持对Linux虚拟机的操作。

在实际使用过程中,如果遇到以下错误:

微信截图_20210616141708.png可以尝试添加以下代码解决:

微信截图_20210616141733.png0x04 开源代码

完整的开源代码已上传至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/vSphereWebServicesAPI_Manage.py

代码适用版本:没有限制。

支持以下功能:

· 读取虚拟机的配置

· 查看虚拟机文件

· 删除虚拟机文件

· 向虚拟机上传文件

· 从虚拟机下载文件

· 在虚拟机中执行命令

具体命令如下:

· ListVM

· GetVMConfig

· ListHost

· ListVMProcess

· CreateVMProcess

· KillVMProcess

· ListVMFolder

· DeleteVMFile

· DownloadFileFromVM

· UploadFileToVM

其中,对于虚拟机的操作,支持Windows和Linux系统。

0x05 小结

本文介绍了通过vSphere Web Services API实现vCenter Server同虚拟机交互的方法,开源实现代码vSphereWebServicesAPI_Manage.py,记录开发细节。

对于vSphere Web Services API,通用性更强,但是由于基于SDK进行开发,导致编译出来的工具体积较大。

本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/MNzA
如有侵权请联系:admin#unsafe.sh