AFL“奇怪,检查语法!”

问题描述

我正在尝试使用 pngquantAFL 进行模糊测试,并注意到我看到了 odd,check Syntax! 警告。 previous answer 表示 AFL 可能没有读取我指定的输入文件。我可以通过提供位于我在使用 AFL 进行模糊测试时使用的相同输入示例目录中的 png 文件调用 pngquant

我执行的 AFL 命令是:

afl-fuzz -i ./in-filtered -o ./out -x ./dictionary/png.dict -- pngquant @@

AFL documentation 提到当 AFL 无法找到新路径时,可能会弹出 odd,check Syntax! 警告。

此外,我注意到一旦 AFL 开始使用 havoc 模糊测试策略就会弹出警告,下图显示只要模糊测试开始使用 havoc,循环计数就开始增加

AFL begins fuzzing

AFL shows warning when fuzzing with havoc

解决方法

这是因为 pngquant 使用不当造成的。

当使用 pngquant 时,它会生成一个带有结果的输出文件,当你这样做两次时,你会遇到一个错误:

➜  pngquant git:(master) ✗ ./pngquant  ./test/img/metadata.png
➜  pngquant git:(master) ✗ ./pngquant  ./test/img/metadata.png
error: './test/img/metadata-fs8.png' exists; not overwriting

AFL 没有机会探索目标,因为它每次都会被阻挡。

快速浏览后,最简单的解决方法是这样的:

afl-fuzz -i ./in -o ./out -- ./pngquant -f -- @@

这会强制 pngquant 覆盖结果文件,从而启用 afl-fuzz。但是,请注意,这会产生大量 IO。因此,请尝试使用 /dev/null 或类似技巧来规避这一点。

愉快的模糊测试!