# PicoCTF - Some Assembly Required 2 ###### tags: `PicoCTF` `CTF` `Web` ## Background ## Source code :::spoiler source ```javascript const list_str = ['copy_char', 'value', '207aLjBod', '1301420SaUSqf', '233ZRpipt', '2224QffgXU', 'check_flag', '408533hsoVYx', 'instance', '278338GVFUrH', 'Correct!', '549933ZVjkwI', 'innerHTML', 'charCodeAt', './aD8SvhyVkb', 'result', '977AzKzwq', 'Incorrect!', 'exports', 'length', 'getElementById', '1jIrMBu', 'input', '615361geljRK']; const func1_cal = function(var_a, var_b) { var_a = var_a - 195; let list_strc4 = list_str[var_a]; return list_strc4; }; (function(var_a, var_b) { const func1_cal = func1_cal; while (!![]) { try { const var_c = -parseInt(func1_cal(200)) * -parseInt(func1_cal(201)) + -parseInt(func1_cal(205)) + parseInt(func1_cal(207)) + parseInt(func1_cal(195)) + -parseInt(func1_cal(198)) * parseInt(func1_cal(212)) + parseInt(func1_cal(203)) + -parseInt(func1_cal(217)) * parseInt(func1_cal(199)); if (var_c === var_b) break; else var_a['push'](var_a['shift']()); } catch (_0x4f8a) { var_a['push'](var_a['shift']()); } } }(list_str, 310022)); let exports; (async () => { const func1_cal = func1_cal; let res_1 = await fetch(func1_cal(210)), res_2 = await WebAssembly['instantiate'](await res_1['arrayBuffer']()), res_3 = res_2[func1_cal(204)]; exports = res_3[func1_cal(214)]; })(); function onButtonPress() { const func1_cal = func1_cal; let res_1 = document[func1_cal(216)](func1_cal(218))[func1_cal(197)]; for (let idx = 0; idx < res_1['length']; idx++) { exports[func1_cal(196)](res_1[func1_cal(209)](idx), idx); } exports['copy_char'](0, res_1[func1_cal(215)]), exports[func1_cal(202)]() == 1 ? document['getElementById'](func1_cal(211))[func1_cal(208)] = func1_cal(206) : document[func1_cal(216)](func1_cal(211))['innerHTML'] = func1_cal(213); } ``` ::: ## Exploit 這一題也是想破頭了,首先應該很容易可以拿到前端驗證的code如上,beautify之後可以看到一個`./aD8SvhyVkb`的可疑檔案,取得之後發現是一個`.wasm` file ```bash $ file aD8SvhyVkb aD8SvhyVkb: WebAssembly (wasm) binary module version 0x1 (MVP) $ strings aD8SvhyVkb memory __wasm_call_ctors strcmp check_flag input copy_char __dso_handle __data_end __global_base __heap_base __memory_base __table_base j! F!!A !" ! "q!# # !% $ %q!& !( ' (q!) & )k!* !+ + q! +xakgK\Ns><m:i1>1991:nkjl<ii1j0n=mm09;<i:u ``` 感覺最後的字串有一點奇怪,丟到[cyberchef](https://gchq.github.io/CyberChef)用magic解看看,就出現flag了,其實就只是XOR 8而已 Flag: `picoCTF{64e2a9691192fcbd4aa9b8f5ee8134a2}` ## Reference [ picoCTF 2021 Some Assembly Required 2 ](https://youtu.be/2TCZEkW0bjc)