SQL注入測試


簡介

SQL 注入是一種專門針對SQL語句的攻擊方式。通過把SQL命令插入到web表單提交、輸入域名或者頁面請求的查詢字符串中,利用現有的程序,來非法獲取后台的數據庫中的信息。在web的測試中涉及到的會比較多些。

注入原理

存在注入的原因是后台在編寫程序時,沒有對用戶輸入的數據做過濾。 例:


1、用戶在某個輸入框提交的參數是123。

 瀏覽器提交的URL為: http://www.xxx.com/index.php?id=123   

服務器后台執行SQL語句:select * from table1 where id = 123  

此時是沒有任何影響的。

 

2、 如果用戶提交的參數是 123;drop table   

服務器后台執行SQL語句: select * from table1 where id =123 ; drop table  

相當於后台執行了兩條SQL語句,查表,並且把table刪除, 從而導致了SQL注入

 

檢測注入的方法

目前主要有兩種檢測方式:

一、手工注入檢測流程:

1.  判斷是否存在注入點 

www.abc.com/index.php?id=2

www.abc.com/index.php?id=2 and 1=1

www.abc.com/index.php?id=2 and 1=2

第2條返回正常,

第1,3條返回不正常說明id參數存在注入漏洞

2.  判定是否存在admin表

www.abc.com/index.php?id=2 and exists(select * from admin) 

返回正常,存在admin表

 

3.  猜admin表中的字段名

www.abc.com/index.php?id=2 and exists(select username from admin)

返回正常 表示admin表存在username字段

 

 4.  檢測其他sql操作

 

二、工具檢測:

sqlmap:  sqlmap是一個開源的滲透測試工具,可以用來進行自動化檢測,利用SQL注入漏洞,獲取數據庫服務器的權限。

 

1. 下載地址

https://github.com/sqlmapproject/sqlmap.git 

 

2. 常用命令

 

 

 

測試

以一個sqlmap檢測URL為例:

 

1. 檢測過程:     

 

 2. 檢測結果:

 

可知該次注入檢測沒有成功。

 

防止sql注入代碼:(1)修改php.ini magic_quotes_gpc=Off,打開開關,不常用;

                             (2)獲取到參數后,調用$username = addslashes($username);

                                     說明:string addslashes ( string $str ) 返回字符串,該字符串為了數據庫查詢語句等的需要在某些字符前加上了反斜線。這些字符是單引號(')、雙引號(")、反斜線(\)與 NUL( NULL 字符)。 舉例:用戶在name中輸入' or 1=1#,其中#是sql中的注釋,#會過濾sql中的where校驗等,而or 1=1恆真,就會造成返回所有用戶列表。

                             (3)mysql_escape_string();原理和(2)差不多;

總結:

登錄防sql注入的方法: 1、修改php.ini配置文件中magic_quotes_gpc=On (用單引號引用用戶輸入的數據)(不實用)

                                     2、使用函數addSlashes() (在預定義字符之前添加反斜杠)

                                     3、使用mysql_escape_string() (在SQL語句特殊字符前添加反斜杠)

拓展:

https://www.oschina.net/translate/sql-injection-walkthrought


免責聲明!

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



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