【问题标题】:Fuzzing command line arguments [argv]模糊命令行参数 [argv]
【发布时间】:2020-11-15 08:12:27
【问题描述】:

我有一个二进制文件,我一直在尝试用 AFL 进行模糊测试,唯一的问题是 AFL 只模糊 STDIN 和文件输入,这个二进制文件通过其参数 pass_read [input1] [input2] 获取输入。我想知道是否有任何方法/模糊器允许以这种方式进行模糊测试?

我没有源代码,所以制作线束并不适用。

【问题讨论】:

  • 它接受什么类型的输入作为参数?
  • 所以您正在寻找像xargs 这样的工具?还是只是自己修补 AFL?
  • @DSilveiro 它只接受两个字符串
  • @Ext3h 我正在寻找一种方法来模糊此二进制文件的位置参数,我希望寻找另一种工具,但如果修补 AFL 是完成此任务的唯一方法,我可能也有跨度>

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


【解决方案1】:

仅限 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 中以供进一步分析。

这可能不是最优雅的解决方案,但如果没有工具必须满足当前要求,也许你会给你一些其他可能性的想法

【讨论】:

  • 感谢您的回答,我查看了 zuff,但我认为它不能解决我的问题,因为它也只需要一个文件名作为模糊输入。 AFL 实际上确实为没有源的非仪器二进制文件提供了 QEMU 模式,但我的问题是我没有模糊测试的方法,因为它不允许模糊二进制文件的参数字符串
【解决方案2】:

AFL 的创始人 Michal Zalewski 在post 中表示:

AFL 不支持 argv 模糊测试,因为 TBH,它在 实践。在experimental/argv_fuzzing/中有一个例子展示了如何做到这一点 在一般情况下,如果你真的想要的话。

GitHub 上提到的示例链接:https://github.com/google/AFL/tree/master/experimental/argv_fuzzing

文件argv-fuzz-inl.h中有一些说明(自己没试过)。

【讨论】:

  • 感谢您的回答,我之前看过这个示例,不幸的是,它只有在您有可用的源代码时才有效,我试图模糊的二进制文件是黑盒。
  • @rooter 只是出于兴趣...您是否尝试过来自@Ext3h 的上述xargs 建议?
【解决方案3】:

我查看了 GitHub 上的 AFLplusplus 存储库。在AFLplusplus/utils/argv_fuzzing/ 内部,有一个Makefile。如果你运行它,你会得到一个.so 文件(一个共享库),你可以用它来做argv fuzzing,即使你只有二进制文件。显然,您必须使用AFL_PRELOAD。你可以在README阅读更多内容。

【讨论】:

  • 我之前检查过这个解决方案,不幸的是,您似乎仍然需要修补源以调用 AFL_INIT_ARGV() 宏才能使此方法起作用。
猜你喜欢
  • 2020-01-23
  • 2013-06-13
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2020-11-19
  • 1970-01-01
相关资源
最近更新 更多