regresar a libc- encontrar la dirección de libc y encontrar compensaciones

1

Entonces intenté realizar un retorno a libc de acuerdo con enlace .

Encontré la dirección de libc usando "ldd vuln", y encontré la compensación del sistema usando "readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system".

Estaba luchando para encontrar la dirección de "sh" en el comando fflush en el programa.

Probé el volcado hexadecimal del binario y encontré el desplazamiento de "sh \ x00", pero no pude encontrar la dirección base del binario.

No estoy seguro de si las direcciones que encontré de libc y el desplazamiento del sistema son válidas, y realmente no sé cómo encontrar la dirección real de la cadena "sh \ x00".

Por favor, corrígeme si me equivoco en la forma en que encontré las direcciones, y me encantaría recibir ayuda para encontrar la dirección de la cadena :)

Gracias de antemano! :-)

    
pregunta Jonathan 24.08.2017 - 09:33
fuente

1 respuesta

1

Primero, antes de que pueda abordar su problema, debe comprobar si el ejecutable se ejecuta bajo ASLR ( enlace ) Si ese es el caso, tendrá que encontrar una manera de filtrar la dirección del programa, ya que la dirección de libc será diferente cada vez. Puede verificar esto fácilmente ejecutando los mapas de gdb - > b main - > info proc un par de veces y comparando las compensaciones. Si son diferentes, su ejecutable probablemente se ejecuta bajo ASLR. Suponiendo que no hay protección ASLR, el uso de las asignaciones gdb - > b main - > info proc debería darle la dirección base de libc SO. Para encontrar el desplazamiento de la función a la que le gustaría saltar, puede usar muchos métodos, pero el uso de readelf -s debería funcionar bien. Esto le dará el desplazamiento de la función calculada desde la base del SO (base dirección de SO + offset = posición del código en tiempo de ejecución).

Para encontrar la dirección base del módulo ejecutable en tiempo de ejecución, puede usar gdb o cualquier otro depurador y buscar el punto de entrada del ejecutable (o simplemente buscar su cadena después de que el ejecutable se cargue en la memoria). .). Básicamente, cualquier programa que cargue su ejecutable en la memoria y le permita ver la memoria funcionará.

La dirección de un ejecutable bajo linux suele ser 0x400000 para ejecutables de 64 bits y 0x08048000 para ejecutables de 32 bits, según lo define el enlazador gnu. Pero no hay nada que impida que alguien cambie el punto de entrada a una dirección diferente.

Una vez que hayas descubierto las asignaciones de memoria, deberás encontrar los gadgets en el código, lo dejaré para que investigues ... enlace

Quizás pueda encontrar más respuestas mirando los ejercicios en exploit-exercises.com por ejemplo, protoestrella stack6 debe tratar con ret2libc, puedes buscar un tutorial

editado: parece que ldd no siempre te dará la dirección correcta, incluso ignora la desactivación de ASLR en mi sistema. Probablemente sea mejor usar gdb

    
respondido por el lightnet 27.08.2017 - 00:49
fuente

Lea otras preguntas en las etiquetas