前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CTF QEMU 虚拟机逃逸总结

CTF QEMU 虚拟机逃逸总结

作者头像
用户1423082
发布于 2024-12-31 12:09:31
发布于 2024-12-31 12:09:31
8000
代码可运行
举报
文章被收录于专栏:giantbranch's bloggiantbranch's blog
运行总次数:0
代码可运行

不知什么来源的题目

来源:https://kirin-say.top/2019/11/06/QEMU-Escape-in-Cloud-Security-Game/

漏洞:也不能说漏洞,在mmio_read里面直接给了system的后门

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
signed __int64 __fastcall rfid_read(__int64 a1, unsigned __int64 a2)
{
  size_t v2; // rax

  if ( ((a2 >> 20) & 0xF) != 15 )
  {
    v2 = strlen(magic_code);
    if ( !memcmp(code, magic_code, v2) )
      system(command);
  }
  return 0x42066LL;
}

利用:通过rfid_write将code赋值为跟magic_code相等,再设置一下command,最后调用rfid_read即可完成逃逸

BlizzardCTF 2017 Strng

题目链接:https://github.com/rcvalle/blizzardctf2017

漏洞:在pmio中对于数组的索引没有限制,导致越界读写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uint64_t __fastcall strng_pmio_read(STRNGState *opaque, hwaddr addr, unsigned int size)
{
  uint64_t result; // rax
  uint32_t v4; // edx

  result = -1LL;
  if ( size == 4 )
  {
    if ( addr )
    {
      if ( addr == 4 )
      {
        v4 = opaque->addr;
        if ( !(v4 & 3) )
          result = opaque->regs[v4 >> 2];    <========= 越界读
      }
    }
    else
    {
      result = opaque->addr;
    }
  }
  return result;
}

void __fastcall strng_pmio_write(STRNGState *opaque, hwaddr addr, uint64_t val, unsigned int size)
{
  if ( size == 4 )
  {
    if ( addr )
    {
      if ( addr == 4 )
      {
        v4 = opaque->addr;
        if ( !(v4 & 3) )
        {
          v5 = v4 >> 2;
          if ( (_DWORD)v5 == 1 )
          {
......
......
          }
          else
          {
            opaque->regs[v5] = val;    <========越界写
          }
        }
      }
    }
......
......
  }
}

利用: 1、通过数组越界,获得任意读写来泄露函数指针,计算出system函数地址 2、之后改写rand_r函数指针为system,调用rand_r函数即可劫持控制流

HITB-GSEC-2017-babyqemu

题目下载:https://github.com/kitctf/writeups/blob/master/hitb-gsec-2017/babyqemu/babyqemu.tar.gz

漏洞:也是对于dma_buf数组的索引没有限制,导致任意地址读写,只不过这个题目需要我们将虚拟地址转化为物理地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void __fastcall hitb_dma_timer(HitbState *opaque)
{
  dma_addr_t v1; // rax
  __int64 v2; // rdx
  uint8_t *v3; // rsi
  dma_addr_t v4; // rax
  dma_addr_t v5; // rdx
  uint8_t *v6; // rbp
  uint8_t *v7; // rbp

  v1 = opaque->dma.cmd;
  if ( v1 & 1 )
  {
    if ( v1 & 2 )
    {
      v2 = (unsigned int)(LODWORD(opaque->dma.src) - 0x40000);
      if ( v1 & 4 )
      {
        v7 = (uint8_t *)&opaque->dma_buf[v2];
        ((void (__fastcall *)(uint8_t *, _QWORD))opaque->enc)(v7, LODWORD(opaque->dma.cnt));
        v3 = v7;
      }
      else
      {
        v3 = (uint8_t *)&opaque->dma_buf[v2];   <=======越界读
      }
      cpu_physical_memory_rw(opaque->dma.dst, v3, opaque->dma.cnt, 1); //读出来后传递给dma.dst 
      v4 = opaque->dma.cmd;
      v5 = opaque->dma.cmd & 4;
    }
    else
    {
      v6 = (uint8_t *)&opaque[0xFFFFFFDBLL].dma_buf[(unsigned int)opaque->dma.dst + 0x510];  //这里ida有点问题,其实这里是opaque->dma_buf[opaque->dma.dst-0x40000]
      LODWORD(v3) = (_DWORD)opaque + opaque->dma.dst - 0x40000 + 0xBB8;
      cpu_physical_memory_rw(opaque->dma.src, v6, opaque->dma.cnt, 0);  // 越界写opaque->dma_buf[opaque->dma.dst-0x40000]
      v4 = opaque->dma.cmd;
      v5 = opaque->dma.cmd & 4;
      if ( opaque->dma.cmd & 4 )
      {
        v3 = (uint8_t *)LODWORD(opaque->dma.cnt);
        ((void (__fastcall *)(uint8_t *, uint8_t *, dma_addr_t))opaque->enc)(v6, v3, v5);
        v4 = opaque->dma.cmd;
        v5 = opaque->dma.cmd & 4;
      }
    }
    opaque->dma.cmd = v4 & 0xFFFFFFFFFFFFFFFELL;
    if ( v5 )
    {
      opaque->irq_status |= 0x100u;
      hitb_raise_irq(opaque, (uint32_t)v3);
    }
  }
}

