sql
注入即是指web
應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web
應用程式中事先定義好的查詢語句新增額外的sql
語句,從而實現非法操作,獲取資料庫資料,伺服器提權等,很多機構將sql
注入作為第一危險的安全漏洞。
sql
注入攻擊是通過操作輸入來修改sql
語句,用以達到執行**對web
伺服器進行攻擊的方法。簡單的說就是在post/get
表單、輸入網域名稱或頁面請求的查詢字串中插入sql
命令,最終使web
伺服器執行惡意命令的過程。
sql
注入語句一般都嵌入在普通的http
請求中,比較難過濾,攻擊者可以不斷調整攻擊的引數,導致sql
注入變種極多,而且網際網路上有很多sql
注入工具,不需要專業知識也能自如運用。
首先建立簡單表,在user_info
中寫入賬號acc
與密碼pwd
,qqq
表用來測試drop
create
table
`user_info`
(`id`
int(11)
notnull
auto_increment
,`account`
varchar(20
)not
null
,`password`
varchar(20
)not
null
,primary
key(
`id`))
engine
=innodb
auto_increment=2
default
charset
=gbk;
create
table
`qqq`
(`id`
int(11)
notnull
,primary
key(
`id`))
engine
=innodb
default
charset
=gbk;
加入後端查詢資料庫使用此sql
進行查詢,通過使用者輸入的資料進行拼接,查詢結果等於1
即作為登入成功,此查詢結果明顯等於1
select
count(*
)from user_info where account =
'acc'
and password =
'pwd'
假如使用者傳入的賬號為'or 1=1#
,後端並未過濾特殊字元,那麼這條查詢就出現了問題,此結果明顯也能查出count(*)
結果為1
,or
操作的1=1
永遠為true
,#
後邊的內容則被注釋掉了
select
count(*
)from user_info where account =
''or1=
1#' and password = 'pwd'
甚至我們可以通過注入來drop
表,同樣通過傳入不正常的賬號';drop table qqq#
,執行後qqq
錶即被drop
select
count(*
)from user_info where account ='';
drop
table qweqwe#' and password = 'pwd'
首先進行sql
注入點探測,通過適當的分析應用程式,可以判斷什麼地方存在sql注入點。通常只要帶有輸入提交的動態網頁,並且動態網頁訪問資料庫,就可能存在sql注入漏洞。如果此時後端使用拼接查詢的方式執行sql
,那麼就有可能被注入。
帶內注入:觀察後端是否將資料庫錯誤資訊向前端返回,從顯示的錯誤訊息中獲取有關資料庫的資訊;使用union all
將被盜資訊與合法資訊鏈結起來進行嘗試,兩者都是試錯法,可以檢測到錯誤。
盲注入:推理注入,盲注入攻擊不會直接從目標資料庫中顯示資料;相反,攻擊者會仔細檢查行為中的間接線索。http
響應中的詳細資訊,某些使用者輸入的空白網頁以及資料庫響應某些使用者輸入需要多長時間,這些都可以是線索,具體取決於攻擊者的目標。
帶外注入:這種攻擊有點複雜,攻擊者會製作sql語句,這些語句在呈現給資料庫時會觸發資料庫系統建立與攻擊者控制的外部伺服器的連線。以這種方式,攻擊者可以收集資料或可能控制資料庫的行為。
判斷字段長度,判斷欄位回顯位置,判斷資料庫資訊,查詢資料庫表名,查詢資料庫表名,查詢欄位名,再根據這些資訊構建注入sql
進行注入,登入後台,資料盜取,進行伺服器提權等操作。
對使用者進行分級管理,嚴格控制使用者的許可權,對於普通使用者,禁止給予資料庫建立、刪除、修改等相關許可權,只有系統管理員才具有增、刪、改、查的許可權。
攔截正規表示式匹配的非正常的請求,例如\s+(or|xor|and)\s+.*(=|<|>|'|")
、select.+(from|limit)
、(?:(union(.*?)select))
、(?:(?:current_)user|database|schema|connection_id)\s*\(
等等
將提交的敏感字元進行過濾,例如'
、"
、:
、\
、;
等等
確定變數的資料型別,例如對傳入的id
檢測為int
型,傳入郵箱為嚴格的郵箱格式
避免直接向使用者顯示資料庫錯誤,攻擊者可以使用這些錯誤訊息來獲取有關資料庫的資訊。
採用預編譯語句集,它內建了處理sql
注入的能力,極大地提高了安全性
對訪問資料庫的web
應用程式使用web
應用程式防火牆waf
,它可以幫助識別sql注入嘗試
定期測試與資料庫互動的web
應用程式,且將資料庫更新為最新的可用修補程式,防止舊版本的漏洞利用
SQL注入(三) sql注入 bugku
原理 mysql 在使用 gbk 編碼的時候,會認為兩個字元為乙個漢字,例如 aa 5c 就是乙個 漢字 前乙個 ascii碼大於 128 才能到漢字的範圍 我們在過濾 的時候,往往利用的思 路是將 轉換為 換的函式或者思路會在每一關遇到的時候介紹 因此我們在此想辦法將 前面新增的 除掉,一般有兩種...
SQL注入 報錯注入
乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...
SQL注入 報錯注入
sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...