Skip to content

zombie-pickle/guia-escritura-exploits

Repository files navigation

Guía de auto-estudio para la escritura de exploits

Abos

Los abos son una serie de ejercicios creados por Gera. Son programas vulnerables escritos en C que sirven como una presentación introductoria a la escritura de exploits y presentan un amplio abanico de vulnerabilidades.

Varias funciones de estos programas son conocidas por ser vulnerables:

  • gets(buffer) y scanf(buffer), funciones de entrada y salida que no verifican la longitud de aquello a almacenar en relación al espacio del búfer donde se lo va a almacenar.
  • strcpy(buffer, str) y strcat(buffer, str), funciones para manipular strings que no controlan el tamaño del string a ser copiado en el búfer.
  • printf(formato, ...) y las funciones derivadas para mostrar una salida con formato delatan parte de la memoria cuando el format string no se corresponde con la cantidad de argumentos dados.

Las vulnerabilidades presentes en gran parte de los ejercicios resultan triviales, por ejemplo el uso de una funcion obsoleta como gets(). Esto se debe a que justamente el objetivo de los abos no es aprender a detectar vulnerabilidades sino a escribir exploits que se aprovechen de ellas.

Y permiten revisar una serie de estrategias tradicionales de ataques a programas vulnerables:

  • corrupción de memoria con desbordamiento de búfer (en inglés buffer overflow)
  • inyección de código y su ejecución indirecta
  • reescritura de la Global Offset Table (GOT)
  • aprovechamiento del format string
  • retorno a libc()

Para realizar este recorrido la guía presenta conceptos como:

  • el layout de memoria al ejecutar un programa: la pila, los registros y la convención del llamado a funciones en la arquitectura x86
  • la escritura de shellcodes en código en assembler
  • las partes de un binario, sus secciones y segmentos
  • el proceso de compilación y enlazado dinámico Y propone el uso de herramientas de análisis de binarios y debugging.

Configuración

Para comenzar con los ataques más tradicionales es necesario, en un principio, utilizar un entorno sin mitigaciones que se han introducido en los sistemas operativos y compiladores modernos. A medida que se profundiza en técnicas de ataque más avanzadas se procede a deshabilitar las mitigaciones.
En la sección de configuración se especifica como habilitar y deshabilitar estas protecciones.

Indice

Nivel 1: Ataque de corrupción de memoria.
Introducción teórica. Práctica.

Nivel 2: Ataque de corrupción de memoria II.
Introducción teórica. Práctica.

Nivel 3: Ataque de reescritura de la GOT.
Introducción teórica. Práctica.

Nivel 4: Ataque con variables de entorno.
Práctica.

Nivel 5: Ataque con format strings.
Introducción teórica. Práctica.

Nivel 6: Return to libc.
Introducción teórica. Práctica.

Releases

No releases published

Packages

No packages published

Languages

  • HTML 96.7%
  • CSS 3.3%