Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带boofuzz的http模糊化_Python_Fuzzing - Fatal编程技术网

Python 带boofuzz的http模糊化

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=定义

我在找一个模糊的图书馆,碰巧看到了“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结束

    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
很明显,这个模糊脚本并没有覆盖整个协议。只需添加一些内容:

  • HTTP头(有很多)
  • 每个HTTP方法的专用格式
  • 消息正文(例如,在POST上)
  • 为特定目标服务器选择有效URI的某种方法
  • 基于服务器响应报告警告(可能会发出噪音,但服务器错误确实倾向于指示…错误)

  • 有关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