我有一个二进制文件,我一直在尝试用 AFL 进行模糊测试,唯一的事情是 AFL 只模糊 STDIN 和文件输入,这个二进制文件通过它的 arguments 接受输入pass_read [input1] [input2]
。我想知道是否有任何方法/模糊器允许以这种方式进行模糊测试?
我没有源代码,所以制作线束并不适用。
我有一个二进制文件,我一直在尝试用 AFL 进行模糊测试,唯一的事情是 AFL 只模糊 STDIN 和文件输入,这个二进制文件通过它的 arguments 接受输入pass_read [input1] [input2]
。我想知道是否有任何方法/模糊器允许以这种方式进行模糊测试?
我没有源代码,所以制作线束并不适用。
AFL 的创始人 Michal Zalewski 在这篇文章中说:
AFL 不支持 argv 模糊测试,因为 TBH,它在实践中并不是非常有用。在experimental/argv_fuzzing/中有一个例子展示了如果你真的想在一般情况下如何做。
链接到 GitHub 上提到的示例:https ://github.com/google/AFL/tree/master/experimental/argv_fuzzing
文件argv-fuzz-inl.h中有一些说明(我自己没试过)。
我查看了AFLplusplus
GitHub 上的存储库。里面AFLplusplus/utils/argv_fuzzing/
,有一个Makefile
。如果你运行它,你会得到一个.so
文件(一个共享库),你可以用它来做argv
模糊测试,即使你只有二进制文件。显然,您必须使用AFL_PRELOAD
. 您可以在 中阅读更多内容README
。
仅限 Bash 解决方案
例如,让我们生成 10 个随机字符串并将它们存储在一个文件中
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 10 | head -n 10 > string-file.txt
接下来,让我们从字符串文件中读取 2 行并将其传递给我们的应用程序
exec handle< string-file.txt
while read string1 <&handle ; do
read string2 <&handle
pass_read $line1 $line2 >> crash_file.txt
done
exec handle<&-
然后,我们将任何崩溃存储在其中crash_file.txt
以供进一步分析。
这可能不是最优雅的解决方案,但如果没有工具必须满足当前要求,也许您会给您一些其他可能性的想法