V8-Exploit-Level7

zhaojunqi Lv2

V8 Exploit Level7

level7:

一.分析patch文件

删除deoptimize操作

二.利用思路

patch文件中删除了deoptimize相关操作,导致TurBoFan生成的JIT代码中,在检测到一个object的map不同时,不会进行deoptimize操作。可通过修改对象类型进而在通过利用类型混淆构造addressof和fakeobj原语进而到达任意代码执行。

三.exp

核心代码如下图所示(根据Array.functionMap函数构造addressof原语和fakeobj原语)

addressof和fakeobj原语的构造

addressof:
首先进行训练,让编译器认为arr的数组类型为double类型,接着再让arr[1]=obj这样会改变数组类型为object类型并会像level6那种方式改变在内存当中的布局,紧接着以double的方式读取对象数组,则可完成addressof原语。
fakeobj:
同上,最终以对象形式返回浮点数即可。

任意代码执行

接着可根据addressof原语和fakeobj原语构造任意地址读写原语,有了任意地址读写原语以及addressof原语,即可用level2中的方法实现任意代码执行。

结语

level7中利用deoptimize可以构造addressof和fakeobj原语,核心还是level6当中提到的数组类型混淆的方法来实现。有问题欢迎和我多多交流。

  • Title: V8-Exploit-Level7
  • Author: zhaojunqi
  • Created at : 2024-12-11 20:46:18
  • Updated at : 2025-10-17 17:31:02
  • Link: https://redefine.ohevan.com/2024/12/11/V8-Exploit-Level7/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments