VMware 虚拟机逃逸漏洞
所谓虚拟机逃逸(Escape Exploit),指的是突破虚拟机的限制,实现与宿主机操作系统交互的一个过程,攻击者可以通过虚拟机逃逸感染宿主机或者在宿主机上运行恶意软件。
针对 VMware 的虚拟机逃逸 exploit 源码实现了从虚拟机到宿主机器的代码执行,弹出了熟悉的计算器。该开源代码,只需要将执行计算器部分的 shellcode 替换成其他具有恶意攻击的代码,就可以造成很大的危害。
影响范围
- VMware Workstation Pro / Player(12.5.5 之前版本)
- VMware Fusion Pro / Fusion
漏洞分析
- 首先分析漏洞存在于 DnD 和 CnP 机制的 Version3 中,故设置 DnD 与 CnP 均为 version3 的版本。使用的命令分别为「tool.capability.dnd_version 3」和「tools.capability.copypaste_version 3」。
- 为了达到代码执行,需要溢出堆中对象函数指针或者虚表指针。
- 需要通过查询DnD和CnP的版本才能使设置生效,需要发送的命令分别为:「vmx.capability.dnd_version」和「vmx.capability.copypaste_version」,这两个命令均会检查 DnD/CnP 机制的版本,同时根据版本会创建两个对象,DnD 和 CnP,其中 version3 对应的 C++ 对象大小为 0xA8。
- 根据 C++ 对象的大小进行多次越界写内存。
- 通过命令 info-set guestinfo.KEY VALUE 和 info-get guestinfo.KEY 来设置和获取数据绕过 ASLR,通过这两个命令后面的值来泄露堆上的对象,从而获取对象的虚表地址,从而得到 vmware-vmx 的地址。
- 我们根据信息泄露判断溢出的是哪一种 C++ 对象,是 DnD 还是 CnP。根据判断类型,分别利用 ROP 绕过 DEP,拼接 shellcode 后完成 exploit 的构造。CnP 类型对象溢出利用构造:覆盖对象虚表地址,指向伪造的虚表,然后发送 CP 命令,触发虚函数调用,实现命令执行。
SetGlobalPointer 函数发送 「unity.window.contents.start」 命令,通过在命令中指定参数的宽度和高度,写入一个 64 位的堆栈迁移 gadget 地址。然后 DnD 类型对象溢出利用构造,最终发送 payload 完成构造!
逃逸演示

