ฉันจะบันทึกรายการ DNS ทั้งหมดได้อย่างไร


188

มีวิธีใดบ้างที่ฉันสามารถแสดงรายการระเบียน DNS ทั้งหมดสำหรับโดเมนได้

ฉันรู้เกี่ยวกับสิ่งต่าง ๆ เช่นการขุดและการค้นหา แต่พวกเขาไปไกลเท่านั้น ตัวอย่างเช่นถ้าฉันมีระเบียน A ย่อยเป็น

test A somedomain.co.uk

ถ้าอย่างนั้นโดยเฉพาะฉันขอมันเช่น

dig any test.somedomain.co.uk

ฉันไม่เห็นมัน

มีวิธีใดบ้าง (นอกเหนือจากการดูระเบียนโดยไปที่ผู้จัดการ DNS) เพื่อดูว่าระเบียน DNS ทั้งหมดคืออะไร

คำตอบ:


202

เมื่อคุณสอบถามใด ๆ คุณจะได้รับรายการของระเบียนทั้งหมดในระดับนั้น แต่จะไม่ต่ำกว่า

# try this
dig google.com any

สิ่งนี้อาจส่งคืนระเบียน A ระเบียน TXT ระเบียน NS ระเบียน MX ฯลฯ หากชื่อโดเมนเป็น "google.com" ทุกประการ อย่างไรก็ตามจะไม่ส่งคืนระเบียนย่อย (เช่น www.google.com) แม่นยำมากขึ้นคุณอาจได้รับบันทึกเหล่านี้หากมีอยู่ เซิร์ฟเวอร์ชื่อไม่จำเป็นต้องส่งคืนระเบียนเหล่านี้หากไม่เลือกที่จะทำเช่นนั้น (ตัวอย่างเช่นเพื่อลดขนาดของการตอบกลับ)

AXFR เป็นการถ่ายโอนโซนและมีแนวโน้มว่าคุณต้องการ อย่างไรก็ตามโดยทั่วไปจะมีข้อ จำกัด และไม่สามารถใช้งานได้เว้นแต่คุณจะควบคุมโซน โดยทั่วไปคุณจะทำการถ่ายโอนโซนโดยตรงจากเซิร์ฟเวอร์ที่มีสิทธิ์ (@ ns1.google.com ด้านล่าง) และมักจะมาจากเนมเซิร์ฟเวอร์ที่ไม่สามารถเผยแพร่ได้ (เซิร์ฟเวอร์ชื่อที่ไม่เปิดเผย)

# This will return "Transfer failed"
dig @ns1.google.com google.com axfr

หากคุณมีการควบคุมของโซนคุณสามารถตั้งค่าเพื่อรับการถ่ายโอนที่ได้รับการป้องกันด้วยคีย์ TSIG นี่เป็นความลับร่วมที่ลูกค้าสามารถส่งไปยังเซิร์ฟเวอร์เพื่ออนุญาตการถ่ายโอน


4
ขอบคุณสำหรับสิ่งนั้น (รวมถึง deltab) คำอธิบายที่ชัดเจนมากยืนยันสิ่งที่ฉันสงสัย - มีให้ แต่ไม่ใช่สำหรับฉัน (เว้นแต่ฉันจะเริ่มตั้งค่าเซิร์ฟเวอร์ชื่อของฉันเอง) เมื่อฉันดูแลโดเมนจำนวนมากมันคงจะดีมากที่ได้เรียกใช้สคริปต์เพื่อรับรายการ DNS ทั้งหมด
Ken

13
เซิร์ฟเวอร์ชื่อ Route53 ของ Amazon ไม่ได้รวม TXT, MX และ SOA เมื่อฉันลองทำสิ่งนี้ หลังจากที่ฉันสอบถามเฉพาะบันทึกเหล่านี้พวกเขาซึ่งรวมอยู่ในคำตอบใด ๆ ดังนั้นเอามันไปด้วยเม็ดเกลือ
ปีเตอร์

