Anda di halaman 1dari 6

__ __ /\ \ ___ ___ ___ __ __ __ ___ _ __ /\_\ \_\ \ / __`\ /' __` __`\ /'__`\ /'_ `\ /'__`\ / __`\/\`'__\ \/\

\ /'_` \ /\ \L\ \/\ \/\ \/\ \/\ __//\ \L\ \/\ \L\.\_ __/\ \L\ \ \ \/ __\ \ \/\ \L\ \ \ \____/\ \_\ \_\ \_\ \____\ \____ \ \__/.\_\/\_\ \____/\ \_\/\_\\ \_\ \___,_\ \/___/ \/_/\/_/\/_/\/____/\/___L\ \/__/\/_/\/_/\/___/ \/_/\/_/ \/_/\/__,_ / /\____/ \_/__/ OMEGA|ZINE RELEASE 04 Author : Cakill Schumbag || eyecry.satriani09[at]gmail[dot]com Online @ www.omega.or.id :: http://ezine.omega.or.id == Hacking - implementasi buffer overflow (loading shellcode) == PRELUDE ------Pengertian buffer overflow: kita akan manipulasi register EIP dengan program yang kita buat melalui cara buffering terhadap kapasitas memory itu sendiri EIP adalah register di mesin 32bit yang berfungsi menyimpan alamat memory yang akan menjalankan instruksi selanjutnya. START ----di sini saya mempunyai source exploit dengan shellcodenya schumbag@ngelux:~$ cat ngenes.c #include<stdio.h> char shellcode[] = "\xbb\x14\x00\x00\x00" "\xb8\x01\x00\x00\x00" "\xcd\x80"; int main() { int *ret; ret = (int *)& ret +2; (*ret) = (int)shellcode; } schumbag@ngelux:~$ lalu kita compile dengan opsi gcc -ggdb -mpreferred-stack-boundary=2 -o ngenes ngenes.c kemudian run schumbag@ngelux:~$ ./ngenes schumbag@ngelux:~$ masih tak terjadi apa-apa,coba tambahkan perintah.... schumbag@ngelux:~$ echo $? 20 schumbag@ngelux:~$ ~sedikit saya jelaskan mengenai struktur manipulasi terhadap memorynya pertama kita akan melakukan eksekusi file untuk overwrite hingga 12byte di regi

ster RET ~lalu melakukan hal yang sama untuk 4bytes di register EIP ~dan kembali ke register RET ~untuk kemudian eksekusi function hingga over yang memberi nilai baru di RET untuk instruksi selanjutnya.... kira-kira seperti inilah gambaran simpelnya : ====== | RET | ======= |EBP-old| ======= |Buffer[]| | 8 Bytes| ==========

<===== ESP

di balik fungsi tersebut terdapat space 20bit yang di alokasikan ke RET dan dan di stack ketika running EBP-old instruction pointer yang akan di insert di function tersebut. sekarang kita akan debugging menggunakan gdb schumbag@ngelux:~$ gdb ./ngenes GNU gdb (GDB) 7.2-ubuntu Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /home/schumbag/ngenes...done. (gdb) disas main Dump of assembler code for function main: 0x08048394 <+0>: push %ebp 0x08048395 <+1>: mov %esp,%ebp 0x08048397 <+3>: sub $0x4,%esp 0x0804839a <+6>: lea -0x4(%ebp),%eax 0x0804839d <+9>: add $0x8,%eax 0x080483a0 <+12>: mov %eax,-0x4(%ebp) 0x080483a3 <+15>: mov -0x4(%ebp),%eax 0x080483a6 <+18>: mov $0x804a010,%edx 0x080483ab <+23>: mov %edx,(%eax) 0x080483ad <+25>: leave 0x080483ae <+26>: ret End of assembler dump. (gdb) di sinilah letak register program ketika di execute 0x0804839d <+9>: add $0x8,%eax lalu coba untuk kita list lagi (gdb) list 1 #include<stdio.h> 2 3 char shellcode[] = "\xbb\x14\x00\x00\x00" 4 "\xb8\x01\x00\x00\x00"

