SQL注入——聯合查詢和報錯注入
阿新 • • 發佈:2019-01-30
1.別人可能用一個括號將要查詢的內容闊在一起了 可以使用)將其閉合2.還有人可能過濾掉了關鍵字可以使用如下方法anandd selecselectt如果URL中把=號過濾掉了可以使用like進行模糊查詢報錯注入中sql裡 0x3a表示一個冒號具體用法and (select 1 from (select count(*),concat((select count(schema_name) from information_schema.schemata),0x3a,concat(floor(rand(0)*2),user()))x from information_schema.tables group by x)a)一、聯合查詢首先放一張聯合查詢的思維導圖在使用聯合查詢之前,我們應該先搞明白在什麼情況下,我們選擇使用聯合查詢注入前提條件:頁面上有顯示位顯示位的解釋:在一個網站的正常頁面,服務端執行SQL語句查詢資料庫中的資料,客戶端將數 據展示在頁面中,這個展示資料的位置就叫顯示位。舉個例子:紅線標出的就是從資料庫中輸出的資料知道了在什麼情況下能夠使用聯合注入之後我們來看一看聯合查詢注入是如何實現的1.判斷有無注入點我們可以在url後面加入 and 1=1 --+ 執行然後再寫上 and 1=2 --+ 執行,檢視頁面是否回顯不同(回顯不同說明這是一個整型注入),如果回顯相同則可能存在字元注入(執行步驟2)2. 在引數後面加上一個 ' 看頁面回顯是否相同單引號判斷‘ 顯示資料庫錯誤資訊或者頁面回顯不同(整形,字串型別判斷)3.\為轉義符4.-1/+1回顯上一個或下一個頁面(用於整型判斷)判斷是整形注入還是字元型注入數字型注入與字元型注入的最大去區別在於數字型不需要閉合,而字元型需要引號閉合select * from table where id = 1 數字型select * from table where username = ‘admin’ 字元型+知道了是整型還是字元型注入之後我們使用under by 函式來判斷該表裡有幾列具體用法: under by 1under by 2under by n如果頁面顯示正常,說明列數大於等於n如果頁面顯示不正常,說明列數小於nunion的作用是將兩個或多個select語句查詢語句結果合併起來1.UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔2. UNION中的每個查詢的列數必須相同3. UNION會從查詢結果集中自動去除了重複行聯合查詢的利用前提頁面有顯示位在一個網站的正常頁面,服務端執行SQL語句查詢資料庫中的資料,客戶端將數 據展示在頁面中,這個展示資料的位置就叫顯示位聯合注入的手注流程 使用group_concat() 函式可以讓查詢獲得的資料組成一行顯示例子:select group_concat(SCHEMA_NAME) from information_schema.SCHEMATAcount()函式用於統計個數(類似於表的個數,資料庫的個數等等)例子:select count(SCHEMA_NAME) from information_schema.SCHEMATAconcat()函式可以將多個字串拼接在一起concat('^_^','chao',^_^')輸出結果: ^_^chao^_^獲取資料庫中的所有資料庫名,表名,列名,欄位名常用指令select schema_name from information_schema.schemata (獲取資料庫名)select table_name from information_schema.tables (獲取表名)select column_name from information_schemata.columns (獲取所有列名)select 列名 from 資料庫名.表名報錯注入 報錯注入應用的前提條件頁面上沒有顯示位,但是有SQL語句執行錯誤資訊輸出報錯注入思維導圖:SQL報錯例項一般情況下SQL的報錯資訊是不會顯示在頁面中的只有在php.ini 進行如下配置display_errors=On (開啟PHP錯誤回顯)SQL報錯資訊才會被顯示在頁面上常用的報錯語句模板:1. 通過floor報錯and (select 1 from (select count(*),concat((payload),floor (rand(0)*2))x from information_schema.tables group by x)a)其中payload為你要插入的SQL語句需要注意的是該語句將 輸出字元長度限制為64個字元 2. 通過updatexml報錯and updatexml(1,payload,1)同樣該語句對輸出的字元長度也做了限制,其最長輸出32位並且該語句對payload的反悔型別也做了限制,只有在payload返回的不是xml格式才會生效3. 通過ExtractValue報錯and extractvalue(1, payload)輸出字元有長度限制,最長32位。報錯注入思維導圖