ฉันเพิ่งได้รับ "การเชื่อมต่อถูกปฏิเสธ"
niico

1
ข้อมูลจำเพาะไม่เคยถูกตีความอย่างสม่ำเสมอโดยผู้แก้ไขตามความหมายของใด ๆ แน่นอนไม่ได้หมายความว่าทั้งหมด (มีคำขอสำหรับสิ่งนั้น) แม้ว่าบางคน (ไม่มาก) ก็ปฏิบัติเช่นนั้น คนอื่นทิ้งแคชไว้และคนอื่น ๆ ก็ จำกัด เฉพาะบางประเภทเร็กคอร์ด ในยุคปัจจุบัน (2016+) ผู้ให้บริการส่วนใหญ่ปิดการใช้งานใด ๆ (หรือให้คำตอบที่ไร้ประโยชน์) หรือมีแผนจะทำเช่นนั้นเพราะเป็นไดรเวอร์ทั่วไปสำหรับการโจมตีแบบขยายจำนวนมาก
Nick Bastin

1
@NickBastin ฉบับร่างนี้ ( tools.ietf.org/html/draft-ietf-dnsop-refuse-any-06 ) ในงานพยายามที่จะกระชับรูปแบบการตอบกลับสำหรับแบบสอบถามชนิดนี้ นอกจากนี้ยังอภิปรายถึงสาเหตุที่เป็น / ไม่ควรใช้
Patrick Mevzek

29

ฉันได้ปรับปรุงคำตอบของJosh ฉันสังเกตเห็นว่าdigแสดงเฉพาะรายการที่มีอยู่แล้วในแคชของ nameserver ที่สอบถามดังนั้นจึงเป็นการดีกว่าที่จะดึงเนมเซิร์ฟเวอร์ที่มีสิทธิ์ออกจาก SOA (แทนที่จะพึ่งพาเนมเซิร์ฟเวอร์เริ่มต้น) ฉันได้ปิดใช้งานการกรอง wildcard IP เพราะโดยปกติฉันมักจะสนใจการตั้งค่าที่ถูกต้องมากขึ้น

สคริปต์ใหม่รับ-xอาร์กิวเมนต์สำหรับเอาต์พุตที่ขยายและ-s NSอาร์กิวเมนต์เพื่อเลือกเนมเซิร์ฟเวอร์เฉพาะ:dig -x example.com

#!/bin/bash
set -e; set -u
COMMON_SUBDOMAINS="www mail mx a.mx smtp pop imap blog en ftp ssh login"
EXTENDED=""

while :; do case "$1" in
  --) shift; break ;;
  -x) EXTENDED=y; shift ;;
  -s) NS="$2"; shift 2 ;;
  *) break ;;
esac; done
DOM="$1"; shift
TYPE="${1:-any}"

test "${NS:-}" || NS=$(dig +short  SOA "$DOM" | awk '{print $1}')
test "$NS" && NS="@$NS"

if test "$EXTENDED"; then
  dig +nocmd $NS "$DOM" +noall +answer "$TYPE"
  wild_ips=$(dig +short "$NS" "*.$DOM" "$TYPE" | tr '\n' '|')
  wild_ips="${wild_ips%|}"
  for sub in $COMMON_SUBDOMAINS; do
    dig +nocmd $NS "$sub.$DOM" +noall +answer "$TYPE"
  done | cat  #grep -vE "${wild_ips}"
  dig +nocmd $NS "*.$DOM" +noall +answer "$TYPE"
else
  dig +nocmd $NS "$DOM" +noall +answer "$TYPE"
fi

เพิ่มบรรทัดdig -t txt +nocmd $NS "$DOM" +noall +answer(และแก้ไข$DOM) เพื่อตรวจสอบระเบียน TXT ของโดเมน
สูงสุด

19

ในกรณีที่ไม่มีความสามารถในการถ่ายโอนโซนฉันได้เขียนสคริปต์ทุบตีเล็ก ๆ นี้dg:

#!/bin/bash
COMMON_SUBDOMAINS=(www mail smtp pop imap blog en ftp ssh login)
if [[ "$2" == "x" ]]; then
    dig +nocmd "$1" +noall +answer "${3:-any}"
    wild_ips="$(dig +short "*.$1" "${3:-any}" | tr '\n' '|')"
    wild_ips="${wild_ips%|}"
    for sub in "${COMMON_SUBDOMAINS[@]}"; do
        dig +nocmd "$sub.$1" +noall +answer "${3:-any}"
    done | grep -vE "${wild_ips}"
    dig +nocmd "*.$1" +noall +answer "${3:-any}"
else
    dig +nocmd "$1" +noall +answer "${2:-any}"
fi

ตอนนี้ฉันใช้dg example.comเพื่อรับรายการ DNS ที่ดีสะอาดหรือdg example.com xรวมโดเมนย่อยยอดนิยมอื่น ๆ

grep -vE "${wild_ips}"ฟิลเตอร์ออกระเบียนที่อาจจะเป็นผลมาจากรายการ DNS * 10800 IN A 1.38.216.82สัญลักษณ์แทนเช่น $COMMON_SUBDOMANมิฉะนั้นรายการสัญลักษณ์แทนจะทำให้มันดูราวกับว่ามีบันทึกสำหรับแต่ละ

หมายเหตุ: นี่ต้องอาศัยANYคำสั่งซึ่งจะถูกบล็อกโดยบางผู้ให้บริการ DNS เช่น CloudFlare


3
ฉันรู้ว่าวิธีแก้ปัญหานี้ห่างไกลจากอุดมคติ แต่มันช่วยฉันได้หลายครั้งดังนั้นฉันหวังว่ามันจะมีประโยชน์กับคนอื่น
Zaz

เพิ่มdig -t txt +nocmd "$1" +noall +answer(และปรับเปลี่ยน"*.$1"เป็นต้น) เพื่อตรวจสอบระเบียน TXT ของโดเมน
สูงสุด

15

host -adig anyทำงานได้ดีจะคล้ายกัน

เช่น:

$ host -a google.com
Trying "google.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10403
;; flags: qr rd ra; QUERY: 1, ANSWER: 18, AUTHORITY: 0, ADDITIONAL: 0


;; QUESTION SECTION:
;google.com.            IN  ANY

;; ANSWER SECTION:
google.com.     1165    IN  TXT "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all"
google.com.     53965   IN  SOA ns1.google.com. dns-admin.google.com. 2014112500 7200 1800 1209600 300
google.com.     231 IN  A   173.194.115.73
google.com.     231 IN  A   173.194.115.78
google.com.     231 IN  A   173.194.115.64
google.com.     231 IN  A   173.194.115.65
google.com.     231 IN  A   173.194.115.66
google.com.     231 IN  A   173.194.115.67
google.com.     231 IN  A   173.194.115.68
google.com.     231 IN  A   173.194.115.69
google.com.     231 IN  A   173.194.115.70
google.com.     231 IN  A   173.194.115.71
google.com.     231 IN  A   173.194.115.72
google.com.     128 IN  AAAA    2607:f8b0:4000:809::1001
google.com.     40766   IN  NS  ns3.google.com.
google.com.     40766   IN  NS  ns4.google.com.
google.com.     40766   IN  NS  ns1.google.com.
google.com.     40766   IN  NS  ns2.google.com.

11
นี่ไม่ได้ตอบคำถามซึ่งเป็นวิธีการค้นหาระเบียนอื่น ๆ ในโซน DNS ของโดเมนนั่นคือนอกจากนี้ระเบียนทั้งหมดสำหรับโดเมนย่อย นั่นไม่ใช่การบอกว่าhost -aไม่ใช่คำสั่งที่มีประโยชน์ แต่ไม่ได้ทำในสิ่งที่ OP ต้องการ
spikyjt

13
  1. การถ่ายโอนโซนเป็นวิธีเดียวที่จะทำให้แน่ใจว่าคุณมีระเบียนย่อยทั้งหมด หาก DNS ได้รับการกำหนดค่าอย่างถูกต้องตามปกติคุณจะไม่สามารถทำการถ่ายโอนโซนภายนอกได้

  2. scans.ioโครงการมีฐานข้อมูลของระเบียน DNS ที่สามารถดาวน์โหลดและค้นหาโดเมนย่อย ต้องมีการดาวน์โหลดข้อมูล DNS 87GB หรือคุณสามารถลองค้นหาข้อมูลออนไลน์ได้ที่https://hackertarget.com/find-dns-host-records/


12

สำหรับ Windows:

คุณอาจพบว่าจำเป็นต้องตรวจสอบสถานะของระเบียน DNS ของโดเมนของคุณหรือตรวจสอบชื่อเซิร์ฟเวอร์เพื่อดูว่าเซิร์ฟเวอร์ดึงระเบียนใด

  1. เรียกใช้ Windows Command Prompt โดยไปที่ Start> Command Prompt หรือ Run> CMD

  2. พิมพ์ NSLOOKUP แล้วกด Enter เซิร์ฟเวอร์เริ่มต้นถูกตั้งค่าเป็น DNS ท้องถิ่นของคุณที่อยู่จะเป็น IP ท้องถิ่นของคุณ

  3. ตั้งค่าประเภทระเบียน DNS ที่คุณต้องการค้นหาโดยพิมพ์set type=##ที่ ## เป็นประเภทบันทึกจากนั้นกด Enter คุณสามารถใช้ ANY, A, AAAA, A + AAAA, CNAME, MX, NS, PTR, SOA หรือ SRV เป็นประเภทบันทึก

  4. ตอนนี้ป้อนชื่อโดเมนที่คุณต้องการสอบถามแล้วกด Enter .. ในตัวอย่างนี้เราจะใช้ Managed.com

  5. NSLOOKUP จะส่งคืนรายการบันทึกสำหรับโดเมนที่คุณป้อน

  6. คุณยังสามารถเปลี่ยน Name Servers ที่คุณกำลังสอบถามได้ สิ่งนี้มีประโยชน์หากคุณกำลังตรวจสอบข้อมูลก่อนที่ DNS จะเผยแพร่อย่างสมบูรณ์ ในการเปลี่ยนเซิร์ฟเวอร์ประเภทเซิร์ฟเวอร์ชื่อ [เซิร์ฟเวอร์ชื่อ] แทนที่ [เนมเซิร์ฟเวอร์] ด้วยเซิร์ฟเวอร์ชื่อที่คุณต้องการใช้ ในตัวอย่างนี้เราจะตั้งค่าเหล่านี้เป็น NSA.managed.com

  7. เมื่อเปลี่ยนแล้วให้เปลี่ยนประเภทแบบสอบถาม (ขั้นตอนที่ 3) หากจำเป็นจากนั้นป้อนโดเมนใหม่ใหม่ (ขั้นตอนที่ 4)

สำหรับ Linux:

1) ตรวจสอบ DNS Records โดยใช้คำสั่ง Dig Dig ย่อมาจาก groper ข้อมูลโดเมนเป็นเครื่องมือที่มีความยืดหยุ่นสำหรับการสอบถามเซิร์ฟเวอร์ชื่อ DNS มันทำการค้นหา DNS และแสดงคำตอบที่ส่งคืนจากเซิร์ฟเวอร์ชื่อที่ถูกสอบถาม ผู้ดูแลระบบ DNS ส่วนใหญ่ใช้การขุดเพื่อแก้ไขปัญหา DNS เนื่องจากความยืดหยุ่นความง่ายในการใช้งานและความชัดเจนของเอาต์พุต เครื่องมือค้นหาอื่น ๆ มักจะมีฟังก์ชั่นน้อยกว่าการขุด

2) ตรวจสอบระเบียน DNS โดยใช้คำสั่ง NSlookup Nslookup เป็นโปรแกรมสำหรับสืบค้นเซิร์ฟเวอร์ชื่อโดเมนอินเทอร์เน็ต Nslookup มีสองโหมดการโต้ตอบและไม่โต้ตอบ

โหมดการโต้ตอบอนุญาตให้ผู้ใช้ค้นหาเซิร์ฟเวอร์ชื่อสำหรับข้อมูลเกี่ยวกับโฮสต์และโดเมนต่างๆหรือพิมพ์รายการโฮสต์ในโดเมน

โหมดที่ไม่โต้ตอบใช้เพื่อพิมพ์เพียงชื่อและข้อมูลที่ร้องขอสำหรับโฮสต์หรือโดเมน เป็นเครื่องมือบริหารเครือข่ายซึ่งจะช่วยให้พวกเขาตรวจสอบและแก้ไขปัญหาที่เกี่ยวข้องกับ DNS

3) ตรวจสอบระเบียน DNS โดยใช้โฮสต์คำสั่งโฮสต์เป็นเครื่องมือที่ใช้งานง่ายสำหรับการค้นหา DNS โดยปกติจะใช้เพื่อแปลงชื่อเป็นที่อยู่ IP และในทางกลับกัน เมื่อไม่มีการกำหนดอาร์กิวเมนต์หรือตัวเลือกโฮสต์จะพิมพ์สรุปสั้น ๆ ของอาร์กิวเมนต์บรรทัดคำสั่งและตัวเลือก


สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันใน Windows 7 แต่ดูเหมือนจะเป็นรถใน Windows 10 นี่คือสิ่งที่ฉันใช้ในการดีบักระเบียน TXT ใน Windows 10: nslookup -querytype = txt yourdomainnamehere.com
The Coder

11

สิ่งที่คุณต้องการจะเรียกว่าการถ่ายโอนโซน dig -t axfrคุณสามารถขอถ่ายโอนโซนโดยใช้

โซนเป็นโดเมนและโดเมนทั้งหมดด้านล่างที่ไม่ได้รับการแต่งตั้งไปยังเซิร์ฟเวอร์อื่น

โปรดทราบว่าการถ่ายโอนโซนไม่ได้รับการสนับสนุนเสมอไป ไม่ได้ใช้ในการค้นหาปกติเฉพาะในการทำซ้ำข้อมูล DNS ระหว่างเซิร์ฟเวอร์เท่านั้น แต่มีโพรโทคอลอื่น ๆ ที่สามารถใช้สำหรับการนั้น (เช่น rsync บน ssh), อาจมีความเสี่ยงด้านความปลอดภัยจากการเปิดเผยชื่อ, และการตอบสนองการถ่ายโอนโซนจะเสียค่าใช้จ่ายในการสร้างและส่งมากกว่าการค้นหา DNS ปกติ


1

ไม่มีวิธีง่ายๆในการรับระเบียน DNS ทั้งหมดสำหรับโดเมนในอินสแตนซ์เดียว คุณสามารถดูได้เฉพาะเรคคอร์ดเช่นถ้าคุณต้องการเห็นเรคคอร์ด A สำหรับโดเมนที่แน่นอนคุณสามารถใช้คำสั่ง: ขุด a (ประเภทของเรคคอร์ด) domain.com นี่เป็นสิ่งเดียวกันสำหรับระเบียนประเภทอื่น ๆ ทั้งหมดที่คุณต้องการดูสำหรับโดเมนนั้น

หากคุณไม่คุ้นเคยกับอินเตอร์เฟสบรรทัดคำสั่งคุณสามารถใช้ไซต์เช่น mxtoolbox.com ซึ่งเป็นเครื่องมือที่มีประโยชน์มากสำหรับการบันทึกโดเมน

ฉันหวังว่านี้ตอบคำถามของคุณ.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.