0Pricing
Ethical Hacking Academy · Aula

Memória e pilha

Como funcionam os estouros

Memória e pilha é uma aula grátis de Ethical Hacking Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Ethical Hacking Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Ethical Hacking Academy inclui 4 aulas no total.

Layout da memória do processo

Quando um programa é executado, o sistema operacional fornece a ele um layout de memória com regiões distintas: o texto (código), os dados/BSS (globais), o heap (alocação dinâmica) e a pilha.

Os estouros de buffer exploram com mais frequência a pilha, portanto compreendê-la é essencial.

O que é a pilha?

A pilha é uma região da memória usada para chamadas de funções. Ela armazena variáveis locais, argumentos de funções e endereços de retorno.

Em x86, ela cresce para baixo: inserir dados move o ponteiro da pilha em direção a endereços menores. Essa direção é importante quando ocorre um estouro.

Quadros da pilha

Cada chamada de função cria um quadro da pilha. Normalmente, um quadro contém variáveis locais, o ponteiro base salvo (EBP) e o endereço de retorno (EIP salvo).

O endereço de retorno informa à CPU onde continuar quando a função terminar. Controlá-lo é o elemento central da exploração de um estouro de pilha.

Registradores principais

Em x86 de 32 bits, os registradores importantes são:

  • ESP: ponteiro da pilha, topo da pilha.
  • EBP: ponteiro base, âncora do quadro atual.
  • EIP: ponteiro de instrução, endereço da próxima instrução.

Se você controlar o EIP, controlará o fluxo de execução.

O que é um buffer?

Um buffer é um bloco de memória de tamanho fixo, como uma matriz de caracteres local. O programa espera que os dados caibam nele.

Se o programa copiar mais dados do que o buffer comporta sem verificar o comprimento, o excesso transbordará para a memória adjacente.

char buffer[64];
strcpy(buffer, user_input); // no bounds check

O estouro

Um estouro de buffer ocorre quando a entrada excede o tamanho do buffer e sobrescreve dados vizinhos na pilha.

Como o EBP salvo e o endereço de retorno ficam logo depois dos buffers locais, uma entrada suficientemente grande pode sobrescrever o endereço de retorno, assumindo o controle do fluxo de execução.

Funções perigosas

Os estouros geralmente resultam de funções C inseguras que não verificam o tamanho:

  • strcpy, strcat, sprintf, gets.

Alternativas mais seguras, como strncpy ou snprintf, aceitam um limite de tamanho, mas o código legado está repleto das funções perigosas.

gets(buffer); // never use: no length limit at all

O que sobrescrever o EIP proporciona

Quando a função vulnerável retorna, a CPU remove o endereço de retorno (agora controlado pelo invasor), coloca-o no EIP e salta para esse endereço.

Se apontar o EIP para o seu próprio código de máquina injetado (código de shell), a CPU o executará com os privilégios do programa.

Endereçamento little-endian

x86 usa o formato little-endian: os valores de vários bytes são armazenados começando pelo byte menos significativo. Para sobrescrever o endereço de retorno com 0x080414C3, escreva os bytes na ordem inversa.

Usar a ordem de bytes errada é um erro comum entre iniciantes e faz os exploits falharem silenciosamente.

address 0x080414C3 -> bytes \xc3\x14\x04\x08

Proteções modernas

Os sistemas modernos adicionam defesas que dificultam a exploração:

  • DEP/NX: marca a pilha como não executável.
  • ASLR: randomiza os endereços de memória.
  • Canários da pilha: detectam sobrescritas antes do retorno.

Este curso concentra-se no caso clássico (com as proteções desativadas) para ensinar os fundamentos.

Por que isso ainda importa

Embora as defesas modernas tornem mais difíceis os estouros clássicos de pilha, os fundamentos continuam essenciais. Sistemas embarcados, dispositivos IoT e softwares legados frequentemente não têm essas proteções.

Dominar o caso básico também é um pré-requisito para técnicas avançadas, como ROP, que contornam as mitigações modernas.

Verificação rápida

Lembre-se de qual valor o invasor finalmente quer controlar.

Recapitulação

Agora você entende os fundamentos:

  • A pilha armazena variáveis locais, o EBP salvo e o endereço de retorno, e cresce para baixo.
  • ESP, EBP, EIP são os principais registradores x86; controlar o EIP significa controlar a execução.
  • Funções inseguras, como strcpy e gets, causam estouros.
  • x86 usa o formato little-endian; as defesas modernas são DEP, ASLR e canários.

Em seguida, você testará um programa para encontrar o deslocamento da falha.

Perguntas Frequentes

A aula “Memória e pilha” é grátis?

Sim — o texto completo de “Memória e pilha” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Ethical Hacking Academy, atualize para CoddyKit PRO. O curso de Ethical Hacking Academy inclui 4 aulas no total.

O que vou aprender em “Memória e pilha”?

Como funcionam os estouros Você pratica Ethical Hacking Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Ethical Hacking Academy?

Nenhuma experiência prévia é necessária. Ethical Hacking Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Memória e pilha”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Ethical Hacking Academy?

Sim. Cada aula de Ethical Hacking Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Memória e pilha
  2. Fuzzing para encontrar falhas
  3. Controle do EIP
  4. Shellcode e exploração
← Voltar para Ethical Hacking Academy