安全漏洞中的屠龍刀 SQL注入

2021-10-04 14:37:27 字數 2689 閱讀 4395

sql注入(sql injection)就是攻擊者將sql語句通過web網頁注入到**後台的資料庫中,從而對資料庫進行控制或者破壞。sql注入是一種主流的攻擊方式。在owasp top 10中,一直穩居第一。

sql注入攻擊的原理就是由於web後台對使用者輸入的資料不進行嚴格的檢查導致的,使得攻擊者可以通過在post/get等web表單、輸入網域名稱或頁面請求的查詢字串中插入惡意的sql命令,並被web伺服器執行,從而繞過php等指令碼的不嚴謹導致的漏洞,與資料庫進行互動,而這些都不是設計者本來的設計意圖。

在進行sql注入的時候我們需要判斷注入點的閉合條件,可將sql注入點大致分為三類:數字型注入點、字元型注入點、搜尋型注入點。

顧名思義就是輸入資料是數字的就是數字型注入,在使用帶關於id啊,歲數啊!就是這種注入點,而由於在弱資料型別中,是沒有資料型別這一概念的(其實有但是不那麼嚴謹),就比如說,php中輸入的資料,php是可以自動推導出資料的資料型別的,而python中是將輸入的資料全部轉換成字串。

例如:

select

*from 表名 where 數字型引數 =

1

字元型注入點就是輸入的資料是字元型,字元型與數字型的區別就是有沒有引號括起來,但是一般情況下數字型也可以括起來,而字元型就行不行了,必須有引號。在使用帶關於姓名,位址,就是這種注入點。

例如:

select

*from 表名 where 字元型引數 =

'text'

搜尋型注入點是在進行資料搜尋時沒過濾搜尋引數,一般在鏈結位址中有"keyword=關鍵字",直接通過搜尋框表單提交。

例如:

select

*from 表名 where 字段 like

'%關鍵字%'

這種分類就是通過判斷向資料庫進行提交用到了那種提交方式,比較常用的有get、posh方式。

這種注入方式是通過get請求方式向伺服器提交資料,注入點位置在get資料部分,在url中顯示。

使用了post請求方式向伺服器提交資料,注入點位置在post資料部分,沒有在url中顯示。

這種注入一般在在 http 請求頭部的某個欄位中,比如ua或者cooke都有可能。

我們可以通過注入後,對返回的執行效果進行分析,可分為布林型,時間型,報錯型。

基於報錯注入是沒有資料的回顯位,也就是說即使構造語句成功,我們也沒有辦法看到資料的顯示,但是這種注入型卻可以通過頁面執行後返回的錯誤資訊顯示在頁面上,這時候我們可以利用這點來構造報錯顯示sql語句。

布林的盲注就是說通過判斷執行後返回效果,即真假兩種答案進行語句猜測。

布林型盲注是由於頁面提交資料在與資料互動是完全沒有在頁面上出現回顯資料,只會出現資料提交正確和錯誤兩種不同頁面(注意區別於報錯型,報錯會出現報錯資訊,而布林型不會)。

例如:a問乙個啞巴事情,對就點頭,錯就搖頭。

場景如下:

a:「朋友,你是不姓張?」

啞巴:搖頭

a:「我知道了,你姓李嗎?」

啞巴:點頭

a:「原來姓李」

然後a開始了新一輪的猜測

時間型的注入遇到的條件更為苛刻,由於互動完成以後**沒有錯誤和正確的頁面的回顯,這種情況我們可以利用條件語句與時間延遲語句進行判斷,關鍵函式是sleep()

聯合查詢注入是可以使用union all的情況下的注入。

堆查詢注入是說可以同時執行多條sql語句。

寬位元組注入就是由於後台機制會給特殊字元新增轉義字元來達到防禦的目的,即%--->\等, 但是當我們輸入%5c%27,即(』),後台對%5c新增轉義%df等於的我們輸入的%5c%27組合就被新增為%df%5c%27,由於%df%5c是乙個寬位元組漢字,語句就會形成縗%27-->縗'

sql注入作為owasp top 10的第一名,說明其危害性是可以說顯而易見的。當攻擊者控制乙個企業的資料庫的時候,可以想象下,我們如果在這個企業上有金額或者姓名、身份證等隱私資料將會被**,這是非常可怕的。

以下是說可能涉及到的危害:

檢測sql一般分兩種:手工檢查、全自動檢測

任何的檢測方式都有利有弊,所以真正厲害的大牛,都是使用半手工半自動。

select

system_user()

--系統使用者名稱

select

user()

--使用者名稱

select

current_user()

--當前使用者名稱

select

session_user()

--連線資料庫用的使用者名稱

select

database()

--資料庫名

select version(

)--mysql資料庫版本

select load_file(路徑)

--mysql讀取本地檔案的函式

select @@datadir

--資料庫路徑

select @@basedir

--mysql安裝路徑

select @@version_compile_os

--作業系統

做乙個網路的維護者,而不是攻擊者!

Web 安全漏洞之 SQL 注入

有人的地方就有江湖,有資料庫存在的地方就可能存在 sql 注入漏洞。在所有漏洞型別中,sql 注入可是說是危害最大最受大家關注的漏洞。簡單說來,sql 注入是通過在使用者可控引數中注入sql語法,破壞原有sql結構,達到編寫程式時意料之外結果的攻擊行為。還是以 thinkjs 為例,假設我們寫了如下...

如何解決sql注入安全漏洞問題

sql注入從表面意思來說就是利用你的sql的不規範性,獲取破壞你的資料庫資訊,一般都會使用第三方工具全面掃瞄尋找注入口。那麼如何防護呢,主要從四個層面來談談 一 前端對特殊字元進行過濾 前端頁面是和使用者交流的視窗,但是魚龍混雜的使用者中你也不知道誰不懷好意,所以要做到對所有需要使用者手動輸入的地方...

Sql語句密碼驗證的安全漏洞

今天在網上看到乙個文件現在摘了下來。sql語句作為國際標準的資料庫查詢語句,在各種程式設計環境中得到了廣泛的應用。作為乙個成熟 穩定的系統,使用者登陸和密碼驗證是必不可少的。筆者在平時的程式設計工作中發現,許多程式設計師在用sql語句進行使用者密碼驗證時是通過乙個類似這樣的語句來實現的 sql se...