
Um programa C de exemplo que contém código vulnerável para tipos comuns de vulnerabilidades. Pode ser usado para demonstrar conceitos de fuzzing.
Nota: o nome do arquivo foi alterado de imgRead.c para dvcp.c; se você estiver assistindo vídeos, verá imgRead.c, mas no repositório do GitHub verá dvcp.c, use o nome de arquivo correto.
Meu Canal no YouTube: https://www.youtube.com/user/MrHardik05/featured?view_as=subscriber
O que é?
Este é um programa C simples que codifiquei para explicar tipos comuns de vulnerabilidades como:
Este programa C contém código vulnerável de todas as vulnerabilidades acima e você pode fazer fuzzing nele usando qualquer fuzzer como AFL, libafl, libfuzzer, hongfuzz, winafl, jackalope ou qualquer outro fuzzer que desejar.
Como Compilar
Basta digitar "make" no prompt de comando. O Makefile está incluído.
Como gerar entrada para o AFL?
basta criar um arquivo de entrada de exemplo como a seguir e o resto o AFL cuidará:
echo "IMG" >input/1.txt
O AFL gerará automaticamente novos casos de teste e descobrirá a maioria das vulnerabilidades mencionadas acima. Essa é a beleza do AFL :)
Como fazer fuzzing com AFL?
1. Primeiro compile este programa usando o seguinte comando:
afl-gcc -g -fsanitize=address dvcp.c -o dvcp
2. execute este comando:
afl-fuzz -i input -o output -m none -- ./dvcp @@
Como fazer fuzzing usando honggfuzz
1. Primeiro compile este programa usando o seguinte comando:
hfuzz-gcc -g -fsanitize=address dvcp.c -o dvcp
2. execute este comando:
hongfuzz -i input -- ./dvcp ___FILE___
Como fazer fuzzing usando libfuzzer
Você precisa modificar o código C; você pode obter o código atualizado aqui: https://github.com/hardik05/Damn_Vulnerable_C_Program/blob/master/dvcp_libfuzzer.c
1. Compile o programa usando o seguinte comando:
clang -fsanitize=fuzzer,address,undefined -g dvcp_libfuzzer.c -o dvcp_libfuzzer
2. execute este comando para fazer fuzzing:
./dvcp_libfuzzer
Você pode ver os tutoriais em vídeo aqui:
Playlist Completa de Fuzzing:
vídeos individuais abaixo:
Linux
LibAFL
[Fuzzing com libAFL]Como instalar o libAFL no sistema e quais são os diferentes componentes? -> https://www.youtube.com/watch?v=ztGfxbvcrms
[Fuzzing com libAFL]Introdução ao ForkServer do libAFL, executando o fuzzer forkserver do libAFL. -> https://www.youtube.com/watch?v=Ed1anYoGTyA
[Fuzzing com libAFL]Fuzzing no Damn Vulnerable C Program com o fuzzer forkserver do libAFL -> https://www.youtube.com/watch?v=ad_4zroiS_g
[Fuzzing com libAFL] Usando o modo de memória compartilhada com o fuzzer forkserver do libAFL -> https://www.youtube.com/watch?v=GXD_qkISyfY
AFL++
[Fuzzing com AFLplusplus] Instalando o AFLPlusplus e fazendo fuzzing em um programa C simples -> https://www.youtube.com/watch?v=9wRVo0kYSlc
[Fuzzing com AFLplusplus] Como fazer fuzzing em um binário sem código-fonte no Linux em modo persistente -> https://www.youtube.com/watch?v=LGPJdEO02p4
AFL
[Fuzzing com AFL] Como instalar o AFL no Ubuntu-> https://www.youtube.com/watch?v=r7ucv2kN4j4
[Fuzzing com AFL] Fazendo fuzzing em um programa C simples com AFL -> https://www.youtube.com/watch?v=NiGC1jxFx78&t=66s
[Fuzzing com AFL] Encontrando diferentes tipos de vulnerabilidades com o AFL -> https://www.youtube.com/watch?v=m1RkShHzx_8&t=151s
[Fuzzing com AFL] Triagem de crashes com crashwalk e descoberta da causa raiz com GDB -> https://www.youtube.com/watch?v=5R2gPkCXZkM
[Fuzzing com AFL] Fazendo fuzzing em um binário sem código-fonte com AFL no modo Qemu.-> https://www.youtube.com/watch?v=np3sLLFQs6I
Honggfuzz
[Fuzzing com honggfuzz] Fazendo fuzzing em um programa C simples com HongFuzz -> https://www.youtube.com/watch?v=6OBXJtEe-d8
[Fuzzing com honggfuzz] Hongfuzz,checksec(pwntools),ASAN -> https://www.youtube.com/watch?v=Lr8pLQRTHac
Libfuzzer
[Fuzzing com libfuzzer] Como fazer fuzzing em um programa C simples usando LibFuzzer -> https://www.youtube.com/watch?v=hFva8kJQwnc&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp
[Fuzzing com libfuzzer,AFL] Como fazer fuzzing no programa harness do libfuzzer usando AFL -> https://www.youtube.com/watch?v=HfEqm3TrfwM&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp&index=2
Como replicar as vulnerabilidades do OpenSSL CVE-2022-3602 e CVE-2022-3786 e usar o libfuzzer -> https://www.youtube.com/watch?v=vhTuXph1dtY
Radamsa
[Fuzzing com Radamsa] Fazendo fuzzing em um programa C simples com Radamsa -> https://youtu.be/1FRsXVNpynQ
Windows
WinAFL
[Fuzzing com WinAFL] Fazendo fuzzing em um programa C simples com WinAFL -> https://www.youtube.com/watch?v=Va_Wtxf3DMc
[Fuzzing com WinAFL] O que é uma função de fuzzing, como garantir que tudo está funcionando corretamente? -> https://www.youtube.com/watch?v=HLORLsNnPzo
Preciso de mais harnesses para Windows para fazer fuzzing com winafl
claro, confira aqui -> https://github.com/hardik05/winafl-harness
quero tentar algo diferente, talvez alguns mutadores diferentes dos padrões do winafl..
sim, você pode tentar isso -> https://github.com/hardik05/winafl-powermopt
mais serão enviados conforme eu os criar.
OSS-Fuzz do Google
Como o OSS-Fuzz Funciona: Um Guia para Testes de Fuzzing em Projetos de Código Aberto -> https://www.youtube.com/watch?v=OBxCDsJ-0aM
Por que você criou isso?
Leva muito tempo para recém-chegados e até mesmo pessoas experientes entenderem diferentes tipos de vulnerabilidades. Eu mesmo enfrentei esse problema e decidi compartilhar o que aprendi.
Se você aprender algo com isso, envie-me uma nota de agradecimento. Isso é tudo que preciso. Além disso, se você quiser melhorar ou corrigir algo, PRs são bem-vindos!
Autor?
Twitter: https://twitter.com/hardik05
Email: Me envie um DM no Twitter :)
Feedback?
Sugestões e comentários são sempre bem-vindos. Se você encontrar algum problema, tiver uma correção ou um novo recurso, envie um pull request.