稳定性讨论
因为 Windows LFH 堆的随机化,当前的 exploit 无法做到 100% 成功率。不过可以尝试下列方法来提高成功率:
- 观察 0xA8 大小的内存分配,考虑是否可以通过一些 malloc 和 free 的调用来实现确定性的 LFH 分配,参考这里和这里。
- 寻找堆上的其他 C++ 对象,尤其是那些可以在堆上喷射的
- 寻找堆上其他带有函数指针的对象,尤其是那些可以在堆上喷射的
- 找到一个独立的信息泄漏漏洞
项目地址:https://github.com/unamer/vmware_escape
VMware 虚拟机逃逸漏洞的更多相关文章
- vmware漏洞之三——Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用
本文简单分析了代码的结构.有助于理解. 转:http://www.freebuf.com/news/141442.html 0×01 事件分析 2017年7月19 unamer在其github上发布了 ...
- vmware漏洞之二——简评:实战VMware虚拟机逃逸漏洞
下文取自360,是vmware exploit作者自己撰写的.本文从实验角度对作者的文章进行解释,有助于学习和理解.文章虚线内或红色括号内为本人撰写. ------------------------ ...
- vmware漏洞之一——转:利用一个堆溢出漏洞实现VMware虚拟机逃逸
转:https://zhuanlan.zhihu.com/p/27733895?utm_source=tuicool&utm_medium=referral 小结: vmware通过Backd ...
- GitHub现VMware虚拟机逃逸EXP,利用三月曝光的CVE-2017-4901漏洞
今年的Pwn2Own大赛后,VMware近期针对其ESXi.Wordstation和Fusion部分产品发布更新,修复在黑客大赛中揭露的一些高危漏洞.事实上在大赛开始之前VMware就紧急修复了一个编 ...
- 【转载】利用一个堆溢出漏洞实现 VMware 虚拟机逃逸
1. 介绍 2017年3月,长亭安全研究实验室(Chaitin Security Research Lab)参加了 Pwn2Own 黑客大赛,我作为团队的一员,一直专注于 VMware Worksta ...
- VENOM cve-2015-3456 Qemu 虚拟机逃逸漏洞POC
#include <sys/io.h> int main() { int i ; iopl(3); outb(0x8e, 0x3f5); outb(0x41, 0x3f5); outb(0 ...
- VBox&vmware虚拟机安装Linux及Linux基础入门学习
VBox&vmware虚拟机安装Linux及Linux基础入门学习 通过VMware workstation安装Linux 在安装虚拟机之前,我特意上网搜索了一下目前常使用的虚拟机软件,了解了 ...
- 怎样在VMware虚拟机中使用安装并设置Ubuntu系统
1 2 3 4 5 6 7 分步阅读 Ubuntu 系统是一款优秀的.基于GNU/Linux 的平台的桌面系统. 当然,目前为止很多应用程序还完全不能允许运行在 Ubuntu 系统上,而且 Ubunt ...
- Vmware虚拟机安装Ubuntu并设置root登陆
主机操作系统是win7.在Ubuntu官网下好系统镜像.iso文件,安装好Vmware workstation软件 1 安装Ubuntu系统到Vmware虚拟机: 注意下面这步是无法直接设置账号为ro ...
随机推荐
- Java“微服务”还能这么玩!
"微服务"加个引号是因为这不是传统定义的微服务架构,顶多算是"小服务"架构,因为服务实例由集群节点统一加载,非独立部署.下面以图说明一下服务调用流程. 一. ...
- vue3系列:vue3.0自定义弹框组件V3Popup|vue3.x手机端弹框组件
基于Vue3.0开发的轻量级手机端弹框组件V3Popup. 之前有分享一个vue2.x移动端弹框组件,今天给大家带来的是Vue3实现自定义弹框组件. V3Popup 基于vue3.x实现的移动端弹出框 ...
- Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器
一.硬件准备 USB转ESP8266两块.DHT11温度湿度传感器.ESP8266-01/ESP8266-01一块(如果学习的话多买几块,ESP-01/ESP-01S的区别) USB转ESP8266 ...
- LVS之1---工作原理
LVS之1---工作原理 LVS 介绍 LVS:Linux Virtual Server,Linux虚拟服务器,负载调度器,是一个由章文嵩(花名 正明)博士从1998年开始发起的自由软件项目. 软件作 ...
- mysql5.7.20压缩版安装
1.官网下载.zip格式的MySQL Server的压缩包,选择x86或x64版,并解压. 2. 创建 data文件夹 及 my.ini文件,并编辑 [mysqld] # 设置为自己MYSQL的安装目 ...
- JavaScript AMD模块化规范
浏览器环境 有了服务器端模块以后,很自然地,大家就想要客户端模块.而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行. 但是,由于一个重大的局限,使得CommonJS规范不适用于浏览器 ...
- 风炫安全web安全学习第二十八节课 CSRF攻击原理
风炫安全web安全学习第二十八节课 CSRF攻击原理 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称为 One Click Attack 或 ...
- Blazor VS 传统Web应用程序
原文作者: Christian Findlay 原文链接: https://christianfindlay.com/2020/07/09/blazor-vs-traditional-web-apps ...
- 阿里云centos7[linux]安装nginx
标题 说明 服务器版本 Centos7 x64 nginx版本 1.19.6 作者 walton 一.准备 创建安装包目录并进入 mkdir /usr/dev/nginx cd /usr/dev/ng ...
- 使用vs code搭建Q#开发环境 (Mac)
Q# 是微软几年前发布的一门用于模拟量子编程的语言. 3年前我在当时风靡的博客网站 ITEYE 上发布过如何在windows上搭建其开发环境:Q#开发环境搭建.时过境迁,不但iteye不知何处去,连Q ...