网站如何知道客户端使用的 DNS 服务器?

信息安全 http dns
2021-08-29 02:18:07

有些网站声称可以进行“DNS 泄漏测试”。我不太关心 DNS 泄漏,但很好奇,网站如何知道我使用的是哪个 DNS 服务器?我猜这将是 HTTP 请求中发送的标头,但无法找到它。

示例网站:https ://www.dnsleaktest.com/

编辑:通过谷歌搜索找到了很多其他示例。

2个回答

这是一个 DNS 解析技巧,也可以使用非 http 协议执行,但在这种情况下是通过 http 使用随机主机名和零像素图像执行的。

查看页面上的源代码,您会看到一系列随机的 10 个字符的子域请求多个 URL。这些是非常独特的主机名,您的计算机或您的 ISP,或更重要的是您的 DNS 提供商,都不会缓存在本地 DNS 中。

当这些唯一 URL 的主机名到达您的 DNS 提供商时,他们必须从测试公司网站请求它们,然后测试公司网站关联所有者 IP 地址以执行唯一 DNS 请求,然后通过快速查找通知您发出请求的公司名称

同一域的随机主机名列表

ixc9a5snm4.dnsleaktest.com
rhl50vm36o.dnsleaktest.com
4xov3y3uvc.dnsleaktest.com
2n5t99gbzp.dnsleaktest.com
6mzklkved4.dnsleaktest.com
d6z20e9c2x.dnsleaktest.com

可以在以下 html 中找到(您的主机名会有所不同)

<img width=0 height=0 src="https://ixc9a5snm4.dnsleaktest.com">.
<img width=0 height=0 src="https://rhl50vm36o.dnsleaktest.com">.
<img width=0 height=0 src="https://4xov3y3uvc.dnsleaktest.com">.
<img width=0 height=0 src="https://2n5t99gbzp.dnsleaktest.com">.
<img width=0 height=0 src="https://6mzklkved4.dnsleaktest.com">.
<img width=0 height=0 src="https://d6z20e9c2x.dnsleaktest.com">.

我不知道这件事。非常有趣。它似乎通过尝试生成与其控制的长随机子域的连接来工作,并且它可能可以整理来自调用 DNS 服务器的域解析请求。

失败的浏览器发起的请求列表 图 1:浏览器发起的失败请求列表


在引擎盖下,它是使用零尺寸图像生成器的标准跟踪:

    <pre class="progress">Query round Progress... Servers found
        <br/>&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <img width=0 height=0 src="https://1k9oraud8h.dnsleaktest.com">.
        <img width=0 height=0 src="https://dajo0hwg9c.dnsleaktest.com">.
        <img width=0 height=0 src="https://6crg9z68gj.dnsleaktest.com">.
        <img width=0 height=0 src="https://nwitgnyo7r.dnsleaktest.com">.
        <img width=0 height=0 src="https://z3yine4a7p.dnsleaktest.com">.
        <img width=0 height=0 src="https://2tvxmp2yd5.dnsleaktest.com">.
    </pre>

有趣的是,由于我默认阻止了 piwik(使用的分析引擎),所有请求都失败了,但我的 DNS 服务器仍然被识别,这意味着它们不仅仅依赖于 HTTP 跟踪器。

添加澄清以解决@Falco 的问题。

由于子域不存在,因此可能无法为所有人加载图像。因此,从下面的屏幕截图中可以看到,永远不会生成请求(无效的 DNS 查找)。就我而言,唯一的区别是他们没有收到跟踪 ID。

域名永远不会解析 图 2:域名永远不会为任何子域解析


因此,浏览器永远不会发出 HTTP 请求 图 3:因此 HTTP 请求永远不会由浏览器发出


由于我无法访问后端,我只是猜测幕后发生的事情。他们可能在他们的 DNS 服务器上有一个钩子,将收到的每个DNS 问题的源 IP 写入他们的数据库(也许这个线程也在保存数据之前进行主机名和 ISP 查找)。请注意,这是一个 DNS 问题,而不是具体化的 HTTP 查找。中央 Web 服务器唯一要做的就是返回与我的浏览器关联的 suddomains 对应的行。

最简单的方法是与跟踪 ID 一对一对应。通常,它会发送一个名称为 like 的 piwik 跟踪 cookie,pk_id最后会有一个额外的请求,piwik.php其中包含很多跟踪详细信息。在我的情况下,这个 cookie 永远不会建立,并且不会发生额外的跃点。我没有看到其他会话识别发生,如果社区还没有挖掘,我会在周末更仔细地查看它。