标题: AFL 字典使用 分类: Fuzzing 创建: 2023-10-19 21:52 修改: 链接: http://0x2531.tech/fuzzing/202310192152.txt -------------------------------------------------------------------------------- 1、介绍 字典是用户提供的一组语言(如:SQL、XML等)关键字或有趣的字节序列(如:文件头魔法值等)。使用字典 能让变异引擎更加的聪明,加快模糊测试进程。 2、使用 在运行 afl-fuzz 时,带上选项 -x dir 即可使用字典。dir 可以是文件,也可以是目录。如果是目录,则 将各 token (关键字或字节序列)单独存放在目录下各文件里;如果是文件,则每行放置一个 token。 常用的方法是文件模式。通过 name="value" 的格式配置,其中 name 在使用时会被忽略,所以可以省略 (为了可读性,建议保留)。需要注意的是,value 必需用双引号包围,且其中不可打印的字符需使用 hex 转义(\xNN)、反斜线和引号等需要被转义(\\, \")。在 AFL 项目目录的子目录 dictionaries 下可以 找到一些内置的字典文件,其中,xml.dict 和 png.dict 是比较好的示例。 afl-fuzz 会根据 dir 的类型,自动选择解析方式。 另外,文件模式支持在 name 后跟一个标记(@num),如:keyword_foo@1 = "foo"。只有当字典级别高于或 等于该 num 时,该 token 才会被加载。默认的字典级别为 0,如果要设置更高的级别,可通过下面方法实现: -x path/to/dictionary.dict@2 3、原理 首先,afl-fuzz 会加载字典文件。结果是将各 token 按长度升序存储到结构体数组 extras 中。 未完待续...