5 "\xcd\x80"; 6 7 int main() 8 { 9 int *ret; 10 ret = (int *)& ret +2; (gdb) [baca:enter lagi] 11 (*ret) = (int)shellcode; 12 } (gdb) coba break di line 12 kemudian jalankan kembali (gdb) break 10 Breakpoint 1 at 0x804839a: file ngenes.c, line 10. (gdb) run Starting program: /home/schumbag/ngenes Breakpoint 1, main () at ngenes.c:10 10 ret = (int *)& ret +2; sekarang kita tes stacknya (gdb) x/8xw $esp 0xbffff3d4: 0x00000000 0xbffff3e4: 0xbffff484 ---------|INTERLUDE| ---------masing-masing di sini menunjukkan stack terhadap heap ketika file pointer di alo kasikan sekarang liat di ret (gdb) print /x ret $1 = 0x0 "0x00000000" menunjukkan lokasi local variabel ret pointer di stack define,dan l okasi "0xbffff458" mengarah ke local variable di ebp dan inilah lokasi address yang di tuju "0xb7e86ce7" di register EIP seep,kita lanjoootttt buat cari addressnya (gdb) disas 0xb7e86ce7 Dump of assembler code for function __libc_start_main: 0xb7e86c00 <function __libc_start_main+0>: push 0xb7e86c01 <function __libc_start_main+1>: mov 0xb7e86c03 <function __libc_start_main+3>: push 0xb7e86c04 <function __libc_start_main+4>: push 0xb7e86c05 <function __libc_start_main+5>: push 0xb7e86c06 <function __libc_start_main+6>: call 0xb7e86c0b <function __libc_start_main+11>: add 0xb7e86c11 <function __libc_start_main+17>: sub 0xb7e86c14 <function __libc_start_main+20>: mov 0xb7e86c17 <function __libc_start_main+23>: mov 0xb7e86c1a <function __libc_start_main+26>: mov 0xb7e86c20 <function __libc_start_main+32>: test 0xb7e86c22 <function __libc_start_main+34>: je main+239> 0xb7e86c28 <function __libc_start_main+40>: xor 0xb7e86c2a <function __libc_start_main+42>: mov

0xbffff458 0xbffff48c

0xb7e86ce7 0xb7fe0848

0x00000001 0xbffff530

%ebp %esp,%ebp %edi %esi %ebx 0xb7e86b1f $0x1423e9,%ebx $0x6c,%esp 0x14(%ebp),%esi 0x1c(%ebp),%eax -0x108(%ebx),%edx %edx,%edx 0xb7e86cef <__libc_start_ %ecx,%ecx (%edx),%edx

0xb7e86c2c <function __libc_start_main+44>: 0xb7e86c2e <function __libc_start_main+46>: 0xb7e86c31 <function __libc_start_main+49>: 0xb7e86c37 <function __libc_start_main+55>: 0xb7e86c39 <function __libc_start_main+57>: ---Type <return> to continue, or q <return> to Quit (gdb)

test %edx,%edx sete %cl mov -0x40(%ebx),%edx test %eax,%eax mov %ecx,(%edx) quit---quit

