Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
BIND-9-Cache-Poisoning-PoC---CVE-2025-40778 — 概念验证:CVE-2025-40778——通过未经请求的附加区段记录对BIND 9进行DNS缓存投毒 | Kitploit
工具/GitHubGitHub/sirbuvladste/bind-9-cache-poisoning-poc---cve-2025-40778
漏洞分析漏洞利用网络安全学习与教育DNS 分析实验室与实践
GitHubsirbuvladste/bind-9-cache-poisoning-poc---cve-2025-40778

BIND-9-Cache-Poisoning-PoC---CVE-2025-40778

概念验证:CVE-2025-40778——通过未经请求的附加区段记录对BIND 9进行DNS缓存投毒

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
168个月前尚未审核
分享

BIND 9 缓存污染 PoC - CVE-2025-40778

概念概述

此漏洞允许攻击者污染 BIND 解析器的 DNS 缓存,从而在合法用户不知情的情况下将其重定向到恶意 IP 地址。

攻击的核心逻辑:

攻击依赖于利用信任。受害者信任解析器,而解析器(BIND)信任从权威服务器收到的答案。漏洞在于 BIND 会处理并缓存 DNS 响应中 ADDITIONAL 部分提供的未经请求的数据,即使这些数据属于完全不同的、未请求的域。

攻击步骤:

  1. 设置:攻击者控制一个针对特定域(例如 poc.lab)的恶意权威 DNS 服务器。攻击者等待目标解析器(BIND)查询该域。

  2. 注入:当解析器查询攻击者服务器获取 poc.lab 时,攻击者会回复一个针对 poc.lab 的合法答案,但在 ADDITIONAL 部分中包含一个针对不同域(在我们的示例中是 www.hacker.com,但可以是任何合法域,如 facebook.com)的未经请求的答案,指向一个恶意 IP 地址。

  3. 污染:由于漏洞,解析器接受未经请求的"附加"记录并将其存储在缓存中。它不验证攻击者是否对未经请求的域没有权威。

  4. 受害者的查询:当受害者稍后查询解析器获取未经请求的域(www.hacker.com)时,解析器从其缓存中返回被污染的记录,将受害者重定向到攻击者控制的恶意 IP 地址。

[!IMPORTANT]

此 PoC 的关键要点

间接攻击:受害者从不直接与攻击者通信。

信任锚点受损:受害者的机器运行正常;是基础设施(DNS)在撒谎。

机制:该利用利用对附加部分的处理,注入从未请求过的记录。

[!CAUTION]

此 PoC 仅供教育用途。未经授权使用此信息来破坏系统是非法且不道德的。在测试或利用任何网络或系统上的漏洞之前,请始终获得许可。

本演示的基础设施设置

本演示使用以下虚拟机 (VM):

  • VM Ubuntu 24.0.4 - BIND 9 - 192.168.174.131
  • VM Ubuntu 24.0.4 - 受害者 - 192.168.174.128
  • VM Kali 2024.2 - 攻击者 - 192.168.174.130

下载并编译 BIND 9.21.12

以下命令用于在基于 Debian 的系统上设置 BIND 9.21.12,以演示 CVE-2025-40778 漏洞。

[!NOTE] 此演示使用 BIND 9.21.12,这是受此漏洞影响的版本之一。

其他已知的受影响版本范围包括:

  • 9.11.0 – 9.16.50
  • 9.18.0 – 9.18.39
  • 9.20.0 – 9.20.13
  • 9.21.0 – 9.21.12

以下命令将安装必要的依赖项,下载 BIND 9.21.12 源代码,编译并将其安装到系统上。

sudo apt install -y build-essential pkg-config perl meson ninja-build libssl-dev libuv1-dev liburcu-dev libcap-dev liblmdb-dev libnghttp2-dev

cd /usr/local/src

sudo wget -O bind-9.21.12.tar.xz https://isc.mirrorservice.org/bind/9.21.12/bind-9.21.12.tar.xz

sudo tar -xf bind-9.21.12.tar.xz

cd bind-9.21.12

sudo meson setup build --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var

sudo ninja -C build

sudo ninja -C build install

echo /usr/local/lib/x86_64-linux-gnu | sudo tee /etc/ld.so.conf.d/bind9-local.conf

sudo ldconfig

ldconfig -p | grep 'libdns-9.21.12' || true

/usr/local/sbin/named -v

这里是最终命令的预期输出:

> student@student:/usr/local/src/bind-9.21.12$ /usr/local/sbin/named -v
BIND 9.21.12 (Development Release) <id:9bafc35>

用户和组 + 配置文件

在启动 BIND 服务器之前,我们需要创建一个专用的用户和组来运行 named 服务:

