一、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,結束!