Omita Stack Canary pasando la dirección de retorno

6

Estaba probando un programa simple en C con protección canaria apilada. Intenté eludir la protección sobrescribiendo la dirección de retorno de la función y sobrescribiendo la dirección principal. Lo estoy sobrescribiendo con la dirección de una función dentro del programa objetivo. Obtengo el siguiente resultado que me lleva a creer que es posible un ataque:

Detectóelsmash,peroparecequeintentósaltaralafuncióndedestino,quees"yo". Intenté manipular la dirección a la que intentaba acceder, pero no tuve suerte.

Mi pregunta es, ¿es posible una mayor explotación? ¿Está terminando como resultado de SIGSEGV (es decir, el acceso a 0x1010 ...) o la detección de canarios?

La idea surgió de este artículo

El programa:

    
pregunta dylan7 07.03.2016 - 00:22
fuente

1 respuesta

1

Está terminando como resultado de la detección de canario. El hecho de que GDB muestre los marcos de la pila, incluida su otra dirección de retorno, no significa que la ejecución del código hubiera llegado hasta allí. GDB solo está leyendo las direcciones de la pila ("desenrollando la pila") para mostrarle la información. Usted solo hubiera llegado a yo si hubiera regresado exitosamente de todas esas funciones, pero como __stack_chk_fail provoca que el programa muera sin regresar, eso no sucedería.

Para evitar los canarios de la pila, es casi necesario filtrar, adivinar o forzar el valor del canario, encontrar una escritura arbitraria (p. ej., escribir sobre EIP sin sobrescribir el canario) o encontrar un error explotable en el manejador del canario de la pila .

    
respondido por el David 20.08.2017 - 20:25
fuente

Lea otras preguntas en las etiquetas