SQL Injection(SQL注入)

2021-09-20 16:03:14 字數 1468 閱讀 6995

一、sql injection的原理 

sql injection的實現方法和破壞作用有很多,但萬變不離其宗,其原理可以概括為一句話 :sql injection就是向伺服器端提交事先準備好的資料,拼湊出攻擊者想要的sql語句,以改變資料庫操作執行計畫。 

這句話主要包含這麼三層意思: 

1.攻擊者通過何種途徑注入? 

存在sql injection漏洞的地方都是應用程式需要根據客戶端環境構造sql語句的地方。由此可以推論,只要存在"客戶端資料替換預定義變數"的地方,就有可能被注入。客戶端提交資料可以有很多種方式:get,post,client-agent,cookie,server enviroment... 

2.攻擊者為什麼可以將它想要的語句"注入"? 

因為伺服器端應用程式採用拼湊(請特別留意這個詞)sql語句的方式,這使得攻擊者有機會在提交的資料中包含sql關鍵字或者運算子,來構造他們想要的語句。

3.sql injection最終結果是什麼? 

改變資料庫操作執行計畫。 

這個結果不一定是惡意的,只要你的sql語句沒有按照你預期的計畫(plan)執行,那麼就 可以視為被注入了,不管提交資料的人是不是惡意的。

設有這樣的sql語句: 

update

`tablename` 

set`columnname1` = 

" $client_submit_data "

where

`pk_id` = 

'1234'

假設這個操作是要更新一篇文章的標題,很多人是不是會這麼構造sql語句?我們看看$cl ient_submit_data包含引號的情況,令

$client_submit_data

= '誰能告訴我"sql injecti on"是什麼?'

那麼sql語句將被拼湊成這樣: 

update

`tablename` 

set`columnname1` = 

"誰能告訴我"

sql injection

"是什麼?"

where

`pk_id` = 

'1234'

執行結果很明顯,將執行這樣的語句:

update

`tablename` 

set`columnname1` = 

"誰能告訴我"

附帶:php防注入的最簡單函式

$_post

= sql_injection(

$_post

); $_get

= sql_injection(

$_get

); function

sql_injection(

$content) 

} else } 

return

$content

; } 

SQL Injection(SQL注入)

sql注入,是指攻擊者通過注入惡意的sql命令,破壞sql查詢語句的結構,從而達到執行惡意sql語句的目的。sql注入漏洞的危害是巨大的,常常會導致整個資料庫被 脫褲 儘管如此,sql注入仍是現在最常見的web漏洞之一 sql 注入分類 按sqlmap中的分類來看,sql注入型別有以下 5 種 un...

時間盲注手注

基於時間的盲注 時間的概念 使用特定函式讓資料庫去執行,通過自己的設定,來檢視資料庫是否get到我們的請求 函式sleep 設定資料庫的延時或者暫停的時間 函式limit 0,1 限制第乙個的第乙個字元 函式mid 1,1 從第乙個字元開始擷取,只擷取乙個 函式benchmark 引數一,引數二 第...

布林盲注手注

布林盲注 mid str,1,3 字串擷取 意思就是把str這個字串從第乙個字串開始,擷取前三個顯示 substr 這個函式和上面的用法一樣,也是用來擷取字串的 ord 轉換成ascii碼 length 統計長度 version 是檢視資料庫版本 database 檢視當前資料庫名 user 檢視當...