[0x19] Como fazer Fuzzing

COMPARTILHAR:

Whatsapp Telegram Twitter Facebook Reddit

Como realizar fuzzing até crashar uma aplicação binária

Este tutorial faz parte do GUIA COMPLETO do professional em Segurança Ofensiva de Software, saiba mais.

Aula 25: Fuzzing

25.1: Resumo

Fuzzing é uma forma de análise de vulnerabilidade, sendo uma técnica comum e relativamente simples empregada para descobrir novas vulnerabilidades em aplicações binárias.

O processo consiste em:

  1. Enviar à aplicação vários casos de teste levemente anômalos (ou malformados).
  2. Monitorar a aplicação para identificar qualquer sinal de erro ou comportamento inesperado.
  3. O objetivo final é encontrar falhas que permitam executar código arbitrário (explorar a vulnerabilidade).
A principal diferença entre Fuzzing e os testes de usuário tradicionais é o foco:
  • Teste de Usuário: Roda o programa com muitas entradas normais para evitar que usuários encontrem erros.
  • Fuzzing: Roda o programa com muitas entradas anormais (entradas que a aplicação não esperaria) para forçar um mau comportamento. O objetivo é encontrar erros exploráveis antes que um atacante o faça, a fim de corrigi-los.
As entradas anômalas usadas no Fuzzing geralmente são:
  • Arquivos (.pdf, .png, .wav, .mp3), explorando o formato do arquivo ou seus campos de dados.
  • Baseadas em Rede (protocolos como HTTP, SOAP, SNMP), explorando a comunicação e variando os campos de dados do protocolo.
Os fuzzers são classificados em três tipos principais:
  1. Baseado em mutação: Também chamado de "Dumb Fuzzing". Coleta amostras de dados normais (entradas válidas) e as embaralha ou modifica para criar entradas anômalas. Assume pouco ou nenhum conhecimento da estrutura da entrada.
  2. Baseado em Geração: Chamado de "Smart Fuzzing". Define novos testes com base em modelos da entrada e em formatos específicos que possam aumentar a probabilidade de gerar um erro, como no exemplo do nome do arquivo em uma requisição HTTP. Requer conhecimento da estrutura da entrada.
  3. Evolucionário: Gera entradas baseadas na resposta da aplicação. O sistema tenta aprender sobre o comportamento do programa para evoluir os testes.
O processo de Fuzzing apresenta desafios, sendo os principais:
  • Decisão de Parada: Em métodos baseados em mutação, o fuzzer pode executar para sempre, gerando mutações infinitas sem encontrar um erro. É preciso decidir quando parar os testes.
  • Identificação do Erro: Muitas aplicações possuem mecanismos de recuperação de erro (como tratamento de exceção), o que dificulta a identificação de um erro explorável. Por exemplo, um buffer overflow pode ser recuperado pela aplicação.
O ideal é executar o teste em uma cópia do binário da aplicação e anexar um depurador (debugger) (como o Immunity Debugger) para observar o fluxo de execução e o estado da memória no momento da falha, o que é característico de um teste White Box.

25.2: Desenvolvimento de código Fuzzing

Vamos construir um template de fuzzing do Spike para identificar uma vulnerabilidade na aplicação Xitami Web Server versão 2.5b4 para Windows XP.

A ferramenta Spike é utilizada como um interpretador para enviar dados malformados a servidores TCP. Ela utiliza scripts (Spike Scripts) para gerar e modificar variáveis de comunicação, permitindo ao testador guiar o processo de Fuzzing.

Primeiramente inicie a aplicação vulnerável em sua máquina alvo. Em seguida, na máquina Kali inicie a captura de pacotes com o Wireshark.

Figura 1: Captura de pacotes TCP

Acesse o servidor HTTP via navegador Firefox do Kali. Depois, aperte F5 para que o navegador solicite a atualização da página. No Wireshark você conseguirá identificar que o pacote foi capturado (Figura 1).

Figura 2: Construído template de teste

Com o modelo de requisição de atualização da página registrado pelo Wireshark podemos utiliza-lo como base para construir o template de fuzzing do Spike (Figura 2).

Figura 3: Teste conexão

Antes de elaborar um template completo, teste se o básico está funcionando (Figura 3). Para executar o script de fuzzing utilize do comando: generic_send_tcp ip_alvo porta script.spk 0 0

