Diberikan sebuah Python source code, kita diminta untuk bypass validasi yang berlaku. Mari kita lihat codingannya. Jadi cara kerja code ini sebagai berikut : Menerima input hexadecimal dari user Mengubah input menjadi bytes (‘\x’) Hash input dengan algoritma MD5 Validasi hasil MD5 pada array posisi ke 6 sampai 6 karakter sebelum array terakhir dan input […]
Category: Reverse Engineering
[Imaginary CTF] – Go Fish!
Pada challenge ini, saya diberikan sebuah file ELF bernama gofish. Seperti dari nama challengenya, kita dapat mengetahui bahwa file ini dibuat dengan bahasa pemrograman GoLang (Google Language). Karena file binary ini not stripped, kita bisa mencari function mainnya. File ini dibuat dengan bahasa GoLang, maka function mainnya ada di main_main. Mari kita buka file ini […]
[Imaginary CTF] – Keycode
Pada challenge ini saya diberikan sebuah file bernama key. Step pertama yang saya lakukan adalah membuka file tersebut menggunakan IDA64. Nah, kita akan bermain di checkFlag Function ini. Disini terlihat ada sebuah nilai yang di XOR. Dan yang menariknya lagi disini adalah nilai yang di XOR terlihat seperti function checkFlag yang di recursive. Coba kita […]
[Cyber Jawara 2020 Qualification] – Snake 2020
pada challenge ini kami menerima sebuah file .jar >< unch unch java, pada saat dijalankan javanya akan terlihat seperti game snake kayak biasamemang sungguh bukan ular biasa, bercanda gan, kemudian seperti yang terlihat di gambar diatas file tersebut akan membuka sebuah game snake yang terlihat biasa biasa saja, dari deskripsi soal terlihat bahwa jika kita […]
[Joints2020] – crackme
Diberikan sebuah binary 64 bit not stripped. Pseudocode dari fungsi main adalah sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
int __cdecl main(int argc, const char **argv, const char **envp) { char v4; // [rsp+0h] [rbp-30h] _BYTE v5[3]; // [rsp+5h] [rbp-2Bh] _BYTE v6[6]; // [rsp+Ah] [rbp-26h] int v7; // [rsp+14h] [rbp-1Ch] char v8; // [rsp+19h] [rbp-17h] unsigned __int64 v9; // [rsp+28h] [rbp-8h] v9 = __readfsqword(0x28u); __isoc99_scanf("%5c-%5c-%5c-%5c-%5c", &v4, v5, v6, &v6[5], &v7); v8 = 0; if ( checker(&v4) ) unlock(); else printf("Invalid serial key"); return 0; } |
Dilihat program meminta input sepanjang 25 karakter dan kemudian input akan diproses oleh fungsi checker() dan bila hasil dari checker() adalah true maka fungsi unlock() akan dipanggil. Berikut pseudocode dari fungsi unlock():
1 2 3 4 5 6 7 8 9 10 |
int unlock() { char i; // al FILE *stream; // [rsp+8h] [rbp-8h] stream = fopen("flag.txt", "r"); for ( i = fgetc(stream); i != -1; i = fgetc(stream) ) putchar(i); return fclose(stream); } |
Fungsi tersebut akan membuka file flag.txt pada server nc. Berikut pseudocode dari fungsi checker():
[noxCTF 2018] – Guess The String
Challenge Description : Would you like to test your luck? Let’s see if you can guess the correct string. Diberikan File ELF-64 bit bernama GuessTheString, ketika dijalankan maka hasilnya adalah sebagai berikut : Selanjutnya, dengan menggunakan IDA, saya mencoba untuk melakukan disassemble file tersebut, dengan hasil sebagai berikut : dari hasil disassemble tersebut, terdapat function […]
[OverTheWire] – Behemoth3
behemoth3 dapat diakses menggunakan : “ssh behemoth3@behemoth.labs.overthewire.org” dengan password yang didapatkan pada behemoth2 yaitu ‘nieteidiel’. disclaimer : writeup ini dibuat dengan bahan bacaan dari writeup : https://github.com/USCGA/writeups/tree/master/overthewire/behemoth/level3 pada level ini, terdapat file bernama behemoth3. Ketika file tersebut dieksekusi, maka hasilnya adalah sebagai berikut : selanjutnya saya menggunakan ltrace untuk melihat garis besar proses […]
[OverTheWire] – behemoth2-3
Untuk mengerjakan behemoth2, dapat menggunakan ssh “ssh behemoth2@behemoth.labs.overthewire.org” dan memasukkan password yang telah didapatkan sebelumnya dari behemoth1. Terdapat sebuah file ELF yang bernama behemoth2, ketika dijalankan akan maka hasilnya adalah sebagai berikut : terlihat bahwa dijalankan perintah touch, di mana perintah touch merupakan command yang digunakan untuk membuat file kosong. Tetapi, pada eksekusi file […]
[KKSI 2019] – siapGRAAK
Soal ini dapat kalian download disini Pada kita diberikan soal berupa ELF 64-bit.
1 2 |
root@kali:~# file siapGRAAK siapGRAAK: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=a8680e08d2a4cd7f23306ac67459036c1f914f7e, not stripped |
kita coba jalankan program ini terlebih dahulu,
1 2 3 4 |
root@kali:~# ./siapGRAAK Flag nya apa nih Kang ?: iWantThatFLagg SALAH NIH |
kita coba lihat program ini menggunakan IDA pro 64-bit, dan pada mainnya terdapat psudeocode seperti ini,
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 |
int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax size_t i; // [rsp+0h] [rbp-C0h] size_t v5; // [rsp+8h] [rbp-B8h] char s2[8]; // [rsp+10h] [rbp-B0h] __int64 v7; // [rsp+18h] [rbp-A8h] __int64 v8; // [rsp+20h] [rbp-A0h] int v9; // [rsp+28h] [rbp-98h] __int16 v10; // [rsp+2Ch] [rbp-94h] char s[136]; // [rsp+30h] [rbp-90h] unsigned __int64 v12; // [rsp+B8h] [rbp-8h] v12 = __readfsqword(0x28u); *(_QWORD *)s2 = -821479746076235608LL; v7 = -4697167109371201534LL; v8 = -6839456764105678448LL; v9 = 1520982160; v10 = 61; puts("Flag nya apa nih Kang ?:"); fgets(s, 128, stdin); s[strlen(s) - 1] = 0; v5 = strlen(s); for ( i = 0LL; i < v5; ++i ) s[i] = get_tbl_entry((unsigned int)s[i]); if ( v5 == 29 ) { if ( !strncmp(s, s2, 0x1EuLL) ) { puts("YESSS BERHASIL"); result = 0; } else { puts("SALAH NIH"); result = 1; } } else { puts("SALAH NIH"); result = 1; } return result; } |
dapat dipahami bahwa inputan kita dilakukan pengolahan pada fungsi get_tbl_entry() pada setiap char inputan kita. Mari kita lihat isi […]
[OverTheWire] – Behemoth 0-2
Behemoth 0 -> 1 Behemoth 0 dapat diakses dengan “ssh behemoth0@behemoth.labs.overthewire.org” dengan password default behemoth0. Tujuan dari setiap level pada wargame ini adalah untuk mengakses shell dan mendapatkan password untuk melanjutkan ke level berikutnya. Pada Behemoth0, terdapat sebuah file ELF bernama behemoth0 pada folder /behemoth. Ketika file tersebut dijalankan, maka outputnya adalah sebagai berikut : […]