semua terdapat function __libc_start_main untuk pemangilan program dan pemanggilan fungsi itu sendiri karena ebp stack telah di pindah terlebih dulu untuk register %esp dan sekarang kita coba untuk basic stack dari frame function __libc__start__main untuk overwrite addres s ini 0xb7e86ce7 mari kita lihat kembali source codenya schumbag@ngelux:~$ cat ngenes.c #include<stdio.h> char shellcode[] = "\xbb\x14\x00\x00\x00" "\xb8\x01\x00\x00\x00" "\xcd\x80"; int main() { int *ret; ret = (int *)& ret +2; (*ret) = (int)shellcode; } schumbag@ngelux:~$ terutama di variabel ret = (int *)& untuk instruksi selanjutnya yang menunjukkan lokasi ret di 0xbffff3d4 yaitu stack dan pointer yang menambah +2 memberi nilai 8bytes integer local variabel yang telah di overwrite di "0xbffff458" dari variabel ret dan instruksi terakhir (*ret) = (int)shellcode; mereplace di address tersebut. mari kita coba dengan instruksi (gdb) s 11 (*ret) = (int)shellcode; dan coba lagi hasil dari relocate fungsi variable tadi (gdb) x/8xw $esp 0xbffff3d4: 0xbffff3dc 0xbffff3e4: 0xbffff484 0xbffff458 0xbffff48c 0xb7e86ce7 0xb7fe0848 0x00000001 0xbffff530

point nya ketemu di 0xbffff3dc dan stack buffer telah terjadi di 0xbffff3d4: dan disini number location nya 0xb7e86ce7 instruksi selanjutnya shellcode ada di sini juga 0xb7e86ce7 sekarang tes kembali print shellcodenya (gdb) print &shellcode $2 = (char (*)[13]) 0x804a010 ini addressnya 0x804a010

pilih instruksi untuk mengetahui locate stacknya (gdb) s 12 } (gdb) x/8xw $esp 0xbffff3d4: 0xbffff3dc 0xbffff458 0x0804a010 0xbffff3e4: 0xbffff484 0xbffff48c 0xb7fe0848

0x00000001 0xbffff530

udah di overwrite di addres shellcodenya,coba perhatikan dengan yang pertama,menandakan address yang berbeda coba di disas lagi,apa masih menampilkan yang sama seperti tadi (function __libc__start__main) hanya saja sedikit berbeda dengan routine shellcode tadi yaitu : 0x0804a010 (gdb) disas 0x0804a010 Dump of assembler code for function shellcode: 0x0804a010 <shellcode+0>: mov $0x14,%ebx 0x0804a015 <shellcode+5>: mov $0x1,%eax 0x0804a01a <shellcode+10>: int $0x80 0x0804a01c <shellcode+12>: add %al,(%eax) End of assembler dump. (gdb) kita eksekusi lagi program (gdb) c Continuing. Program exited with code 024. (gdb) Kesimpulan ---------artikel ini adalah demo paling simpel bagaimana buffer overflow bekerja dengan shellcode yang di injeksiken ke exploit penetrasi macam ini bukanlah teknik tingkat tinggi untuk mendapatkan akses root seperti biasanya namun di sini menerangkan implementasi b0f bekerja di sebuah sistem FadeOut ------Semoga paper yang simpel ini bisa memberi gambaran dan mampu memberi penjelasan gamblang bagi para pembaca yang juga memberi pengalaman dan pelajaran bagi penulis. Referensi --------http://www.safemode.org/files/zillion/shellcode/doc/Writing_shellcode.ht ml (Writing Shellcode) http://penturalabs.wordpress.com/2011/04/02/vulnerability-development-bu ffer-overflows-how-to-bypass-non-executable-stack-nx/ (How to bypass non executable) http://pastebin.com/ZenZFVGp (ASM SecurityTube)

http://insecure.org/stf/smashstack.html (Smashing for fun and profit by aleph one) http://purecode.pl/blog/?p=48 (Algorithmic runtime)

*greetz to: omicron and all omega.or.id Team (Salam kenal semua...) ketek,syn_attack,nofia_fitri,wenkhairu,mywisdom,petimati,chaer_newbi e,ditatompel,ade yonatan,v3n0m,eidelweiss,adoet [R.I.P]peri.carding,all staff && crew devilzc0de team devilzc0de,jasakom,surabaya hackerlink,[R.I.P] irc.dist0rsi.biz kritik && saran kirimkan ke eyecry.satriani09[at]gmail[dot]com

Anda mungkin juga menyukai