Pwn2Ninj4 Blog

Blog dedicado al exploiting, reversing y CTFs

View on GitHub

Buffers Overflows: ¿Que son?

BoF 25-3-2021 5:00PM

En la programación, se denomina buffer a un espacio de memoria, donde se almacenan ciertos tipos de datos, normalmente se utiliza a la ahora de desarrollo un software o hardware para almacenar y regular datos que luego necesitara el programa o equipo, puede encontrar más información aquí

Cuando se declara un buffer con un tamaño prefijado y luego no se controla la cantidad de datos que en el son introducidos, ocurre un desbordamiento, lo que al inglés se traduce como Buffer Overflow

Sintaxis: type array[longitud_buffer]

Ejemplo: char input[50]; //se declara un array que admite 50 caracteres variable1 = input[49] //máximo variable2 = input[250] //acceder a la memoria fuera de la array

El Stack(Pila)

La pila o el stack es donde se almacenan los argumentos pasados al programa, las strings del entorno donde está siendo ejecutado el binario, los argumentos pasados a las funciones, las variables locales vacías, y además es donde se almacena el registro IP cuando una función es llamada.

Ejemplo

func() {  
  array[50]  
  return
}  

main() {  
  var1  
  func()  
}  

Stack

Registros(x86)

EBP: Extended Base Pointer

ESP: Extended Stack Pointer

EIP: Extended Instruction Pointer

Registers

Existen otros registros(x86) de que tocaremos más adelante pero estos son los más importantes.

¿Como se explota esto?

Podemos introducir cualquier dirección de memoria dentro del stack en el EIP. El programa ejecutará instrucciones en esa dirección de memoria. Podemos poner nuestro propio shellcode en el stack, poner la dirección al inicio del shellcode en el EIP y el programa ejecutará el shellcode. Shellcode es una colección de códigos de operación (escritos en hexadecimal) cuyo objetivo es abrir una instancia de “/bin/sh”.

Más adelante estaremos viendo como explotar estos Buffers Overflows

«