
Un programa de ejemplo en C que contiene código vulnerable para tipos comunes de vulnerabilidades. Puede utilizarse para mostrar conceptos de fuzzing.
Nota: el nombre del archivo se ha cambiado de imgRead.c a dvcp.c; si estás viendo videos, verás imgRead.c, pero en el repositorio de GitHub verás dvcp.c. Usa el nombre de archivo correcto.
Mi canal de YouTube: https://www.youtube.com/user/MrHardik05/featured?view_as=subscriber
¿Qué es?
Este es un programa C simple que he codificado para explicar tipos comunes de vulnerabilidades como:
Este programa C contiene código vulnerable de todas las vulnerabilidades anteriores y puedes fuzzearlo usando cualquier fuzzer como AFL, libafl, libfuzzer, hongfuzz, winafl, jackalope o cualquier otro fuzzer que quieras.
Cómo compilar
Solo escribe "make" en el símbolo del sistema. El Makefile está incluido.
¿Cómo generar la entrada para AFL?
solo crea un archivo de entrada de muestra como se indica a continuación y AFL se encargará del resto:
echo "IMG" >input/1.txt
AFL generará automáticamente nuevos casos de prueba y descubrirá la mayoría de las vulnerabilidades mencionadas anteriormente. Esa es la belleza de AFL :)
¿Cómo fuzzearlo con AFL?
1. Primero compila este programa con el siguiente comando:
afl-gcc -g -fsanitize=address dvcp.c -o dvcp
2. ejecuta este comando:
afl-fuzz -i input -o output -m none -- ./dvcp @@
¿Cómo fuzzearlo usando honggfuzz?
1. Primero compila este programa con el siguiente comando:
hfuzz-gcc -g -fsanitize=address dvcp.c -o dvcp
2. ejecuta este comando:
hongfuzz -i input -- ./dvcp ___FILE___
¿Cómo fuzzear usando libfuzzer?
Necesitas modificar el código C; puedes obtener el código actualizado desde aquí: https://github.com/hardik05/Damn_Vulnerable_C_Program/blob/master/dvcp_libfuzzer.c
1. Compila el programa con el siguiente comando:
clang -fsanitize=fuzzer,address,undefined -g dvcp_libfuzzer.c -o dvcp_libfuzzer
2. ejecuta este comando para fuzzear:
./dvcp_libfuzzer
Puedes ver los videotutoriales aquí:
Lista de reproducción completa de fuzzing:
https://www.youtube.com/watch?v=r7ucv2kN4j4&list=PLHGgqcJIME5kYhOSdJjvtVS4b4_OXDqM-
videos individuales a continuación:
Linux
LibAFL
[Fuzzing con libAFL]Cómo instalar libAFL en el sistema y cuáles son los diferentes componentes? -> https://www.youtube.com/watch?v=ztGfxbvcrms
[Fuzzing con libAFL]Introducción a libAFL ForkSever, ejecutando el fuzzer forkserver de libAFL. -> https://www.youtube.com/watch?v=Ed1anYoGTyA
[Fuzzing con libAFL]Fuzzeando el programa C Damn Vulnerable con el fuzzer forkserver de libAFL -> https://www.youtube.com/watch?v=ad_4zroiS_g
[Fuzzing con libAFL] Usando el modo de memoria compartida con el fuzzer forkserver de libAFL -> https://www.youtube.com/watch?v=GXD_qkISyfY
AFL++
[Fuzzing con AFLplusplus] Instalando AFLPlusplus y fuzzeando un programa C simple -> https://www.youtube.com/watch?v=9wRVo0kYSlc
[Fuzzing con AFLplusplus] Cómo fuzzear un binario sin código fuente en Linux en modo persistente -> https://www.youtube.com/watch?v=LGPJdEO02p4
AFL
[Fuzzing con AFL] Cómo instalar AFL en Ubuntu-> https://www.youtube.com/watch?v=r7ucv2kN4j4
[Fuzzing con AFL] Fuzzeando un programa C simple con AFL -> https://www.youtube.com/watch?v=NiGC1jxFx78&t=66s
[Fuzzing con AFL] Encontrando diferentes tipos de vulnerabilidades con AFL -> https://www.youtube.com/watch?v=m1RkShHzx_8&t=151s
[Fuzzing con AFL] Clasificando fallos con crashwalk y encontrando la causa raíz con GDB -> https://www.youtube.com/watch?v=5R2gPkCXZkM
[Fuzzing con AFL] Fuzzeando un binario sin código fuente con AFL en modo Qemu.-> https://www.youtube.com/watch?v=np3sLLFQs6I
Honggfuzz
[Fuzzing con honggfuzz] Fuzzeando un programa C simple con HongFuzz -> https://www.youtube.com/watch?v=6OBXJtEe-d8
[Fuzzing con honggfuzz] Hongfuzz,checksec(pwntools),ASAN -> https://www.youtube.com/watch?v=Lr8pLQRTHac
Libfuzzer
[Fuzzing con libfuzzer] Cómo fuzzear un programa C simple usando LibFuzzer -> https://www.youtube.com/watch?v=hFva8kJQwnc&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp
[Fuzzing con libfuzzer,AFL] Cómo fuzzear el programa harness de libfuzzer usando AFL -> https://www.youtube.com/watch?v=HfEqm3TrfwM&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp&index=2
Cómo replicar las vulnerabilidades de OpenSSL CVE-2022-3602 y CVE-2022-3786 y usar libfuzzer -> https://www.youtube.com/watch?v=vhTuXph1dtY
Radamsa
[Fuzzing con Radamsa] Fuzzeando un programa C simple con Radamsa -> https://youtu.be/1FRsXVNpynQ
Windows
WinAFL
[Fuzzing con WinAFL] Fuzzeando un programa C simple con WinAFL -> https://www.youtube.com/watch?v=Va_Wtxf3DMc
[Fuzzing con WinAFL] ¿Qué es una función de fuzzing y cómo asegurarse de que todo funciona correctamente? -> https://www.youtube.com/watch?v=HLORLsNnPzo
Necesito más harness de Windows para fuzzear con winafl
claro, revisa aquí -> https://github.com/hardik05/winafl-harness
quiero probar algo diferente, quizás algunos mutadores distintos a los predeterminados de winafl..
sí, puedes probar esto -> https://github.com/hardik05/winafl-powermopt
se subirán más a medida que los cree.
OSS-Fuzz de Google
Cómo funciona OSS-Fuzz: una guía de fuzzing para proyectos de código abierto -> https://www.youtube.com/watch?v=OBxCDsJ-0aM
¿Por qué creaste esto?
Lleva mucho tiempo a los recién llegados e incluso a las personas con experiencia comprender los diferentes tipos de vulnerabilidades. Yo mismo me he enfrentado a este problema y decidí compartir lo que aprendí.
Si aprendes algo de esto, envíame una nota de agradecimiento. Eso es todo lo que necesito. Además, si quieres mejorar o corregir algo, ¡los PR son bienvenidos!
¿Autor?
Twitter: https://twitter.com/hardik05
Correo electrónico: envíame un DM en Twitter :)
Web: http://hardik05.wordpress.com
¿Comentarios?
Las sugerencias y comentarios siempre son bienvenidos. Si encuentras algún problema, tienes una corrección o una nueva funcionalidad, envía un pull request.