sql注入練習,sqli-labs writeup


一、Less-1

 

1.判斷是否存在注入

 

URL中輸入“?id=1”,發現回顯有變化,說明存在注入;

2.判斷閉合字符,注釋后面的內容

輸入“   ?id=1'  ”,回顯為  "1" limit 0,1,其中1’是我們輸入的內容,這時就變成了 ’ ’ 1‘   limit 0,1‘(藍色字體為我們輸入的內容),原單引號是閉合的(閉合是指,符號成對出現)

之前是第一個單引號與最后的單引號閉合,第二個單引號與第四個單引號閉合。現在我們輸入的內容始終是在兩個單引號之間,作為字符串進行處理,所以需要將第二個單引號進行閉合,就在1后面輸入一個單引號,並將后面的內容進行注釋,輸入--+或者%23

這時回顯內容正常

3.判斷列數

使用order by(排序),來判斷有幾列數據,

隨便寫 先寫order by 5,發現回顯錯誤,說明列數是小於5的。

依次試4和3,4的回顯結果與5相同, 發現到3時回顯正確,說明列數為3

4.判斷顯示位(需要將order by刪除)

使用union聯合查詢判斷顯示位。

首先先使union前面的語句為假,這樣就只會顯示union后面的查詢結果,輸入 and 1=2(因為1=2恆為假),或者 id=-1'.

接着輸入union后面的部分,因為union前后查詢的字段數量是一樣的,所以后面select就需要輸入3個字段,結果如下:

發現,只顯示2,3列的數據

 

5.爆數據庫

使用l連接函數group_concat(),此函數是將括號內字段的字段值以逗號作為分隔符打印在一行。

MySQL自帶四個庫,其中information_schema庫下存放着數據庫對象相關概要信息,比如字符集、引擎、數據庫、數據表、視圖、列、權限等,其中有重要的三個表,分別是:

(1)schemata表,存放着MySQL數據庫下所有庫的信息,show databases命令的結果就是來自於這個表。此表有五列,分別是:

catalog_name、schema_name、default_character_set_name、default_collation_name、sql_path,其中schema_name列存儲的就是MySQL數據庫下所有庫的名字(爆數據庫名用到此表);

(2)tables表,此表提供了關於數據庫中的表的信息(包括視圖),重要的兩個列,一是table_schema:表所屬數據庫的名字,二是table_name:表的名字(爆表名就要用到此表)。

(3)columns表,此表提供了表中列的信息,詳細表述了某張表的所有列以及每個列的信息,重要的三個列,一是table_schema:字段所屬數據庫的名字,二是table_name:字段所屬數據表的名字,三是column_name:字段的名字(用此表爆字段名)。

所以爆數據庫的語句是:

union select 1,group_concat(schema_name),3 from information_schema

爆出所有數據庫名稱

 

查詢我們當前所在的數據庫名,我們就用此數據庫來爆其他信息。

使用database()函數,查詢當前數據庫名稱

 

6、爆表名

union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'

發現這些表中有一個users表,這個表一般存放着用戶的一些敏感信息,下一步我們就爆此表的字段。

 

7、爆字段

 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'

發現,這些字段中有username和password這兩個字段,也就是用戶名和密碼,我們現在就爆這個字段的數據內容。

 

8、爆數據

根據以上操作,我們知道了數據庫是security,表示users,字段是username及password,所以我們現在就來包用戶名和密碼。

知道用戶名和密碼就可以進行登錄,如果是管理員用戶名和密碼就更好了。

OK,結束!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM