El programa vulnerable, recibe una cadena desde el usuario de 16 bytes, y luego la copia en un buffer de 8 bytes usando strcpy. He escrito un exploit sencillo, al cual le indicas cuantos bytes inutiles deseas, y luego la direccion de retorno en hexadecimal.
Pero cuando sobreescribo la funcion de retorno, solo una funcion se ejecuta, las demas (sabiendo su direccion) no lo hacen. ¿Por que sucederá eso? ¿Puede alguien explicarme como sobreescribir bien la direccion de retorno?
Exploit.c
Código
/*Simple Exploit loader usage: exploit.exe <trash_bytes> <ret addr> Recibe la cantidad de bytes inutiles necesario para desbordar el buffer y usa la direccion de retorno en hexadecimal, convertida a un binario plano en un int de 4 bytes, y enviado al revés (por ser little endian, o al menos eso pensé cuando lo cree) */ #include <stdio.h> #include <stdlib.h> union ret_addr{ char bytes[4]; unsigned int raw; }; int load_file_on_buffer(char filename[], void **ptr_buffer_destiny){ FILE *file_loaded; void *buffer_destiny; unsigned int file_size; if(file_loaded == NULL) return 0; *ptr_buffer_destiny = buffer_destiny; buffer_destiny[file_size] = '\0'; //printf("BEGIN DEBUG FILE\n"); //printf("%s", buffer_destiny); //printf("\n\nEND DEBUG FILE\n"); return file_size; } int main(int argc, char *argv[]){ FILE *shellcode_file; char *shellcode; int file_size; union ret_addr ret_addr; int i = 0; for(i; i < trash_bytes; i++){ } if(argc == 3){ } file_size = load_file_on_buffer("shellcode.bin", &shellcode); for(i = 0; i < file_size; i++){ } }
Gracias de antemano. No sé si habrá algo mal con mi exploit. Ya me he estado leyendo la stack y como funciona. Seguire buscando en internet....
EDIT 1:
Estoy jugando con un programa tipo TCP servidor hecho por mi mismo, y en vez de sobreescribir EIP, sobreescribo EDX. ¿Puede alguien decirme por qué? Gracias de antemano.