mcpField
S
sector-recon-methodology

sector-recon-methodology

github.com/uphiagoセキュリティ1.3k40 回インストール8 週間前に更新
リポジトリ

sector-recon-methodology について

規制対象外の業界選定、企業ドメイン一覧の作成、認可された一括プローブを扱う偵察手法スキルです。業界ごとの WordPress 脆弱性ベースラインを示し、計画と結果比較に役立ちます。

主な機能

  1. 01業界別の脆弱性ランキング
  2. 02crt.sh によるドメイン一覧生成
  3. 03WordPress と Web の一括プローブ
  4. 04業界別ベースライン比較
  5. 05偵察ワークフローの指針

活用シーン

  1. 01認可済み偵察キャンペーンの業界選定
  2. 02業界キーワードからのドメイン一覧作成
  3. 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%Cloudflaresenior-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 の検出数、発見された脆弱性、主なパターン、代表的な事例を含めてください。

コメント