Boofuzz Notes
记录Boofuzz学习中的一些Tips
API docs
模糊测试协议形成Boofuzz脚本的通用步骤
针对特定协议做fuzz的一般思路:
ref:https://github.com/jtpereyda/boofuzz/discussions/625
1.使用 boofuzz 原语定义每个请求,例如 s_static()、s_string()、s_byte(); 2.根据协议状态转换连接定义的请求; 3.设置正确的连接,用于与目标进行通信; 4.如有必要,设置适当的监视器,以监视目标的状态; 5.初始化一个Session并将它们放在一起。
以ftp协议为例:
由于是在TCP层,所以使用TCPSocketConnection;
它是纯文本协议,因此 s_string() 可以改变值;
对于监控,这取决于您的真实环境。
正如您在第一篇文章中提到的, s_static() 用于常量(非突变)值。 s_byte() 可用于改变单个字节值。
控制模糊测试迭代次数
`在 Boofuzz 中,你可以使用 num_mutations 参数来控制模糊测试的迭代次数,从而限制模糊测试的用例数量。通过设置 num_mutations 参数为 10,你可以让 Boofuzz 在执行 10 个模糊化用例后停止模糊测试。
下面是一个示例代码,演示了如何在 Boofuzz 脚本中设置 num_mutations 参数:
from boofuzz import *
def define_proto(session):
# 定义协议逻辑
s_initialize("request")
s_string("GET", fuzzable=False)
s_delim(" ", fuzzable=False)
s_string("/path", fuzzable=False)
s_static(" HTTP/1.1\r\n")
s_static("Host: example.com\r\n\r\n")
# 创建一个会话(session)
session = Session(target=Target(connection=SocketConnection("192.168.0.1", 80)))
define_proto(session)
# 设置 num_mutations 参数为 10
session.num_mutations = 10
# 启动模糊测试
session.fuzz()
在上述示例中,我们通过将 num_mutations 属性设置为 10 来指定 Boofuzz 执行 10 个模糊化用例后停止模糊测试。
请注意,num_mutations 参数是可选的,默认情况下,Boofuzz 会持续模糊测试,直到达到停止条件(例如超时或达到最大迭代次数)。通过设置 num_mutations 参数,你可以明确指定模糊测试的用例数量。
REF
- boofuzz 源码笔记(一) - 3篇文章,推荐阅读
- BooFuzz的简单使用,以CVE-2018-5767为例 - 讲解了固件模拟中的一些坑