Pwnable.tw - Start (100)
Diberikan sebuah binary bernama start, yang vulnerable buffer overflow, karena buffer inputan lebih besar dari buffer variable penampung.
Berikut informasi binary start.
Hasil disassembly menggunaan Binary Ninja pada fungsi _start
Diketahui bahwa binary start ditulis menggunakan asm x86 dan menggunakan 3 syscall yaitu write, read dan exit. Referensi tentang syscall dapat dilihat disini
Pada bagian warna biru adalah proses pemanggilan syscall write dan bagian warna merah adalah pemanggilan syscall read . Lalu bagian kuning paling bawah adalah prospes stack akan di naikan sebanyak 20 bytes, sehingga Top Of Stack nya adalah alamat dari fungsi _exit dan program akan loncat ke fungsi _exit untuk mengakhiri eksekusi.
Apabila code nya di convert ke C kira-kira seperti berikut
How To Get A Shell ?
Karena binary nya sama sekali tidak memiliki proteksi, kita dapat dengan mudah inject shellcode lalu loncat ke shellcode berada. Dengan asumsi bahwa ASLR dalam keadaaan ON, kita dapat meleak Stack Address lalu mengkalkulasikan jarak antara Stack address dan tempat shellcode berada.
Pada dasar nya program start akan mem PUSH 28 bytes data ke dalam stack, berikut Layout Stack nya
Dari Layout Stack diatas dapat di pastikan untuk mengoverwrite Return Address atau EIP nya dibutuhkan 20 bytes. Lalu arahkan eksekusi program ke instruksi mov ecx, esp (pada alamat : 0x8048087). sehingga program akan mengluarkan output yang berisi Stack Address.