0Pricing
Ethical Hacking Academy · Aula

Controle do EIP

Substitua o endereço de retorno

Controle do EIP é uma aula grátis de Ethical Hacking Academy no CoddyKit. Esta é a aula 3 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.

O objetivo

Você tem o deslocamento, portanto pode colocar quaisquer quatro bytes no EIP. A pergunta agora é: que endereço deve colocar ali?

Você quer que o EIP aponte para o seu código de shell. Mas não pode simplesmente codificar o endereço da pilha; precisa de um salto confiável.

Por que não codificar o endereço da pilha?

O endereço da pilha onde o seu código de shell está localizado pode mudar entre execuções e sistemas. Até pequenas alterações no ambiente podem deslocá-lo.

Em vez disso, você usa uma instrução estável já existente na memória, que redireciona a execução para onde o ESP aponta no momento.

O truque do JMP ESP

Se o ESP apontar para o seu código de shell no momento da falha, você poderá definir o EIP como o endereço de uma instrução JMP ESP. Quando o EIP carregar esse endereço, a CPU executará jmp esp e saltará para o seu código de shell.

Essa indireção torna o exploit confiável, independentemente do endereço exato da pilha.

jmp esp   ; opcode FF E4

Encontrando um JMP ESP

Procure os bytes de código de operação FF E4 nos módulos carregados, de preferência em módulos sem ASLR. O endereço-base do módulo permanece constante, portanto esse gadget é confiável.

Ferramentas como mona.py encontram automaticamente instruções adequadas.

!mona jmp -r esp -cpb "\x00"

Evitando caracteres inválidos

Alguns valores de byte corrompem a entrada antes que ela chegue intacta ao buffer. O exemplo clássico é o byte nulo 0x00, que termina strings C. Outros exemplos incluem 0x0a (nova linha) e 0x0d (retorno de carro).

O endereço de JMP ESP não pode conter nenhum desses caracteres inválidos.

Identificando caracteres inválidos

Para descobrir quais bytes são inválidos, envie todos os valores de byte de 0x00 a 0xff no buffer e inspecione a memória no depurador. Bytes alterados ou ausentes são caracteres inválidos.

Você excluirá esses caracteres tanto do endereço de retorno quanto do código de shell.

!mona bytearray -cpb "\x00"

Montando a sobrescrita do EIP

Agora monte a entrada: preenchimento até o deslocamento e, em seguida, o endereço de JMP ESP na ordem little-endian.

Se o JMP ESP estiver em 0x625011AF, os bytes escritos serão invertidos.

buf = "A"*offset + "\xaf\x11\x50\x62"  # 0x625011AF, little-endian

Verificando o salto

Defina um ponto de interrupção no endereço de JMP ESP no depurador e execute o exploit. Quando o EIP chegar a esse endereço e avançar para o ESP, você terá confirmado um redirecionamento confiável.

Neste ponto, o EIP aponta para onde o seu código de shell será colocado.

Abrindo espaço para o código de shell

Depois do endereço de retorno, o buffer restante (para onde o ESP aponta) conterá o seu código de shell. Se o espaço for limitado, talvez seja necessário usar um salto curto ou realocar o código.

Uma trilha de NOPs (uma sequência de bytes sem operação 0x90) antes do código de shell cria uma margem, permitindo que o salto pouse em qualquer ponto da trilha.

buf = "A"*offset + ret + "\x90"*16 + shellcode

Juntando tudo

A estrutura completa do exploit agora está clara:

  • Preenchimento até o deslocamento.
  • O endereço de JMP ESP (sem caracteres inválidos, em little-endian).
  • Uma trilha de NOPs.
  • O código de shell.

Falta apenas uma etapa para obter um shell.

Alternativas ao JMP ESP

JMP ESP é o redirecionamento clássico, mas não é o único. Se outro registrador apontar para o seu buffer, você poderá usar jmp eax, call esp ou um gadget push esp; ret.

O princípio é o mesmo: encontrar uma instrução estável que transfira o controle para onde o seu código de shell está localizado.

Verificação rápida

Lembre-se de por que JMP ESP é preferível a um endereço de pilha codificado.

Recapitulação

Agora você controla o fluxo de execução:

  • Sobrescreva o EIP com o endereço de um gadget JMP ESP, em vez de usar um endereço de pilha frágil.
  • Encontre o gadget em um módulo sem ASLR, evitando caracteres inválidos como 0x00.
  • Escreva o endereço em formato little-endian e adicione uma trilha de NOPs antes do código de shell.

Em seguida, você gerará o código de shell e obterá um shell.

Perguntas Frequentes

A aula “Controle do EIP” é grátis?

Sim — o texto completo de “Controle do EIP” é 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 “Controle do EIP”?

Substitua o endereço de retorno 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 3 de 4.

Quanto tempo leva a aula “Controle do EIP”?

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