您的網域是否有透漏訊息給駭客?-DNS的偵查
DNS的查詢服務可以讓我們直接或是間接知道網路主機的資訊,
例如組織、IP位址、伺服器名稱、伺服器類型、位置等。
這些資訊當然也會間接被駭客使用。
這篇文章就是討論DNS會間接告訴駭客哪些資訊與相關的查詢工具。
DNS查詢 NsLookUp
可以用簡單的指令 NSlookUP查詢該DNS 的位址資訊
root@a:~# nslookup > www.google.com |
MX Queries
如何得知該伺服器是用來當Mail Server呢?
可以將伺服器查詢類型指定為 MX,就可以知道該伺服器是否為郵件伺服器
> set type=mx > google.com |
查詢結果如下:
Server: 10.1.1.1 Address: 10.1.1.1#53 Non-authoritative answer: google.com mail exchanger = 12 mail1.google.com google.com mail exchanger = 15 usmail-google.com. |
其中 12 與 15表示郵件傳遞的需要的成本權重。越低越好。
所以我們可以判斷 12 的 mail1.google.com應該是主要郵件伺服器。
另外一個 15 的usmail-google.com有可能是備份郵件伺服器。
NS Queries
除了 MX 郵件伺服器查詢之外,還可以用NS查詢伺服器主機。
> set type=ns > google.com |
得知這些資訊之後,將有助於之後的 Zone Transfer 資訊,以獲取更多其他額外的DNS資訊。
駭客DNS查詢
了解DNS基本查詢之後,接下來我們要討論駭客如何查詢DNS,
原則上有三個方式
- Forward lookup brute force (FQDN查詢IP)
- Reverse lookup brute force (IP反查FQDN)
- Zone transfers (複製整個DNS伺服器資料)
接著說明這三種方式的基本查詢原理與相關程式碼。
Forward lookup brute force
透過 host這個指令查詢 IP位址
#host www.google.com |
我們可以將大量需要查詢的 DNS前置名稱寫成一個文字檔 dns.txt,例如
www www1 www2 firewall cisco smtp pop3 proxy dns |
接著用 linux的 shell script 整批查詢 dnsQuery.sh
#!/bin/bash for name in $(cat dns.txt);do host $name.domainName.com |grep “has address” done |
執行後會得到下列結果
# ./dnsQuery.sh www.domainName.com has address 10.1.1.1 www.domainName.com has address 10.1.1.2 michael.domainName.com has address 10.1.1.3 ns.domainName.com has address 10.1.1.4 |
接著可以用 whois查詢該ip address的相關註冊資訊
# whois 10.1.1.1 |
Reverse lookup brute force
# host 216.200.241.66 |
從IP 位址反查 FQDN
我們就可以寫一個小程式,讓特定範圍的IP address利用DNS查詢
#!/bin/bash echo “Please enter Class C IP network range:” echo “eg: 196.10.1” read range for ip in `seq 1 254`;do host $range.$ip |grep “name pointer” |cut -d” ” -f5 done |
DNS Zone Transfers
http://en.wikipedia.org/wiki/DNS_zone_transfer
Zone Transfer 相當於複製DNS 資料。由於系統管理員設定的不洽當,導致DNS料可以被複製。
host -t ns hostName.com |
Zone transfer hostName 到 hostName2
host -l hostName.com hostName2.com |
自動化工具 dnsenum.pl
https://github.com/fwaeytens/dnsenum/blob/master/dnsenum.pl
這個工具 dnsenum.pl可以自動化上述查詢。
- Foward Lookup
- Reverse lookup
- Zone Transfer
其它DNS 查詢Python範例
http://www.dnspython.org/examples.html
Google Mail Python範例程式
如何透過Google搜尋,將特定網域的 email 電子郵件地址都找出來呢?
可以參考下列 python程式。執行
Python GoogleMail.py google.com |
[pastacode lang=”python” message=”” highlight=”” provider=”manual”]
#!/usr/bin/python
import sys
import re
import string
import httplib
import urllib2
def StripTags(text):
finished = 0
while not finished:
finished = 1
start = text.find("<")
if start >= 0:
stop = text[start:].find(">")
if stop >= 0:
text = text[:start] + text[start+stop+1:]
finished = 0
return text
if len(sys.argv) != 2:
print "\nExtracts emails from Google results.\n"
print "\nUsage: ./goog-mail.py <domain>\n"
sys.exit(1)
domain_name=sys.argv[1]
d={}
page_counter = 0
try:
while page_counter < 50 :
results = 'http://groups.google.com/groups?q='+str(domain_name)+'&hl=en&lr=&ie=UTF-8&start=' + repr(page_counter) + '&sa=N'
request = urllib2.Request(results)
request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)')
opener = urllib2.build_opener()
text = opener.open(request).read()
emails = (re.findall('([\w\.\-]+@'+domain_name+')',StripTags(text)))
for email in emails:
d[email]=1
uniq_emails=d.keys()
page_counter = page_counter +10
except IOError:
print "Cannot connect to Google Groups."+""
page_counter_web=0
try:
while page_counter_web < 50 :
results_web = 'http://www.google.com/search?q=%40'+str(domain_name)+'&hl=en&lr=&ie=UTF-8&start=' + repr(page_counter_web) + '&sa=N'
request_web = urllib2.Request(results_web)
request_web.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)')
opener_web = urllib2.build_opener()
text = opener_web.open(request_web).read()
emails_web = (re.findall('([\w\.\-]+@'+domain_name+')',StripTags(text)))
for email_web in emails_web:
d[email_web]=1
uniq_emails_web=d.keys()
page_counter_web = page_counter_web +10
except IOError:
print "Cannot connect to Google Web."+""
for uniq_emails_web in d.keys():
print uniq_emails_web+""
[/pastacode]