SQL注入與防禦研究

本文持續更新。爲SQL注入攻擊與防禦第二版讀後感

第一章

SQL注入產生過程:

1.字符處理不當

       '作爲分界線。

2.類型處理不當

       數字型,沒加單引號,直接可繼續執行命令。 LOAD_FILE, SELECT INTO OUTFILE

3.查詢語句組裝不當

       $SQL = "SELECT". $_GET["column1"]. ",". $_GET["column2"]. ",".$_GET["column3"]. "FROM". $_GET["table"];

       可直接使用user,password替換,得到數據

4.錯誤處理不當

       SQLserver打印錯誤日誌時對語句進行拼接處理,導致SQL惡意代碼的繼續執行

5.多個提交處理不當

       這個也算是邏輯漏洞,step1檢查了的數據,step2不檢查,如果存在越權等可造成SQL注入。

數據庫配置的不安全之處,主要是權限控制的問題,應該遵守最低權限的原則。

mysql快速查表,可以利用INFORMATION_SCHEMA

SQLserver可以利用INFORMATION_SCHEMA,sysobjects 、 sysindexkeys 、 sysindexes 、 syscolumns 、systypes進行快速查表,SQLserver2005後引入了名爲sys.*的目錄視圖,並限制用戶只能訪問擁有相應訪問權限的對象。所有的 SQL Server 用戶均有權訪問數據庫中的表並可以查看錶中的所有行,而不管用戶是否對錶或所查閱的數據擁有相應的訪問權限。

Oracle則提供了ALL_TABLES 、 ALL_TAB_COLUMNS等進行全局查看。以 DBA_ 開頭的視圖顯示數據庫中的所有對象,但是要有DBA權限才行。

example:

--Oracle 語句,列舉當前用戶可訪問的所有表
SELECT OWNER, TABLE_NAME FROM ALL_TABLES ORDER BY TABLE_NAME;
--MySQL 語句,列舉當前用戶可訪問的所有表和數據庫
SELECT table_schema, table_name FROM information_schema.tables;
--MSSQL 語句,使用系統表列舉所有可訪問的表
SELECT name FROM sysobjects WHERE xtype = 'U';
-- MSSQL 語句,使用目錄視圖列舉所有可訪問的表
SELECT name FROM sys.tables;

第二章

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章