Programación orientada al retorno: cómo encontrar un pivote de pila

16

Tengo un programa con un desbordamiento de pila. Contiene algún código que no es aleatorio (no está usando ASLR). Quiero hacer un exploit de programación orientado al retorno. Dado que este es un desbordamiento de pila, lo primero que debo hacer es encontrar un pivote de pila, para que pueda hacer que RSP apunte a una dirección de memoria conocida donde vive mi programa ROP.

¿Cuáles son las formas más modernas para encontrar un pivote de pila? ¿Qué secuencias de instrucciones debo buscar? ¿Existe una lista / base de datos de secuencias de instrucciones que se puedan usar como pivotes de pila?

Además, ¿hay alguna defensa / mitigación que deba vigilar o que ayude a tener en cuenta?

Por ejemplo, creo que recuerdo que longjmp() calls es un buen lugar para encontrar un pivote de pila (por ejemplo, una secuencia POP RSP ... RET), asumiendo que controlo algún valor en la pila. Sin embargo, alguien me dijo que algunas plataformas ahora incorporan una mitigación para hacer más difícil explotar longjmp() calls: almacenan los buffers setjmp en forma encriptada. ¿Es correcto? ¿Hay alguna forma de evitar esta mitigación o debo renunciar a longjmp() s?

Otra mitigación es que la función VirtualProtect de Windows 8 comprueba que se está llamando con RSP configurado en algo razonable. Sin embargo, otros han documentado cómo evitar esa mitigación , por lo que no es una barrera, y de todos modos, eso no se enfoca en evitar el giro inicial de la pila. Mi enfoque / interés en esta pregunta está en el pivote de la pila inicial, no en lo que haces después.

    
pregunta D.W. 25.10.2013 - 09:07
fuente

1 respuesta

3

Echa un vistazo a mona por corelan

enlace

    
respondido por el airloom 04.02.2014 - 02:06
fuente

Lea otras preguntas en las etiquetas