AFL-fuzz 没有发现任何崩溃
AFL-fuzz not finding any crashes
我是第一次尝试 AFL,因此我找到了一个非常简单的易受攻击的 C 代码,我可以用它来测试 AFL。
题目中的C代码是
#include <stdio.h>
#include <string.h>
int main(int argc, char * argv[]){
char name[10];
if ( argc > 1 ){
strcpy(name, argv[1]);
printf("HELLO %s\n", name);
}
return 0;
}
我通过 运行ning afl-gcc test.c -o test
编译了该代码,我测试了它只是为了确保它在预期的时候崩溃(运行ning ./test $(python3 -c "print('A'*26)")
会给出如预期的分段错误)
这里的问题是,我创建了一个测试用例 echo -en "test\x00" > input/testcase
和 运行 AFL afl-fuzz -i afl_in -o afl_out -- ./test
但是一天后它仍然没有发现任何崩溃。
我还尝试创建一个会强制它崩溃的测试用例 python3 -c "print('A'*26)" > input/testcase
但它仍然 运行 并且没有找到任何东西。
这应该是最简单的示例,因此我可以更好地了解 AFL,但事实证明这是一个挑战。有人可以帮忙吗?
就像 Nick ODell post 在评论中一样
Seems like AFL expects the program under test to read from STDIN rather than an argument. github.com/google/AFL#6-fuzzing-binaries
接下来 URL 显示了一个允许 AFL 从参数中读取的实验模块,为了让它工作,我只需要在我现有的代码中添加 2 行:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "argv-fuzz-inl.h" // <-- Argv fuzz module
int main(int argc, char * argv[]){
AFL_INIT_ARGV(); // <-- needed near the very beginning of main().
char name[10];
if ( argc > 1 ){
strcpy(name, argv[1]);
printf("HELLO %s\n", name);
}
return 0;
}
之后我再次编译它,一切都按预期工作。
我是第一次尝试 AFL,因此我找到了一个非常简单的易受攻击的 C 代码,我可以用它来测试 AFL。
题目中的C代码是
#include <stdio.h>
#include <string.h>
int main(int argc, char * argv[]){
char name[10];
if ( argc > 1 ){
strcpy(name, argv[1]);
printf("HELLO %s\n", name);
}
return 0;
}
我通过 运行ning afl-gcc test.c -o test
编译了该代码,我测试了它只是为了确保它在预期的时候崩溃(运行ning ./test $(python3 -c "print('A'*26)")
会给出如预期的分段错误)
这里的问题是,我创建了一个测试用例 echo -en "test\x00" > input/testcase
和 运行 AFL afl-fuzz -i afl_in -o afl_out -- ./test
但是一天后它仍然没有发现任何崩溃。
我还尝试创建一个会强制它崩溃的测试用例 python3 -c "print('A'*26)" > input/testcase
但它仍然 运行 并且没有找到任何东西。
这应该是最简单的示例,因此我可以更好地了解 AFL,但事实证明这是一个挑战。有人可以帮忙吗?
就像 Nick ODell post 在评论中一样
Seems like AFL expects the program under test to read from STDIN rather than an argument. github.com/google/AFL#6-fuzzing-binaries
接下来 URL 显示了一个允许 AFL 从参数中读取的实验模块,为了让它工作,我只需要在我现有的代码中添加 2 行:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "argv-fuzz-inl.h" // <-- Argv fuzz module
int main(int argc, char * argv[]){
AFL_INIT_ARGV(); // <-- needed near the very beginning of main().
char name[10];
if ( argc > 1 ){
strcpy(name, argv[1]);
printf("HELLO %s\n", name);
}
return 0;
}
之后我再次编译它,一切都按预期工作。