Veamos... hay 2 formas de aver los b0f... yo para linux nunka e echo nada lo digo por si me ekivoco... peor aver:
esta esta forma:
NOPNOPNOPNOPNOPNOPNOPNOP...NOPshellcoderetretret
\_______________________________________/\______/
esto es el espacio de la variable SC RET
que tiene el bug
Bueno em este caso en la variable que tiene el b0f le metes la shellcode al final y al principio pones NOPS... xq? muy sencillo xq dependiendod e los sistemas operativos tienen unos desplazamientos de memoria un poco diferentes... entonces cuantos mas NOPs pongas ma sposibilidades tienes de acertar, y luego poens la shellcode y luego sobreescribes unas cuantas veces el ret... asi sobreescribes ebp y finalmente el ret que es loq te interesa, que offset poner en el ret? claro, para eso te pillas el dbg de linux q nose como guiarte

y saber en q Direccion de memoria EMPIEZA la vartiable a tener la memoria reservada... dependiendo de la cantidad de nop pues ya tienes q ir probando aver q offset poner hasta q veas que salta donde tu kieres

.
La otra forma es la que ya sabes la de poner la shellcode despues del ret... eso simplemente se hace para q no tengas q calcular el offset internamente y te hagas con un offset de alguna libreria q calgue el prograsma en memoria y tenga la direccion de jmp esp ya q seria lo q esta en la cima de la pila solo aria falta ejecutarlo, pero claro siempre esta el problema de meter las direcciones staticas, que si lo haces para un sistema concreto te funcionara pero para diferentes pues ya es mas complicado.
Resumen: No vas a poder sacar el exploit pillar un findoffset.exe buscar el exe cambiarlo y rular... ademas haciendo eso no aprenderas... y si no aprendes pues te tiraras preguntando la misma historia siempre
