【问题标题】:Errors when using afl++使用 afl++ 时的错误
【发布时间】: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


    【解决方案1】:

    它没有结果就结束了,因为你的命令是错误的,并且它没有执行任何模糊测试。

    AFL++ 将从文件中获取测试用例,因此您需要修改源代码以执行模糊测试,例如打开一个文件,读取它并使用带有文件内容的缓冲区执行 strcpy。或者,添加 get 以从标准输入获取文件内容。 在第一个示例中,命令应该是:

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

    在第二个例子中:

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

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多