Omisión de ASLR con fuga de información

7

Trabajando a través del curso de explotación binaria moderna de RPI aquí . Estoy teniendo problemas con un ejemplo sobre la explotación de ASLR que se supone que utiliza una pérdida de memoria para obtener información sobre la pila y luego calcular el desplazamiento de una llamada del sistema. Aquí está el código:

#include <stdio.h>
#include <string.h>

/* gcc -pie -fPIE -fno-stack-protector -o aslr_leak2 ./aslr_leak2.c */

int main(int argc, char * argv[])
{

char leaky[16];

if(argc < 2)
{
    printf("Please provide two arguments.\n");
    return 1;
}

memcpy(leaky, argv[1], 16);

printf("Leaky buffer: %s\n", leaky);
printf("another round? : ");
fgets(leaky, 64, stdin);

return 0;
}

No parece un exploit de cadena de formato para obtener la pérdida de memoria, por lo que no estoy seguro de cómo se supone que funciona. Si comprendo correctamente, debería obtener información de la primera impresión, que me ayuda a sobrescribir el puntero de retorno para crear un gadget ROP. Sí, puedo ejecutar esto dentro de GDB si quisiera, pero quiero poder no hacer eso.

    
pregunta Praet 14.08.2017 - 23:35
fuente

1 respuesta

1

Al proporcionar 16 caracteres como primer argumento, rellenarás el búfer con fugas. Como no hay espacio para un nulo de terminación, el printf subsiguiente reproducirá sus 16 caracteres y continuará imprimiendo lo que esté en la pila hasta que encuentre un carácter nulo de terminación. Esta es tu fuga de información. Las direcciones de los dispositivos ROP se pueden calcular en función de las direcciones filtradas.

    
respondido por el Dennis Sanders 15.08.2017 - 10:28
fuente

Lea otras preguntas en las etiquetas