DNS區域傳送漏洞實驗以及二級域名爆破html
目錄:web
1.DNS服務器的域傳送漏洞(nslookup交互式、非交互式、批處理三種方式)windows
2.寫個二級域名爆破腳本服務器
1、DNS服務器的域傳送漏洞網絡
實驗環境:多線程
服務端:Windows2008 安裝DNS服務(建立A記錄),安裝IIS服務(搭建一個站點)app
客戶端:win10(DNS設置爲windows 2008的IP地址)測試
實驗步驟:網站
1、服務端搭建一個網站搜索引擎
1.服務端搭建一個網站並設置默認主頁
2.服務端設置DNS,並建立一個主機記錄
3.客戶端測試網站以及DNS建立的主機記錄(經過主機名訪問)
經過下圖能夠說明,網站搭建無缺以及DNS解析正常
4.檢查服務端是否開啓「區域傳送」,能夠看到下圖沒有開啓DNS區域傳送
5.客戶端使用nslookup查看DNS記錄,能夠看到www. hnuahe.edu.cn解析的DNS記錄
6.看看是否存在DNS區域傳送漏洞,列出hnuahe.edu.cn的全部二級域名
7.從上圖能夠看到目標不存在DNS傳送漏洞,那麼咱們就在windows 2008開啓區域傳送,並不作任何限制並再建立幾條主機記錄,方便下面測試實現效果,見下圖
8.再在客戶端測試是否存在區域傳遞漏洞,咱們能夠看到幾個主機記錄,說明存在DNS區域傳送漏洞
9.剛纔的實驗實在交互式模式下測試DNS服務器是否存在域傳送漏洞, 爲了可以非交互式運行,能夠經過管道來實現。
echo ls (要列出的域名) | nslookup
#注:nslookup也能夠指定DNS服務器 echo ls (要列出的域名) | nslookup – (DNS服務器)
10.也能夠經過批處理來實現非交互式測試DNS服務器是否存在域傳送漏洞
編寫批處理文件:ls.bat
Echo ls %1 | nslookup - %2 #批處理經過%來得到命令行傳遞來的參數
注: 爲了測試dns.nwpu.edu.cn服務器,能夠執行ls.bat hnuahe.edu.cn www.hnuahe.edu.cn。 批處理中:
1) %1表明第一個參數,也即hnuahe.edu.cn
2) %2表明第二個參數,即www.hnuahe.edu.cn
3) Echo是回聲命令,原文輸出傳入的參數內容
4) 「|」是管道符號,做用是把前一個命令執行的結果傳給後一個命令。所以:執行ls.bat hnuahe.edu.cn www.hnuahe.edu.cn,等價於執行echo ls hnuahe.edu.cn | nslookup – www.hnuahe.edu.cn。
5) nslookup - www.hnuahe.edu.cn是指定DNS服務器爲www.hnuahe.edu.cn
能夠看到經過批處理來執行測試出來DNS服務器存在域傳送漏洞
2、二級域名爆破
當咱們在查找某個域名的有效子域名時,咱們一般須要使用子域名枚舉這項技術。可是,除非DNS服務器暴露了完整的DNS空間(涉及到AXFR協議),不然咱們真的很難拿到目標域名的子域名列表。目前主要的技術是使用一個經常使用域名的字典,並經過對每個域名嘗試進行解析來查找子域名。雖然這種方法在某些狀況下很是有效,可是對於那些名字很是奇怪或罕見的域名來講,這種方法就沒多大用了。
固然了,查找子域名也能夠經過網絡爬蟲,以及搜索引擎(經常使用,由於更加高效)
代碼以下: #注意須要本身準備一個字典
#進行暴力破解DNS二級域名 #利用nslookup 域名 循環嘗試
import os from threading import Thread import time #加載字典
with open("C://Users//admin//Desktop//dnsyuming_dict.txt") as f: nlist=f.readlines() #print(nlist)
bz=0 #作標誌位,用於後面的結束循環讀取字典
rlist=[] def f(astr): global bz cmd="nslookup %s.hnuahe.edu.cn"%astr #這裏能夠修改
result=os.popen(cmd).read() if result.count("Address")>1: #nslookup 執行成功返回的字符串中有兩個"Address",失敗只有返回一個
rlist.append(astr+".hnuahe.edu.cn") #把nslookup 執行成功獲得的二級域名加入到列表中
bz+=1
if __name__=="__main__": print("掃描開始:") ts=[] #線程池
for i in nlist: t=Thread(target=f,args=(i.strip(),)) ts.append(t) t.start() #開啓多線程
for i in ts: t.join() while 1: if bz==len(nlist): #若是標誌位和字典的長度相等,則退出循環
break time.sleep(1) print("一共掃描到%d個結果:"%len(rlist)) print(rlist) print("掃描結束!")
運行效果以下:
--------------------------------------------------------------------------------------------------
DNS安裝與配置,請參考:https://www.cnblogs.com/yuzly/p/10474146.html
web安裝與配置,請參考:https://www.cnblogs.com/yuzly/p/10459272.html