
高速かつ包括的な組織ネットワークスキャンツール
機能 • 使用方法 • インストール • 使用方法 • コントリビューション • 補足事項
Domainim は、組織のネットワークスキャン向けの高速なドメイン偵察ツールです。本ツールは、OSINT、ブルートフォース、DNS 解決などの手法を用いて、組織の構造の概要を提供することを目的としています。
現在の機能 (v1.3.0)-

バーチャルホスト名の列挙
逆引き DNS ルックアップ
ワイルドカードサブドメインを検出します。ワイルドカード IP のみに解決されるパッシブな結果は、TLS 証明書で確認されていない限り非表示になります。ブルートフォースは --force-brute で強制でき、その場合ワイルドカード IP のみに解決される結果は破棄されます
基本的な TCP ポートスキャン
サブドメインを入力として受け付けます
結果を JSON ファイルにエクスポート
一部の機能は開発中です。詳細は予定されている機能を参照してください。
本プロジェクトは Sublist3r に触発されています。ポートスキャナモジュールは NimScan に大きく基づいています。
このリポジトリはソースからビルドできます-
git clone [email protected]:pptx704/domainim
nimble build
./domainim <domain> [--ports=<ports>]
または、リリースページからバイナリをダウンロードするだけでも構いません。バイナリはDebianベースのシステムでのみテストされていることにご注意ください。
./domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | -l:<filename> [--rps=<int> | -r:<int>] [--force-brute | -f]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
<domain> は列挙対象のドメインです。サブドメインを指定することもできます。-- ports | -p はスキャンするポートを指定する文字列です。以下のいずれかを指定できます-
all - すべてのポートをスキャンします (1-65535)none - ポートスキャンをスキップします (デフォルト)t<n> - 最も一般的な上位 n 個のポートをスキャンします (nmap と同じ)。例: t100 は上位 100 個のポートをスキャンします。最大値は 5000 です。n が 5000 より大きい場合は 5000 に設定されます。80 はポート 80 をスキャンします80-100 はポート 80 から 100 をスキャンします80,443,8080 はポート 80、443、8080 をスキャンします80,443,8080-8090,t500 はポート 80、443、8080 から 8090、および上位 500 個のポートをスキャンします--dns | -d は DNS サーバーのアドレスです。有効な IPv4 アドレスである必要があり、オプションでポート番号を含めることができます-
a.b.c.d - a.b.c.d のポート 53 の DNS サーバーを使用しますa.b.c.d#n - a.b.c.d のポート n の DNS サーバーを使用します--wordlist | -l - ワードリストファイルへのパス。これはサブドメインのブルートフォースに使用されます。ファイルが無効な場合、ブルートフォースはスキップされます。空行および # で始まる行は無視されます。ワードリストは SecLists から取得できます。ワードリストはリリースページでも提供されています。--force-brute | -f - ワイルドカードレコードが見つかった場合でもブルートフォースを実行します。ワイルドカード IP のみに解決されるサブドメインは破棄されます。--rps | -r - ブルートフォース中に 1 秒あたりに行うリクエスト数。デフォルト値は 1024 req/s です。DNS クエリはバッチで行われ、前のバッチが完了した後にのみ次のバッチが行われることに注意してください。クエリはレート制限される可能性があるため、値を増やしても常に高速な結果が保証されるわけではありません。--out | -o - 出力ファイルへのパス。出力は JSON 形式で保存されます。ファイル名は .json で終わる必要があります。例
./domainim nmap.org --ports=all./domainim google.com --ports=none --dns=8.8.8.8#53./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --rps=1500./domainim pptx704.com --ports=t100 --wordlist=wordlist.txt --out=results.json./domainim nmap.org --wordlist=wordlist.txt --force-brute./domainim mysite.com --ports=t50,5432,7000-9000 --dns=1.1.1.1ヘルプメニューは ./domainim --help または ./domainim -h を使用してアクセスできます。
Usage:
domainim <domain> [--ports=<ports> | -p:<ports>] [--wordlist=<filename> | -l:<filename> [--rps=<int> | -r:<int>] [--force-brute | -f]] [--dns=<dns> | -d:<dns>] [--out=<filename> | -o:<filename>]
domainim (-h | --help)
Options:
-h, --help Show this screen.
-p, --ports Ports to scan. [default: `none`]
Can be `all`, `none`, `t<n>`, single value, range value, combination
-l, --wordlist Wordlist for subdomain bruteforcing. Bruteforcing is skipped for invalid file.
-f, --force-brute Bruteforce even if a wildcard record is found. Results resolving only to wildcard IPs are discarded.
-d, --dns IP and Port for DNS Resolver. Should be a valid IPv4 with an optional port [default: system default]
-r, --rps DNS queries to be made per second [default: 1024 req/s]
-o, --out JSON file where the output will be saved. Filename must end with `.json`
Examples:
domainim domainim.com -p:t500 -l:wordlist.txt --dns:1.1.1.1#53 --out=results.json
domainim sub.domainim.com --ports=all --dns:8.8.8.8 -l:wordlist.txt -r:1500 -f -o:results.json
結果の JSON スキーマは次のとおりです-
[
{
"subdomain": string,
"data": [
{
"ipv4": string,
"vhosts": [string],
"reverse_dns": string,
"ports": [int]
}
]
}
]
nmap.org の JSON 例はこちらにあります。
コントリビューションを歓迎します。お気軽にプルリクエストや issue を作成してください。
このプロジェクトはまだ初期段階です。私が認識しているいくつかの制限があります。
私が使用しているエンジン(Sublist3r がそう呼んでいるため、エンジンと呼んでいます)は無料のキー不要サービスであり、ほとんどに何らかの応答制限があります。dnsdumpster は無料ユーザーに対して最大 50 個のサブドメインを返し、rapiddns は約 100 個を返します。hackertarget は IP ごとに 1 日あたり数回のクエリのみを許可し、certspotter は現在有効な証明書のみを返します。crt.sh は結果が多すぎる場合に結果をランダム化し、頻繁に過負荷になります(HTTP 502)。そのため、一部のドメインでは実行ごとに結果が異なる場合があります。失敗したエンジンは報告されてスキップされ、スキャンが停止することはありません。パッシブソースには、古い名前やワイルドカードによって生成された名前が含まれている場合もあります。
すべての IP は単一のイベントループ上で並行してポートスキャンされます(同時接続試行は最大 4096、開始は毎秒 5000 までなので、ローカルおよびルーターのキューが SYN パケットを破棄しません)。ping に応答しないホストはスキャンされません。ポートスキャナーのタイムアウトは ping 応答時間 + 750ms のみです。これにより偽陰性が発生する可能性があります。domainim はポートスキャン用ではなく、迅速な概要を提供することを目的としているため、そのようなケースは許容されます。ただし、タイムアウトを増やすためのフラグを追加する予定です。同じ理由で、フィルタリングされたポートは表示されません。より包括的なポートスキャンには Nmap の使用をお勧めします。Domainim はレート制限(存在する場合)も回避しません。
vhostname の出力方法は、単に繰り返しを生み出しているように見えるかもしれません。

次のように出力する方が良かったかもしれません-
ack.nmap.org, issues.nmap.org, nmap.org, research.nmap.org, scannme.nmap.org, svn.nmap.org, www.nmap.org
↳ 45.33.49.119
↳ Reverse DNS: ack.nmap.org.
しかし以前のテスト中に、すべての IP が同じ vhostname の集合によって共有されているわけではないケースを発見しました。そのため、このままの形にすることにしました。

DNS サーバーには何らかのレート制限があるかもしれません。そのため、クエリごとの IPv4 解決にランダムな遅延(0〜300ms)を追加しました。これは DNS サーバーがすべてのクエリを一度に受け取るのではなく、より自然な形で受け取るようにするためです。ブルートフォース方式では、デフォルトで 0〜1000ms の値になりますが、--rps | -r フラグで変更できます。
私を悩ませている特定の制限の一つは、DNS リゾルバがドメインのすべての IP を返すわけではないことです。そのため、すべて(または大部分)の IP を取得するには複数のクエリを実行する必要があります。しかしまた、ドメインにいくつの IP が存在するかを知ることはできません。これについてはまだ解決策を考える必要があります。CNAME レコードを持つドメインは、CNAME ターゲットの IPv4 アドレスに解決されます。