利用: 1、通过数组越界读泄露函数指针enc,由于这个qemu-system-x86_64的导入表有system,所以我们直接可以算出system 2、用system覆盖enc函数 3、写入opaque->dma_buf为要执行的命令,比如cat flag 4、使用cmd=1|2|4时,调用enc函数,劫持控制流

QEMU Escape — vm_escape from 0CTF 2017 Finals

没有公开下载的题目 wp: https://blog.eadom.net/writeups/qemu-escape-vm-escape-from-0ctf-2017-finals-writeup/

漏洞: 1、对于phys_mem_write的len没有限制,导致可以越界读,同样用到了物理地址(需要将虚拟地址转化为物理地址) 2、uaf漏洞,在vdd_mmio_write中可以设置dma_timer的过期时间,而在vdd_dma_timer中调用了opaque->dma_state->phys_mem_read/write,而pci_vdd_uninit函数会将dma_state释放;所以加入pci_vdd_uninit函数,在vdd_dma_timer之前调用,就是uaf了。

利用: 1、通过phys_mem_write的越界读泄露程序地址还有libc地址(其实这里libc地址用不到,因为导入表有system了,只要程序地址加上偏移就行) 2、将我们要执行的命令复制到opaque->dma_buf 3、在vdd_mmio_write中可以设置dma_timer的过期时间 4、往/sys/bus/pci/slots/4/power写入0,从而触发pci_vdd_uninit去free dma_state 5、通过vdd_linear_write申请dma_state同样大小的内存,并用正确的值填充,具体代码如下,主要是将cmd设置为2,而phys_mem_read函数指针,设置为system,最后上面的dma_timer时间到了就会调用opaque->dma_state->phys_mem_read,从而让我们劫持控制流

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void put_fake_dma(void)
{
    struct dma fakedma;
    fakedma.cmd = 2;
    fakedma.phys_mem_read = system_addr;
    memcpy(pbuf, (void *)&fakedma, sizeof(fakedma));
    set_dmalen(0x330);
    set_dmastate_src(virt_to_phys(pbuf));
    set_dmastate_dst(virt_to_phys(pbuf));
    outb(0, VDB_PORT + 0);
}

Defcon 2018 - EC3

题目:https://github.com/o-o-overflow/chall-ec-3

漏洞:在mmio_write中,free的时候,没有将指针置空,导致了uaf漏洞,就跟常规的堆题一样,使用fastbin attack

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void __fastcall ooo_mmio_write_6E61F4(__int64 opaque, __int64 addr, __int64 value, unsigned int size)
{
 ......
 ......
  choose = ((unsigned int)addr & 0xF00000) >> 20;
  switch ( choose )
  {
    case 1u:
      free(gbuf_bss_1317940[((unsigned int)addr_copy & 0xF0000) >> 16]);
      break;
    case 2u:
      v12 = ((unsigned int)addr_copy & 0xF0000) >> 16;
      v8 = addr_copy;
      memcpy((char *)gbuf_bss_1317940[v12] + (signed __int16)addr_copy, &value_point[4], size);
      break;
    case 0u:
      v11 = ((unsigned int)addr_copy & 0xF0000) >> 16;
      if ( v11 == 15 )
      {
        for ( i = 0; i <= 14; ++i )
          gbuf_bss_1317940[i] = malloc(8LL * *(_QWORD *)&value_point[4]);
      }
      else
      {
        gbuf_bss_1317940[v11] = malloc(8LL * *(_QWORD *)&value_point[4]);
      }
      break;
  }
}

