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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
dnschef-ng — DNSChef (NG) - 面向渗透测试人员与恶意软件分析师的DNS代理 | Kitploit
工具/GitHubGitHub/byt3bl33d3r/dnschef-ng
数据泄露信息收集网络安全恶意软件分析渗透测试红队DNS 分析
GitHubbyt3bl33d3r/dnschef-ng

dnschef-ng

DNSChef (NG) - 面向渗透测试人员与恶意软件分析师的DNS代理

查看仓库
17316202年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

[!NOTE] 这是 DNSChef 的更新版本,最初由 @iphelix 编写。``` _ _ __
| | v0.7 | | / |
| | __ ___ | | | | ______ _ __ __ _ / | '_ \/ __|/ __| '_ \ / _ \ _|______| '_ \ / _ | | (| | | | _ \ (__| | | | __/ | | | | | (| | _,|
| ||/_|| ||___|| || ||_, | / | |_/ D O C U M E N T A T I O N

DNSChef 是一个高度可配置的 DNS 代理,适用于渗透测试人员和恶意软件分析师。DNS 代理(又称“Fake DNS”)是一种用于应用网络流量分析等用途的工具。例如,可以使用 DNS 代理伪造对“badguy.com”的请求,使其指向本地机器以进行终止或拦截,而不是指向互联网上的某个真实主机。

市面上已有很多 DNS 代理。大多数只是简单地将所有 DNS 查询指向单个 IP 地址,或者仅实现最基本的过滤。DNSChef 是在一次渗透测试中开发的,当时需要一个更具可配置性的系统。因此,DNSChef 是一款跨平台应用程序,能够基于包含和排除域名列表伪造响应,支持多种 DNS 记录类型,使用通配符匹配域名,为不匹配的域名代理真实响应,定义外部配置文件,支持 IPv6 以及许多其他功能。你可以在下面找到每个功能的详细解释和建议用途。

在无法强制应用程序直接使用其他代理服务器的情况下,建议使用 DNS 代理。例如,某些移动应用程序完全忽略操作系统的 HTTP 代理设置。在这些情况下,使用像 DNSChef 这样的 DNS 代理服务器,可以诱使该应用程序将连接转发到所需的目标地址。

## 新特性

- 需要 Python 3.11+
- 支持通过 DNS 暂存文件(目前仅支持 `A`、`AAAA`、`TXT` 记录……)
- 配置文件现在使用 TOML
- 可选 HTTP API(允许远程查询日志和更新配置)
- 完全异步以提升性能(使用 AsyncIO)
- 结构化日志以及多项体验改进
- 现在是一个 Python 包
- 已 Docker 化
- 包含来自原始仓库的多项 PR 和修复

## 安装

要安装最新版本,你应该使用 [pipx](https://pypa.github.io/pipx/)(除非你是个喜欢烂摊子的混蛋):

    pipx install dnschef-ng

如果你需要 HTTP API(需要一些额外依赖):

    pipx install dnschef-ng[api]

使用 pipx 从 Git 安装最新版本:

     pipx install git+https://github.com/byt3bl33d3r/dnschef-ng.git

使用 pipx 从 Git 安装最新版本并包含 HTTP API 依赖:

     pipx install "git+https://github.com/byt3bl33d3r/dnschef-ng.git#egg=dnschef-ng[api]"

## 设置 DNS 代理

在开始使用 DNSChef 之前,你必须将机器配置为使用运行该工具的 DNS 名称服务器。根据你使用的操作系统,你有以下几种选择:

- **Linux** - 编辑 */etc/resolv.conf*,在文件最顶部添加一行指向流量分析主机(例如,如果在本地运行,则添加 "nameserver 127.0.0.1")。或者,你可以使用诸如 Network Manager 之类的工具添加 DNS 服务器地址。在 Network Manager 中打开 IPv4 设置,从 *Method* 下拉框中选择 *Automatic (DHCP) addresses only* 或 *Manual*,然后编辑 *DNS Servers* 文本框,填入运行 DNSChef 的 IP 地址。

- **Windows** - 从 *Control Panel* 中选择 *Network Connections*。接着选择其中一个连接(例如 "Local Area Connection"),右键单击并选择属性。在随后出现的对话框中,选择 *Internet Protocol (TCP/IP)* 并点击属性。最后选择 *Use the following DNS server addresses* 单选按钮,并输入运行 DNSChef 的 IP 地址。例如,如果在本地运行,请输入 127.0.0.1。

- **OS X** - 打开 *System Preferences* 并点击 *Network* 图标。选择活动接口并填写 *DNS Server* 字段。如果你使用的是 Airport,则需要点击 *Advanced...* 按钮并从那里编辑 DNS 服务器。或者,你也可以编辑 */etc/resolv.conf*,在最顶部添加一个假的名称服务器(例如 "nameserver 127.0.0.1")。

- **iOS** - 打开 *Settings* 并选择 *General*。接着选择 *Wi-Fi*,然后点击列表中活动接入点右侧的蓝色箭头。编辑 DNS 条目,使其指向运行 DNSChef 的主机。确保已禁用蜂窝网络接口(如果可用)。

- **Android** - 打开 *Settings* 并选择 *Wireless and network*。点击 *Wi-Fi settings*,然后在手机上按 *Options* 按钮后选择 *Advanced*。启用 *Use static IP* 复选框并配置自定义 DNS 服务器。

如果你无法手动修改设备的 DNS 设置,你仍然有几种选择,包括 [ARP 欺骗](http://en.wikipedia.org/wiki/ARP_spoofing)、[恶意 DHCP](http://www.yersinia.net/doc.htm) 等其他创造性方法。

最后,你需要配置一个虚假服务,DNSChef 会将所有请求指向该服务。例如,如果你试图拦截 Web 流量,你必须启动一个运行在 80 端口的独立 Web 服务器,或者设置一个 Web 代理(例如 Burp)来拦截流量。DNSChef 会将查询指向配置了相应服务的代理/服务器主机。

## 运行 DNSChef

DNSChef 是一款使用 Python 开发的跨平台应用程序,应该可以运行在大多数拥有 Python 解释器的平台上。本指南将重点介绍 Unix 环境;不过,下面所有示例也已在 Windows 上测试通过。

让我们通过 DNSChef 最基本的监控功能来体验一下它。以 root 身份执行以下命令(需要在 53 端口启动服务器):

    # ./dnschef.py
        
              _                _          __  
             | | version 0.2  | |        / _| 
           __| |_ __  ___  ___| |__   ___| |_ 
          / _` | '_ \/ __|/ __| '_ \ / _ \  _|
         | (_| | | | \__ \ (__| | | |  __/ |  
          \__,_|_| |_|___/\___|_| |_|\___|_|  
                       [email protected]  

    [*] DNSChef started on interface: 127.0.0.1 
    [*] Using the following nameservers: 8.8.8.8
    [*] No parameters were specified. Running in full proxy mode

不带任何参数时,DNSChef 将以全代理模式运行。这意味着所有请求都将简单地转发到上游 DNS 服务器(默认 8.8.8.8),并将响应返回给查询主机。例如,让我们查询某个域的 “A” 记录并观察结果:

    $ host -t A thesprawl.org
    thesprawl.org has address 108.59.3.64

DNSChef 将打印以下日志行,显示时间、源 IP 地址、请求的记录类型,以及最重要的——被查询的名称:

    [23:54:03] 127.0.0.1: proxying the response of type 'A' for thesprawl.org

此模式对于简单的应用程序监控非常有用,当需要弄清楚应用程序在通信中使用了哪些域名时。

DNSChef 完全支持 IPv6,可以使用 *-6* 或 *--ipv6** 标志启用。其工作方式与 IPv4 模式完全相同,区别在于默认监听接口切换为 ::1,默认 DNS 服务器切换为 2001:4860:4860::8888。以下是一个示例输出:

    # ./dnschef.py -6
              _                _          __
             | | version 0.2  | |        / _|
           __| |_ __  ___  ___| |__   ___| |_
          / _` | '_ \/ __|/ __| '_ \ / _ \  _|
         | (_| | | | \__ \ (__| | | |  __/ |
          \__,_|_| |_|___/\___|_| |_|\___|_|
                       [email protected]

    [*] Using IPv6 mode.
    [*] DNSChef started on interface: ::1
    [*] Using the following nameservers: 2001:4860:4860::8888
    [*] No parameters were specified. Running in full proxy mode
    [00:35:44] ::1: proxying the response of type 'A' for thesprawl.org
    [00:35:44] ::1: proxying the response of type 'AAAA' for thesprawl.org
    [00:35:44] ::1: proxying the response of type 'MX' for thesprawl.org

注意:默认情况下,DNSChef 创建 UDP 监听器。你也可以使用 *--tcp* 参数改用 TCP,稍后会讨论。

## 运行 DNSChef HTTP API

> [!WARNING]
> API 没有认证机制。请通过安全组、iptables、防火墙等在网络层面允许/拒绝访问。

`uvicorn dnschef.api:app`

然后你可以通过 `http://127.0.0.1:8000/docs` 查看 OpenAPI 文档。```
$ uvicorn dnschef.api:app
INFO:     Started server process [28327]
INFO:     Waiting for application startup.
          _                _          __  
         | | version 0.6.0  | |        / _| 
       __| |_ __  ___  ___| |__   ___| |_ 
      / _` | '_ \/ __|/ __| '_ \ / _ \  _|
     | (_| | | | \__ \ (__| | | |  __/ |  
      \__,_|_| |_|___/\___|_| |_|\___|_|  
                @iphelix // @byt3bl33d3r  

2023-09-28 11:24:59 cooking replies                domain=*.thesprawl.org record=192.0.2.1 section=A
2023-09-28 11:24:59 cooking replies                domain=*.thesprawl.org record=2001:db8::1 section=AAAA
-- SNIP --
2023-09-28 11:24:59 cooking replies                domain=*.thesprawl.org record=1 . alpn=h2 ipv4hint=127.0.0.1 ipv6hint=::1 section=HTTPS
INFO:     Application startup complete.
2023-09-28 11:24:59 DNSChef is active              interface=127.0.0.1 ipv6=False nameservers=['8.8.8.8'] port=53 tcp=False
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

拦截所有响应

现在,既然你已经知道如何启动 DNSChef,让我们用 --fakeip 参数配置它,以便将所有响应伪造为指向 127.0.0.1:

# ./dnschef.py --fakeip 127.0.0.1 -q
[*] DNSChef started on interface: 127.0.0.1 
[*] Using the following nameservers: 8.8.8.8
[*] Cooking all A replies to point to 127.0.0.1
[23:55:57] 127.0.0.1: cooking the response of type 'A' for google.com to 127.0.0.1
[23:55:57] 127.0.0.1: proxying the response of type 'AAAA' for google.com
[23:55:57] 127.0.0.1: proxying the response of type 'MX' for google.com

在上面的输出中,你可以看到 DNSChef 被配置为将所有请求代理到 127.0.0.1。第一行日志(时间 23:55:57)显示我们已将 "A" 记录响应“伪造”为指向 127.0.0.1。然而,后续对 'AAAA' 和 'MX' 记录的请求只是从真实的 DNS 服务器代理转发。让我们看看请求程序的输出:

$ host google.com localhost
google.com has address 127.0.0.1
google.com has IPv6 address 2001:4860:4001:803::1001
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.

如你所见,程序被欺骗,将 IPv4 地址使用了 127.0.0.1。然而,从 IPv6(AAAA)和邮件(MX)记录中获得的信息看起来完全合法。DNSChef 的目标是尽可能减少对程序正常运行的影响,因此如果应用程序依赖特定的邮件服务器,它将通过此代理请求正确获取。

让我们再伪造一个请求,以说明如何同时针对多条记录:

下载工具