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

バーチャルホスト名の列挙
リバース DNS ルックアップ
ワイルドカードサブドメインの検出(ブルートフォース用)
基本的な 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>]] [--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 - ポート53で DNS サーバ を使用例
./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 --outfile=results.json./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>]] [--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.
-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 -t:1500 -o:results.json
結果の JSON スキーマは以下の通りです:
[
{
"subdomain": string,
"data": [
"ipv4": string,
"vhosts": [string],
"reverse_dns": string,
"ports": [int]
]
}
]
nmap.org の JSON 例はこちらにあります。
貢献は歓迎します。プルリクエストや Issue を自由に開いてください。
このプロジェクトはまだ初期段階です。認識しているいくつかの制限があります。
現在使用している2つのエンジン(Sublist3r に倣ってエンジンと呼んでいます)には、応答数の制限があります。dnsdumpster は最大100個のサブドメインを取得できます。crt.sh も結果が多い場合に結果をランダム化します。また、crt.sh は時々 SQL エラーを返すという問題もあります。そのため、ドメインによっては実行ごとに結果が異なる可能性があります。将来的にはさらにエンジンを追加する予定です(少なくともブルートフォースエンジン)。
ポートスキャナのタイムアウトは ping 応答時間 + 750ms のみです。これにより偽陰性が発生する可能性があります。ただし、domainim はポートスキャンではなく、概要を迅速に把握するためのものであるため、そのようなケースは許容されます。しかし、タイムアウトを増やすフラグを追加する予定です。同じ理由で、フィルタリングされたポートは表示されません。より包括的なポートスキャンには、Nmap を使用することをお勧めします。Domainim はレート制限も回避しません(存在する場合)。
VHost 名の表示方法は、テーブル上で重複を引き起こしているように見えるかもしれません。

以下のように表示したほうが良いかもしれません:
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 が同じ VHost セットを共有しているわけではないケースがありました。そのため、このような表示方法を採用しました。

DNS サーバには何らかのレート制限がある可能性があります。そのため、クエリごとに IPv4 解決にランダムな遅延(0~300ms)を追加しています。これは、DNS サーバにすべてのクエリが一度に送信されるのではなく、より自然な方法で送信されるようにするためです。ブルートフォース方式では、デフォルトで値は 0~1000ms ですが、--rps | -t フラグで変更できます。
特に気になる制限の一つは、DNS リゾルバがドメインのすべての IP を返さないことです。そのため、すべて(またはほとんど)の IP を取得するには複数のクエリを実行する必要があります。しかし、ドメインにいくつの IP があるかを知ることはできません。これに対する解決策はまだ考えていません。また、nim-ndns は CNAME レコードをサポートしていません。そのため、ドメインに CNAME レコードがある場合、解決されません。この件については作者からの返答を待っています。
現時点では、可能性のあるワイルドカードサブドメインが見つかった場合、ブルートフォースはスキップされます。なぜなら、ドメインにワイルドカードサブドメインがある場合、ブルートフォースはすべての可能なサブドメインに対して IPv4 を解決してしまうからです。ただし、これにより有効なサブドメイン(例:scanme.nmap.org はワイルドカード値ではないにもかかわらずスキップされます)もスキップされます。後で --force-brute | -fb フラグを追加して、ブルートフォースを強制できるようにする予定です。
同様のことは、サブドメイン入力に対する VHost 列挙にも当てはまります。指定されたサブドメインで終わる URL が返されるため、類似したドメインのサブドメインは考慮されません。例えば、ack.nmap.org に対して scannme.nmap.org は表示されませんが、something.ack.nmap.org は表示される可能性があります。nmap.org のすべてのサブドメインを検索することもできますが、それではサブドメインを入力として受け付ける目的が損なわれます。
MIT ライセンス。全文については LICENSE を参照してください。
a.b.c.da.b.c.d#n - ポート e で DNS サーバ a.b.c.d を使用--wordlist | -l - ワードリストファイルへのパス。サブドメインのブルートフォースに使用します。ファイルが無効な場合はブルートフォースがスキップされます。SecLists からワードリストを入手できます。リリースページにもワードリストが用意されています。--rps | -r - ブルートフォース中の1秒あたりのリクエスト数。デフォルト値は 1024 req/s です。DNS クエリはバッチで行われ、前のバッチが完了した後にのみ次のバッチが行われます。クエリはレート制限される可能性があるため、値を増やしても必ずしも結果が速くなるとは限りません。--out | -o - 出力ファイルへのパス。出力は JSON 形式で保存されます。ファイル名は .json で終わる必要があります。