2017-07-27 15 views
0

私はfuzzingライブラリを探していましたが、httpファジングにライブラリを使用する方法の例はありませんが、 "boofuzz" が表示されました。boofuzzでhttp fuzzing

これは私が彼らのgithubのページで見たコードのみであるが、彼らはそれがサリー(旧ファジングライブラリー)から取られたと言う:それは他のライブラリのコードだ場合

import sys 
sys.path.insert(0, '../') 

from boofuzz.primitives import String, Static, Delim 

class Group(object): 
    blocks = [] 

    def __init__(self, name, definition=None): 
     self.name = name 
     if definition: 
      self.definition = definition 

    def add_definition(self, definition): 
     assert isinstance(definition, (list, tuple)), "Definition must be a list or a tuple!" 
     self.definition = definition 

    def render(self): 
     return "".join([x.value for x in self.definition]) 

    def exhaust(self): 
     for item in self.definition: 
      while item.mutate(): 
       current_value = item.value 
       self.log_send(current_value) 
       recv_data = self.send_buffer(current_value) 
       self.log_recv(recv_data) 

    def __repr__(self): 
     return '<%s [%s items]>' % (self.__class__.__name__, len(self.definition)) 

    # noinspection PyMethodMayBeStatic 
    def send_buffer(self, current_value): 
     return "Sent %s!" % current_value 

    def log_send(self, current_value): 
     pass 

    def log_recv(self, recv_data): 
     pass 
    s_static = Static 
    s_delim = Delim 
    s_string = String 

    CloseHeader = Group(
     "HTTP Close Header", 
     definition=[ 
      # GET/HTTP/1.1\r\n 
      s_static("GET/HTTP/1.1\r\n"), 
      # Connection: close 
      s_static("Connection"), s_delim(":"), s_delim(" "), s_string("close"), 
      s_static("\r\n\r\n") 
     ] 
    ) 

    OpenHeader = Group(
     "HTTP Open Header", 
     definition=[ 
      # GET/HTTP/1.1\r\n 
      Static("GET/HTTP/1.1\r\n"), 
      # Connection: close 
      Static("Connection"), Delim(":"), Delim(" "), String("open"), 
      Static("\r\n\r\n") 
     ] 
    ) 

    # CloseHeader = Group("HTTP Close Header") 
    # CloseHeader.add_definition([ 
    #  # GET/HTTP/1.1\r\n 
    #  s_static("GET/HTTP/1.1\r\n"), 
    #  # Connection: close 
    #  s_static("Connection"), s_delim(":"), s_delim(" "), s_string("close"), 
    #  s_static("\r\n\r\n") 
    # ]) 

は、なぜ彼らは、それを投稿しますか?そして、boofuzzライブラリを使って作業する方法の良い説明がありますか?

+0

FTP試験についてはこちらを参照してください。 ple:https://github.com/jtpereyda/boofuzz-ftp私の知る限り、流行のHTTPファザーはありません。 – jtpereyda

答えて

0

Googleの「httpプロトコル形式」の場合、最初の結果はthis HTTP tutorialです。そこにいくつかのページを読んだら、プロトコルフォーマットのかなり良い説明を得ることができます。私は一つだけCRLFを持っていたので、私はしばらくの間、アップつまずいてしまったものの

#!/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() 

:その上で、私は、source code hereを以下のファズスクリプトを書きました。 RFC 2616 (Section 5)をチェックした後、この例は2つの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 

明らかに、このファズスクリプトは、プロトコル全体をカバーするのには至りません。追加することができただけでいくつかのこと:

  1. HTTPヘッダ(たくさんある)各HTTPメソッドについて
  2. 専門形式
  3. メッセージ本体(例えばPOST上)
  4. 選択するいくつかの方法特定のターゲット・サーバサーバの応答に基づいて
  5. レポートの警告のための有効なURI(騒々しい得ることができますが、サーバーエラーが示す傾向にあるん...エラー)
関連する問題