SuperAPI AI 工具集

dns-recon

安全与审计

查看项目

更新于 10-16 05:38

技能介绍

用途

dns-recon 是一个面向安全侦察的 DNS 技能,使用 dig、host 和 nslookup 对目标域名执行完整的 DNS 记录查询、区域传送(AXFR)尝试与 DNSSEC 核验。

适用场景:

  • 梳理域名的邮件服务器、名称服务器、IP 段等基础设施
  • 检测配置错误的区域传送缺陷
  • 审计 SPF/DKIM/DMARC 配置状态
  • 识别子域名接管候选目标

主要能力

  • 查询基础记录:A、AAAA、MX、NS、TXT、CNAME、SOA
  • 检查邮件安全记录:SPF、DMARC(_dmarc 前缀)、DKIM(default 选择器)
  • 提取名称服务器并尝试区域传送(AXFR),判断是否被拒绝、成功或超时
  • 检查 DNSSEC:查询 DNSKEY 与 DS 记录,判断是否启用
  • 将结果写入输出文件,并打印 A/MX/NS 记录摘要

前置条件

安装 dnsutils 包(包含 dig、host、nslookup):

# Ubuntu/Debian
sudo apt-get install -y dnsutils
# CentOS/RHEL
sudo yum install -y bind-utils

环境变量 SECSKILL_TARGET_DOMAIN:目标域名。

输入变量

变量 必填 说明
SECSKILL_TARGET_DOMAIN 是 要查询的域名(例如 example.com)
SECSKILL_OUTPUT_DIR 否 保存结果的目录(默认:./output)
SECSKILL_DNS_RESOLVER 否 使用的 DNS 解析器 IP(默认:系统默认)

工作流程

步骤 1:准备环境

export TARGET="${SECSKILL_TARGET_DOMAIN:?Set the SECSKILL_TARGET_DOMAIN environment variable}"
export OUTDIR="${SECSKILL_OUTPUT_DIR:-./output}"
export RESOLVER="${SECSKILL_DNS_RESOLVER:-}"
mkdir -p "$OUTDIR"
RESOLVER_OPT=""
[ -n "$RESOLVER" ] && RESOLVER_OPT="@${RESOLVER}"
echo "[*] Starting DNS recon: $TARGET"

步骤 2:查询基础记录(A、AAAA、MX、NS、TXT、CNAME)

OUTFILE="$OUTDIR/dns_records_${TARGET}.txt"
echo "===== DNS Record Query: $TARGET =====" > "$OUTFILE"
echo "Query time: $(date -u '+%Y-%m-%dT%H:%M:%SZ')" >> "$OUTFILE"
echo "" >> "$OUTFILE"

for RTYPE in A AAAA MX NS TXT CNAME SOA; do
  echo "--- ${RTYPE} record ---" | tee -a "$OUTFILE"
  dig $RESOLVER_OPT "$TARGET" "$RTYPE" +noall +answer 2>/dev/null \
    | tee -a "$OUTFILE"
  echo "" >> "$OUTFILE"
done

echo "[+] Basic record query complete"

步骤 3:检查邮件安全记录(SPF、DKIM、DMARC)

echo "--- Email security records ---" | tee -a "$OUTFILE"

echo "[SPF]" | tee -a "$OUTFILE"
dig $RESOLVER_OPT "$TARGET" TXT +short 2>/dev/null \
  | grep -i "v=spf" | tee -a "$OUTFILE"

echo "[DMARC]" | tee -a "$OUTFILE"
dig $RESOLVER_OPT "_dmarc.${TARGET}" TXT +short 2>/dev/null \
  | tee -a "$OUTFILE"

echo "[DKIM - default selector]" | tee -a "$OUTFILE"
dig $RESOLVER_OPT "default._domainkey.${TARGET}" TXT +short 2>/dev/null \
  | tee -a "$OUTFILE"

echo "[+] Email security record check complete"

步骤 4:提取名称服务器并尝试区域传送

echo "" >> "$OUTFILE"
echo "--- Zone Transfer (AXFR) Attempts ---" | tee -a "$OUTFILE"

NS_LIST=$(dig $RESOLVER_OPT "$TARGET" NS +short 2>/dev/null | sed 's/\.$//')
if [ -z "$NS_LIST" ]; then
  echo "[-] No name servers found." | tee -a "$OUTFILE"
else
  echo "$NS_LIST" | while read -r NS; do
    echo "[*] Attempting zone transfer from: $NS..." | tee -a "$OUTFILE"
    RESULT=$(dig @"$NS" "$TARGET" AXFR 2>/dev/null)
    if echo "$RESULT" | grep -q "Transfer failed\|connection refused\|REFUSED\|timed out"; then
      echo "[-] $NS: Zone transfer refused (expected)" | tee -a "$OUTFILE"
    elif echo "$RESULT" | grep -q "XFR size"; then
      echo "[!] $NS: Zone transfer succeeded! Vulnerability found" | tee -a "$OUTFILE"
      echo "$RESULT" >> "$OUTFILE"
    else
      echo "[-] $NS: No response or unknown result" | tee -a "$OUTFILE"
    fi
  done
fi

步骤 5:检查 DNSSEC

echo "" >> "$OUTFILE"
echo "--- DNSSEC Check ---" | tee -a "$OUTFILE"

DNSKEY=$(dig $RESOLVER_OPT "$TARGET" DNSKEY +short 2>/dev/null)
DS=$(dig $RESOLVER_OPT "$TARGET" DS +short 2>/dev/null)

if [ -n "$DNSKEY" ] || [ -n "$DS" ]; then
  echo "[+] DNSSEC enabled" | tee -a "$OUTFILE"
  echo "DNSKEY: $DNSKEY" >> "$OUTFILE"
  echo "DS: $DS" >> "$OUTFILE"
else
  echo "[-] DNSSEC not configured" | tee -a "$OUTFILE"
fi

echo "[+] DNS recon complete: $OUTFILE"

步骤 6:打印摘要

echo ""
echo "===== DNS Recon Summary ====="
echo "Target    : $TARGET"
echo "A records : $(dig $RESOLVER_OPT $TARGET A +short 2>/dev/null | tr '\n' ' ')"
echo "MX records: $(dig $RESOLVER_OPT $TARGET MX +short 2>/dev/null | tr '\n' ' ')"
echo "NS records: $(dig $RESOLVER_OPT $TARGET NS +short 2>/dev/null | tr '\n' ' ')"
echo "Output    : $OUTFILE"
echo "=============================="

完成条件

  • 所有记录类型均已查询
  • 区域传送尝试结果已记录(无论成功或失败)
  • DNSSEC 状态已核验
  • 输出文件已创建

失败模式

症状 原因 解决方式
dig: command not found 未安装 dnsutils 运行 apt-get install dnsutils
所有查询超时 防火墙或 DNS 屏蔽 指定其他解析器(SECSKILL_DNS_RESOLVER=8.8.8.8)
区域传送结果为空 被正确拒绝 探索其他攻击向量
NXDOMAIN 响应 域名拼写错误或域名不存在 核对域名拼写

注意事项

  • 若发现区域传送缺陷,应立即在报告中记录。这属于高严重性发现。
  • TXT 记录可能包含内部基础设施线索和服务认证令牌。
  • 也可使用 host -l 命令进行区域传送:host -l $TARGET $NAMESERVER
  • SPF 的 ~all 或 +all 设置易受欺骗攻击,应单独报告。