V8 Exploit Level4

zhaojunqi Lv2

V8 Exploit Level4

level4:

一.分析patch文件

给出Array.setlength函数

二.利用思路

根据Array.setlenth函数构造addressof原语和fakeobj原语,进而利用level 3中的利用思路实现任意代码执行。

三.exp

核心代码如下图所示(通过伪造对象的方式构造任意地址读写原语)

首先定义一些数组,其中重要的就是浮点型数组corrupt_arr,和对象数组obj_arr,通过改变corrupt_arr的长度来越界读写obj_arr,利corrupt_arr的浮点型数据形式写入,再用obj_arr的对象类型读出,即可成功构造fakeobj原语,反之可得到addressof原语。

addressof原语和fakeobj原语的构造

分别利用debugprint打印corrupt_arr和obj_arr的信息

计算:(aa11-a9a5)=108 108/8=13……4 可知corrupt_arr[13]的高4字节=corrupt_arr[0]
由于创建了一个ArrayBuffer,使得f64a和i32a共用一块缓冲区,只不过一个占64位一个占32位,因此将64位的值放入f64a再用i32a[1]读出的即是高32位数据

因此f64a[0] =corrupt_arr[13]; return unptr(i32a[1]);即可完成addressof原语。同样的方法可以得到fakeobj原语。

任意代码执行

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

结语

level4中利用了Array.setlength来通过越界读写数组构造addressof原语和fakeobj原语进而利用level3中的方式,完成了任意代码执行,如果有问题欢迎多多交流。

  • Title: V8 Exploit Level4
  • Author: zhaojunqi
  • Created at : 2024-12-11 15:30:09
  • Updated at : 2025-10-17 17:31:05
  • Link: https://redefine.ohevan.com/2024/12/11/V8-Exploit-Level4/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments