Come eseguire l'overflow del buffer sui parametri non argomento?

2

Sono nuovo per bloccare gli attacchi di overflow e sto cercando di fare lo stesso su un codice di esempio c che ho.

  • Ho tre variabili a, b e buffer.
  • aeb hanno dei valori assegnati a loro nel codice stesso. buffer Interagisce in modo interattivo con l'input dell'utente. Il valore di "buffer" è non tratto dall'argomento.
  • La mia intenzione è quella di sovraccaricare il buffer in modo tale che sovrascriverà b con un valore desiderato. La sovrascrittura di EIP o ESP non è l'intenzione qui.
  • Con gdb sono riuscito a capire che se passo un certo numero di valori sovrascriverebbe il valore della variabile b.
  • Tuttavia sono bloccato qui perché gdb non mi consente di digitare o incollare il file Caratteri ASCII che corrispondono al valore desiderato di b. Per Ad esempio, considerare 1356 è il valore desiderato. L'esagono per lo stesso è 0x0000054C. Quindi per sovrascrivere b, dovrei dare in ASCII di 4C, 05, 00 e 00 in gdb come gli ultimi quattro byte dell'ingresso rispettivamente. Sfortunatamente questo non è possibile.
  • Un altro modo che ho trovato sul web è quello di passare i valori esadecimali usando perl. Tuttavia questo metodo canalizza l'output perl sull'argomento del codice. La variabile che sto traboccando qui prende il suo valore dall'utente inserire mentre si esegue il programma in modo interattivo e non il da argomento del programma.

Esiste un modo per passare valori esadecimali a parametri non di argomento per eseguire un overflow del buffer basato su stack?

    
posta hax 14.08.2016 - 03:47
fonte

3 risposte

1

La soluzione a questo era semplice. Ho dovuto trovare un modo per digitare l'ASCII corrispondente ai valori esadecimali 4C, 05, 00 e 00 nel prompt. Dopo un po 'di googling ho capito quanto segue

4C - L

05 - ctrl + E

00 - ctrl + @

Fonte: link

    
risposta data 12.11.2016 - 18:15
fonte
2

Alcune tecniche per raggiungere questo obiettivo sono discusse su qui

I metodi 1 e 2 dovrebbero funzionare anche fuori da gdb.

Modifica (Le tecniche sono copiate sotto per conservarle)

Metodo 1:

perl -e 'print "A"x48; print "\x1b\x88\x04\x08";' > /tmp/input
gdb ./a.out
(gdb) run < /tmp/input   # voila: GDB reads terminal,
                         # your program reads /tmp/input

O al di fuori di gdb:

$ perl -e 'print "A"x48; print "\x1b\x88\x04\x08";' > /tmp/input
$ ./foo < /tmp/input

Metodo # 2:

mkfifo /tmp/pipe
perl -e 'print "A"x48; print "\x1b\x88\x04\x08";' > /tmp/pipe &
# perl will block, waiting for someone to read the pipe
gdb ./a.out
(gdb) run < /tmp/pipe

Questo è anche utilizzabile fuori da gdb nel modo descritto in precedenza.

    
risposta data 12.11.2016 - 17:46
fonte
0

Ecco un codice C che trabocca tre parametri senza argomenti.

int main()
{
   char s[8];
   int x, y, z;

   strcpy(s, "This is some text");
   return(0);
}

"questo è" andrà in s, x otterrà "alcuni", y otterrà "tex" e z otterrà "t seguito da un carattere nullo.

Probabilmente riceverai un avvertimento (errore?) dal compilatore che sta per traboccare.

    
risposta data 14.08.2016 - 04:18
fonte

Leggi altre domande sui tag