Comments 4
В разделе "Подготовка Curl" речь о сборке с адресным санитайзером, но в CFLAGS
стоит undefined
, хотя LDFLAGS
корректный
Фаззинг функций, обрабатывающих аргументы командной строки
Для воссоздания структуры argv
вы разделяете входную строку по пробелам, но они могут использоваться в http-заголовках, url (с некоторыми нюансами) и прочих полях, которые могут обрабатываться curl'ом (а может и нет, но флаг CURLU_ALLOW_SPACE
есть)
Также приведённый пример в "Структура массива argv" со строкой "Two Three" не выглядит валидным тогда :)
В репозитории AFL++ есть готовый вариант обвязки для фаззинга через аргументы, который применим и для libfuzzer. В нём разделение идёт по двум подряд стоящим нуль-терминаторам, но в аргументах может быть не только ascii
CURLU_ALLOW_SPACE - Разрешает пробелы в URL если вы используете curl_url_set()
с этим флагом, пробелы могут быть приняты и сохранены.
Можете не разбивать по пробелам. Вероятность того, что вы получите неверный url выше чем при разбивке по пробелам. Например оставите пробел в названии протокола.
Моменты с пробелами в url будут покрываться фаззером при помощи генерации последовательности -%20
Вероятность подачи фаззером одна байта (в виде пробела) выше, чем двух-подряд идущих одинаковых байтов (нул-терминатора) согласно мат.статистике.
Опять же:Автор не претендует на описание самых эффективных или универсальных методов фаззинга.
Если вы предпочитаете использовать стандартный header от afl++, то это ваш выбор.
Особенности подачи входных данных при фаззинге в режиме Persistent Mode на примере Libfuzzer + CURL