【问题标题】:Running AFL-Fuzzer buffer overflow运行 AFL-Fuzzer 缓冲区溢出
【发布时间】:2019-12-31 21:10:13
【问题描述】:

我正在尝试了解 AFL-fuzzer,但我有一些问题:

  1. 我看到一个视频显示,例如,如果代码中有两个输入,那么在测试用例中,每一行都对应每个输入。那是对的吗?由于我想将完整的消息(例如 HTTP 请求)放入一个变量中,我该怎么做呢?
  2. 我不明白什么时候放@@。

例如,我正在尝试对这段代码进行模糊测试:

void Check_buffer(char* data) 
{
    char buffer[5];
    strcpy(buffer, data);
}

int main(int argc, char* argv[])
{
    char tmp_data = argv[1];
    Check_buffer(argv[1]);
    return 0;
}

我已经创建了 in 和 out 文件夹。在 in 文件夹中,我创建了一个包含以下内容的 txt 文件:“AAA”。

我执行的命令行是:afl-clang -fno-stack-protector -z execstack 4.c -o vul4

然后我运行:afl-fuzz -m none -i in/ -o out/ ./vul4 @@

我收到以下错误:perform_dry_run(), afl-fuzz.c:2852

如果我运行这样的命令:afl-fuzz -m none -i in/ -o out/ ./vul4 AA 它运行良好,但没有找到任何新路径,也没有发现崩溃。

此外,我正在尝试理解这个概念。如果我想在特定位置注入代码,我该怎么做?

【问题讨论】:

    标签: reverse-engineering fuzzing american-fuzzy-lop


    【解决方案1】:
    1. 您正在尝试从命令行参数获取数据,但 AFL 不能与 argv[] 一起使用(除非您的程序读取 ./prog file.txt 之类的文件)。 而是使用类似

      的东西
      #define INPUTSIZE 100
      char input[INPUTSIZE] = {0};
      read (STDIN_FILENO, input, INPUTSIZE)
      

      如果您仍然对从 argv[] 获取数据感兴趣,可以使用 AFL 存储库中的实验方法afl argv experimental

    2. @@ 在您的程序通过命令行接受文件时使用 这意味着模糊器将获取文件,对其进行变异,然后将其替换到程序中@@

    附言

    #include <stdio.h>
    #include <unistd.h>
    
    
    #define INPUTSIZE 100
    void Check_buffer(char* data)
    {
        char buffer[5];
        strcpy(buffer, data);
    }
    
    int main(int argc, char* argv[])
    {
    
    char input[INPUTSIZE] = {0};
    read (STDIN_FILENO, input, INPUTSIZE);
    
        Check_buffer(input);
        return 0;
    }
    

    AFL result image

    【讨论】:

    • 发送您正在讨论的视频的链接
    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2014-10-05
    • 2013-11-06
    • 2013-04-11
    • 2015-07-07
    • 2012-02-05
    相关资源
    最近更新 更多