Suponiendo que está hablando de una sobrescritura de EIP de vainilla y no de algo como SEH, tiene dos opciones disponibles para usted. Ninguno de estos son lo que yo consideraría técnicas "principiantes", ya que requieren un poco de conocimiento de ensamblaje, aunque hay algunos sitios web excelentes que pueden ayudarlo.
1. Emplea un Egg Hunter . Un cazador de huevos implica pegar una pequeña parte de un código de shell en un espacio de almacenamiento limitado y luego preparar un huevo de 8 bytes (es decir, n00bn00b) antes de su código de shell. El cazador de huevos buscará en la memoria su único huevo y luego saltará al código de la cáscara que lo sigue.
Ejemplo de variable de búfer
buffer = "\x41" *100 + "n00bn00b" + shellcode + "\x90" * 50 + egghunter + offset + jmpback
Donde más arriba "offset" podría ser un simple JMP ESP
en una DLL y "jmpback" sería una instrucción de ensamblaje para saltar al búfer a algún lugar en el nopslide.
Aunque parece un poco confuso, el flujo de ejecución es el siguiente
-
La variable offset
se coloca donde está la sobrescritura de EIP. Esta variable simplemente mantiene la dirección en una instrucción JMP ESP
que luego apunta a la variable jmpback
-
La variable jmpback
contiene una instrucción de ensamblaje (es decir, \xeb\xc4
) que regresa al nopsled.
-
El shellcode de egghunter se ejecuta y comienza a buscar la cadena n00bn00b.
-
Cuando se encuentra la cadena n00bn00b, salta al código de shell que se ejecuta.
El Egghunter es una excelente manera de darte más espacio de almacenamiento.
2. Saltar hacia atrás en el búfer : la segunda opción, si el espacio del búfer está disponible para usted, es emitir algunas instrucciones de ensamblaje para saltar nuevamente al búfer para ejecutar su código de shell. Esto suena como la más fácil de las dos opciones, sin embargo, es posible destruir la pila si no tienes cuidado de volver a alinear la pila después de la ejecución del código de shell.
Si tiene una sobrescritura limpia de otro registro, como ECX, podría ser posible simplemente JMP ECX
disparar su código de shell.
Tenga en cuenta que esta respuesta asume que cosas como DEP y ASLR no están habilitadas en la máquina que está intentando explotar.