关于 sector-recon-methodology
用于选择非受监管行业、整理公司域名列表并开展授权批量探测的侦察方法技能。它提供各行业的 WordPress 漏洞基线,辅助规划测试活动并对比结果。
主要功能
- 01行业漏洞排名
- 02使用 crt.sh 生成域名列表
- 03批量 WordPress 与 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
详细介绍
行业侦察方法论技能
用于选择 WordPress 漏洞率最高的非受监管行业、整理公司域名列表,并在授权测试中执行批量侦察的方法论。本方法论源自对 28 个行业中 600 多个美国公司域名的调查,调查范围涵盖漏洞赏金和授权测试项目。
适用场景
- 规划新的侦察活动,需要选择行业。
- 从已测试的行业拓展到新行业。
- 通过 crt.sh 根据行业关键词构建目标列表。
- 完成
recon-playbook第 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 控制的批量探测工具,带随机延迟,并生成每个域名的发现结果文件。运行 python3 scripts/parallel_sector_probe.py targets.txt output_dir/,即可执行完整的 WP/CORS/XMLRPC/泄露扫描。
快速参考
| 层级 | 行业 | 典型 WP 率 | 最佳模式 | 备注 |
|---|---|---|---|---|
| 1 | 法律、园林绿化、泳池、害虫防治、屋顶、牙科、健身房、房地产、HVAC、物业、汽车维修、摄影 | 30-50% | CORS + WP 用户 | WAF 配置极少,使用 GoDaddy/Bluehost |
| 2 | 清洁、搬家、会计、化粪池、窗户、洗车、面包店、锁匠、太阳能、烟囱、消防、宠物美容 | 20-40% | 源码泄露、CORS | 主机服务混杂,部分配置 WAF |
| 3 | 汽车经销商、保险、旅游、银行、医疗保健 | 0-5% | 不适用 | 企业级 WAF、受监管、无 WP |
行业漏洞排名
第 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% | 少量 | 单牙医诊所 |
| 健身房/健身 | 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 个目标上发现 WordPress + 用户枚举(funeral.example.com、memorial.example.com) |
| 老年生活社区 | 17% | P-02(CORS)+ XMLRPC | ~33% | Cloudflare | senior-living.example.com(80 种 XMLRPC 方法 + CORS + multicall)、senior-living2.example.com(CORS)——测试的 12 个目标中有 2 个发现 CRITICAL 问题 |
第 2 级 — 中等产出(漏洞率 5-14%)
| 行业 | 漏洞率 | 备注 |
|---|---|---|
| 清洁服务 | 13% | 地毯、窗户、霉菌修复 |
| 搬家公司 | 6% | WordPress 较少,SaaS 平台较多 |
| 会计/注册会计师 | 5% | 部分受监管,部分不受监管 — 财务数据面临风险 |
| 化粪池服务 | 25% 源码泄露 | 源码泄露率极高(.env、.git、wp-config) |
| 窗户清洁 | 25% CORS | 小型业务,DIY WordPress |
| 洗车店 | 20% 源码泄露 | 常见 Dockerfile、swagger、actuator 端点 |
| 面包店 | 18% CORS 通配符 | 一个目标上泄露了 28 个文件 |
| 锁匠 | 20% WordPress 用户 + XMLRPC | 一个目标上有 38 个子域名 |
| 太阳能安装商 | 极少 | 大型品牌使用企业级平台 |
| 烟囱清扫 | ~10% CORS + XMLRPC | 小型家族企业,常用 WordPress |
| 火灾修复 | ~10% | 特许经营模式(Servpro、Belfor) |
| 宠物美容 | 20% WordPress 用户 | Dogtopia、Camp Bow Wow — 检测到 WordPress |
关键发现示例(来自扩展到 248 个目标的新行业)
pool-company.example.com — 严重(评分 9):
- 通过 REST API 暴露了 3 个用户(wpadmin ID=1 — 默认管理员账号)
- 已确认 CORS 凭据反射
- XMLRPC system.multicall 已启用
- 攻击链: CORS 钓鱼 → 窃取用户数据 → 通过 XMLRPC multicall 暴力破解 wpadmin → 完全接管网站
第 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 常见的域名模式进行筛选。 - crt.sh 中的 CDN/云服务噪声。 行业 crt.sh 查询中会出现
*.cloudfront.net或*.awsdns-*.org等域名。应严格筛选。 - crt.sh / subfinder 超时。 这两个工具在流量较低的行业或需求高峰期经常卡住或返回空结果。失败时,可改为手动整理行业内已知的美国公司:使用排名靠前的全国连锁企业、特许经营目录和行业协会会员名单。对于长尾行业,已知公司名单往往比稀疏的 API 结果更有用。
- 行业饱和。 扫描某个行业的 50 个以上目标后,你会看到相同的模式。建立基线后,转向新行业。
- 企业与特许经营。 某些行业(HVAC、害虫防治)既有企业母公司域名,也有各个特许经营商的域名。特许经营商的域名防护较弱。
验证
- 行业漏洞率应至少基于 20 个已扫描目标。
- 每个行业至少应发现一项 WordPress 检测结果、CORS 问题或源码泄露,才可视为“有产出”。
- 完全放弃零产出行业前,应使用不同的方法重新验证。
- 行业报告应包含:目标总数、存活主机数、检测到的 WordPress 数、发现的漏洞数、主要模式和代表性示例。
评论
支持 Markdown