Javier Fortuño Martí
1.- Modifica el buffer problemático a 200 bytes y modifica el relleno para provocar una
excepción para que salte a la dirección 0xCCCCCCCC.
Para esto lo primero que debemos hacer es modificar el tamaño del buffer, para esto nos
dirigimos al fichero “buf.c” y modificamos el tamaño del array de 100 a 200.
A continuación nos dirigimos a [Link] y modificamos el payload para que ahora este
sobrepase los 200 bytes y sobreescriba la ebp con la dirección 0xCCCCCCCC
El nuevo payload está formado por 212 “A”s y la dirección solicitada.
Ahora, si queremos seguir usando los breakpoints, habrá que reajustar sus direcciones,
puesto que el nuevo código desensamblado de ‘func’ queda así:
Por lo que reajustamos los breakpoints:
Ahora ejecutamos por pasos el programa y podremos ver que al terminar de ejecutarse
func, la dirección 0xcccccccc termina sustituyendo a la de la ebp original
si avanzamos al siguiente breakpoint, cuando vuelve de func, vemos que ya ha sucedido la
sustitución:
2.- Haz que se ejecute el shell con un buffer de 200 bytes.
Para esto utilizaremos el script proporcionado ‘[Link]’, intenta adivinar la dirección de
retorno correcta en la pila para realizar así un stackoverflow introduciendo 67 NOPs
seguidos por el shellcode (todo esto obtenido de ‘util’) y la dirección de retorno calculada.
Por lo que si queremos lanzar el shell con 100 bytes de más en el buffer, solo debemos
incrementar el número de NOPs en 100, lo que quiere decir: 167
Realizamos esto y lanzamos el script proporcionado ‘[Link]’ el cual compila y
lanza los códigos necesarios para que todo funcione, el resultado es el siguiente:
Como se observa, al final hemos obtenido acceso al shell.