# Создание test-case для фаззинга ARGV * Вызываем help/man программы, все флаги заносим в файл test.case и запускаем скрипт. ``` import os if os.path.exists('test.case'): with open('test.case') as f: x = 1 for line in f: line = line.rstrip() os.system("echo -en '{}\\x00' > {}".format(line, x)) x = x + 1 else: print("File not found.") ``` # Передача crash программе * **Получить hex символов crash файла** ``` hexdump -C id_crash ``` * **Передача содержимого crash-файла программе** ``` /usr/bin/programm $(echo $'hex_symbols') ``` Пример: `/usr/bin/bsign $(echo $'\x2d\x2d\x68\x65\x6c\x70')` # AFL сборка под ARGV testcase - создается в виде "флаг/x00" ### Arm сборка argvfuzz64.so Открывем каталог ``` AFLplusplus/utils/argv_fuzzing ``` Там есть ```Makefile``` в нем надо закоментировать ``` M32FLAG = -m32 M664FLAG = -m64 ``` ### Если ЕСТЬ доступ к исходникам * Библиотеку "argv-fuzz-inl.h" из utils AFL кладем рядом с файлом, где происходит считывание аргуметов. В Библиотеки меняем ```rc = 0;``` на ```rc = 1;``` (86 строка) * В файл добавляем заголовок ``` #include "argv-fuzz-inl.h" ``` * В main прописываем вот такую конструкцию(если не хотим менять 0 аргумент) ``` char p[] = "abc"; AFL_INIT_SET0(p); ``` * Собираем и прверяем. Для проверки запускаем программу, должно перекинуть в stdin, далее вводим например: --help + cntrl,shift,2 + cntrl,shift,2 + cntrl,d. Если все успешно, то должен вывестись хелп программы. ### Если НЕТ доступа к исходникам Идем по пути ```/AFLplusplus/utils/argv_fuzzing``` и выполняем сбору библиотеки ``` make argvfuzz64.so ``` Запусаемся в qemu(или другом) режиме ```-Q``` ``` AFL_PRELOAD=path/to/argvfuzz64.so -i in -o out -Q -- programm ``` # Санитайзеры Если очень много ошибок по какому-либо срабатыванию asan у него можно отключить некоторые проверки. ``` export ASAN_OPTIONS=detect_leaks=0 ```