【问题标题】:AFL only explores 1 path and nothing more! ( last new path : none yet (odd, check syntax!) )AFL 仅探索 1 条路径,仅此而已! (最后一个新路径:还没有(奇怪,检查语法!))
【发布时间】:2022-12-19 22:24:04
【问题描述】:

我在 docker 容器(在 Ubuntu 20.04 上)中使用 AFL(版本 2.57b)来模糊测试几个 C 程序。但问题是,每当我对一个程序进行模糊测试时,它不会探索超过 1 条路径,输出是这样的:

the AFL output -- running

在这种情况下,我专门使用此命令:

AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 afl-fuzz -i corpus/ -o afl_out -- ./afl-main @@

其中afl-main 是用afl-clang 编译的程序的名称,corpus 是包含输入文件的目录的名称。

在这种特定情况下,main.c 如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char* argv[]) {

if (argc < 1)
    return 1;

if (strcmp(argv[1],"-s")==0)
    printf("girls\n");
else if(strcmp(argv[1],"-k")==0)
    printf("boys!\n");
else
    printf("OMG!!\n");

return 0;

}

但是,正如我已经提到的,切换到其他程序不会改变输出中的任何内容。

还有一个类似的问题 here,但我已经在那里应用了建议的解决方案,当我从当前工作目录中的 corpus 目录提供输入时,我的二进制文件工作正常。

我尝试了几个C程序,看看是不是实现方式有问题,或者我传递输入的方式(通过标准输入),但是afl-fuzz输出还是一样。

我感谢任何帮助和提前发表评论。

【问题讨论】:

    标签: c fuzzing american-fuzzy-lop


    【解决方案1】:

    @@ 在您的 afl 命令行中表示 afl 将放置输入文件名的位置。 Afl 将像这样运行您的可执行文件 - ./afl-main inputfile。 您的程序将此文件名与 "-s""-k" 进行比较。

    Afl 模糊输入的内容,而不是文件名。您应该阅读输入的内容并比较它而不是文件名。这应该可以解决您的问题。

    另请注意 - 您为可执行文件提供了一个参数,因此不应输入条件 if (argc &lt; 1)。 该程序的其余部分只有 3 个路径 - 每个 if 情况一个。 afl 找到所有这些路径所需的时间取决于你的种子(语料库文件夹中的初始输入文件),它越接近 "-s""-k",afl 找到这些路径的速度就越快。 提供的屏幕截图显示您只跑了 2 分钟。在一般情况下,这太少而无法分析模糊测试结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 2014-08-24
      • 2011-11-25
      • 2011-12-26
      • 2020-09-15
      相关资源
      最近更新 更多