1. 区域转移
一些域名服务器允许将 DNS 区域传输给 Internet 上的任何人,通常是无意的。在这个问题中,进一步解释:DNS 区域传输攻击。
区域转移工具
该问题的第二个答案提到了如何在 Windows 和 Linux 上测试它:
视窗:
nslookup
> server <DNS you are querying>
> set type=any
> ls -d <target>
Unix(在 Unix 上不推荐使用 nslookup):
dig -t axfr @<DNS you are querying> <target>
(我编辑了 Unix,因为-axfr
它似乎不起作用。我需要指定-t axfr
。)
2. DNSSEC 区域漫游
DNSSEC 签署 DNS 记录,因此您可以确保收到正确的答案(好吧,考虑到一些信任根和中介)。但是您如何证明某些东西不存在,例如在寻找时nonexistentsub.example.com
,名称服务器如何example.com
证明子域不存在?它上面没有签名密钥(签名是在管理员更新区域时完成的)。
在他们对DNSSec 如何工作的回答中?是否存在已知限制或问题?, /u/tylerl解释说:
显然,响应需要签名,但通常 DNS 服务器本身无法访问您的签名密钥,也无法即时签署响应;签名都是提前“离线”创建的。如果您的 DNS 服务器受到威胁,这可以防止您的密钥被泄露。
因此,您将子域按字母顺序排列,并说“对于 mail.example.com 和 pop.example.com 之间的每个名称,不存在其他子域”并签署该断言。然后,当有人询问 nachos.example.com 时,您可以只给他们回复(已经签名)并且客户知道因为 nachos.example.com 按字母顺序位于 mail.example.com 和 pop.example.com 之间,那么“这个域不存在”的响应被认为是正确签名的并且实际上来自你。
这成为问题的地方在于,通过一组明确指出“X 和 Y 之间不存在任何响应”的负面响应,您可以轻松地准确绘制出整个区域存在哪些域。您知道存在“X” ,并且你知道“Y”存在,并且你知道它们之间没有其他任何东西。只要再随机戳一下,你就可以快速编译出所有确实存在的记录的列表。
指定“直到 pop.example.com 什么都没有”的记录称为 NSEC(下一个 SECure 记录)。
为此设计了一个解决方法:NSEC3。它对名称进行哈希处理,因此mail
变成b83a88...
并pop
变成b21afc...
. 想象一下,这是仅有的两个子域,然后签名的响应会说“b21afc...
和之间不存在记录b83a88...
”。它再次按字母顺序工作,您可以全部获取它们,但这次您需要先破解每个哈希,然后才能了解子域是什么。
根据我的经验,大多数都启用了 NSEC3 扩展。
区域行走工具
NSEC3Walker进行枚举和破解。我不能保证破解的效率如何,但它绝对只是基于 CPU 的。由于 NSEC3 使用 SHA1(至少最初是这样),因此可能有更好的破解程序。
dnsrecon
似乎也能做到:dnsrecon -z -d example.com
. 我不知道是否有官方网站提供信息,但在 Debian Stretch、Buster 和 Bullseye 中我可以apt install dnsrecon
。
3. 子网中的反向查找
通过猜测一些,您通常会发现相似范围内的响应。如果您知道www.
存在和mail.
存在,并且它们都解决为192.168.3.x
,则可能还有更多。尝试对192.168.3.0-255
范围 (the /24
) 中的所有地址进行反向查找,您可能会找到更多的子域。您可能还想尝试对 IP 地址进行 WHOIS 查询以查找范围的边界(如果它们有自己的块)。
反向查找工具
dnsrecon
可以这样做:
dnsrecon -t rvl -r 192.168.1.0/24
其中-t rvl
表示“类型反向查找”并-r
以 CIDR 表示法传递 IP 范围。我不知道是否有官方网站提供信息,但在 Debian Stretch、Buster 和 Bullseye 中我可以apt install dnsrecon
。
4、DNS服务记录
可以为服务发现设置SRV(服务)记录,例如_sip._tcp.example.com
可以指向sipserver.example.com
端口 5060。由于服务名称(sip
示例中的“”)通常是向 IANA 注册的标准名称,因此我们可以遍历它们。
查询srv记录的工具
dnsrecon
可以这样做:
dnsrecon -t srv -d example.com
它将采用由未知方法选择的现有服务名称的子集,如其手册页 ( man dnsrecon
) 中所述。
5.其他方法
你已经提到了其中的一些。我不会详细介绍,因为它们是不言自明的,或者依赖于在目标上运行的应用程序(例如 FTP),依赖于第三方,或者关于它们真的没什么可说的.
证书透明度日志可能会显示获得了哪些子域证书,例如参见https://crt.sh。
搜索结果可能会显示子域。同样,dnsrecon
可以使用该-t goo
选项执行此操作(专门使用 Google)。
检查相同名称的其他 TLD 可能会发现一些其他变体或 IP 地址。例如,如果example.com
存在,example.org
也可能存在。dnsrecon
也可以使用dnsrecon -t tld -d example.com
.
爬取网站或在其他地方查找参考资料可能会提供提示。(需要帮助:使用哪个工具?)
查看 TLS 证书通常会产生结果。请务必检查 HTTPS、SMTP(S)、FTP(S) 等端口并使用 STARTTLS。
有第三方工具可以列出域中的子域。他们的方法不太清楚,但爬网和历史记录(也许曾经有可能进行域名转移?)通常是其中的一部分。(需要帮助:有什么建议吗?我只记得看到它存在。)
6. 猜测。
最后一个选项只是猜测,无论是通过字典(我建议这样做)还是蛮力。通配符使这变得更加困难,尽管许多工具会尝试检测和解决这个问题。
猜测/暴力破解工具
Fierce 是为此而构建的:https
://github.com/mschwager/fierce
它默认安装在 Kali Linux 中。
正如/u/rook 在该线程的另一个答案中提到的那样,他们为此编写了 Subbrute:https ://github.com/TheRook/subbrute
dnsrecon
可以做到这一点dnsrecon -t brt -d example.com
。用于-f
“在保存记录时过滤出解析为通配符定义的 IP 地址的蛮力域查找记录”(引用其手册页)。您可以传递-D
一个字典文件。
附录:词典
我仍在寻找好的词典(用于猜测/暴力破解),但这里有一些我知道的。请帮我完成这份清单!越大越好,只要它们按可能性排序。