バグバウンティー偵察フレームワーク
バグバウンティー偵察フレームワーク(BBRF)は、複数デバイスで偵察ワークフローを調整するために使用できます。背景情報については、元のブログ投稿をお読みください。
BBRFが初めての場合は、クライアントを使用する前にBBRFサーバーをデプロイする必要があります。
ダッシュボード
GUIで偵察データを参照したい場合は、BBRFダッシュボードをhttps://bbrf.meで利用できます。サーバーURL、ユーザー名、パスワードを入力するだけで、ダッシュボードがデータを取得し、検索可能にします。サーバーへのすべての通信はブラウザを経由して行われるため、データは安全です!
詳細
ドメイン
BBRFは以下の入力形式でドメインを受け入れて保存します:
<domain>
<domain>:<ip>
<domain>:<ip>,<ip>,…
このようにドメインのDNS解決を追加しても、IPがIPテーブルに自動的に保存されるわけではありませんが、ドメインとIPはクライアント内で論理的に分離されているため、スクリプトがこの区別を適切に処理するように記述する必要があります。
bbrf domain add www.example.com:1.1.1.1
bbrf domain update www.example.com:2.2.2.2,3.3.3.3
bbrf show www.example.com | jq
IP
同様に、コロンで1つ以上のドメインを追加することで、IPアドレスのホスト名を保存できます:
<ip>
<ip>:<domain>
<ip>:<domain>,<domain>,…
同様に、BBRFは提供されたホスト名を保存する前に有効なドメイン名であることを確認しますが、それらをプログラムのドメインリストに追加せず、定義されたプログラムスコープに対してこれらのドメインを検証しません。代わりに、これらのドメインはIPドキュメントのdomainsプロパティに保存されます。
URL
BBRFはURLの管理を支援し、ホスト名、ポート、ステータスコード、コンテンツ長を保存します:
bbrf url add ‘https://www.example.com:8443/a‘ ‘http://www.example.com/b‘ ‘http://www.example.com/c 200 1234‘
2つの形式が受け入れられます:<url>またはスペースで区切られた<url> <statuscode> <contentlength>。
<url>は絶対または相対パスです。相対URLは-d <hostname>フラグを指定する必要があります。指定しない場合はスキップされます。-dフラグが設定されているときは、URLから解析されたホスト名と比較し、一致しない場合はURLをスキップします。
相対URLとスキーム(http://またはhttps://)を指定しないURLは、常にhttp://スキームで解釈されます。ポートが見つからない場合、スキームに応じてポート80および443がデフォルトとして使用されます。
--show-newフラグは、新しいURLが追加された場合、またはステータスコードおよび/またはコンテンツ長が更新された場合に、新しいURLと更新されたURLのリストを出力します。
アクティブなプログラムの保存されたURLのリストを表示するには、以下を使用してください:
bbrf urls
または、特定のホストに属するURLを返すには:
bbrf urls -d www.example.com
すべてのプログラムのURLをリストするには、以下を実行してください:
bbrf urls –all
保存されたクエリ文字列を含む完全なURLを出力するには:
bbrf urls –all –with-query
サービス
BBRFにサービス(開放ポート)を保存するには、ip:portまたはip:port:serviceの形式で入力を提供し、タグシステムを使用して他のプロパティを手動で指定します(タグの詳細については以下を参照してください):
bbrf service add 127.0.0.1:8443 127.0.0.1:8888 -t hostname:localhost -t protocol:tcp
bbrf service add 127.0.0.1:80:http 127.0.0.1:21:ftp -t hostname:localhost -t protocol:tcp
bbrf service add 127.0.0.1:22:ssh 127.0.0.1:53:domain 127.0.0.1:80 -t scanned:$(date +%s)
サービスはIPアドレスのみで保存でき、domain:portとして保存されないことに注意してください。これにより、ドメインをIPにマップする複雑さを回避できます(特にIPアドレスが複数のドメインにマップされる場合)。同時に、デフォルトプロパティとタグの組み合わせでサポートされる検索操作を可能にします:
# ポート8443上のすべての既知のサービスを取得
bbrf services where port is 8443
# タグが手動で提供されたサービスを返す
bbrf services where hostname is localhost
タグ付けとクエリ
異なるドキュメントタイプ(プログラム、ドメイン、IP、URL、サービス)のカスタムプロパティを設定することで、プログラムが属するプラットフォームや、多くの新しいドメインを追加したチームメンバーの名前などを指定できます。
ドキュメントにタグを追加するには、新しいドメイン、IP、URLまたはサービスを作成するときに-t key:valueを指定するか、タグを削除するときは空のままにします:
# すべてのドメインにカスタムタグを追加
cat domains.txt | bbrf domain add - -t added_by:pieter -t from:domains.txt
# カスタムタグを使用してIPを作成
bbrf ip add 1.2.3.4 -t added_by:pieter
# タグを削除
bbrf ip update 1.2.3.4 -t added_by:
同じタグを複数回指定してタグを配列として保存できることに注意してください。BBRFはタグの保存方法を決定するために以下のルールに従います:
- 単一の
-t tag:valueが見つかった場合、通常の値として扱う; - 同じタグ名が複数回提供された場合、配列をデフォルトにする:
-t cname:one -t cname:two - デフォルトでは、更新時に既存のタグ値を上書きします。
--append-tagsが指定されている場合を除き、新しい値を既存の値に追加します:
bbrf domain update www.example.tld -t name:value
bbrf show www.example.tld | jq .tags # { "name": "value" }
bbrf domain update www.example.tld -t name:value2 -t name:value3
bbrf show www.example.tld | jq .tags # { "name": ["value2", "value3"] }
bbrf domain update www.example.tld -t name:value4 --append-tags
bbrf show www.example.tld | jq .tags # { "name": ["value2", "value3", "value4"] }
bbrf domain update www.example.tld -t name:
bbrf show www.example.tld | jq .tags # { }
基本的なデータクエリを容易にするために、BBRFサーバーはすべてのカスタムタグに基づいてインデックス付きサーチを提供します。また、すべてのドキュメントタイプのいくつかのデフォルトプロパティも提供します:
# カスタムタグに基づいてドメインを検索:
bbrf domains where added_by is pieter --all
bbrf domains where last_updated is before 1610698911
bbrf domains where last_scan is after 2021-01-01 -p myprogram
# または、デフォルトで利用可能なプロパティを検索:
bbrf domains where ip is 1.1.1.1
bbrf ips where domain is www.example.com
bbrf urls where port is 443
bbrf services where port is 22
これはドメイン、IP、URL、サービスで機能し、Unicode照合アルゴリズムで定義されているようにテキストベースの比較に基づいてサーチします。CouchDBによって実装されています。
すべての値がテキストとして保存されるため、UnixタイムスタンプまたはISO-8601形式(例:2021-01-15T09:02:40.628Z)で日付を保存すれば、日付比較が可能です。
ただし、これはまた、例えば"20"が"1000"の後に来ることを意味します。これにより、整数比較には適していません。整数を保存したい場合、0020が1000の前に来ることを保証するために、前に詰められたゼロを使用したい場合があります。
動的プログラム推論
何らかの理由でプログラムフラグを自分で指定できない場合、他のプロパティに基づいてプログラム名を推論するために、動的プログラム名-p @INFERを使用します。これは現在、以下の操作でサポートされています:
bbrf ip add 1.1.1.1:example.tld -p @INFERは、ドメイン example.tld がすでに存在する場合、IPのプログラム名をドメイン example.tld と同じに設定します;bbrf domain add some.example.tld:1.2.3.4 -p @INFERは、1.2.3.4がすでに存在する場合、ドメインのプログラム名を1.2.3.4と同じに設定します。プログラム名はデータベースに書き込む直前に推論されるため、プログラムのスコープ検証をバイパスすることに注意してください。bbrf domain add some.example.tld some.other.tld -p @INFERは、ドメインを入力に一致するプログラムスコープに追加します;bbrf url add http://this.example.tld https://that.some.tld/robots.txt -p @INFERは、URLをスコープ内にドメインがあるプログラムに追加します;
BBRFリスナー
データストアにプッシュされた変更とアラートを処理するには、どこかでアクティブなリスナーを実行する必要があります:
bbrf listen
これはBBRFサーバーの変更を監視し、構成されたSlackインスタンスに通知をプッシュします。BBRFサーバーが一時的に利用できない場合または証明書エラーの場合、これが失敗することに注意してください。問題が発生した場合に自動起動するようにループさせたい場合があります。
カスタム実行フック
BBRFリスナーは、新しいまたは更新されたIP、ドメイン、URL、および/またはサービスが表示されたときにカスタムローカルスクリプトを実行します。以下の場所で実行可能な.shファイルを自動的に探します:
- ~/.bbrf/hooks/ip/new/,
- ~/.bbrf/hooks/ip/update/,
- ~/.bbrf/hooks/domain/new/,
- ~/.bbrf/hooks/domain/update/,
- ~/.bbrf/hooks/url/new/,
- ~/.bbrf/hooks/url/update/,
- ~/.bbrf/hooks/service/new/,
- ~/.bbrf/hooks/service/update/,
例えば、以下は新しく追加されたドメインを解決し、結果をBBRFに保存するカスタム実行フックです。docs/hooksでさらに多くの例を見つけることができます。
#!/bin/bash
#
# BBRFフック - ~/.bbrf/hooks/domain/new/resolve.sh に保存
# 実行可能に設定してください: chmod +x resolve.sh
#
domains=$@
printf '%s\n' ${domains[@]} | dnsx -silent -a -resp | tr -d '[]' | tee \
>(awk '{print $1":"$2}' | bbrf domain update -) \
>(awk '{print $2":"$1}' | bbrf ip add - -p @INFER) \
>(awk '{print $2":"$1}' | bbrf ip update -);
プロキシ設定
バージョン1.2以降、BBRFはプログラムごとにプロキシ設定を保存および取得できます。この機能は、OpenVPN via SOCKS5プロキシセットアップと統合するように設計されていますが、他のプロキシセットアップ独立して使用できます。
たとえば、BBRFでプロキシ設定を以下のように構成します:
# 「hackerone」という名前の有効なプロキシURLを持つプロキシを追加
bbrf proxy set hackerone socks5://user:[email protected]:1080
プログラムのプロキシ設定をカスタムタグproxyで以下のように更新します:
# 構成されたプロキシの名前と同じ名前を使用
bbrf program update my_hackerone_program -t proxy:hackerone
bbrf proxy -p my_hackerone_programでプログラムのプロキシ設定を取得します。たとえば、自動化スクリプトを更新して、常に正しいプロキシを通じてトラフィックを送信できます:
# 二重引用符の使用により、現在のプログラムにプロキシが設定されていない場合でも機能することに注意してください
curl -x “$(bbrf proxy)“ ifconfig.co
インストール
著作権2021年 @honoki