利用: 1、在gbuf_bss_1317940中构0x7f绕过fastbin检查,比如在gbuf_bss_1317940[8]中存放malloc的返回值 2、利用fastbin attack获得指向gbuf_bss_1317940的指针 3、利用上面的指针,将free或者malloc的got地址写入到gbuf_bss_1317940[10]中 4、通过edit gbuf_bss_1317940[10]即可修改got表 5、最后调用free或者malloc即可劫持控制流,这里有个cat flag的后门函数,劫持到那即可

题目难点在于没有符号表,需要逆向,还有就是qemu自身也会申请或者释放0x60大小的堆,所以需要循环申请和循环修改提升成功率

强网杯 qwb 2019 final execchrome

题目:https://github.com/ray-cp/vm-escape/tree/master/qemu-escape/qwb-final-2019-ExecChrome

只有qemu-system-x86_64,可能需要修复需要的lib,需要的库超级多

漏洞: 1、 nvme_mmio_read存在越界读漏洞,也是对索引没有限制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
uint64_t __cdecl nvme_mmio_read(NvmeCtrl *opaque, hwaddr addr, unsigned int size)
{
......
......
  memcpy(&val, &ptr[addr], sizea);
  return val;
}

2、 在nvme_mmio_write中的nvme_write_bar函数中故意添加了代码,也是导致NvmeCtrl->bar.cap之后的0-0x1000偏移任意地址写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ( sizea == 2 )
     {
       *(_WORD *)((char *)&NvmeCtrl->bar.cap + offset) = dataa;
     }
     else if ( sizea > 2 )
     {
       if ( sizea == 4 )
       {
         *(_DWORD *)((char *)&NvmeCtrl->bar.cap + offset) = dataa;
       }
       else if ( sizea == 8 )
       {
         *(uint64_t *)((char *)&NvmeCtrl->bar.cap + offset) = dataa;
       }
     }
     else if ( sizea == 1 )
     {
       *((_BYTE *)&NvmeCtrl->bar.cap + offset) = dataa;
     }

漏洞利用: 1、利用nvme_mmio_read进行程序地址以及堆地址的泄露,got表中存在system,所以程序地址加一个偏移就得到了system got的地址 2、通过NvmeCtrl->bar.cap之后的0-0x1000偏移任意地址写,在bar后面的地址伪造一个admin_sq->timer,timer中的cb设置为system got的地址 3、也是NvmeCtrl->bar.cap之后的0-0x1000偏移任意地址写,修改admin_cq->timer指针,指向上面伪造的timer

最后竟然通过只有通过重启动触发timer的调用…

XNUCA 2018 SSD

题目:https://github.com/w0lfzhang/vmescape/tree/master/xnuca

漏洞:还是常规的fastbin的uaf放到qemu里面,free的时候没将指针置空

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xnucaState *__fastcall xnuca_timer(xnucaState *State)
{
  xnucaState *result; // rax
  int v2; // eax
  void **v3; // rbx

  result = (xnucaState *)(State->cmd_9D0 & 4);
  if ( (_DWORD)result )
  {
    v2 = State->choose_9EC;
    switch ( v2 )
    {
      case 2:
        *(_DWORD *)((unsigned int)State->mallocSize + *(_QWORD *)(State->heaplist_9E0 + 8LL * (unsigned int)State->index)) = State->value_9F8;
        break;
      case 3:
        free(*(void **)(State->heaplist_9E0 + 8LL * (unsigned int)State->index));
        break;
      case 1:
        v3 = (void **)(State->heaplist_9E0 + 8LL * (unsigned int)State->index);
        *v3 = malloc((unsigned int)State->mallocSize);
        break;
    }
    result = State;
    State->cmd_9D0 &= 0xFFFFFFFB;
  }
  return result;
}

