satumaimoの備忘録

個人的なメモ中心

【boofuzz v0.4.1】ターゲットの死活監視を伴ったファジング

boofuzz v0.4.1を用いてファジングを行います。

ターゲットには、VulnServer-Linuxを使用します。

スクリプトの作成

サンプルスクリプトや下記参考サイトを参照し、以下のmyscript.pyを作成しました。

#!/usr/bin/env python3

from boofuzz import *
import datetime
import os

def main():

    port = 8080
    host = '127.0.0.1'

    start_commands = ['/path/to/VulnServer-Linux/vuln']
    stop_commands = ['ps aux | grep \'vuln\' | grep -v grep | awk \'{ print "kill -9", $2}\' | sudo sh']

    now = datetime.datetime.now()
    os.makedirs("fuzzing_logs", exist_ok=True)
    csv_log_name = './fuzzing_logs/' + now.strftime('%Y%m%d_%H%M%S') + '_fuzzing.csv'
    csv_log = open(csv_log_name, 'w')
    my_logger = [FuzzLoggerCsv(file_handle=csv_log)]

    procmon = ProcessMonitor(host, 26002)
    procmon.set_options(
        start_commands = [start_commands], 
        stop_commands = [stop_commands]
    )

    session = Session(
        target = Target(
            connection = TCPSocketConnection(host, port),
            monitors = [procmon]
        ),
        fuzz_loggers = my_logger
    )

    define_proto(session=session)

    session.fuzz()

def define_proto(session):
    # disable Black formatting to keep custom indentation
    # fmt: off
    req = Request("Client-Message", children=(
        Group(name="Time", values=["HELP", "TIME"], fuzzable=False),
        Delim(name="space", default_value=" ", fuzzable=False),
        String(name="Exploit", default_value="FUZZ"),
        Static(name="CRLF", default_value="\r\n")
    ))
    # fmt: on

    session.connect(req)

if __name__ == "__main__":
    main()

issueに記載のある通り、 procmon.set_options()にてproc_nameへの設定を行うとファジング処理がハングアップするので、注意が必要です。

ファジングの実行

(ターミナル1)
python3 process_monitor.py

(ターミナル2)
python3 myscript.py

上記コマンドの実行によってファジングが実行されます。

boofuzzではProcessMonitorによってターゲットのプロセスを監視しています。 boofuzzはProcessMonitorを利用して、以下の処理の繰り返しで未知の脆弱性を発見します。

  1. ターゲットにファズデータを一度送信
  2. ターゲットの生存確認

上記のようにターゲットの死活監視を伴ったファジングにより、再現性のある脆弱性を発見できます。

更に、ファジング中に停止したターゲットは、前述のProcessMonitorによって再起動されるため、 boofuzzは自動的に複数の脆弱性を発見できます。

実行結果

ファジングの実行結果はWebUIで確認できます。

ブラウザでlocalhost:26000へ接続すると、以下のような画面になります。

boofuzz_WebUI

WebUIから、ターゲットにバッファオーバーフロー脆弱性があることを確認できました。

環境

参考サイト

boofuzz: Network Protocol Fuzzing for Humans — boofuzz 0.4.1 documentation

Boofuzzで始めるネットワークプロトコルファジング - BinaryGenes

Boofuzz - A helpful guide (OSCE - CTP) - Zero Aptitude

jtpereyda/boofuzz - Gitter

Sulley: Fuzzing Framework | Fuzzing Frameworks | InformIT