Stavo provando un semplice exploit di overflow del buffer dello stack creando un file dannoso crash.m3u.
come puoi vedere il puntatore EIP viene sovrascritto da "A" ma EBP non è cambiato. non si suppone che EBP venga sovrascritto prima dell'EIP ??
Stavo provando un semplice exploit di overflow del buffer dello stack creando un file dannoso crash.m3u.
come puoi vedere il puntatore EIP viene sovrascritto da "A" ma EBP non è cambiato. non si suppone che EBP venga sovrascritto prima dell'EIP ??
Bene, i registri non sono valori nella memoria in attesa di essere sovrascritti dal buffer!
Nel contesto di un buffer overflow, non si limita a continuare a scrivere fino a quando non si raggiunge una "posizione" del registro EIP: al contrario, si sostituiscono i valori nello stack e uno di essi potrebbe diventare l'indirizzo di ritorno della propria funzione. Dopo aver sovrascritto lo stack, l'esecuzione riprende come se nulla fosse accaduto. Le istruzioni vengono eseguite e, a seconda di cosa sono, EBP può essere modificato o meno.
Infine, purché non si sia verificata alcuna eccezione nel frattempo, si raggiunge il ret
della funzione. Questo è quando il valore di ritorno viene letto dallo stack e spostato in EIP.
Quindi nel tuo caso, se l'istruzione ret
non viene mai raggiunta, ci sono ancora alcuni modi per ottenere l'esecuzione del comando. Il candidato più probabile qui è attraverso manipolazione SEH .
Buon divertimento
Leggi altre domande sui tag debugging buffer-overflow