Figura 4: Template de fuzzing do Spike

Identificado o funcionamento visualizando um pacotes das requisições enviadas, construa um template para realizar fuzzing. Para esta aplicação vamos variar 8 strings com o comando s_string_variable() (Figura 4).

Figura 5: Crash na aplicação

Identificado crash na aplicação ao executar a fuzzing variable de número 7. Como são 8 de 0 a 7 então o erro se dá na s_string_variable referente a "If-Modified-Since:" (Figura 5). Utilizando o software Immunity, mencionado em aulas anteriores, é possível visualizar que o crash foi causado pela string ""DAV:displayname" from scope()".

Figura 6: Reconstrução template

No Wireshark é certo que apareceu centenas de requisições. Então para filtrar menos requisições, o template foi reconstruído com apenas uma fuzzing variable (Figura 6).

Figura 7: Realizando fuzzing

Reinicie o Wireshark e realize o fuzzing (Figura 7).

Figura 8: Identificando causa do crash

A requisição que causou o crash foi identificada no Wireshark (Figura 8). No caso o crash ocorre após o primeiro caractere de "espaço" na string de "If-Modified-Since:" .

Figura 9: Código e envio entrada maliciosa para a aplicação

Agora podemos construir um script simples em python para enviar essa entrada maliciosa identificada e confirmar o disparo do erro na aplicação alvejada (Figura 9). Note que para evitar o error "TypeError: a bytes-like object is required, not 'str' " utilize python 2.7 em vez de python 3.

A partir de agora você consegue desenvolver um exploit para explorar a vulnerabilidade de Buffer Overflow na aplicação. Caso não consiga desenvolver, pesquise no Exploit-db alguns exemplos.

Próxima aula, clique aqui.

Nome

#ann,25,#HK,30,#LTCode,133,Artigo - Diversos,158,Artigo - Games,201,Artigo - Tecnologia,635,autor-thomaz,7,blueteam,15,Coluna - Alternative World,24,Coluna - Fail,12,Coluna - Tec Line,14,Criptomoeda,71,Curiosidades - Diversos,49,Curiosidades - Tecnologia,50,en,2,estudo,8,HN,12,IA,9,logica,14,Pentest,26,Programar C,29,Programar POO,6,Programar Python,6,Programar Shell,25,Programar verilog,12,qradar,4,Raspberry Pi,15,Redes,3,Review,4,root,134,Shorty Awards,1,Smartphones - Reviews,33,Teoria,10,Top Nostalgia,2,VPN,19,WhatsApp,46,
ltr
item
Limon Tec: [0x19] Como fazer Fuzzing
[0x19] Como fazer Fuzzing
Como realizar fuzzing até crashar uma aplicação binária
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/w640-h421/limontec_seguranca_ofensiva_software.png
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s72-w640-c-h421/limontec_seguranca_ofensiva_software.png
Limon Tec
https://www.limontec.com/2025/10/como-fazer-fuzzing.html
https://www.limontec.com/
https://www.limontec.com/
https://www.limontec.com/2025/10/como-fazer-fuzzing.html
false
2157924926610706248
UTF-8
Carregar todos posts Não encontramos nenhum post VER TUDO Ler mais Responder Cancelar resposta Deletar Por Home PÁGINAS POSTS Ver tudo RECOMENDADO PARA VOCÊ LABEL ARQUIVO SEARCH TODOS POSTS Não encontramos nenhum post relacionado a sua requisição VOLTAR PÁGINA INICIAL Domingo Segunda Terça Quarta Quinta Sexta Sábado Dom Seg Ter Qua Qui Sex Sab Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro Jan Fev Mar Abr Maio Jun Jul Ago Set Out Nov Dez apenas agora 1 minuto atrás $$1$$ minutes ago 1 hora atrás $$1$$ hours ago Ontem $$1$$ days ago $$1$$ weeks ago mais de 5 semanas atrás Seguidores Seguir ESTE CONTEÚDO ESTÁ BLOQUEADO PASSO 1: Compartilhe com seus amigos PASSO 2: Clique no link compartilhado Copiar Todo Código Selecionar Todo Código Todos códigos foram copiados para seu clipboard Não é possível copiar códigos / textos, por favor aperte [CTRL]+[C] (ou CMD+C no Mac) para copiar Tabela de conteúdo