BUFFER OVERFLOW EXPLOIT
Buffer overflow biasa dimanfaatkan untuk mengexploitasi kerentanan suatu program. Sesuai dengan namanya, buffer overflow berarti meload buffer dengan data yang lebih besar dari daya tampungnya. Variable lokal disimpan di stack memori. Apabila buffer variable lokal ini di overflow, maka data kelebihannya akan tersimpan di stack juga. Stack merupakan bagian penting yang menyimpan data parameter fungsi, variable lokal dan alamat instruksi pointer. Mengubah alamat instruksi pointer di stack akan menyebabkan perubahan alur eksekusi program. Menurut saya ada kemiripan dengan codecave, yaitu sama-sama mengubah alur eksekusi program yang sudah dicompile. Berikut ini skenario pembelokan eksekusi program :
#========================
.section .data
.section .text
.globl _start
jmp dummy
_start:
pop esi #menyimpan alamat string command shell ke register eax
#lakukan sesuatu dengan alamat tersebut, terserah mungkin mau di print atau
#ekseskusi command shell (biasanya dengan syscall 11 execve)
dummy:
call _start #call ini bertujuan agar alamat instruksi dibawah disimpan di stack
.string "simple string"
#========================
Ilustrasi dalam bahasa C :
void main(int argc, char **argv)
{
char *name[2];
name[0] = "/bin/sh";
name[1] = NULL;
//selanjutnya, int execve(char *file, char *argv[], char *env[])
execve(name[0], name, NULL);
exit(0);
}
Register yang digunakan :
1. EAX : 0xb - nomor syscall
2. EBX : alamat dari nama program
3. ECX : alamat null-terminated argument-vector, argv (alamat dari nama)
4. EDX : alamat null-terminated environment-vector, env/enp (NULL)
Sumber :
1. https://www.tenouk.com/Bufferoverflowc/Bufferoverflow5.html
2. https://insecure.org/stf/smashstack.html

Tidak ada komentar:
Posting Komentar