① sql注入攻擊與防範
關於SQL注入攻擊與防範
隨著網路的普及,關系資料庫的廣泛應用,網路安全越來越重要。下面是我為大家搜索整理了關於SQL注入攻擊與防範,歡迎參考閱讀,希望對大家有所幫助。想了解更多相關信息請持續關注我們應屆畢業生培訓網!
一、 SQL注入攻擊
簡言之,SQL注入是應用程序開發人員未預期地把SQL代碼傳入到應用程序的過程。它由於應用程序的糟糕設計而成為可能,並且只有那些直接使用用戶提供的值構建SQL語句的應用程序才會受影響。
例如:用戶輸入客戶ID後,GridView顯示客戶的全部行記錄。在一個更加真實的案例中,用戶還要輸入密碼之類的驗證信息,或者根據前面的登錄頁面得到用戶ID,可能還會有一些用戶輸入關鍵信息的文本框,如訂單的日期范圍或產品名稱。問題在於命令是如何被執行的。在這個示例中,SQL語句通過字元串構造技術動態創建。文本框txtID的值被直接復制到字元串中。下面是代碼:
在這個示例中,攻擊者可以篡改SQL語句。通常,攻擊的第一個目標是得到錯誤信息。如果錯誤沒有被恰當處理,底層的信息就會暴露給攻擊者。這些信息可用於進一步攻擊。
例如,想像一下在文本一下在文本框中輸入下面的字元串會發生什麼?
ALFKI'OR '1'='1
再看看因此生成的完整SQL語句:
這條語句將返回所有的訂單記錄,即便那些訂單不是由ALFDI創建,因為對每一行而言而有信1=1總是true。這樣產生的後果是沒有顯示當前用戶特定信息,卻向攻擊者顯示了全部資料,如果屏幕上顯示的是敏感信息,如社會保險號,生日或信用卡資料,就會帶來嚴重的問題。事實上,這些簡單的SQL注入往往是困擾那些大型電子商務公司的麻煩。一般而言,攻擊點不在於文本框而在於查詢字元串(可被用於向資料庫傳送值,如列表頁向詳細信息頁面傳送唯一標識符)。
還可以進行更復雜的攻擊。例如,攻擊者可以使用兩個連接號(--)注釋掉SQL語句的剩餘部分。這樣的攻擊只限於SQL Server,不過對於其他類型的資料庫也有等效的辦法,如MySql使用(#)號,Oracle使用(;)號。另外攻擊者還可以執行含有任意SQL語句的批處理命令。對於SQL Server提供程序,攻擊者只需在新命令前加上分號(;)。攻擊者可以採用這樣的方式刪除其他表的內容,甚至調用SQL Server的系統存儲過程xp_cmdshell在命令執行任意的程序。
下面是攻擊者在文本框中輸入的,它的攻擊目標是刪除Customers表的全部行。
LUNCHUN』;DELETE*FROM Customers--
二、防範
如何預防SQL注入攻擊呢?需要記住幾點。首先,使用TextBox.MaxLength屬性防止用戶輸入過長的字元是一個好辦法。因為它們不夠長,也就減少了貼入大量腳本的可能性。其次,要使用ASP.NET驗證控制項鎖定錯誤的數據(如文本、空格、數值中的特殊字元)。另外,要限制錯誤信息給出的提示。捕獲到資料庫異常時,只顯示一些通用的信息(如「數據源錯誤」)而不是顯示Exception.Message屬性中的信息,它可能暴露了系統攻擊點。
更為重要的是,一定要小心去除特殊字元。比如,可以將單引號替換為兩個單引號,這樣它們就不會和SQL語句的分隔符混淆:
string ID=txtID.Text().Replace(「』」,」』』」);
當然,如果文本確實需要包含單引號,這樣做就引入了其他麻煩。另外,某些SQL注入攻擊還是可行的。替換單引號可以防止用戶提前結束一個字元串,然而,如果動態構建含有數值的SQL語句,SQL注入攻擊又有發揮的空間了。這個漏洞常被(這是很危險的)忽視。更好的解決辦法是使用參數化的命令或使用存儲過程執行轉義以防止SQL注入攻擊。
另一個好建議是限制用於訪問資料庫的賬號的許可權。這樣該賬號將沒有許可權訪問其他資料庫或執行擴展的存儲過程。不過這樣並不能解決SQL腳本注入的問題,因為用於連接資料庫的進程幾乎總是需要比任意單個用戶更大的許可權。通過限制許可權,可以預防刪除表的攻擊,但不能阻止攻擊者偷看別人的.信息
三、POST注入攻擊
精明的用戶可能會知道還有另外一個Web控制項攻擊的潛在途徑。雖然參數化的命令防止了SQL注入攻擊,但它們不能阻止攻擊者向回發到伺服器的數據添加惡意的值。如果不檢查這些值,就使得攻擊者可以提交本來不可能存在的控制項值。
例如,假設你有一個顯示當前用戶訂單的列表。狡詐的攻擊者可能保存該頁面的一個本地副本,修改HTML內容向列表添加更多的項目,然後選擇某個「假」的項目。如果攻擊成功,攻擊者就能夠看到其他用戶訂單,這顯然是一個問題。幸好,ASP.NET使用一個很少被提及的叫做「事件驗證」的特性來防止這種攻擊。事件驗證檢查回發到伺服器的數據並驗證其中值的合法性。例如,如果回發的數據表明用戶選擇了一個沒有意義的數據(因為它在控制項中並不存在),ASP.NET就產生一個錯誤並停止處理。可以在Page指令中設置EnableEventValidation特性為false來禁用事件驗證。創建使用客戶端腳本動態改變內容的頁面時,需要執行這一步。不過,此時在使用這些值之前要注意檢查潛在的POST注入攻擊。
;② SQL注入哪些工具最有效
SQL Power Injector是一款在.Net 1.1中創建的應用程序,可幫助滲透測試人員在網頁上查找和利用SQL注入。
特徵
支持Windows,Unix和Linux操作系統
SQL Server,Oracle,MySQL,Sybase / Adaptive Server和DB2兼容
SSL支持
自動從網頁上的表單或IFrame載入參數(GET或POST)
檢測並瀏覽框架集
自動檢測網站語言的選項
檢測並添加載入頁面進程期間使用的Cookie(Set-Cookie檢測)
自動查找提交頁面,其方法(GET或POST)以不同的顏色顯示
可以直接在Datagrids中創建/修改/刪除載入的字元串和Cookie參數
單個SQL注入
盲目的SQL注入
比較頁面的真實和錯誤響應或cookie中的結果
時間延遲
SQL注入在自定義瀏覽器中的響應
可以使用HTML上下文顏色查看返回頁面的HTML代碼源並在其中搜索
微調參數和cookie注入
可以參數化預期結果的長度和計數以優化應用程序執行SQL注入所用的時間
創建/編輯預設的ASCII字元,以優化盲注SQL請求數/請求速度
多線程(最多可配置50個)
選項可以通過空的評論/ ** /針對IDS或過濾器檢測來替換空間
在發送之前自動編碼特殊字元
自動檢測響應頁面中的預定義SQL錯誤
在響應頁面中自動檢測預定義的單詞或句子
實時結果
將會話保存並載入到XML文件中
自動查找正面答案和負面答案頁面之間差異的功能
可以創建一個范圍列表,它將替換隱藏的SQL注入字元串中的變數(>)並自動為您播放它們
使用文本文件中的預定義列表自動重播變數范圍
Firefox插件,它將啟動SQL Power Injector以及當前網頁的所有信息及其會話上下文(參數和cookie)
兩個集成工具:Hex和Char編碼器和MS SQL @options解釋器
可以編輯Referer
可以選擇一個用戶代理(或者甚至在用戶代理XML文件中創建一個)
可以使用設置窗口配置應用程序
支持可配置的代理
軟體截圖
地址:http://www.sqlpowerinjector.com/index.htm
ilo--,Reversing.org - sqlbftools
地址:https://packetstormsecurity.com/files/download/43795/sqlbftools-1.2.tar.gz
Bernardo Damele AG:sqlmap,自動SQL注入工具
介紹
sqlmap是一款開源滲透測試工具,可自動檢測和利用SQL注入漏洞並接管資料庫伺服器。它具有強大的檢測引擎,針對終極滲透測試人員的眾多特性,以及從資料庫指紋識別,從資料庫獲取數據,到訪問底層文件系統以及在操作系統上執行命令的各種開關,帶外連接。
特徵
完全支持MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase,SAP MaxDB,HSQLDB和Informix資料庫管理系統。
完全支持六種SQL注入技術:基於布爾的盲,基於時間的盲,基於錯誤,基於UNION查詢,堆棧查詢和帶外。
支持直接連接資料庫而不通過SQL注入,通過提供DBMS憑證,IP地址,埠和資料庫名稱。
支持枚舉用戶,密碼哈希,特權,角色,資料庫,表和列。
自動識別密碼哈希格式並支持使用基於字典的攻擊對其進行破解。
支持完全轉儲資料庫表,根據用戶的選擇提供一系列條目或特定列。用戶也可以選擇僅轉儲每列條目中的一系列字元。
支持搜索特定的資料庫名稱,跨所有資料庫的特定表或所有資料庫表的特定列。例如,這對於識別包含自定義應用程序憑證的表格非常有用,其中相關列的名稱包含名稱和傳遞等字元串。
當資料庫軟體是MySQL,PostgreSQL或Microsoft SQL Server時,支持從資料庫伺服器底層文件系統下載和上載任何文件。
當資料庫軟體是MySQL,PostgreSQL或Microsoft SQL Server時,支持執行任意命令並在資料庫伺服器底層操作系統上檢索它們的標准輸出。
支持在攻擊者機器和資料庫伺服器底層操作系統之間建立帶外狀態TCP連接。該通道可以是互動式命令提示符,Meterpreter會話或圖形用戶界面(VNC)會話,可以根據用戶的選擇進行選擇。
通過Metasploit的Meterpreter 命令支持資料庫進程'用戶許可權升級
地址:http://sqlmap.org/
icesurfer:SQL Server接管工具 - sqlninja
介紹
喜歡從Microsoft SQL Server上的SQL注入到資料庫上的完整GUI訪問?採用一些新的SQL注入技巧,在注冊表中添加幾個遠程鏡頭以禁用數據執行保護,混合一個自動生成調試腳本的小Perl,將所有這些放在一個帶有Metasploit包裝器的振動器中,只有sqlninja的攻擊模塊之一!
Sqlninja是一款旨在利用以Microsoft SQL Server作為後端的Web應用程序中的SQL注入漏洞的工具。
其主要目標是在易受攻擊的資料庫伺服器上提供遠程訪問,即使在非常惡劣的環境中也是如此。滲透測試人員應該使用它來幫助和自動化發現SQL注入漏洞時接管資料庫伺服器的過程。
特徵
完整的文檔可以在tarball中找到,也可以在這里找到,但是這里列出了忍者的功能:
遠程SQL Server的指紋(版本,執行查詢的用戶,用戶許可權,xp_cmdshell可用性,資料庫身份驗證模式)
數據提取,基於時間或通過DNS隧道
與Metasploit3集成,通過VNC伺服器注入獲得對遠程資料庫伺服器的圖形化訪問,或者僅上傳Meterpreter
通過vbscript或debug.exe僅上傳可執行的HTTP請求(不需要FTP / TFTP)
直接和反向綁定,TCP和UDP
當沒有可用於直接/反向外殼的TCP / UDP埠時,DNS隧道偽外殼,但資料庫伺服器可以解析外部主機名
ICMP隧道外殼,當沒有TCP / UDP埠可用於直接/反向外殼,但資料庫可以Ping您的盒子
蠻力的'sa'密碼(2種口味:基於字典和增量)
如果找到'sa'密碼,許可權將升級到系統管理員組
創建自定義的xp_cmdshell,如果原始的已被刪除
TCP / UDP埠可以從目標SQL Server掃描到攻擊機器,以便找到目標網路防火牆允許的埠並將其用於反向shell
迴避技術混淆了一些IDS / IPS / WAF
與churrasco.exe集成,通過令牌綁架將許可權升級到w2k3上的SYSTEM
支持CVE-2010-0232,將sqlservr.exe的許可權升級到SYSTEM
地址:https://sourceforge.net/projects/sqlninja/files/sqlninja/sqlninja-0.2.999-alpha1.tgz/download
③ sql server 2016怎麼用
第一次用2016,安裝後發現跟用過的2012不一樣,找不到正確的姿勢!!!就是原來2012安裝後直接帶的那個管理器SQL Server Management Studio
(SSMS),一度懷疑人生,以為安裝出錯了,最後度了一圈在一個博客角落裡看到說2016的SSMS需要單獨下載...那,然後就姿勢正確了
http://jingyan..com/article/86112f139c3f0c27379787b0.html