Bypass Stack Canary superando l'indirizzo di ritorno

6

Stavo testando un semplice programma in C con protezione canarino da stack. Ho tentato di bypassare la protezione sovrascrivendo l'indirizzo di ritorno della funzione e sovrascrivendo l'indirizzo principale. Lo sto sovrascrivendo con l'indirizzo di una funzione all'interno del programma di destinazione. Ottengo il seguente risultato che mi porta a credere che un attacco sia possibile:

Harilevatolosmash,masembracheabbiatentatodisaltarenellafunzionetarget,cheè"yo". Ho tentato di manipolare qualsiasi indirizzo a cui stava tentando di accedere, ma senza fortuna.

La mia domanda è, è possibile un ulteriore sfruttamento? Termina come risultato di SIGSEGV (ad esempio, l'accesso a 0x1010 ...) o il rilevamento delle canarie?

L'idea è nata da questo articolo

Il programma:

    
posta dylan7 07.03.2016 - 00:22
fonte

1 risposta

1

Si sta interrompendo a seguito del rilevamento delle canarie. Solo perché GDB mostra i frame dello stack, incluso il tuo altro indirizzo di ritorno, non significa che l'esecuzione del codice sarebbe mai arrivata lì - GDB sta semplicemente leggendo gli indirizzi nello stack ("unwinding the stack") per visualizzare le informazioni. Dovresti solo aver raggiunto yo se avevi restituito correttamente tutte queste funzioni, ma dal momento che __stack_chk_fail risulta nel programma che sta morendo senza essere tornato, non sarebbe successo.

Per bypassare i canarini dello stack, hai praticamente bisogno di perdere, indovinare o forzare il valore delle canarie, trovare una scrittura arbitraria (ad esempio, scrivere su EIP senza sovrascrivere il canarino) o trovare un bug sfruttabile nel gestore di stack canary .

    
risposta data 20.08.2017 - 20:25
fonte

Leggi altre domande sui tag