Skip to content

juanma-gil/tp-2-programmatori-di-spaghetti

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TP2 BUFFER OVERFLOW

El objetivo del siguiente trabajo práctico es poder modificar la dirección de retorno ubicada en el stack del main para poder ejecutar una función personalizada.

Antes de comenzar con la aplicación estuvimos haciendo un poco de investigación, a continuación citamos la bibliografía


Primeras aproximaciones

La primera aproximacion al estudio de estas herramientas fue un foro el cual se detallaba como ejecutar un exploit utilizando diversas herramientas como scripts en perl y programas en c para generar argumentos a medida de lo pedido, ahi se detallaban conceptos en torno a los bytes de proteccion, uso de no-ops para saltarsela, tambien hablaba de los problemas que representaba no poder hacer que los datos se correspondieran con las posicisiones deseadas. Laa solucion del problema que se planteaba era mas grande del que nos estabamos enfrentando por eso las ideas planteadas ahi no se implmentaron, sin embargo resultaron ilustrativas del tipo de problema al que nos enfrentabamos.


Compilacion y flags

Para poder realizar lo solicitado vamos a tener que utilizar algunas flags especiales del compilador gcc, primero veamos el comando.

gcc -g -o Ej_overflow_2 Ej_overflow_2.c -m32 -fno-stack-protector

  • -m32: le estamos diciendo que lo compile en 32 bits, es decir, el programa se ejecutará como en una arquitectura 32 bits.
  • -fno-stack-protector: desactivamos la protección del stack, esta proteccion se encarga de colocar palabras conocidas ("Stack Canaries") entre el buffer y la informacion de control (ebp, ret address) las cuales si son modificadas producen un stack smashing ya que se detecta que se hizo un buffer overflow.

Utilizando las herramientas de gbd sumado a los plugins dashboard y voltron, pudimos ver las direcciones de memoria y como estas se iban llenando con los elementos que cargamos con


Pasos de ejecución

  1. Ponemos los breakpoints y corremos el script de perl con el cual colocamos la cantidad de 'A's necesarias para luego modificar la dirección de retorno a la función exploit ubicada en la direccion "MbUV".

    run $(perl -e 'print "A"x32 . "MbUV"')

breakpoints

  1. Localizamos el base pointer original.

ebp

  1. Identificamos la dirección de retorno original.

return_addr

  1. Nos frenamos en este breakpoint.

breakpoint2

  1. Vemos el stack en el lugar del breakpoint.

stack

  1. Identificamos la dirección de la función exploit.

exploit_addr

  1. Vemos el siguiente breakpoint.

breakpoint3

  1. Vemos como quedo el stack sobreescrito.

override_stack

  1. Nos posicionamos en el breakpoint de la función exploit.

breakpoint4

  1. Se puede observar como es evidente que la ejecución cambió y ahora corre una función que no se llamó desde el programa principal.

output

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages