Fuzzing para encontrar falhas
Encontre o deslocamento
Fuzzing para encontrar falhas é uma aula grátis de Ethical Hacking Academy no CoddyKit. Esta é a aula 2 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 que é o fuzzing?
Fuzzing consiste em enviar entradas malformadas ou grandes demais a um programa para provocar um comportamento inesperado, especialmente falhas. Uma falha frequentemente indica um erro de corrupção de memória.
Em estouros de buffer, o primeiro objetivo é fazer o alvo falhar, para sabermos que existe um estouro.
O fluxo de trabalho
O fluxo de trabalho clássico de exploração é:
- Testar por mutação até fazer o programa falhar.
- Encontrar o deslocamento exato até o endereço de retorno.
- Controlar o EIP.
- Redirecionar para o código de shell.
Esta lição aborda as duas primeiras etapas.
Anexando um depurador
Para observar as falhas, anexe um depurador (como o Immunity Debugger ou o x64dbg no Windows, ou o GDB no Linux) ao alvo.
Quando o programa falha, o depurador mostra o estado dos registradores, especialmente o EIP, revelando se sobrescrevemos o endereço de retorno.
Enviando uma entrada crescente
Um testador simples envia strings cada vez maiores até o programa falhar. Um ponto de partida comum é enviar muitos caracteres «A» (0x41).
Se o EIP mostrar 41414141 depois da falha, você confirmou o controle sobre o endereço de retorno.
python -c 'print("A"*2000)' | ./vulnConfirmando a falha
Quando o aplicativo falha e o EIP é igual a 41414141, o estouro alcançou o endereço de retorno salvo.
Mas você ainda não sabe exatamente quantos bytes precedem o EIP. Enviar sempre o mesmo byte informa que o EIP é controlável, não onde ele está localizado.
Encontrando o deslocamento: padrões cíclicos
Para encontrar o deslocamento preciso, envie um padrão exclusivo e não repetitivo em vez de usar apenas «A». Cada janela de 4 bytes é distinta, portanto o valor que chega ao EIP identifica o deslocamento.
O Metasploit fornece pattern_create.rb para isso.
msf-pattern_create -l 2000Lendo o deslocamento
Depois da falha com o padrão, anote o valor no EIP. Passe-o para pattern_offset.rb, que retornará o número exato de bytes antes do EIP.
Esse deslocamento corresponde ao tamanho do preenchimento antes dos bytes do endereço de retorno.
msf-pattern_offset -l 2000 -q 39654138Verificando o deslocamento
Verifique sempre. Crie uma entrada com offset bytes «A», seguidos de quatro bytes «B» (0x42). Se o EIP se tornar 42424242, o deslocamento está correto.
Essa confirmação evita horas desperdiçadas depurando mais tarde um erro de poucos bytes.
"A"*offset + "B"*4 # EIP should become 42424242Identificando o ESP
Depois de controlar o EIP, observe também para onde o ESP aponta no momento da falha. Normalmente, o ESP aponta para logo depois do endereço de retorno sobrescrito, dentro do restante do seu buffer.
É nesse espaço que você colocará posteriormente o código de shell.
Recapitulação das ferramentas
Entre as ferramentas úteis para fuzzing e padrões estão:
- Spike e boofuzz: testadores de protocolos de rede.
- pattern_create / pattern_offset: localizam o deslocamento do EIP.
- mona.py no Immunity: automatiza tarefas de padrão, deslocamento e caracteres inválidos.
!mona pattern_create 2000A reprodutibilidade é importante
Uma falha útil precisa ser reprodutível. Salve a entrada exata que a provoca e execute-a novamente a partir de um estado limpo para confirmar que o deslocamento é estável.
Falhas inconsistentes geralmente significam que o erro não é um estouro de pilha limpo ou que alguma condição (tempo, tamanho, conteúdo) varia entre as execuções.
Verificação rápida
Lembre-se de por que um padrão cíclico é melhor do que uma string de bytes idênticos.
Recapitulação
Agora você sabe como encontrar o deslocamento da falha:
- Teste por mutação com uma entrada crescente para provocar uma falha; confirme com
41414141no EIP. - Use um padrão cíclico com
pattern_create/pattern_offsetpara encontrar o deslocamento exato. - Verifique usando preenchimento + quatro bytes «B» (42424242).
- Observe para onde o ESP aponta para posicionar posteriormente o código de shell.
Em seguida, você controlará totalmente o EIP e redirecionará a execução.
Perguntas Frequentes
A aula “Fuzzing para encontrar falhas” é grátis?
Sim — o texto completo de “Fuzzing para encontrar falhas” é 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 “Fuzzing para encontrar falhas”?
Encontre o deslocamento 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 2 de 4.
Quanto tempo leva a aula “Fuzzing para encontrar falhas”?
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
- Memória e pilha
- Fuzzing para encontrar falhas
- Controle do EIP
- Shellcode e exploração