
Пример программы на C, содержащей уязвимый код для распространённых типов уязвимостей. Её можно использовать для демонстрации концепций фаззинга.
Примечание: имя файла было изменено с imgRead.c на dvcp.c; если вы смотрите видео, вы увидите imgRead.c, но в репозитории GitHub вы увидите dvcp.c, пожалуйста, используйте правильное имя файла.
Мой YouTube-канал: https://www.youtube.com/user/MrHardik05/featured?view_as=subscriber
Что это такое?
Это простая программа на C, которую я написал, чтобы объяснить распространённые типы уязвимостей, такие как:
Эта программа на C содержит уязвимый код со всеми перечисленными выше уязвимостями, и вы можете фаззить её с помощью любого фаззера, например AFL, libafl, libfuzzer, hongfuzz, winafl, jackalope или любого другого фаззера на ваш выбор.
Как скомпилировать
Просто введите «make» в командной строке. Makefile прилагается.
Как сгенерировать входные данные для AFL?
просто создайте пример входного файла, как показано ниже, а остальным AFL займётся сам:
echo "IMG" >input/1.txt
AFL автоматически сгенерирует новые тест-кейсы и обнаружит большинство из упомянутых выше уязвимостей. В этом вся прелесть AFL :)
1. Сначала скомпилируйте эту программу следующей командой:
afl-gcc -g -fsanitize=address dvcp.c -o dvcp
2. выполните эту команду:
afl-fuzz -i input -o output -m none -- ./dvcp @@
Как фаззить её с помощью honggfuzz
1. Сначала скомпилируйте эту программу следующей командой:
hfuzz-gcc -g -fsanitize=address dvcp.c -o dvcp
2. выполните эту команду:
hongfuzz -i input -- ./dvcp ___FILE___
Как фаззить с помощью libfuzzer
Вам нужно изменить код на C; обновлённый код можно получить здесь: https://github.com/hardik05/Damn_Vulnerable_C_Program/blob/master/dvcp_libfuzzer.c
1. Скомпилируйте программу следующей командой:
clang -fsanitize=fuzzer,address,undefined -g dvcp_libfuzzer.c -o dvcp_libfuzzer
2. выполните эту команду для фаззинга:
./dvcp_libfuzzer
Вы можете посмотреть видеоуроки здесь:
Полный плейлист по фаззингу:
отдельные видео ниже:
Linux
LibAFL
[Фаззинг с помощью libAFL]Как установить libAFL в систему и каковы различные компоненты? -> https://www.youtube.com/watch?v=ztGfxbvcrms
[Фаззинг с помощью libAFL]Введение в ForkServer libAFL, запуск фаззера forkserver libAFL. -> https://www.youtube.com/watch?v=Ed1anYoGTyA
[Фаззинг с помощью libAFL]Фаззинг чертовски уязвимой программы на C с помощью фаззера forkserver libAFL -> https://www.youtube.com/watch?v=ad_4zroiS_g
[Фаззинг с помощью libAFL] Использование режима общей памяти с фаззером forkserver libAFL -> https://www.youtube.com/watch?v=GXD_qkISyfY
AFL++
[Фаззинг с помощью AFLplusplus] Установка AFLPlusplus и фаззинг простой программы на C -> https://www.youtube.com/watch?v=9wRVo0kYSlc
[Фаззинг с помощью AFLplusplus] Как фаззить бинарный файл без исходного кода в Linux в постоянном режиме -> https://www.youtube.com/watch?v=LGPJdEO02p4
AFL
[Фаззинг с помощью AFL] Как установить AFL на Ubuntu-> https://www.youtube.com/watch?v=r7ucv2kN4j4
[Фаззинг с помощью AFL] Фаззинг простой программы на C с помощью AFL -> https://www.youtube.com/watch?v=NiGC1jxFx78&t=66s
[Фаззинг с помощью AFL] Поиск различных типов уязвимостей с помощью AFL -> https://www.youtube.com/watch?v=m1RkShHzx_8&t=151s
[Фаззинг с помощью AFL] Триаж крашей с помощью crashwalk и поиск первопричины с помощью GDB -> https://www.youtube.com/watch?v=5R2gPkCXZkM
[Фаззинг с помощью AFL] Фаззинг бинарного файла без исходного кода с помощью AFL в режиме Qemu.-> https://www.youtube.com/watch?v=np3sLLFQs6I
Honggfuzz
[Фаззинг с помощью honggfuzz] Фаззинг простой программы на C с помощью HongFuzz -> https://www.youtube.com/watch?v=6OBXJtEe-d8
[Фаззинг с помощью honggfuzz] Hongfuzz,checksec(pwntools),ASAN -> https://www.youtube.com/watch?v=Lr8pLQRTHac
Libfuzzer
[Фаззинг с помощью libfuzzer] Как фаззить простую программу на C с помощью LibFuzzer -> https://www.youtube.com/watch?v=hFva8kJQwnc&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp
[Фаззинг с помощью libfuzzer,AFL] Как фаззить программу-харнесс для libfuzzer с помощью AFL -> https://www.youtube.com/watch?v=HfEqm3TrfwM&list=PLHGgqcJIME5m7HaHfACayoyN0TRe2PHRp&index=2
Как воспроизвести уязвимости OpenSSL CVE-2022-3602 и CVE-2022-3786 и использовать libfuzzer -> https://www.youtube.com/watch?v=vhTuXph1dtY
Radamsa
[Фаззинг с помощью Radamsa] Фаззинг простой программы на C с помощью Radamsa -> https://youtu.be/1FRsXVNpynQ
Windows
WinAFL
[Фаззинг с помощью WinAFL] Фаззинг простой программы на C с помощью WinAFL -> https://www.youtube.com/watch?v=Va_Wtxf3DMc
[Фаззинг с помощью WinAFL] Что такое фаззинг-функция и как убедиться, что всё работает правильно? -> https://www.youtube.com/watch?v=HLORLsNnPzo
Мне нужно больше харнессов для Windows, чтобы фаззить с помощью winafl
конечно, загляните сюда -> https://github.com/hardik05/winafl-harness
я хочу попробовать что-то другое, возможно, какие-то другие мутаторы, отличные от стандартных в winafl..
да, вы можете попробовать вот это -> https://github.com/hardik05/winafl-powermopt
Больше будет загружено по мере их создания.
OSS-Fuzz от Google
Как работает OSS-Fuzz: руководство по фазз-тестированию для проектов с открытым исходным кодом -> https://www.youtube.com/watch?v=OBxCDsJ-0aM
Зачем вы это создали?
Понимание различных типов уязвимостей занимает много времени у новичков и даже у опытных людей. Я сам столкнулся с этой проблемой и решил поделиться тем, чему научился.
Если вы чему-то из этого научились, отправьте мне благодарственную записку. Это всё, что мне нужно. Кроме того, если вы хотите что-то улучшить или исправить, пул-реквесты приветствуются!
Автор?
Twitter: https://twitter.com/hardik05
Электронная почта: напишите мне в личку в Twitter :)
Веб-сайт: http://hardik05.wordpress.com
Обратная связь?
Предложения и комментарии всегда приветствуются. Если вы нашли какую-либо проблему, у вас есть исправление или новая функция, отправляйте пул-реквест.