Cómo encontrar la dirección del sistema () en un ejecutable - Explotación ROP

1

Estoy tratando de encontrar la dirección de system() en un repositorio de código que estoy tratando de explotar usando la Programación Orientada por Devolución (para un proyecto de curso). El código ha incluido stdlib.h pero no ha usado system() en ninguna parte.

Tenía la impresión de que todas las funciones en stdlib.h estarían en el mismo espacio de direcciones que el ejecutable (que estoy tratando de explotar) ya sea que se hayan utilizado explícitamente o no. gdb me da este error:

(gdb) print 'system@plt'
No symbol "system@plt" in current context.

Del mismo modo, execve() tampoco está en contexto:

(gdb) print 'execve@plt'
No symbol "execve@plt" in current context.

¿Esto significa que el código es inmune a ROP? No conozco ninguna otra función que pueda usarse para generar un shell.

    
pregunta Nikhil 07.10.2018 - 16:54
fuente

1 respuesta

0

El uso de print 'system@plt' solo es válido si el programa ya tiene una función existente (llamada o no) que hace referencia directamente al sistema (). En tu ejemplo ese no es el caso.

Primero, deshabilite la aleatorización de bibliotecas si no lo ha hecho ulimit -s unlimited

En GDB

  1. Establezca un punto de interrupción en main

  2. Ejecuta el programa.

  3. sistema de impresión

Eso le da la dirección para el sistema ()

Desde allí ejecuta el exploit como si estuvieras intentando.

Además, en lugar de publicar aquí, es posible que desee consultar a un asistente técnico o a su profesor. Si estás confundido, es probable que otros estudiantes también lo estén.

    
respondido por el Daisetsu 07.10.2018 - 17:11
fuente

Lea otras preguntas en las etiquetas