Nautilus:一款基于语法的反馈式模糊测试工具
Nautilus介绍Nautilus是一款基于覆盖指引和语法的反馈式模糊测试工具 , 广大研究人员可以使用Nautilus来提升模糊测试过程中的测试覆盖率 , 以寻找到更多的安全漏洞 。 在Nautilus的帮助下 , 研究人员可以通过指定半有效的输入语法 , 来执行更加复杂的变异操作 , 并生成更多有效的测试用例 。
目前 , Nautilus已发布了2.0版本 , 该版本相较于Nautilus原型 , 引入了很多功能性提升 , 目前该工具已经100%支持AFL++了 。 除了稳定性和可用性提升之外 , 还包括下列功能提升:
- 支持AFL-Qemu模式
- 支持Python格式语法
- 支持使用Python脚本生成结构化输入
- 支持指定源码协议/格式
- 支持指定正则表达式
- 避免生成相似的短输入
- 提供了更好的错误输出
- 修复大量Bug
文章插图
工具安装&配置【Nautilus:一款基于语法的反馈式模糊测试工具】首先 , 广大用户需要使用下列命令将该项目源码克隆至本地 , 并进行基础配置:
git clone 'git@github.com:nautilus-fuzz/nautilus.git'cd nautilus/path/to/AFLplusplus/afl-clang-fast test.c -o test #afl-clang-fast as provided by AFL
接下来 , 我们需要在config.ron文件中设置好所有需要使用的参数:cargo run --release -- -g grammars/grammar_py_example.py -o /tmp/workdir -- ./test @@
如果想要使用QEMU模式的话 , 可以运行下列命令:cargo run /path/to/AFLplusplus/afl-qemu-trace -- ./test_bin @@
工具使用样例在这里 , 我们可以使用Python来生成一个语法 , 并生成一个有效的类XML输入 。 需要注意的是 , Python脚本的语法规则 , 这里必须确保匹配起始标签:#ctx.rule(NONTERM: string, RHS: string|bytes) adds a rule NONTERM->RHS. We can use {NONTERM} in the RHS to request a recursion.ctx.rule("START","{XML_CONTENT} ")ctx.rule("XML_CONTENT","{XML}{XML_CONTENT}")ctx.rule("XML_CONTENT","") #ctx.script(NONTERM:string, RHS: [string]], func) adds a rule NONTERM->func(*RHS).# In contrast to normal `rule`, RHS is an array of nonterminals.# It's up to the function to combine the values returned for the NONTERMINALS with any fixed content used.ctx.script("XML",["TAG","ATTR","XML_CONTENT"], lambda tag,attr,body: b"<%s %s>%s%s>"%(tag,attr,body,tag) )ctx.rule("ATTR","foo=bar")ctx.rule("TAG","some_tag")ctx.rule("TAG","other_tag") #sometimes we don't want to explore the set of possible inputs in more detail. For example, if we fuzz a script#interpreter, we don't want to spend time on fuzzing all different variable names. In such cases we can use Regex#terminals. Regex terminals are only mutated during generation, but not during normal mutation stages, saving a lot of time.#The fuzzer still explores different values for the regex, but it won't be able to learn interesting values incrementally.#Use this when incremantal exploration would most likely waste time. ctx.regex("TAG","[a-z]+")
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 黑鲨4pro什么时候出多少钱,黑鲨4pro价格参数介绍
- 华硕基于WRX80的主板现身 为AMD Ryzen Threadripper Pro打造
- vivo一款新机现身跑分网!运存和系统信息通通曝光
- 微软新版电子邮件客户端截图曝光:基于网页端Outlook
- Clearbot:一款能自动在水上追踪收集垃圾的机器人
- 联想Yoga AIO 7发布 一款设计巧妙的27英寸旋转式一体电脑
- 显示器|LG 将在CES 2021上展示一款可变身曲面屏OLED游戏显示器
- 曝光 | 小鹏或春节前推送NGP更新,基于高精地图可自动变道
- 基于Spring+Angular9+MySQL开发平台
- ProClip为Surface Duo双屏智能机准备了一款车载支架