SQL注入原理和基本姿勢


一、SQL注入原理

 

大部分網站采用B/S架構,B/S架構的全稱為Browser/Server,即瀏覽器/服務器結構。B/S架構有三層,

分別為:

第一層表現層:主要完成用戶和后台的交互及最終查詢結果的輸出功能。

第二層邏輯層:主要是利用服務器完成客戶端的應用邏輯功能。

第三層數據層:主要是接受客戶端請求后獨立進行各種運算。

當我們訪問動態網頁時,就會從業務邏輯層向數據訪問層發送數據庫查詢語句,此時我們便可以構造特殊的查詢語句實現對數據的非法訪問。

 

 

 

二、如何判斷是否存在SQL注入漏洞

 

 

通常情況下,可能存在SQL漏洞注入的網址可能形如www.xxxx.com/xxx.php?id=x

一種原始的判斷方法可以加上一個單引號,id=1' 如果頁面返回錯誤,則存在 Sql 注入。 原因是無論字符型還是整型都會因為單引號個數不匹配而報錯。 (如果未報錯,不代表不存在 Sql 注入,因為有可能頁面對單引號做了過濾,這時可以使用判斷語句進行注入)

然后便可以判斷注入類型了

注入類型分為兩種:數字型和字符型

 

 

數字型

當輸入的參 x 為整型時,通常 abc.php 中 Sql 語句類型大致如下: select * from <表名> where id = x 這種類型可以使用經典的 and 1=1 和 and 1=2 來判斷:

 Url 地址中輸入 http://xxx/xxx.php?id= x and 1=1 頁面依舊運行正常,繼續進行下一步。

 Url 地址中繼續輸入 http://xxx/xxx.php?id= x and 1=2 頁面運行錯誤,則說明此 Sql 注入為數字型注入。


 原因如下: 當輸入 and 1=1時,后台執行 Sql 語句:

                select * from <表名> where id = x and 1=1


 沒有語法錯誤且邏輯判斷為正確,所以返回正常。

 當輸入 and 1=2時,后台執行 Sql 語句:

               select * from <表名> where id = x and 1=2

 沒有語法錯誤但是邏輯判斷為假,所以返回錯誤。 我們再使用假設法:如果這是字符型注入的話,我們輸入以上語句之后應該出現如下情況:

              select * from <表名> where id = 'x and 1=1'
              select * from <表名> where id = 'x and 1=2'

 查詢語句將 and 語句全部轉換為了字符串,並沒有進行 and 的邏輯判斷,所以不會出現以上結果,故假設是不成立的。

字符型

當輸入的參 x 為字符型時,通常 abc.php 中 SQL 語句類型大致如下: select * from <表名> where id = ‘x’ 這種類型我們同樣可以使用 and ‘1’=’1 和 and ‘1’=’2來判斷:

 Url 地址中輸入 http://xxx/abc.php?id= x’ and ‘1’=’1 頁面運行正常,繼續進行下一步。
 Url 地址中繼續輸入 http://xxx/abc.php?id= x’ and ‘1’=’2 頁面運行錯誤,則說明此 Sql 注入為字符型注入。

 原因如下: 當輸入 and ‘1’=’1時,后台執行 Sql 語句:

          select * from <表名> where id = 'x' and '1'='1'

 語法正確,邏輯判斷正確,所以返回正確。

 當輸入 and ‘1’=’2時,后台執行 Sql 語句:

          select * from <表名> where id = 'x' and '1'='2'

 語法正確,但邏輯判斷錯誤,所以返回正確。我們同樣可以使用假設法來驗證。

 

 

三、如何進行SQL注入

 

通過以上分析,我們了解了什么是SQL注入,所以,我們現在便可以通過構造出SQL語句來訪問數據庫中的數據。

在有回顯的情況下,便可以使用基本SQL語句來訪問數據庫,例如select * from XXX, (常用表名如user,admin等等)

可以借助工具如sqlmap等等

SQL注入工具已經較為完善,便捷實用,這里不再贅述。

 

本人剛接觸信息安全行業不久,第一次寫博客,如有錯誤,煩請指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM