【问题标题】:DiG transfer fails with axfr optionsDiG 传输因 axfr 选项而失败
【发布时间】:2013-06-17 10:31:45
【问题描述】:

出于测试目的,我尝试使用this method 获取为域设置的所有DNS 记录的列表。

这行得通:

root@cs:/# dig @nameserver domain

; <<>> DiG 9.9.2-P1 <<>> @nameserver domain
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32999
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;domain.           IN      A

;; ANSWER SECTION:
domain.    3600    IN      A       my-IP

;; Query time: 2 msec
;; SERVER: my-IPv6-IP-(I-think)
;; WHEN: Thu Jun 20 16:03:05 2013
;; MSG SIZE  rcvd: 83

但是,当我按照关于服务器故障(以及整个网络)的答案中的建议将axfr 添加到命令中时,它会失败:

root@cs:/# dig @ns1.transip.nl changeyourschool.nl axfr

; <<>> DiG 9.9.2-P1 <<>> @ns1.transip.nl changeyourschool.nl axfr
; (2 servers found)
;; global options: +cmd
; Transfer failed.

为什么会这样,更重要的是,如果失败,我如何获得完整的 DNS 记录列表?

【问题讨论】:

    标签: shell command-line dns dig


    【解决方案1】:

    这是为什么,我不知道,但您可以使用它来获取所有 DNS 记录:

    root@cs:/# dig google.com ANY +nostat +nocmd +nocomments
    
    ; <<>> DiG 9.9.2-P1 <<>> google.com ANY +nostat +nocmd +nocomments
    ;; global options: +cmd
    ;google.com.                    IN      ANY
    google.com.             56328   IN      NS      ns4.google.com.
    google.com.             56328   IN      NS      ns2.google.com.
    google.com.             56328   IN      NS      ns1.google.com.
    google.com.             56328   IN      NS      ns3.google.com.
    ns4.google.com.         85545   IN      A       216.239.38.10
    ns1.google.com.         85545   IN      A       216.239.32.10
    ns3.google.com.         57402   IN      A       216.239.36.10
    ns2.google.com.         85545   IN      A       216.239.34.10
    

    +nostat+nocmd+nocomments的添加可以省略,但减少无用的输出。

    【讨论】:

    • 区域传输(axfr 请求)旨在跨一组 DNS 服务器复制 DNS 数据库。因此,通常只允许二级(从)名称服务器的 IP 地址进行区域传输。这样的措施减少了 DNS 主服务器上的负载。
    • anyaxfr 不一样。 any 只请求当前主机的记录。 axfr 请求该主机的整个区域信息。
    【解决方案2】:

    Keelan 的解决方案对我不起作用。

    对我有用的是一个两步过程(在 Linux 和 Windows 上)。

    第一步类型:

    dig ns google.com

    google.com 是感兴趣的域。

    这返回了一个名称服务器列表,例如:

    ns1.google.com.         60      IN      A       216.239.32.10
    

    第二步类型:

    dig ns1.google.com google.com any

    ns1.google.com 是域的名称服务器(在步骤 1 中找到),google.com 是感兴趣的域。

    这产生了如下结果:

    google.com.             31335   IN      NS      ns4.google.com.
    google.com.             31335   IN      NS      ns2.google.com.
    google.com.             31335   IN      NS      ns3.google.com.
    google.com.             59      IN      SOA     ns1.google.com. dns-admin.google.com. 1579113 7200 1800 1209600 300
    google.com.             60      IN      A       216.58.220.142
    google.com.             2251    IN      TXT     "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all"
    google.com.             31335   IN      NS      ns1.google.com.
    google.com.             185     IN      AAAA    2404:6800:4006:800::200e
    

    希望这会有所帮助。如果没有,您可以随时尝试:http://www.whois.com.au/whois/dns.html

    【讨论】:

    • 服务器愿意发布的记录集合与区域传输完全不同。
    • 您是对的,但是如果您查看 OP 目标,他会说“我正在尝试获取为域设置的所有 DNS 记录的列表”...好点,但我不认为我应该投反对票。
    【解决方案3】:

    就像您链接到的答案所解释的那样,惯例是禁止使用 axfr 命令,但受信任的对等方除外。

    如果禁用区域传输,您只能通过猜测来获得区域内主机的大致列表,即基本上是字典攻击。维护良好的网站也将采取措施来缓解这种做法。

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多