Supponendo che tu stia parlando di una sovrascrittura EIP vanigliata e non di qualcosa come SEH, hai due opzioni a tua disposizione. Nessuna di queste è quella che considererei una tecnica "principiante" in quanto richiedono un po 'di conoscenza dell'Assemblea, anche se ci sono alcuni grandi siti Web che possono aiutarti.
1. Impiegare un Cacciatore di uova . Un egg hunter prevede di attaccare un piccolo bit di codice shell in uno spazio buffer limitato e quindi anteporre un uovo da 8 byte (ad esempio n00bn00b) prima del codice shell. L'egg hunter cercherà nella memoria il tuo uovo unico e poi salterà al codice shell che lo segue.
Esempio di variabile del buffer
buffer = "\x41" *100 + "n00bn00b" + shellcode + "\x90" * 50 + egghunter + offset + jmpback
Dove sopra "offset" potrebbe essere un semplice JMP ESP
in una DLL e "jmpback" sarebbe un'istruzione di assemblaggio per tornare nel buffer da qualche parte nel nopslide.
Anche se sembra un po 'confuso il flusso di esecuzione è il seguente
-
La variabile offset
viene posizionata dove si trova la sovrascrittura EIP. Questa variabile mantiene semplicemente l'indirizzo a un'istruzione JMP ESP
che punta quindi alla variabile jmpback
-
La variabile jmpback
contiene un'istruzione di assemblaggio (ad esempio \xeb\xc4
) che salta indietro nel nopsled.
-
Il codice shell egghunter viene eseguito e inizia la ricerca della stringa n00bn00b.
-
Quando viene trovata la stringa n00bn00b, salta allo shellcode che viene eseguito.
L'Egghunter è un ottimo modo per concederti un po 'più di spazio buffer.
2. Saltare all'indietro nel buffer : la seconda opzione, se lo spazio del buffer è disponibile, è di emettere alcune istruzioni di assemblaggio per tornare indietro nel buffer per eseguire il codice shell. Sembra la più semplice tra le due opzioni, tuttavia è possibile eliminare lo stack se non si fa attenzione a riallineare lo stack dopo l'esecuzione del codice shell.
Se hai una sovrascrittura pulita di un altro registro, come ECX, potrebbe anche essere possibile solo JMP ECX
per attivare il tuo codice shell.
Nota che questa risposta presuppone che cose come DEP e ASLR non siano abilitate sulla macchina che stai tentando di sfruttare.