sudo groupadd --system named 2>/dev/null || true
sudo useradd --system --no-create-home --home /nonexistent --shell /usr/sbin/nologin --gid named named 2>/dev/null || true

由于此 BIND 安装不附带默认配置文件,我们需要手动创建必要的目录:

sudo mkdir -p /etc/bind
sudo mkdir -p /var/cache/bind
sudo mkdir -p /var/log/named
sudo mkdir -p /var/run/named
sudo chown -R named:named /var/cache/bind /var/log/named /var/run/named
sudo chmod 750 /var/cache/bind /var/log/named /var/run/named

下一步是创建主配置文件 /etc/bind/named.conf,包含以下内容:

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.logging";
include "/etc/rndc.key";

对于选项配置,创建文件 /etc/bind/named.conf.options,包含以下内容:

options {
    directory "/var/cache/bind";

    recursion yes;
    allow-recursion { 192.168.174.0/24; };
    allow-query     { 192.168.174.0/24; };

    listen-on { 192.168.174.131; 127.0.0.1; };
    listen-on-v6 { none; };

    dnssec-validation no;

    forwarders {
        1.1.1.1;
        8.8.8.8;
    };

    minimal-responses no;

    // for manual start
    pid-file "/var/run/named/named.pid";
};

为了设置域 poc.lab 的转发区域,将查询转发到攻击者的 DNS 服务器 192.168.174.130(标准端口 53),我们需要按如下方式编辑 /etc/bind/named.conf.local 文件:

zone "poc.lab" {
  type forward;
  forward only;
  forwarders { 192.168.174.130; };
};

对于日志配置,创建文件 /etc/bind/named.conf.logging,包含:

logging {
  channel queries_file {
    file "/var/log/named/queries.log" versions 3 size 20m;
    severity info;
    print-time yes;
    print-category yes;
  };

  channel default_stderr {
    stderr;
    severity info;
    print-time yes;
    print-category yes;
  };

  category queries { queries_file; };
  category default { default_stderr; };
};

最后,我们需要配置 RNDC:

sudo /usr/local/sbin/rndc-confgen -a -c /etc/bind/rndc.key
sudo chown root:named /etc/bind/rndc.key
sudo chmod 640 /etc/bind/rndc.key

启动 BIND 服务器

首先,我们需要确保端口 53 未被任何其他服务使用(在我们的案例中,我们不得不禁用 systemd-resolved):

sudo systemctl disable --now systemd-resolved || true
sudo ss -lunp | grep ':53' || true  # To verify that port 53 is free

最后,我们可以使用以下命令启动 BIND 服务器:

sudo /usr/local/sbin/named -g -u named -c /etc/bind/named.conf

[!TIP]

为了验证 BIND 是否运行正常,我们可以使用以下命令:

ss -lunpt | grep :53

设置受害者

对于受害者机器,我们需要将其设置为使用 BIND 服务器作为 DNS 解析器。此外,我们必须停用 systemd-resolved 以避免冲突:

sudo systemctl disable --now systemd-resolved

然后我们可以使用以下命令设置静态 DNS 服务器:

sudo rm -f /etc/resolv.conf
sudo nano /etc/resolv.conf
> nameserver 192.168.174.129
> options timeout:1 attempts:1
sudo chattr +i /etc/resolv.conf #block overwrites

设置攻击者

在攻击者机器上,我们需要运行仓库中提供的脚本(attacker.py)。

在我们的场景中,攻击者控制 poc.lab 域。当被询问该域或任何子域时,他添加一个指向他 IP 地址的未经请求的答案记录(www.hacker.com)。

演示 CVE-2025-40778 漏洞

当受害者查询域 poc.lab 时,BIND 服务器将请求转发给攻击者的 DNS 服务器。攻击者回复一个未经请求的答案记录,污染了 BIND 服务器的缓存。当受害者访问 www.hacker.com 时,将被重定向到攻击者的 IP 地址,而不是合法的地址。

以下是受害者查询两个域的演示:

student@student:~/Desktop$ dig www.poc.lab +noall +answer
www.poc.lab.            60      IN      A       192.168.174.99
student@student:~/Desktop$ dig www.hacker.com +noall +answer
www.hacker.com.         60      IN      A       192.168.174.130

[!NOTE]

此视频是对所解释漏洞的演示:https://drive.google.com/file/d/1PATD0tUqw8-BipfSf6TkQQfnJBvV110Z/view?usp=sharing

此仓库中的文件

  • README.md - 本文件,包含漏洞的解释和重现步骤。
  • attacker.py - 一个简单的 Python 脚本,攻击者用来响应带有未经请求的答案记录的 DNS 查询。
  • server.py - 一个简单的 Flask 网页,可用于演示 DNS 缓存污染后的重定向。
下载工具