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 ...
随机推荐
- [EF] - 动态创建模型:System.Reflection.Emit + Code First
动态创建Entity Framework模型并且创建数据库 使用System.Reflection.Emit+Code First model创建以下的一个实体类和DbContext并且创建数据库: ...
- 生成对抗网络(Generative Adversarial Networks, GAN)
生成对抗网络(Generative Adversarial Networks, GAN)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的学习方法之一. GAN 主要包括了两个部分,即 ...
- vue-element-admin项目核心总结
1.搭建项目 按照官方文档把整个项目下载下来,安装依赖包npm install, 然后npm run dev 启动项目. 2.项目自定义优化 删除不要的文件,启动项目登录后,发现里面有很多页面,对我们 ...
- @Transient 注解
使用 @Transient 表示该属性并非是一个要映射到数据库表中的字段,只是起辅助作用.ORM框架将会忽略该属性
- Mybatis Generator 最完整配置详解
这是从CSDN找到的一篇翻译文章,尝试重新排版后转载. 1. < generatorConfiguration > 标签 1.1 可以用于加载配置项或者配置文件,在整个配置文件中就可以使用 ...
- Atlas 2.1.0 实践(2)—— 安装Atlas
在完成Atlas编译以后,就可以进行Atlas的安装了.Atlas的安装主要是安装Atlas的Server端,也就Atlas的管理页面,并确保Atlas与Kafka Hbase Solr等组件的集成. ...
- [leetcode]297. Serialize and Deserialize Binary Tree一般二叉树的编解码
由于一般的前序遍历不能唯一的还原出原本你的二叉树,所以要改变一下: 记录二叉树的结构信息,也就是空节点用符号表示 一般的前序遍历只是记录了节点的前后顺序,通过记录空节点,每一层的结构就可以记录下来 解 ...
- 大数据量查询容易OOM?试试MySQL流式查询
一.前言 程序访问 MySQL 数据库时,当查询出来的数据量特别大时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM). 其实在 MySQL 数据库中提供了流式查询,允许把符 ...
- Java异常体系概述
Java的异常体系结构 Java异常体系的根类是 Throwable, 所以当写在java代码中写throw抛出异常时,后面跟的对象必然是Throwable或其子类的对象. 其中Exception异常 ...
- sh -s用法
1.基本用法 (1)sh -s 会从标准输入中读取命令,并在子shell中执行 (2)sh -s 后从第一个非 - 开头的参数开始,依次被赋值给子shell的 $1,$2... (3)sh -s 的第 ...