Python 带boofuzz的http模糊化
我在找一个模糊的图书馆,碰巧看到了“boofuzz” 尽管没有关于如何使用该库进行http模糊化的示例 这是我在他们的github页面中看到的唯一代码,但他们说它取自sulley(一个旧的模糊库): 导入系统 sys.path.insert(0,“../”) 从boofuzz.primitives导入字符串、静态、Delim 类别组(对象): 块=[] 定义初始化(self,name,definition=None): self.name=名称 如果定义: self.definition=定义 def添加定义(自我,定义): 断言isinstance(定义,(列表,元组)),“定义必须是列表或元组!” self.definition=定义 def渲染(自): 返回“”。join([self.definition中x的x.value]) def排气(自): 对于自我定义中的项目: while item.mutate(): 当前值=item.value self.log\u发送(当前值) recv_data=self.send_缓冲区(当前_值) self.log\u recv(recv\u数据) 定义报告(自我): 返回“%”(self.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu名称,len(self.定义)) #无检查肾盂造影剂 def发送_缓冲区(自身、当前_值): 返回“已发送%s!”%current\u值 def日志发送(自身、当前值): 通过 def日志记录(自我、记录数据): 通过 s_静态=静态 s_delim=delim s\u string=字符串 CloseHeader=组( “HTTP关闭标头”, 定义=[ #获取/HTTP/1.1\r\n s_static(“GET/HTTP/1.1\r\n”), #连接:关闭 s_static(“连接”)、s_delim(:“”)、s_delim(“”)、s_string(“关闭”), s\U静态(“\r\n\r\n”) ] ) OpenHeader=组( “HTTP开放标头”, 定义=[ #获取/HTTP/1.1\r\n 静态(“GET/HTTP/1.1\r\n”), #连接:关闭 静态(“连接”)、Delim(:“”)、Delim(“”)、字符串(“打开”), 静态(“\r\n\r\n”) ] ) #CloseHeader=组(“HTTP关闭头”) #CloseHeader.add_定义([ ##GET/HTTP/1.1\r\n #s_static(“GET/HTTP/1.1\r\n”), ##连接:关闭 #s_static(“连接”)、s_delim(:“”)、s_delim(“”)、s_string(“关闭”), #s\U静态(“\r\n\r\n”) # ]) 如果是别人的库代码,他们为什么要发布它?关于如何使用boofuzz库,有没有一个很好的解释?如果你搜索“http协议格式”,现在的第一个结果是。如果你读了几页,你会对协议格式有一个很好的描述。基于此,我编写了以下模糊脚本: 虽然我被绊倒了一段时间,因为我只有一个CRLF。经过检查,很明显这个示例应该以两个CRLF结束Python 带boofuzz的http模糊化,python,fuzzing,Python,Fuzzing,我在找一个模糊的图书馆,碰巧看到了“boofuzz” 尽管没有关于如何使用该库进行http模糊化的示例 这是我在他们的github页面中看到的唯一代码,但他们说它取自sulley(一个旧的模糊库): 导入系统 sys.path.insert(0,“../”) 从boofuzz.primitives导入字符串、静态、Delim 类别组(对象): 块=[] 定义初始化(self,name,definition=None): self.name=名称 如果定义: self.definition=定义
Request = Request-Line ; Section 5.1
*(( general-header ; Section 4.5
| request-header ; Section 5.3
| entity-header ) CRLF) ; Section 7.1
CRLF
[ message-body ] ; Section 4.3
[...]
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
很明显,这个模糊脚本并没有覆盖整个协议。只需添加一些内容:
有关FTP示例,请参见此处:据我所知,没有已发布的带有boofuzz的HTTP fuzzer。为了将来参考,现在有一个HTTP fuzzer:关于带有消息体的示例-一个存在于boofuzz repo中的示例:
#!/usr/bin/env python
# Designed for use with boofuzz v0.0.9
from boofuzz import *
def main():
session = Session(
target=Target(
connection=SocketConnection("127.0.0.1", 80, proto='tcp')
),
)
s_initialize(name="Request")
with s_block("Request-Line"):
s_group("Method", ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE'])
s_delim(" ", name='space-1')
s_string("/index.html", name='Request-URI')
s_delim(" ", name='space-2')
s_string('HTTP/1.1', name='HTTP-Version')
s_static("\r\n", name="Request-Line-CRLF")
s_static("\r\n", "Request-CRLF")
session.connect(s_get("Request"))
session.fuzz()
if __name__ == "__main__":
main()
Request = Request-Line ; Section 5.1
*(( general-header ; Section 4.5
| request-header ; Section 5.3
| entity-header ) CRLF) ; Section 7.1
CRLF
[ message-body ] ; Section 4.3
[...]
Request-Line = Method SP Request-URI SP HTTP-Version CRLF