Come sfruttare le vulnerabilità delle stringhe di formato

Introduzione

Negli articoli precedenti, abbiamo discusso le funzioni di stampa, le stringhe di formato e le vulnerabilità delle stringhe di formato. Questo articolo fornisce una panoramica di come le vulnerabilità delle stringhe di formato possono essere sfruttate. In questo articolo, inizieremo risolvendo una semplice sfida per perdere un segreto dalla memoria. Nel prossimo articolo, discuteremo un altro esempio, dove ci sarà catena una vulnerabilità stringa di formato e vulnerabilità Buffer Overflow per creare un impatto migliore.

Come possono essere sfruttate le vulnerabilità delle stringhe di formato?

Come menzionato nell’articolo precedente, di seguito sono riportati alcuni degli attacchi possibili utilizzando le vulnerabilità delle stringhe di formato.

  • Perdite di segreti
  • Denial of Service
  • Perdite di indirizzi di memoria
  • Sovrascrittura di indirizzi di memoria

In questo articolo, discutiamo i primi due elementi.

Leaking secrets from stack

Di seguito è riportato il programma vulnerabile che useremo per comprendere l’approccio per sfruttare una semplice vulnerabilità di stringa di formato per essere in grado di leggere i dati dalla memoria.

#include < stdio.h >

int principale (int argc, char *argv) {

char * segreto = “p @ ssw0rD”;

printf (argv);

}

Come possiamo notare, il programma è vulnerabile alla vulnerabilità della stringa di formato poiché la funzione printf riceve l’input dell’utente e lo stampa. Va notato che non esiste un identificatore di formato utilizzato nella funzione printf, lasciando così il programma vulnerabile.

Eseguiamo il programma usando gdb, controlliamo lo smontaggio della funzione principale e impostiamo un punto di interruzione all’indirizzo della chiamata printf.

gd gdb ./vulnerabili

gef➤ disass principale

Dump di codice assembler per la funzione main:

0x0000000000401136 <+0>: endbr64

0x000000000040113a <+4>: push rbp

0x000000000040113b <+5>: mov rbp,rsp

0x000000000040113e <+8>: sub rsp,0x20

0x0000000000401142 <+12>: mov DWORD PTR ,edi

0x0000000000401145 <+15>: mov QWORD PTR ,rsi

0x0000000000401149 <+19>: lea rax, # 0x402004

0x0000000000401150 <+26>: mov QWORD PTR ,rax

0x0000000000401154 <+30>: mov rax,QWORD (Read more…)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.