Questa vulnerabilità di overflow di interi può essere sfruttata?

3

Questo overflow di interi è sfruttabile e se la risposta è sì, come posso sfruttarlo?

char buffer[20];
int len = atoi(argv[1]);
if(len < 20)
  memcpy(buffer,argv[2],len);

Se imposto len su -1 l'applicazione si blocca, perché il numero di byte da copiare è troppo lungo e c'è un segfault. Ma esiste un modo o un metodo per sfruttare la vulnerabilità?

    
posta user126623 17.07.2016 - 23:41
fonte

3 risposte

3

Non è necessario utilizzare -1, qualsiasi valore maggiore di 20 consentirà di sovraccaricare il buffer.

Dipenderà dalle prossime istruzioni e dalle attenuazioni impostate dal compilatore, ma da questo punto in poi probabilmente si può sovrascrivere l'indirizzo di ritorno ed eseguire un codice shell fornito come secondo parametro.

    
risposta data 17.07.2016 - 23:48
fonte
1

È pericoloso.

È sfruttabile? Possibilmente. Ci hai già detto che puoi causare un arresto anomalo, quindi potresti essere in grado di eseguire un sistema facendolo schiantarlo ... a seconda di dove argv 1 proviene da. Se si tratta di un valore hard coded, o se è generato da un'app chiamante e può sempre essere compreso tra 0 e 20, allora potrebbe non essere sfruttabile nel sistema. Sarebbe comunque un cattivo schema di programmazione, poiché un piccolo cambiamento potrebbe renderlo sfruttabile. O se non è mai eseguito codice, o se è codice che viene eseguito solo da te e nessun altro lo esegue mai, le regole del firewall che impediscono valori inferiori a 0 o superiori a 20, ecc, allora non sarebbero sfruttabili.

È eseguibile? Può essere. Non abbiamo abbastanza informazioni per determinare in alcun modo. Non sappiamo se il compilatore inserisce stack di canarini. Non sappiamo se esiste un altro codice che controlla argv 1 e lo costringe a essere un valore sicuro.

Prova a utilizzare ! exploitable se stai usando Windows se vuoi un suggerimento (non ricordo gli strumenti per altri sistemi operativi).

    
risposta data 18.07.2016 - 00:10
fonte
0

Nessuno sembra pensare alla possibilità che argv [1] non sia un numero. Se inserisci semplicemente "this" come primo argomento, atoi restituisce 0, e puoi anche overflow del buffer perché 0 < 20. atoi non è una buona scelta sotto molti aspetti. È meglio usare strtol che ti permetta di rilevare errori di input.

    
risposta data 17.08.2016 - 15:58
fonte

Leggi altre domande sui tag