【技术原创】vSphere开发指南2——vSphere Web Services API - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

【技术原创】vSphere开发指南2——vSphere Web Services API

3gstudent 技术 2021-07-13 10:04:20
256735
收藏

导语:本文介绍了通过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 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务