Ошибки при использовании afl++

Я пытаюсь ознакомиться с использованием afl++. Я написал простую программу, которая должна давать сбой из-за переполнения буфера, если argv[1] слишком длинный.

int main(int argc, char *argv[])
{
    char buffer[4];
    
    if(argc == 2)
    {
        strcpy(buffer, argv[1]);    
    }
    
    return 0;
}

Я ожидаю, что сбой будет обнаружен afl++ в ближайшее время, но после работы в течение некоторого времени, может быть, около 2 часов, я пока не вижу никаких зарегистрированных сбоев.

Командная строка, которую я использовал, была

afl-fuzz -i afl_inputs -o afl_outputs -- ./target_application

Программа была составлена ​​с

CC=afl-clang-fast++ AFL_HARDEN=1 make

Интересно, что когда я устранял эту проблему, я поместил некоторые символы ASCII в свой входной файл, например, просто символ Z, и изменил командную строку таким образом, что afl-fuzz -i afl_inputs -o afl_outputs -- ./target_application @@ и afl++ немедленно завершится, заявив, что один из тестовых случаев вызвал сбой.

Кроме того, я попытался запустить само приложение с этими входными файлами ./target_application ./afl_inputs/input.txt и ./target_application < ./afl_inputs/z.txt, но оно не падает в обоих случаях.

Вопросы

  • Что я делаю не так?
  • Поскольку afl++ фаззит стандартный ввод, могу ли я предположить, что argv[1] должен быть заполнен случайными значениями, если я не указал @@? Хотя мне кажется, что мое предположение неверно.
  • Означает ли @@, что он будет читать из моих входных файлов и помещать то, что он читает, в командную строку (из того, что я прочитал из документации, похоже, это так)?

person localacct    schedule 08.01.2021    source источник


Ответы (1)


Это заканчивается безрезультатно, потому что ваша команда неверна, и она не выполняет никакого фаззинга.

AFL++ возьмет тестовый пример из файлов, поэтому вам нужно изменить исходный код, чтобы выполнить фаззинг, например. Откройте файл, прочитайте его и выполните команду strcpy с буфером с содержимым файла. Или добавьте get, чтобы получить содержимое файла из стандартного ввода. В первом примере команда должна быть такой:

afl-fuzz -i afl_inputs -o afl_outputs ./target_application @@

Во втором примере:

afl-fuzz -i afl_inputs -o afl_outputs ./target_application
person sinkmanu    schedule 13.01.2021