漏洞利用: 通过fastbin attack伪造fd指向free got后,修改free got为system plt的地址,最后调用free即可

跟defcon ec3比,只不过这个有符号,但是给这个加了点限制,才能进入漏洞代码:

1、首先调用xnuca_timer,先得调用xnuca_set_timer初始化计时器 2、而进入计时器的初始化,需要State->cmd_9D0 & 1 == 1,那就需要通过xnuca_auth 5次后设置a1->cmd_9D0 |= 1u; 3、最后进入xnuca_timer中的漏洞代码,需要cmd_9D0 & 4 == 1,这个可以通过调用xnuca_send_request设置,不过也得必须调用xnuca_send_request来传递我们的参数

跟defcon ec3不一样的还有malloc的返回值不是0x7fxxxxxxx,所以指向直接fd劫持到got表,修改free了

强网杯2019线上赛qwct

题目:https://github.com/ray-cp/vm-escape/tree/master/qemu-escape/qwb-preliminary-2019-qwct

漏洞:

通过strlen()到\x00才截止可以越界读

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
v18 = strlen((const char *)opaque->crypto.output_buf);
      v19 = size_copy == 1;
      v20 = size_copy == 1;
      if ( addr < v18 + 0x3000 && v19 )
      {
        if ( (opaque->crypto.statu - 6) & 0xFFFFFFFFFFFFFFFDLL )
        {
          result = -1LL;
        }
        else
        {
          v22 = *((_BYTE *)opaque + addr - 0x15C0);
          result = v22;
        }
        return result;

aes_encrypt_function和aes_decrypto_function都有8字节溢出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  if ( v7 )
  {
    v9 = 0LL;
    do
    {
      v10 = (__int64)&output_buf[v9];
      v11 = (__int64)&v4[v9];
      v9 += 16LL;
      AES_ecb_encrypt(v11, v10, (__int64)&aes, 0LL);
    }
    while ( v7 > v9 );
    v18 = 0LL;
    v19 = 0;
    v12 = 0;
    for ( i = 0LL; ; v12 = *((_BYTE *)&v18 + (i & 7)) )
    {
      v14 = output_buf[i] ^ v12;
      v15 = i++;
      *((_BYTE *)&v18 + (v15 & 7)) = v14;
      if ( v7 == i )
        break;
    }
    v16 = v18;
  }
  else
  {
    v16 = 0LL;
  }
  *(_QWORD *)&output_buf[v7] = v16;
  return 1;
}

漏洞利用: 1、mmio_write不能直接填充output_buf,所以我们通过调用stream_encrypto_fucntion去填充疑惑后都是非0的,那么strlen计算就会超过0x800,那就可以越界读,读取到函数指针stream_encrypto_fucntion的地址,从而算出程序的基址,及system_plt地址

2、虽然aes_encrypt_function和aes_decrypto_function都有8字节溢出,但是我们需要控制output_buf的值,我们才能最终控制计算出来的值(即循环异或,第一次是异或0,第二次是异或上一次的结果),直接通过aes_encrypt_function利用有点困哪,我们难以控制加密后的值。但是我们先aes加密,再通过aes解密,那么我们就可以精准控制解密结果了。

题外话

关注下有没常见套路整数溢出漏洞什么的

附录

关于exp传到qemu中

远程环境

  • telnet:telnet XXX.XXX.XXX.XXX 6666 > pwn.b64 && base64 -d pwn.b64 > pwn
  • 有无wget
  • 实在不行难道 echo?

本地环境

1、scp 2、sftp 3、文件系统打包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//解压
cpio -idmv < rootfs.img

//编译+打包
gcc -o exp -static exp.c
cp ./exp ./rootfs/root
cd ./rootfs && find . | cpio -o --format=newc > ../XXX

