ツール概要
DNSXは、再試行可能なDNSライブラリを基盤にした高速で多機能なDNS解析ツールです。多様なDNSクエリタイプと高度な機能をサポートしており、情報収集フェーズにおいてセキュリティテストに不可欠なツールです。
基本的な使用方法
dnsx [パラメータオプション]
パラメータ詳細
入力オプション(INPUT)
- -l, -list string
- 機能: サブドメイン/ホストリストの解析
- 形式: ファイルまたは標準入力
- 例:
dnsx -l ドメインリスト.txtまたはcat ドメインリスト.txt | dnsx
- -d, -domain string
- 機能: ブルートフォース対象ドメインリスト
- 形式: ファイル、カンマ区切り、または標準入力
- 例:
dnsx -d example.comまたはdnsx -d ドメインリスト.txt
- -w, -wordlist string
- 機能: ブルートフォースに使用する単語リスト
- 形式: ファイル、カンマ区切り、または標準入力
- 例:
dnsx -d example.com -w 単語リスト.txt
DNSクエリタイプ(QUERY)
基本クエリタイプ
- -a: Aレコード(デフォルト)
- -aaaa: AAAAレコード
- -cname: CNAMEレコード
- -ns: NSレコード
- -txt: TXTレコード
- -srv: SRVレコード
- -ptr: PTRレコード
- -mx: MXレコード
- -soa: SOAレコード
高度なクエリタイプ
- -any: ANYレコード
- -axfr: ゾーン転送(AZFR)を試行
- -caa: CAAレコード
- -all, -recon: すべてのDNSレコードタイプをクエリ
除外クエリ
- -e, -exclude-type value
- 機能: 特定のDNSクエリタイプを除外
- 形式: a,aaaa,cname,ns,tex,srv,ptr,mx,soa,axfr,caa
- 例:
-e a,aaaaでAおよびAAAAレコードのクエリを除外
フィルタ(FILTER)
応答フィルタ
- -re, -resp: 完全なDNS応答を表示
- -ro, -resp-only: DNS応答のみを表示
- -rc, -rcode string
- 機能: DNSステータスコードで結果をフィルタリング
- ステータスコード: noerror, servfail, refused, nxdomainなど
応答タイプフィルタ
- -rtf, -response-type-filter string
- 機能: 指定されたクエリタイプにレコードがない項目を返す
- 例:
-rtf a,cnameでAおよびCNAMEレコードがないドメインを返す
プローブ(PROBE)
- -cdn: CDN名を表示
- -asn: ホストのASN情報を表示
レート制限(RATE-LIMIT)
- -t, -threads int
- 機能: 並列スレッド数
- デフォルト: 100
- -rl, -rate-limit int
- 機能: 秒ごとのDNSリクエスト数制限
- デフォルト: 無効(-1)
更新オプション(UPDATE)
- -up, -update: 最新バージョンに更新
- -duc, -disable-update-check: 自動更新チェックを無効化
出力オプション(OUTPUT)
- -o, -output string: ファイルに出力
- -j, -json: JSONL形式で出力
- -omit-raw, -or: JSON出力で原始DNS応答を省略
デバッグオプション(DEBUG)
- -hc, -health-check: 診断チェックを実行
- -silent: 結果のみを表示
- -v, -verbose: 詳細出力
- -raw, -debug: 原始DNS応答を表示
- -stats: 実行統計情報を表示
- -version: バージョンを表示
- -nc, -no-color: カラーアウトプットを無効化
最適化オプション(OPTIMIZATION)
- -retry int: DNS試行回数(デフォルト:2)
- -hf, -hostsfile: システムhostsファイルを使用
- -trace: DNSトラッキングを実行
- -trace-max-recursion int: DNSトラッキング最大再帰深度(デフォルト:255)
- -resume: 既存のスキャンを再開
- -stream: ストリームモード(単語リスト、ワイルドカード、統計、停止/再開を無効化)
- -timeout value: DNSクエリタイムアウト(デフォルト:3s)
設定オプション(CONFIGURATIONS)
- -auth: ProjectDiscoveryクラウドプラットフォームAPIキーを設定(デフォルト有効)
- -r, -resolver string: 使用するDNSリゾルバーリスト
- -wt, -wildcard-threshold int: ワイルドカードフィルタースレッショルド(デフォルト:5)
- -wd, -wildcard-domain string: ワイルドカードフィルタリング用ドメイン
- -proxy string: 使用するプロキシ
使用例
例1: 基本的なドメイン解析
# ドメインリストのAレコードを解析
dnsx -l ドメインリスト.txt
# AおよびAAAAレコードを同時にクエリ
dnsx -l ドメインリスト.txt -a -aaaa
# すべてのレコードタイプをクエリ
dnsx -l ドメインリスト.txt -all
例2: サブドメインブルートフォース
# 基本的なサブドメインブルートフォース
dnsx -d example.com -w サブドメインリスト.txt
# ブルートフォースを行いCDNおよびASN情報を表示
dnsx -d example.com -w サブドメインリスト.txt -cdn -asn
# 成功した応答のみを表示
dnsx -d example.com -w 単語リスト.txt -rcode noerror
例3: DNS情報収集
# ドメインのすべてのDNSレコードを収集
dnsx -d example.com -recon -o dns_info.txt
# 特定レコードタイプをクエリ
dnsx -d example.com -mx -ns -txt
# ゾーン転送を試行
dnsx -d example.com -axfr
例4: 応答フィルタリング
# CNAMEレコードのみ表示
dnsx -l ドメインリスト.txt -cname -ro
# Aレコードがないドメインをフィルタリング
dnsx -l ドメインリスト.txt -rtf a
# 成功したクエリのみ表示
dnsx -l ドメインリスト.txt -rcode noerror
例5: 高度な機能
# カスタムリゾルバーを使用
dnsx -l ドメインリスト.txt -r 8.8.8.8,1.1.1.1
# レート制限を設定(秒ごとに50クエリ)
dnsx -d example.com -w 単語リスト.txt -rl 50
# DNSトラッキングを有効化
dnsx -d example.com -trace
進級使用法
ワークフロー統合
# 1. サブドメイン列挙パイプライン
subfinder -d example.com -silent | dnsx -a -o 解析済み.txt
# 2. 複数ドメインのバッチ処理
for domain in $(cat ドメインリスト.txt); do
echo "[+] 処理中 $domain"
dnsx -d $domain -w 一般的なサブドメイン.txt -silent >> 全サブドメイン.txt
done
# 3. 他のツールと組み合わせ
cat ターゲット.txt | dnsx -a -silent | httpx -title -status-code
自動化スクリプト例
#!/bin/bash
# dns_recon.sh - 自動DNS調査スクリプト
DOMAIN=$1
WORDLIST="/path/to/wordlist.txt"
OUTPUT_DIR="dns_recon_${DOMAIN}"
mkdir -p $OUTPUT_DIR
echo "[+] DNS調査開始: $DOMAIN"
echo "[+] 時間: $(date)"
# 1. 基本解析
echo "[1/6] 基本DNSレコードクエリ..."
dnsx -d $DOMAIN -all -o "$OUTPUT_DIR/all_records.txt"
# 2. サブドメインブルートフォース
echo "[2/6] サブドメインブルートフォース..."
dnsx -d $DOMAIN -w $WORDLIST -silent -o "$OUTPUT_DIR/subdomains.txt"
# 3. AXFR脆弱性チェック
echo "[3/6] AXFR脆弱性チェック..."
dnsx -d $DOMAIN -axfr -o "$OUTPUT_DIR/axfr_check.txt"
# 4. CDN情報収集
echo "[4/6] CDN情報収集..."
dnsx -l "$OUTPUT_DIR/subdomains.txt" -cdn -asn -o "$OUTPUT_DIR/cdn_asn_info.txt"
# 5. CNAMEレコードの検索
echo "[5/6] CNAMEレコード検索..."
dnsx -l "$OUTPUT_DIR/subdomains.txt" -cname -ro -o "$OUTPUT_DIR/cname_records.txt"
# 6. 統計レポートの生成
echo "[6/6] 統計レポート生成..."
echo "=== DNS調査レポート ===" > "$OUTPUT_DIR/report.txt"
echo "ターゲットドメイン: $DOMAIN" >> "$OUTPUT_DIR/report.txt"
echo "完了時間: $(date)" >> "$OUTPUT_DIR/report.txt"
echo "発見されたサブドメイン数: $(wc -l < "$OUTPUT_DIR/subdomains.txt")" >> "$OUTPUT_DIR/report.txt"
echo "発見されたCNAMEレコード数: $(wc -l < "$OUTPUT_DIR/cname_records.txt")" >> "$OUTPUT_DIR/report.txt"
echo "[+] DNS調査完了!結果は以下に保存されました: $OUTPUT_DIR/"
パフォーマンス最適化設定
# 高並列処理
dnsx -l 大規模リスト.txt -t 500 -retry 1 -timeout 2s
# 大ファイルのストリーム処理
cat 巨大リスト.txt | dnsx -stream -t 200
# プロキシとカスタムリゾルバーを使用
dnsx -d example.com -w 単語リスト.txt \
-r リゾルバーリスト.txt \
-proxy socks5://127.0.0.1:9050 \
-t 100 \
-rl 1000
実用的なヒント
1. ワイルドカード検出
# ワイルドカードドメインの検出
dnsx -wd example.com -j
# ワイルドカード検出スレッショルドの設定
dnsx -d example.com -w 単語リスト.txt -wt 10
2. バッチ処理の最適化
# 並列処理の利用
cat ドメインリスト.txt | parallel -j 10 "dnsx -d {} -w 単語リスト.txt -silent"
# メモリ問題を回避するための分割処理
split -l 1000 大規模リスト.txt chunk_
for chunk in chunk_*; do
dnsx -l $chunk -silent >> 結果.txt
done
3. 結果分析
# 特定情報の抽出
dnsx -l ドメインリスト.txt -cname -ro | grep "cloudflare" > cloudflare_cnames.txt
# 応答コード分布の統計
dnsx -l ドメインリスト.txt -rcode | sort | uniq -c
# IPアドレスの抽出
dnsx -l ドメインリスト.txt -a -re | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u
注意事項
1. パフォーマンス考慮
- 大規模リストクエリ時にスレッド数を適切に設定(-t)
- DNSクエリレート制限に注意(-rl)
- ネットワーク環境に応じてタイムアウト時間を調整(-timeout)
2. 精度保証
- 信頼できるDNSリゾルバーを使用(-r)
- 適切な再試行回数を設定(-retry)
- ワイルドカードドメインの影響に注意
3. 合法的な使用
- 許可されたターゲットのみにテストを行う
- ターゲットのサービス条項を遵守する
- 生産環境への影響を避ける
4. エラー処理
- -silentオプションで出力ノイズを減らす
- -statsオプションで進行状況を監視
- -resumeオプションで再開をサポート
トラブルシューティング
よくある問題
- クエリが遅い
# スレッド数を増やし、タイムアウト時間を短縮 dnsx -l ドメインリスト.txt -t 200 -timeout 2s -retry 1 - DNS解析失敗
# リゾルバーを変更 dnsx -l ドメインリスト.txt -r 8.8.8.8,1.1.1.1,9.9.9.9 - メモリ使用量が高い
# 大ファイルをストリームモードで処理 cat 巨大リスト.txt | dnsx -stream -t 100 - ワイルドカードの干渉
# ワイルドカード検出スレッショルドを上げる dnsx -d example.com -w 単語リスト.txt -wt 20
デバッグテクニック
# 詳細出力の有効化
dnsx -d example.com -w 単語リスト.txt -v
# 原始応答の表示
dnsx -d example.com -axfr -raw
# ヘルスチェックの実行
dnsx -hc