STACK-SIX amd64
Éste nivel presenta el uso de ataques de buffer overflow de 1 byte para redirigir la ejecución.
CÓDIGO FUENTE
Analizando el código que tenemos delante podemos ver que:
El código lee una variable de entorno llamada ExploitEducation y la pasa a la función greet en la variable who.
Después copia el mensaje GREET al buffer que dice
"Welcome, I am pleased to meet you"
.Después chequea el tamaño del input (máximo 127 bytes).
Ahora viene el fallo: Copia el input en el buffer + 34 (longitud de GREET), por tanto, si el tamaño de nuestro input es 127 bytes (máximo) podemos sobrescribir 34 bytes del stack.
En total podemos escribir 34 + 127 = 161 bytes.
Esto no es suficiente para sobreescribir la dirección de retorno pero sí lo es para sobreescribir el byte menos significativo del RBP almacenado
EXPLICACIÓN DEL EXPLOIT
Sabemos que el registro RBP se utiliza para restaurar el RSP al final de la función main y después saltar a la dirección de retorno.
Al finalizar main se ejecuta el epílogo de la función. Se ejecuta la instrucción leave
y posteriormente la instrucción ret
. La instrucción leave
coge el valor de RBP y lo introduce en RSP (lo que ignora el stack frame de la función que se termina). Después saca el valor de RBP del stack. Por último ret
retorna a la dirección del RSP, en este caso, la dirección que nosotros hemos manipulado en el RBP.
Por tanto, la idea del exploit es modificar RBP para apuntar a una dirección donde RBP+8 sea el inicio de nuestra variable de entorno ExploitEducation.
PREPARANDO EL EXPLOIT
Última actualización