Fuzzing 使用afl+时出错+;

Fuzzing 使用afl+时出错+;,fuzzing,american-fuzzy-lop,Fuzzing,American Fuzzy Lop,我正在努力熟悉afl++的用法。我编写了一个简单的程序,如果argv[1]太长,它会由于缓冲区溢出而崩溃 int main(int argc, char *argv[]) { char buffer[4]; if(argc == 2) { strcpy(buffer, argv[1]); } return 0; } 我希望afl++很快就能发现这个崩溃,但在运行了相当长的一段时间后,大概2个小时左右,我还没有看

我正在努力熟悉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\u application./afl\u inputs/input.txt
/target\u application
运行应用程序本身,但在这两种情况下都不会崩溃

问题

  • 我做错了什么
  • 由于afl++模糊了stdin,如果我没有指定“@”,我可以假设argv[1]应该填充随机值吗?虽然看起来我的假设是错误的
  • “@@”是否意味着它将从我的输入文件中读取内容并将其放入命令行(从我从文档中读取的内容来看,似乎是这样的)

它结束时没有结果,因为您的命令错误,并且它没有执行任何模糊处理

AFL++将从文件中获取测试用例,因此您需要修改源代码以执行模糊处理,例如打开一个文件,读取它,并使用缓冲区和文件内容执行strcpy。或者,添加一个GET以从stdin获取文件内容。 在第一个示例中,命令应为:

afl-fuzz -i afl_inputs -o afl_outputs ./target_application @@
在第二个例子中:

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