为什么注册的域名“localtest.me”解析为127.0.0.1?

not*_*bit 33 networking dns domain ip localhost

我正在阅读一篇关于Server-Side Request Forgery的文章。在那篇文章中,攻击者发现它对127.0.0.1互联网开放。受害者随后阻止了127.0.0.1,但由于许多其他 IP 和显然还有一些域也被解析到了,包括神秘的localtest.me,他能够绕过一个弱的基于文本的过滤器。

  1. 有什么特别之处localtest.me

  2. 还有其他人吗?(以及如何找到它们?)


更新

我发现:http : //readme.localtest.me/

显然,出于测试目的,有人决定以一种有趣的方式注册该域:

这是它的工作原理。整个域名 localtest.me 以及所有通配符条目都指向 127.0.0.1。因此,无需对您的主机文件进行任何更改,您就可以立即开始使用本地 URL 进行测试。

但是,我仍然不确定如何将外部域注册到本地域。这是令人困惑的,因为它tracert localtest.me甚至从未离开过机器。这在低层是如何处理的?

然后我在这些评论和其他地方发现了更多

lvh.me 
vcap.me
fuf.me - IPv4 and IPv6
ulh.us
127-0-0-1.org.uk
ratchetlocal.com
smackaho.st
42foo.com
beweb.com
yoogle.com
ortkut.com
feacebook.com
Run Code Online (Sandbox Code Playgroud)

而在类似的 问题上堆栈溢出。

use*_*686 69

但是,我仍然不确定如何将外部域注册到本地域。这令人困惑,因为 tracert localtest.me 甚至从未离开机器。这在低层是如何处理的?

没有什么可以按照您想象的方式将域“绑定”到其地址。就像电话簿一样,DNS 只是告诉您地址是什么——但它的参与也就到此为止了。(您不用在电话上拨打“必胜客”;您查找他们的电话号码,然后拨打该号码。)

因此,当有人注册域名时,他们只是获得了编辑这些电话簿记录的能力。但要真正将域名“指向”某个地方——让我们说127.0.0.1——他们将这一行添加到其数据库中:

localtest.me.   A   127.0.0.1
Run Code Online (Sandbox Code Playgroud)

就是这样。谁问localtest.me现在都会得到答案“哦,它在127.0.0.1。”

因此,当您键入 时tracert localtest.me.,它首先向 DNS 询问关联的地址;得到答案 127.0.0.1;然后表现得就像你跑了一样tracert 127.0.0.1。根本没有魔法。

还有其他人吗?(以及如何找到它们?)

在这一点上应该很清楚,任何域所有者都可以毫不费力地做到这一点,因此在任何给定时间总是存在其他此类域的可能性。由于 DNS 数据分布在许多系统中(有时甚至是动态生成的),您确实无法找到所有这些数据,甚至无法期望您的结果在几秒钟后仍保持准确。

但出于安全目的,您无需全部找到它们。一些 DNS 解析器实际上已经对此类条目进行了某种过滤(称为“DNS 重新绑定保护”),并且它们不寻找特定问题 – 它们只查看答案。保护功能只是阻止指向任何本地地址的答案。

然而,在你问之前,这不能在全球范围内被禁止——将域名指向私有地址仍然是 DNS 的一种完全合法的使用,并且在许多网络中被实际使用。

  • 是的。强制执行地址的使用方式不是 DNS 的职责。 (11认同)
  • 谢谢大佬解惑。这绝对是一个有趣的发现,因为我不知道还可以注册 [保留 IP 块](https://en.wikipedia.org/wiki/Reserved_IP_addresses)。 (4认同)
  • @not2qubit “……我不知道还可以注册保留的 IP 块。” 你混淆了术语。您需要在注册商处*注册*一个域名;这是一个受控过程。您*分配*一个IP地址给一个域名;这是一个不受控制的过程。只要您控制了域名,任何一堆数字都可以分配给任何注册域名。 (2认同)

Gia*_*968 16

还有其他更深入的答案,但这个问题的核心很容易回答:

“但是,我仍然不确定如何将外部域注册到本地域。”

注册域名和分配IP地址是完全不同且独立的两件事。

任何人都可以以任何理由注册任何域名;您甚至可以在没有目标 IP 地址的情况下注册域名。一个人必须简单地向域名注册商付款,通过虚拟“文书工作”,然后就像魔术一样,您拥有一个域名。注册域名时,您只需支付域名本身以及为域名分配 IP 地址的能力(请阅读下文)。

但是,为该域名分配 IP 地址是一个完全不同的过程。如果任何人都可以控制该域名,则任何人都可以将任何IP 地址分配给该域名。域名注册商不关心或关心您分配给域名的原始地址堆。

域名只是一个让生活更轻松的指针。将其视为别名,因此人们不必记住成堆的数字 (IPv4) 或数字和字母 (IPv6)。

就是这样!

但是,正如您访问的那个页面所解释的那样,发生的事情并不是对世界本地“127.0.0.1”地址中的每个系统的“黑客攻击”,而是该特定系统本身的缺陷。

但是,为了进一步澄清这一点——这也让我对你的措辞感到困惑——当你说:

我正在阅读一篇关于Server-Side Request Forgery的文章。在那篇文章中,攻击者发现 127.0.0.1 对互联网开放。

我也读过那篇文章,结果是这样的:有人使用了一个在线工具,该工具允许您将该工具指向任何 IP 地址/主机名。当他们指出该工具时127.0.0.1,并不是 IP 地址127.0.0.1暴露在 Internet 上。相反,该工具本身存在一个缺陷,允许任何人使用127.0.0.1. 而且由于该工具明确是一个用于检测开放端口等的黑客工具,因此通过使用127.0.0.1该特定应用程序能够探测它自己的本地主机网络,并在此处输入密钥,将该信息传递给仅通过 Web 浏览器访问该工具的人.

所带来的风险并不是每个人127.0.0.1都暴露在 Internet 上,而是一个站点上的一个工具上的草率编码允许这种情况发生。


Ana*_*man 8

localtest.me 有什么特别之处?

它指向127.0.0.1(本地主机)。此地址始终为本地计算机保留。

还有其他人吗?(以及如何找到它们?)

是的。Google 和超级用户是您的朋友(如您所见)。

我仍然不确定如何将外部域注册到本地 [IP]。这是令人困惑的,因为它tracert localtest.me甚至从未离开过机器。这在低层是如何处理的?

您缺少初始(外部)DNS请求。tracert显示数据包采用的路径,但在数据包到达任何地方之前,计算机必须知道要将其发送到的 IP。需要注意的是,如果您以前从未访问过locatest.me,则会向外部解析器发出 DNS 请求,以发现它映射到 127.0.0.1。然后在本地使用返回的数据(例如用于tracert或显示网络内容)。请记住,DNS 可以将任何主机名映射到任何 IP——它不“知道”IP 是否是本地的。