Hola aer0x y Kr0m.
Yo estoy exactamente en la misma situación que Kr0m, estoy empezando con el reversing y me estoy pegando con el reto stack4 de exploit-exercise.He superado el reto compilando el programa a la vieja usanza (con las opciones que indicó Kr0m: -mpreferred-stack-boundary=2)
Sin embargo sigo sin poder solucionarlo con una compilación "estandar" (gcc -fno-stack-protector - execstack stack4.c -o stack4) y me gustaría entender cómo hacerlo.
Aquí es donde me pierdo. Estoy muy pez en ensamblador, así que corregidme si me equivoco. Por lo que entiendo:
mov ecx,[ebp-0x4] -> Copia en ecx el valor de ebp-0x4, es decir, la posición de retorno, aquí es donde debemos insertar la dirección de salto a la funcion win
lea esp,[ecx-0x4] -> Copia en esp el contenido de la memoria al que apunta ecx y le resta 0x4 (esto es lo que dudo.)
Así que lo que he intentado es sumar 0x4 a la dirección de la funcion win y y escribirla a continuación del relleno. Pero esto no funciona. ¿Qué es lo que estoy haciendo mal? Supongo que no he interpretado bien lo que hace la instruccion lea esp,[ecx-0x4] ¿No?
Un saludo.
Yo estoy exactamente en la misma situación que Kr0m, estoy empezando con el reversing y me estoy pegando con el reto stack4 de exploit-exercise.He superado el reto compilando el programa a la vieja usanza (con las opciones que indicó Kr0m: -mpreferred-stack-boundary=2)
Sin embargo sigo sin poder solucionarlo con una compilación "estandar" (gcc -fno-stack-protector - execstack stack4.c -o stack4) y me gustaría entender cómo hacerlo.
Cita de: aerøx en 5 Agosto 2015, 15:13 PM
Entendiendo que hacen estas dos instrucciones:
mov ecx,[ebp-0x4]
lea esp,[ecx-0x4]
y teniendo en cuenta que el ASLR no está activado puedes poner dos direcciones de memoria en la entrada de datos junto al relleno y conseguir con esto superar el reto.
Aquí es donde me pierdo. Estoy muy pez en ensamblador, así que corregidme si me equivoco. Por lo que entiendo:
mov ecx,[ebp-0x4] -> Copia en ecx el valor de ebp-0x4, es decir, la posición de retorno, aquí es donde debemos insertar la dirección de salto a la funcion win
lea esp,[ecx-0x4] -> Copia en esp el contenido de la memoria al que apunta ecx y le resta 0x4 (esto es lo que dudo.)
Así que lo que he intentado es sumar 0x4 a la dirección de la funcion win y y escribirla a continuación del relleno. Pero esto no funciona. ¿Qué es lo que estoy haciendo mal? Supongo que no he interpretado bien lo que hace la instruccion lea esp,[ecx-0x4] ¿No?
Un saludo.