Offset en Stack

0

Las compensaciones en los desbordamientos de búfer parece que no puedo entender. Aquí hay una cita del libro que estoy leyendo sobre este tema.

  

La dirección de la variable "i" en el marco de pila de main () se usa como punto de referencia. Entonces se resta un desplazamiento de ese valor; el resultado es la dirección de retorno de destino.

  1. ¿Qué es un desplazamiento?
  2. ¿Por qué necesito la compensación al explotar?
  3. ¿De qué manera el uso de una ubicación de pila cercana como marco de referencia ayuda a mi capacidad para encontrar un desplazamiento?
  4. Explique cómo la cita anterior encuentra la dirección de retorno utilizando un desplazamiento
pregunta Samuel F 25.07.2016 - 00:58
fuente

1 respuesta

2

Cuando esté desbordando un búfer para escribir en la pila de una manera que sea explotable, sobrescribirá la dirección de retorno en la pila. Es decir, el envío de una cadena larga de AAAAAAAAAAAAAAAAAAAAAAAAAAA.....AAAAAAAAA dará como resultado que EIP contenga el valor 0x41414141 cuando la aplicación se bloquee.

Las razones de esto están bien documentadas en muchos lugares de Internet. Aleph1 está rompiendo la pila por diversión y beneficio o Tutoriales de Corelan son excelentes lugares para leer más información, pero en la pregunta en cuestión .

Si bien el control de EIP es excelente, no conduce instantáneamente a ejecutar el código de su elección. Cuando la función de epílogo muestra la dirección de retorno de la pila, continuará ejecutando las instrucciones en esa ubicación de memoria. Por lo tanto, deberá proporcionar un valor diferente al 0x41414141 . El primer problema es que no sabes qué 4 A 's en tu cadena son los que se encuentran en EIP . Esta distancia desde la primera A hasta las 4 A que sobrescriben EIP generalmente se denomina desplazamiento. Puede resolver esto manualmente cambiando los valores suc como AAAABBBBCCCCDDDD....etc o puede usar uno de los generadores de patrones que pueden calcular el desplazamiento por usted.

Una vez que conozca el desplazamiento, puede codificar la dirección donde debe estar su shellcode en la pila (más fácil para los principiantes) o encontrar un gadget que lo lleve de vuelta a la pila donde está su código de shell (f.ex: jmp esp ) y escriba esa ubicación de memoria en EIP .

    
respondido por el wireghoul 25.07.2016 - 03:02
fuente

Lea otras preguntas en las etiquetas