问题标签 [american-fuzzy-lop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
453 浏览

testing - AFL 不接受来自标准输入的输入

我正在尝试对从用户(Stdin)获取输入的二进制文件进行模糊测试。当我尝试 Afl-fuzz 然后我的二进制文件类似于

它要求指定输入和输出目录的必需参数。

它给出了错误看起来输入目录中没有有效的测试用例。如果我提供一个示例测试用例并重试,它会开始模糊测试,但不会要求用户输入。我是这个领域的菜鸟,所以任何形式的帮助都将不胜感激。

0 投票
1 回答
233 浏览

c - AFL-GCC 的编译方式与 GCC 不同

我想详细了解 AFL 的代码检测。编译示例程序sample.c

withgcc -c -o obj/sample-gcc.o src/sample.c和withafl-gcc -c -o obj/sample-afl-gcc.o src/sample.c反汇编 withobjdump -d会导致不同的汇编代码:

[海合会]

[AFL-GCC]

  • AFL(通常)在每个基本块前面添加一个蹦床来跟踪执行的路径 [https://github.com/mirrorer/afl/blob/master/afl-as.h#L130] -> 指令 0x00lea直到 0x30lea
  • AFL(通常)向程序添加一个主要有效负载(由于简单性我将其排除)[https://github.com/mirrorer/afl/blob/master/afl-as.h#L381]
  • AFL 声称使用 GCC 的包装器,所以我希望其他一切都是平等的。为什么 if-else-condition 的编译方式仍然不同?
  • 额外的问题:如果没有可用源代码的二进制文件应该在不使用 AFL 的 QEMU 模式或 Unicorn 模式的情况下手动检测,这可以通过(天真地)将主要有效负载和每个蹦床手动添加到二进制文件中来实现,还是有更好的方法?
0 投票
0 回答
53 浏览

fuzzing - 更改 AFL 的输入源优先级

我目前正在用 afl 对一些东西进行模糊测试,就像 vanilla afl 自然发生的那样,它会卡在某些地方,例如执行时存在非直观的输入依赖性。挑战是我们如何解决这个问题?好吧,我还注意到崩溃文件夹中的一些输入往往都来自相同的输入 ID,请注意此处的模式:

可以注意到,很多输入来自id:000002这通过输入 afaik 的 src:00002 部分显示)。

所以我的问题非常简单,我如何告诉 afl 优先考虑另一个输入作为“ src”?

0 投票
1 回答
95 浏览

fuzzing - 修改 AFL 以包含一个新变量供 Fuzzer 在种子选择中考虑

我希望了解 AFL 如何实现其种子选择。据我了解,afl-fuzz.c有一个称为has_new_bits返回值的函数,用于识别输入结果是否创建了新路径、新边缘,或者它是否不是我们正在考虑的有趣分支。所以我的问题是这样的,因为我能够插入一些代码行,允许我插入变量,例如计数器,我可以插入其他代码行,这将在给定分支中增加它,我该如何修改AFL 是否能够检测到这一点?

0 投票
0 回答
24 浏览

src - 如何在 Ubuntu 20.04 LTS 中纠正此错误

我想使用 American Fuzzy Loop(AFL) 检查代码,但我在测试时遇到了这个问题。帮我找出这个错误,另一件事是它不会显示与此代码有关的任何输出。错误:

0 投票
0 回答
23 浏览

c - AFL 标记为冗余功能

使用 AFL 并坚持使用名为 mark_as_redundant(...) 的函数。这个函数具体是做什么的?解释说:

标记/取消标记为冗余(仅边缘)。这不用于恢复状态,但可能对后处理数据集有用。

虽然我不确定它将什么标记/取消标记为冗余。

参考:https ://github.com/google/AFL/blob/master/afl-fuzz.c#L773

0 投票
1 回答
128 浏览

c - AFL-fuzz 没有发现任何崩溃

我是第一次尝试 AFL,因此我发现了一个非常简单的易受攻击的 C 代码,我可以用它来测试 AFL。

问题中的C代码是

我通过运行编译该代码afl-gcc test.c -o test并对其进行了测试,以确保它在假设的情况下崩溃(运行./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,但事实证明这是一个挑战。任何人都可以帮忙吗?

0 投票
0 回答
90 浏览

binaryfiles - AFL-Fuzz - 奇怪的检查语法!- 如何将命令行参数添加到二进制文件?

我正在尝试对没有接受配置文件的源代码的专有二进制文件进行模糊测试。所以典型的用例是:

./File --config file.config

配置是运行程序其余部分所需的一堆不同参数,如果我自己运行它,则运行良好。此外,配置文件位于输入目录中。

我正在尝试使用带有 AFL 的以下命令对其进行模糊测试:

./afl-fuzz -Q -i input/ -o output/ -m 400 ./File --configfile

然而,一旦我运行命令,一切看起来都很好,但是一旦我进入“havoc”的第一次迭代,我就会得到一个“奇怪的,检查语法!” 错误。如果我@@在最后添加 a,afl 会给我一个超时错误。我假设一旦 afl-fuzz 开始改变该输入文件,它就会破坏二进制文件,但我不确定,我不确定还有什么可以尝试的 - 有什么想法吗?谢谢!