Ripristino dello stack frame dopo l'esecuzione del payload

1

È possibile ripristinare il frame dello stack in modo che l'EIP ritorni al luogo che era a (prima dell'overflow) dopo che è stato eseguito un payload?

Se uno stack frame viene sovraccaricato e il payload eseguito, come può essere ripristinata l'applicazione vulnerabile in modo che continui a funzionare come prima?

Se l'EIP viene sovrascritto con l'indirizzo all'inizio del payload o della slitta NOP e lascia che generi una shell, la shell generata mantiene la cornice dello stack in pausa? O cosa succede esattamente dopo che il payload è stato eseguito e l'EIP viene nuovamente letto? Non causerà un loop infinito all'interno del frame dello stack?

    
posta jarryd 21.09.2016 - 20:52
fonte

1 risposta

2

Tecnicamente sembra possibile, ma solo nel caso in cui si conosca il percorso del codice (ad esempio, si sa che l'exploit verrà attivato solo da un indirizzo specifico dell'applicazione). Sembra che quello che devi fare è:

  • Sovrascrive solo l'indirizzo di ritorno nello stack (e nient'altro);
  • Nel tuo codice eseguito memorizza il vecchio ESP / RSP in uno dei registri throwaway e lo metti in un altro posto (quindi le tue operazioni non danneggiano lo stack) potrebbe non essere necessario se sei sicuro che lo shellcode non danneggi lo stack contenuto);
  • Archivia tutti i registri che devono essere preservati attraverso le chiamate alle funzioni;
  • Fai ciò che devi fare;
  • Ripristina i registri conservati e impila il puntatore;
  • Assegna un valore di ritorno appropriato (se la funzione restituisce un valore) in un registro adeguato (s);
  • Vai all'indirizzo specifico dopo da dove è stata chiamata la funzione da te sfruttata.

Una shell generata in questo caso può usare uno stack dedicato o anche lo stack originale. Poiché si riduce, se il codice utilizza correttamente lo stack, non danneggerà il contenuto dello stack originale che è stato inserito prima dell'invocazione.

    
risposta data 21.09.2016 - 23:53
fonte

Leggi altre domande sui tag