【发布时间】:2021-01-08 08:25:26
【问题描述】:
我正在尝试熟悉 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] 应该填充随机值吗?虽然看起来我的假设是错误的。
- “@@”是否意味着它将从我的输入文件中读取并将读取的内容放入命令行(从我从文档中读取的内容来看,似乎是这样)?
【问题讨论】:
标签: fuzzing american-fuzzy-lop