调用计算器,浏览器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// char *para="google-chrome –no-sandbox file:///home/qwb/Desktop/success.mp4";
// >>> from pwn import *
// >>> map(hex, unpack_many("gnome-calculator"))
// ['0x6d6f6e67', '0x61632d65', '0x6c75636c', '0x726f7461']

msfvenom -p linux/x64/exec cmd=”export DISPLAY=:0.0&&xcalc” -f dw

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
页面区块化与应用组件化
很多时候,我们喜欢划分所谓技术需求和业务需求。但其实,技术来自于业务,业务需要技术支撑,两者是分不开的。我们可以尝试在业务里,一样地写出花来。
被删
2024/08/08
5371
页面区块化与应用组件化
数据流管理方案 | Redux 和 MobX 哪个更好?
面试中常问的一道问题就是“你了解哪些数据流管理方案”,面对这样的提问,先搞懂为什么要学数据流管理,再来梳理、对比你所知道的方案。真正的前端开发,不仅仅要面试造火箭,实际工作中依然需要这样的能力。
用户3806669
2021/03/25
2.3K0
数据流管理方案 | Redux 和 MobX 哪个更好?
数据管理之元数据管理
元数据是指来自企业内外的所有物理数据和知识,包括物理数据的格式,技术和业务过程,数据的规则和约束以及企业所使用数据的结构。
肉眼品世界
2021/12/29
8.3K0
数据管理之元数据管理
ArkUI常用数据处理:掌握Map操作与动态数据管理
在HarmonyOS应用开发中,ArkUI框架提供了丰富的数据处理能力,尤其是对于Map这类非线性容器的操作。本文将详细介绍ArkUI中Map的基本概念、操作方法,以及如何在实际开发中应用Map进行数据处理和动态数据管理。
淼学派对
2024/11/04
1350
42. 精读《前端数据流哲学》
本系列分三部曲:《框架实现》 《框架使用》 与 《数据流哲学》,这三篇是我对数据流阶段性的总结,正好补充之前过时的文章。
黄子毅
2022/03/14
1K0
小程序的事件机制与异步执行
在微信小程序的开发过程中,事件机制和异步执行是两个非常重要的概念。小程序的事件机制不仅能够帮助开发者实现与用户交互,还能够高效地处理界面更新和数据流动。而异步执行则是处理网络请求、数据处理、文件上传等操作时的常用方式。本文将详细分析小程序的事件机制与异步执行,提供具体的示例与优化技巧。
LucianaiB
2025/02/21
1400
精读《一种 Hooks 数据流管理方案》
维护项目时,像全局用户信息、全局项目配置、全局功能配置等等,都是跨模块复用的全局数据。
黄子毅
2022/03/15
5760
Vuex
在相对独立的组件中,action -> state -> view的单向数据流能得到保证。而真实业务场景经常需要状态传递及共享,一般方法是:
ayqy贾杰
2019/06/12
1.3K0
React组件设计实践总结05 - 状态管理
今天是 520,这是本系列最后一篇文章,主要涵盖 React 状态管理的相关方案。
_sx_
2019/08/07
2.3K0
React组件设计实践总结05 - 状态管理
86.HarmonyOS NEXT 组件通信与状态共享:构建高效的组件协作机制
通过合理使用组件通信和状态共享机制,可以构建出结构清晰、易于维护的应用。在实际开发中,要根据具体需求选择合适的通信方式,并注意性能优化和代码质量。
全栈若城
2025/03/16
1030
前端架构101:MVC的不足与Flux的崛起
在前几篇中,我演示了一个前端 Backbone.js MVC 框架用于解决实际问题的例子。但 MVC 依然存在几个问题
苏南
2020/12/16
1.5K0
前端架构101:MVC的不足与Flux的崛起
状态管理的概念,都是纸老虎
不管是Vue,还是 React,都需要管理状态(state),比如组件之间都有共享状态的需要。什么是共享状态?比如一个组件需要使用另一个组件的状态,或者一个组件需要改变另一个组件的状态,都是共享状态。
Nealyang
2021/04/20
5.4K0
前端状态管理框架之Redux
随着应用程序单页面需求的越来越复杂,应用状态的管理也变得越来越混乱。应用的状态不仅包括从服务器获取的数据,还包括本地创建的数据,以及反应本地UI状态的数据,而Redux正是为解决这一复杂问题而存在的。
xiangzhihong
2022/11/30
1.2K0
工业互联网可视化系统风格的抉择:线框模式之 3D 数据中心机房的实现
3D 可视化,就是把复杂抽象的数据信息,以合适的视觉元素及视角去呈现,方便系统的展示、维护和管理。而在可视化系统的搭建选择上,所呈现的风格样式效果多种多样,各自所突出的适用场合也不尽相同。对于科技风格上的体现,线框模式可能是最具有代表性意义的实现方式之一。机房数据可视化的管控维护的实现上,在工业互联网的推动下,体现的维护数据和系统搭建也越来越多样化,而 Hightopo(以下简称 HT )的 HT for Web 产品上的有着丰富的组态化可供选择,本文将介绍如何运用 HT 丰富的 2/3D 组态搭建出一个线框楼宇可视化机房的解决方案。
HT for Web
2020/05/26
9540
探索Android复杂页面管理之道-QQ音乐播放页代码演进之路
前言 播放页是QQ音乐内曝光量最大的二级页,是端内展示歌曲信息、提供播控操作、进行推荐宣发的重要入口。随着QQ音乐的快速发展,播放页也从一个简单播控页面逐渐演变到了现在业务众多、UI多变的复杂页面。在该转变的过程中,播放页Android端的代码也根据不同时期的需要,进行了持续演进。本文将简要回顾Android端播放页代码在过去不同时期的结构特点,并重点介绍在最近一次代码结构调整中,我们探索出的一种适合多人开发和代码复用的复杂页面管理模式。 图 1: QQ音乐播放页 背景 MVC 在QQ音乐发展之初,播
QQ音乐技术团队
2021/07/23
3.9K1
数据流方案的思考
近两年前端开发从jquery演化到了谈必及react vue ,大部分人已经习惯了
用户2303251
2018/06/07
1.1K0
干货 | 浅谈React数据流管理
颜陈宇,携程玩乐高级前端开发工程师,前端架构组成员,目前主要负责玩乐国际化项目的App、H5以及Online三端技术架构。热衷于react技术栈,喜欢阅读和分享。
携程技术
2019/04/22
2.1K0
干货 | 浅谈React数据流管理
React全栈:Redux+Flux+webpack+Babel整合开发
1.const、let关键字:let块级作用域,const常量(如果是引用类型,那么可以修改它的属性)
硬核项目经理
2019/08/06
1.1K0
安卓软件开发:对比 MVVM 和 MVI 架构的模块设计
MVI(Model-View-Intent)和 MVVM(Model-View-ViewModel) 是安卓开发中很常见的两种架构。虽然它们的目标都是为了让代码更清晰、可维护,但在处理数据流、状态管理、以及用户交互的方式上,它们有着不同的思路。我用易懂的方式对比一下它们的区别。
Nimyears
2024/10/11
1.1K0
移动端复杂运营页解决方案的探索和实践
摘要 如何成为一名优秀的切图工程师?百度资深研发工程师潘征与大家分享自己的工作心得。 ROLE移动端酷炫运营页 2014年开始,我在我们部门负责移动端酷炫运营页面,也就是俗称的H5的研发工作。 这些酷
IT大咖说
2018/04/03
1.6K0
移动端复杂运营页解决方案的探索和实践
推荐阅读
相关推荐
页面区块化与应用组件化
更多 >
LV.3
石家庄叁芯智能科技联合创始人
目录
  • 不知什么来源的题目
  • BlizzardCTF 2017 Strng
  • HITB-GSEC-2017-babyqemu
  • QEMU Escape — vm_escape from 0CTF 2017 Finals
  • Defcon 2018 - EC3
  • 强网杯 qwb 2019 final execchrome
  • XNUCA 2018 SSD
  • 强网杯2019线上赛qwct
  • 题外话
  • 附录
    • 关于exp传到qemu中
    • 调用计算器,浏览器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档