sector-recon-methodology について
規制対象外の業界選定、企業ドメイン一覧の作成、認可された一括プローブを扱う偵察手法スキルです。業界ごとの WordPress 脆弱性ベースラインを示し、計画と結果比較に役立ちます。
主な機能
- 01業界別の脆弱性ランキング
- 02crt.sh によるドメイン一覧生成
- 03WordPress と Web の一括プローブ
- 04業界別ベースライン比較
- 05偵察ワークフローの指針
活用シーン
- 01認可済み偵察キャンペーンの業界選定
- 02業界キーワードからのドメイン一覧作成
- 03スキャン結果と業界ベースラインの比較
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ uphiago/ recon-skills --skill sector-recon-methodologyインストール後、Claude Code で/sector-recon-methodologyを入力して読み込まれたか確認します。
同梱ファイルscripts/parallel_sector_probe.py
詳細
セクター偵察手法スキル
脆弱性率が最も高い規制対象外の業界セクターを選定し、企業ドメインリストを作成して、許可を得たエンゲージメント内で一括偵察を実行するための手法です。バグバウンティおよび許可を得たテストプログラムのもと、28 セクターにわたる米国企業ドメイン 600 件以上を調査した結果をまとめています。
使用するタイミング
- 新しい偵察キャンペーンを計画しており、セクターを選ぶ必要がある場合。
- テスト済みのセクターから新しいセクターへ対象を広げる場合。
- crt.sh を使い、セクターのキーワードからターゲットリストを作成する場合。
recon-playbookの Phase 0 の後。このスキルではセクターの情報を提供します。- セクターごとの脆弱性率の基準値と調査結果を比較する場合。
前提条件
curl、jq、httpx、subfinder。- 米国の規制状況(HIPAA、GLBA、PCI-DSS)の理解。規制対象セクターの脆弱性率はほぼゼロです。
- 同時実行数とレート制限が明示された実行環境。
実行方法
# Generate targets for a sector
SECTOR="landscaping"
curl --max-time 30 --connect-timeout 10 -sk "https://crt.sh/?q=%25.${SECTOR}%25&output=json" | jq -r '.[].name_value' | \
sed 's/\*\.//g' | sed 's/^www\.//' | sort -u > ${SECTOR}_targets.txt
スクリプト:scripts/parallel_sector_probe.py — OPSEC に配慮した一括プローブを実行し、ランダムな遅延を加えてドメインごとの調査結果ファイルを生成します。WP/CORS/XMLRPC/情報漏えいを一括スキャンするには、python3 scripts/parallel_sector_probe.py targets.txt output_dir/ を実行します。
クイックリファレンス
| Tier | セクター | 一般的な WP 率 | 最適なパターン | 備考 |
|---|---|---|---|---|
| 1 | 法律事務所、造園、プール、害虫駆除、屋根工事、歯科、ジム、不動産、HVAC、物件管理、自動車修理、写真撮影 | 30-50% | CORS + WP ユーザー | WAF は最小限、GoDaddy/Bluehost |
| 2 | 清掃、引越し、会計、浄化槽、窓、自動車洗車、ベーカリー、鍵屋、太陽光、煙突、消防、ペットのグルーミング | 20-40% | ソースコードの漏えい、CORS | ホスティングはさまざま、一部 WAF あり |
| 3 | 自動車ディーラー、保険、旅行、銀行、医療 | 0-5% | 該当なし | エンタープライズ WAF、規制対象、WP なし |
セクター別脆弱性ランキング
Tier 1 — 高い成果率(脆弱性率 15-25%)
| セクター | 脆弱性率 | 主なパターン | WordPress 率 | WAF 保護 | 最適なターゲット |
|---|---|---|---|---|---|
| 法律事務所 | 25% | P-06(CORS 認証) | ~30% | 最小限 | 個人経営・小規模事務所、GoDaddy ホスティング |
| 造園 | 20% | WP-01(ユーザー列挙) | ~50% | 最小限 | 地域の SMB、フランチャイズモデル |
| プールサービス | 20% | WP-01(ユーザー列挙) | ~45% | 最小限 | 夏季の需要に依存する事業者 |
| 害虫駆除 | 20% | P-02(CORS) | ~40% | 最小限 | フランチャイズが多い |
| 屋根工事 | 15% | WP-01、P-17 | ~45% | 最小限 | 地域の請負業者 |
| 歯科診療所 | 15% | WP-01(ユーザー列挙) | ~35% | 一部あり | 歯科医師 1 名の診療所 |
| ジム/フィットネス | 15% | WP-01(ユーザー列挙) | ~40% | 一部あり | CrossFit、ヨガ、武道 |
| 不動産 | 15% | P-02(CORS) | ~40% | 一部あり | 独立系不動産仲介業者 |
| HVAC/配管 | 14% | WP-01、P-02 | ~35% | 一部あり | フランチャイズが多く、ステージング環境も一般的 |
| 物件管理 | 15% | P-02(CORS) | ~30% | 一部あり | PII を多く扱うセクター |
| 写真撮影 | 10% | WP-01(ユーザー列挙) | ~50% | 一部あり | ポートフォリオサイトが多く、WP を使うことが多い |
| 葬儀場 | 10% | WP-01(ユーザー列挙) | ~33% | 最小限 | 2 つのターゲット(funeral.example.com、memorial.example.com)で WordPress + ユーザー列挙を確認 |
| 高齢者向け住宅 | 17% | P-02(CORS)+ XMLRPC | ~33% | Cloudflare | senior-living.example.com(80 の XMLRPC メソッド + CORS + multicall)、senior-living2.example.com(CORS)— テスト対象 12 件中 2 件で CRITICAL の検出事項あり |
Tier 2 — 中程度の収穫率(脆弱性率 5-14%)
| セクター | 脆弱性率 | 備考 |
|---|---|---|
| クリーニングサービス | 13% | カーペット、窓、カビの除去 |
| 引越し業者 | 6% | WP の利用は少なく、SaaS プラットフォームの利用が多い |
| 会計事務所/公認会計士 | 5% | 規制対象の場合とそうでない場合があり、財務データがリスクにさらされています |
| 浄化槽サービス | ソース漏えい 25% | ソース漏えい率が非常に高い(.env、.git、wp-config) |
| 窓清掃 | CORS 25% | 小規模事業者で、DIY の WP が多い |
| 洗車場 | ソース漏えい 20% | Dockerfile、swagger、actuator エンドポイントがよく見られます |
| ベーカリー | CORS ワイルドカード 18% | 1 つのターゲットで 28 個のファイルが漏えい |
| 鍵屋 | WP ユーザー + XMLRPC 20% | 1 つのターゲットに 38 個のサブドメイン |
| 太陽光発電設備の設置業者 | 最小限 | 大手ブランドはエンタープライズプラットフォームを使用 |
| 煙突掃除業者 | CORS + XMLRPC 約 10% | 小規模な家族経営で、WP が一般的 |
| 火災復旧サービス | 約 10% | フランチャイズモデル(Servpro、Belfor) |
| ペットグルーミング | WP ユーザー 20% | Dogtopia、Camp Bow Wow — WP を検出 |
重大な発見の例(新セクターを 248 ターゲットに拡大した調査より)
pool-company.example.com — 重大(スコア 9):
- REST API 経由で 3 人のユーザー情報が公開(wpadmin ID=1 — デフォルトの管理者アカウント)
- CORS の認証情報の反射を確認
- XMLRPC system.multicall が有効
- 攻撃チェーン: CORS フィッシング → ユーザーデータを窃取 → XMLRPC multicall 経由で wpadmin にブルートフォース攻撃 → サイト全体を乗っ取り
Tier 3 — 収穫なし/低収穫(脆弱性率 0-3%)
| セクター | 脆弱性率 | 理由 |
|---|---|---|
| 自動車ディーラー | 0% | エンタープライズ向けの CDK/Dealertrack プラットフォームを使用しており、WordPress ではありません |
| 旅行代理店 | 0% | SaaS(Sabre、Amadeus)を使用しており、セルフホストではありません |
| 銀行/信用組合 | 0% | GLBA の規制対象で、セキュリティ対策が義務付けられています |
| 大手医療機関 | 0% | HIPAA の規制対象で、HITRUST 認証を取得しています |
| 住宅サービス | 0% | Angi/Thumbtack のプラットフォームを使用しており、セルフホストではありません |
WordPress の利用を示す具体的な情報がない限り、これらのセクターは対象外にしてください。
手順
ステップ 1 — セクターの選定
OUTDIR="$OUTDIR/sectors"
mkdir -p "$OUTDIR"
echo "[*] Sector vulnerability potential assessment:"
echo ""
# Run quick sector probe: crt.sh → httpx → WP detection → user count
probe_sector() {
local sector="$1"
local file="$OUTDIR/${sector}_probe.txt"
echo "[*] Probing sector: $sector"
# Get domains from crt.sh
curl -sk --max-time 20 --connect-timeout 10 "https://crt.sh/?q=%25.${sector}%25&output=json" 2>/dev/null | \
jq -r '.[].name_value' 2>/dev/null | sed 's/\*\.//g' | sed 's/^www\.//' | \
grep -E '^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' | sort -u | head -50 > "$OUTDIR/${sector}_domains.txt"
# Option C: Manual known-company list (when crt.sh/subfinder time out)
if [[ ! -s "$OUTDIR/${sector}_domains.txt" ]]; then
echo " crt.sh empty — using manual known-company list"
# Generate known US companies in this sector
# Example: for "vet" or "pet_care" sector, known chains include:
cat > "$OUTDIR/${sector}_domains.txt" << 'EOF'
[VET_CLINIC]
[VET_CHAIN]
[PET_RETAILER]
[VET_CORPORATE]
[VET_HOSPITAL]
[VET_SPECIALIST]
[ANIMAL_CLINIC]
[VET_CLINIC]
[TRADE_PUBLICATION]
EOF
fi
local total=$(wc -l < "$OUTDIR/${sector}_domains.txt")
echo " Domains: $total"
# Probe with httpx
httpx -silent -l "$OUTDIR/${sector}_domains.txt" -threads 30 -status-code -tech-detect \
-o "$OUTDIR/${sector}_alive.txt" 2>/dev/null
local alive=$(wc -l < "$OUTDIR/${sector}_alive.txt")
echo " Live: $alive"
# WordPress count
local wp=$(grep -ci 'wordpress' "$OUTDIR/${sector}_alive.txt" 2>/dev/null || echo 0)
echo " WordPress: $wp"
# Quick user enumeration on WP targets
local users=0
grep -i 'wordpress' "$OUTDIR/${sector}_alive.txt" 2>/dev/null | awk '{print $1}' | head -10 | while read -r url; do
ucount=$(curl -sk --max-time 5 --connect-timeout 5 "$url/wp-json/wp/v2/users" 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d) if isinstance(d,list) else 0)" 2>/dev/null || echo 0)
[[ "$ucount" -gt 0 ]] && echo " $url: $ucount users" >> "$OUTDIR/${sector}_users.txt"
done
local user_targets=$(wc -l < "$OUTDIR/${sector}_users.txt" 2>/dev/null || echo 0)
echo " User leaks: $user_targets"
# Score the sector
echo "$sector | domains=$total | alive=$alive | wp=$wp | user_leaks=$user_targets" >> "$OUTDIR/sector_scores.txt"
}
# Probe top candidate sectors
for sector in "landscaping" "roofing" "hvac" "pools" "plumbing" "lawn-care" \
"pest-control" "law-firm" "dentist" "gym" "real-estate" "auto-repair" \
"moving-company" "photography" "cleaning-service" "church"; do
probe_sector "$sector"
sleep 3 # Rate limit
done
echo ""
echo "[*] Sector scores:"
sort -t'|' -k5 -rn "$OUTDIR/sector_scores.txt" 2>/dev/null | head -15
ステップ 2 — ターゲットリストの作成
OUTDIR="$OUTDIR/sectors"
# For selected high-yield sectors, compile full target lists
SELECTED_SECTORS=("landscaping" "roofing" "pools" "plumbing" "pest-control" "law-firm")
echo "[*] Compiling target lists for selected sectors..."
> "$OUTDIR/all_targets.txt"
for sector in "${SELECTED_SECTORS[@]}"; do
echo " Sector: $sector"
# crt.sh wildcard search
curl -sk --max-time 20 --connect-timeout 10 "https://crt.sh/?q=%25.${sector}%25&output=json" 2>/dev/null | \
jq -r '.[].name_value' 2>/dev/null | sed 's/\*\.//g' | sed 's/^www\.//' | \
grep -E '^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' | sort -u > "$OUTDIR/${sector}_all.txt"
# Also try subfinder
subfinder -d "${sector}.com" -silent 2>/dev/null >> "$OUTDIR/${sector}_all.txt"
# Add to master list with sector label
while read -r domain; do
echo "$domain|$sector" >> "$OUTDIR/all_targets.txt"
done < "$OUTDIR/${sector}_all.txt"
sleep 2
done
# Clean: remove CDN domains, parking pages, known false positives
echo "[*] Cleaning target list..."
# Remove common false positives
grep -viE 'cloudflare|akamai|fastly|awsdns|googleusercontent|azurewebsites' "$OUTDIR/all_targets.txt" | \
sort -u > "$OUTDIR/all_targets_clean.txt"
total=$(wc -l < "$OUTDIR/all_targets_clean.txt")
echo "[+] $total clean targets across ${#SELECTED_SECTORS[@]} sectors"
ステップ 3 — セクターのベースライン統計
一括偵察(recon-playbook を使用)の後、セクターごとの統計を算出します。
OUTDIR="$OUTDIR/sectors"
FINDINGS_DIR="$OUTDIR/playbook/phase2_findings"
echo "[*] Computing sector statistics..."
# Extract sector from target list
declare -A SECTOR_WP
declare -A SECTOR_CORS
declare -A SECTOR_XMLRPC
declare -A SECTOR_LEAKS
declare -A SECTOR_TOTAL
# Read target list
while IFS='|' read -r domain sector; do
[[ -z "$sector" ]] && continue
((SECTOR_TOTAL[$sector]++))
findings_file="$FINDINGS_DIR/${domain}_p2.md"
if [[ -f "$findings_file" ]]; then
grep -q "WordPress:" "$findings_file" && ((SECTOR_WP[$sector]++))
grep -q "CORS:" "$findings_file" && ((SECTOR_CORS[$sector]++))
grep -q "XMLRPC:" "$findings_file" && ((SECTOR_XMLRPC[$sector]++))
grep -q "Source leak:" "$findings_file" && ((SECTOR_LEAKS[$sector]++))
fi
done < "$OUTDIR/all_targets_clean.txt"
# Print sector report
echo ""
echo "## Sector Vulnerability Report"
echo ""
echo "| Sector | Targets | WP | CORS | XMLRPC | Leaks | Rate |"
echo "|--------|---------|-----|------|--------|-------|------|"
for sector in "${!SECTOR_TOTAL[@]}"; do
total=${SECTOR_TOTAL[$sector]}
wp=${SECTOR_WP[$sector]:-0}
cors=${SECTOR_CORS[$sector]:-0}
xmlrpc=${SECTOR_XMLRPC[$sector]:-0}
leaks=${SECTOR_LEAKS[$sector]:-0}
vulns=$((cors + xmlrpc + leaks))
rate=$(python3 -c "print(f'{$vulns/$total*100:.1f}%')" 2>/dev/null || echo "0%")
echo "| $sector | $total | $wp | $cors | $xmlrpc | $leaks | $rate |"
done
ステップ 4 — セクター偵察スキルのテンプレート
新しいセクター固有の偵察スキルを作成する場合は、このテンプレートを使用してください。
---
name: recon-SECTORNAME
description: Reconnaissance workflow for SECTOR NAME companies.
version: 1.1.0
revision_date: 2026-07-25
license: MIT
platforms: [linux]
tags: [recon, sector, SECTORNAME]
category: recon
---
# SECTOR NAME Recon Skill
[2-3 sentence description of sector-specific attack surface]
## When to Use
- Targeting SECTOR NAME companies for recon.
- [Sector-specific trigger]
## Quick Reference
| Attack Surface | Expected Prevalence | Top Pattern |
|----------------|---------------------|-------------|
| WordPress | XX% | WP-01 |
| CORS | XX% | V1 |
| XMLRPC | XX% | WP-05 |
| Source leaks | XX% | P-17 |
## Attack Surface Signals
- [Sector-specific CMS/platform signals]
- [Common third-party integrations]
- [Typical infrastructure patterns]
- [PII/regulated data vectors]
## Sector-Specific Bypasses
- [WAF/CDN patterns for this sector]
- [Rate limiting characteristics]
- [Common security gaps]
## Real Examples
- [Target name]: [finding] (severity)
- [Target name]: [finding] (severity)
## Related Skills
- wp-mass-recon
- cors-credential-wordpress
- xmlrpc-exploitation
- source-leak-hunt
注意点
- セクターのキーワードの重複。
pest controlではpest-control.example.com(害虫駆除業者ではなく SaaS)が検索結果に含まれる場合があります。SMB に典型的なドメインパターンで絞り込んでください。 - CDN/クラウドによる crt.sh のノイズ。
*.cloudfront.netや*.awsdns-*.orgのようなドメインが、セクターの crt.sh クエリに表示されます。徹底的に絞り込んでください。 - crt.sh/subfinder のタイムアウト。 トラフィックの少ないセクターや需要が集中する時間帯には、どちらのツールも頻繁に応答が止まったり、空の結果を返したりします。失敗した場合は、セクター内で知られている米国企業を手作業でリストアップしてください。全国規模の大手企業、フランチャイズのディレクトリ、業界団体の会員リストを利用します。ロングテールのセクターでは、既知の企業リストの方が、乏しい API の結果よりも成果につながることがよくあります。
- セクターの飽和。 セクターごとに 50 件以上のターゲットをスキャンすると、同じパターンが繰り返し見られるようになります。ベースラインを確立したら、新しいセクターに移ってください。
- 企業本部とフランチャイズ。 セクターによっては(HVAC、害虫駆除など)、企業本部のドメインと個々のフランチャイズのドメインの両方があります。フランチャイズのドメインの方が、より脆弱なターゲットです。
検証
- セクターの脆弱性率を算出するには、少なくとも 20 件のターゲットをスキャンしてください。
- 「有望」と見なすには、各セクターで WordPress の検出、CORS の発見、またはソースの漏えいが少なくとも 1 件必要です。
- 収穫がなかったセクターを完全に除外する前に、別の方法で再検証してください。
- セクターのレポートには、ターゲットの合計数、稼働中のホスト数、WP の検出数、発見された脆弱性、主なパターン、代表的な事例を含めてください。
コメント
Markdown 対応