分析SQL注入的攻擊分析與防范_第1頁
分析SQL注入的攻擊分析與防范_第2頁
免費預(yù)覽已結(jié)束,剩余4頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、分析 SQL 注入的攻擊分析與防范前言隨著 Web 應(yīng)用越來越廣泛,SQL 注入成為對 Web 應(yīng)用攻擊的常 用手段之一,并且 SQL 注入攻擊技術(shù)也層出不窮,尤其是網(wǎng)絡(luò)針對 SQL 注入漏洞的各種工具也推陳出新 ,不斷的向安全人員提出挑戰(zhàn),如何降低 SQL 注入的風(fēng)險,從根本上實施 SQL 注入防御,成了安 全人員面臨的首要問題。1.SQL 注入的原理所謂 SQL 注入攻擊就是通過構(gòu)建特殊的輸入 , 這些輸入往往是 SQL 語法中的一些組合,這些輸入將作為參數(shù)傳入 Web 應(yīng)用程序,通過執(zhí) 行 SQL語句而執(zhí)行攻擊者想要的操作,它的產(chǎn)生主要是由于程序?qū)τ?戶輸入的數(shù)據(jù)沒有進行細致的過濾 ,

2、導(dǎo)致非法數(shù)據(jù)的導(dǎo)入查詢。2. 產(chǎn)生 SQL 注入原因從技術(shù)上講 , SQL 注入主要有代碼層注入和平臺層注入 , 代碼層是因 為應(yīng)用的程序員對輸入的過濾不嚴(yán)格 , 執(zhí)行了非法的數(shù)據(jù)查詢 ; 平臺 層的注入則因為數(shù)據(jù)庫平臺的漏洞或數(shù)據(jù)庫配置不安全等原因造成 的。因此 SQL注入的產(chǎn)生一般體現(xiàn)在:轉(zhuǎn)義字符處理不當(dāng)、類型處理 不當(dāng)、查詢集處理不當(dāng)、錯誤處理不當(dāng)、多個提交處理不當(dāng)和數(shù)據(jù)庫 配置不安全這幾個方面。3. SQL 注入技術(shù)對一些存在 SQL 注入漏洞的應(yīng)用來說,利用這些漏洞,攻擊者可以竊 取用戶數(shù)據(jù) , 提升權(quán)限等, 根據(jù)注入方式的不同 , 注入技術(shù)主要有以下幾種:3.1使用特殊的字符不同的

3、 SQL 數(shù)據(jù)庫有很多不同的特殊變量和特殊字符,利用一些過 濾不嚴(yán)格或配置不安全的應(yīng)用系統(tǒng)可以獲取到一些有用的信息 , 為進 一步攻擊提供了方向。比如使用注釋、單引號、數(shù)據(jù)庫的變量、存儲 過程等方式。3.2使用 Union 查詢數(shù)據(jù)可以使用 Union 連接兩條或多條查詢語句的結(jié)果。通過一個查詢后 面注入 Union 運算, 并添加另一個查詢便可以讀到用戶訪問過的任一 張表, 得到攻擊者想要的信息。3.3使用條件語句該方法主要有三類 : 基于時間、基于錯誤、基于內(nèi)容。這類方法主要 是在正常訪問后加上條件語句 , 根據(jù)返回的信息判斷被攻擊的目標(biāo)。3.4強制產(chǎn)生錯誤 其攻擊動機是識別數(shù)據(jù)庫的類型和

4、版本等信息等。該類型的攻擊其實是攻擊的一個預(yù)備步驟 , 用于為其他類型的攻擊收集信息 , 包括數(shù) 據(jù)庫的類型和結(jié)構(gòu)。 通過應(yīng)用程序服務(wù)器返回的默認(rèn)錯誤信息獲得漏 洞信息。3.5參數(shù)拆分與平衡技術(shù) 分解合法輸入的操作稱作拆分 , 平衡則保證最終的查詢中不會包含 不平衡的單引號。這是一種 SQL 注入常用的技術(shù)?;舅枷胧鞘占?法的請求參數(shù),之后使用 SQL 關(guān)鍵字進行修改以保證與原數(shù)據(jù)不同,但是當(dāng)數(shù)據(jù)庫解析時 , 二者是等價的。3.6推斷技術(shù) 可以識別可注入?yún)?shù)、提取數(shù)據(jù)或確定數(shù)據(jù)庫模式。該種類型的攻 擊利用網(wǎng)站對用戶的輸入的返回信息 , 推導(dǎo)數(shù)據(jù)庫模式和可注入?yún)?shù)。 該類型的攻擊構(gòu)造的查詢執(zhí)

5、行后得到的答案有兩種 : 真或假?;谕茢嗟淖⑷敕椒?: 盲注入和時間測定注入。對于盲注入方法有經(jīng)典的 “andl=l ”和“ and l=2 ”注入。而時間測定注入則是在注入語句中 加入像“ waitfor 100 ”這樣的語句 , 根據(jù)該查詢結(jié)果出現(xiàn)的時間來 判定是否能注入、 注入是否成功以及推導(dǎo)數(shù)據(jù)值的范圍。 這些方法都 是通過問一些相關(guān)但并非直接且能得到回應(yīng)的問題 , 從響應(yīng)信息推出 想要的信息 , 進而進行攻擊。3.7使用非主流通道技術(shù)除了 HTTH 向應(yīng)之外,我們可以使用通道來獲取數(shù)據(jù)。但是通道依賴 于數(shù)據(jù)庫支持的功能 , 并不適合所有的數(shù)據(jù)庫平臺。 SQL 注入的非主 流通道一般

6、有 :數(shù)據(jù)庫連接、 DNS、E-MAIL 等, 其基本思想是先將 SQL 查詢打包, 然后利用非主流通道將結(jié)果返回給攻擊者。3.8避開輸入過濾技術(shù) 在一般的編碼或平臺本身都有一些過濾手段來防范 SQL 注入, 針對 這種情況也有很多的方法來繞過過濾。常見的實現(xiàn)該目標(biāo)的技術(shù)有 : 使用大小寫變種、使用 SQL 注釋、使用 URL 編碼、使用動態(tài)的查詢、 使用空字節(jié)、嵌套剝離后的表達式、利用截斷等。通過這些技術(shù) , 輸 入經(jīng)過構(gòu)思的查詢 , 能繞過向應(yīng)的過濾 , 獲取攻擊者想要的查詢結(jié)果。3.9 利用存儲過程 數(shù)據(jù)庫廠商用一些標(biāo)準(zhǔn)存儲過程來擴展數(shù)據(jù)庫的 功能并允許其與系統(tǒng)交互 , 或者用戶會自定義

7、一些存儲過程。通過其 他類型攻擊搜集到數(shù)據(jù)庫的相關(guān)信息 (數(shù)據(jù)庫類型 )后, 就可以構(gòu)造執(zhí) 行存儲過程的命令。 與附帶查詢攻擊相同 , 該攻擊可以實現(xiàn)特權(quán)擴張、 拒絕服務(wù)以及執(zhí)行遠程命令。; 4. SQL 注入防范了解了 SQL注入的技術(shù),如何能修復(fù)SQL注入?如何進一步防范SQL 注入的泛濫?本文主要從兩個方面來防范 SQL 注入,一是代碼層的防 范,一是平臺層的防范。通過一些合理的操作和配置來降低SQL 注入的危險。4.1 使用參數(shù)化語句SQL 注入的根本原因之一是將 SQL 查詢創(chuàng)建成字符串然后發(fā)給數(shù)據(jù) 庫執(zhí)行。使用參數(shù)化語句可以避免很多在應(yīng)用中常見到的 SQL 注入問 題。不過, 參數(shù)

8、化語句是一種向數(shù)據(jù)庫提供潛在的非安全參數(shù) ( 通常作 為查詢或存儲過程調(diào)用 )的方法。雖然它們不會修改傳遞給數(shù)據(jù)庫的 內(nèi)容, 但是如果正在調(diào)用的數(shù)據(jù)庫功能在存儲過程或函數(shù)實現(xiàn)中使用 了動態(tài)的SQL則也有可能出現(xiàn) SQL 注入。4.2 輸入驗證輸入驗證是指測試應(yīng)用接收到的輸入以保證其符合應(yīng)用中定義的標(biāo) 準(zhǔn)過程。它可能簡單到直接是一個參數(shù)類型的驗證 , 也可能復(fù)雜到使 用正則表達式或者業(yè)務(wù)邏輯去驗證輸入。 一般有兩種不同類型的輸入 驗證方法 : 白名單驗證和黑名單驗證。4.3 編碼輸出除了驗證應(yīng)用程序接收的輸入外 , 經(jīng)常需要對程序各模塊之間或者 各部分之間傳遞的內(nèi)容進行編碼。在存在 SQL 注入

9、的環(huán)境中,為了保 證傳遞給數(shù)據(jù)庫的內(nèi)容不會被錯誤處理 , 則必須進行編碼。不過這不 是唯一需要進行編碼的情形。4.4 規(guī)范化 避開輸入驗證和編碼輸出的常用技術(shù)就是將輸入發(fā)送給應(yīng)用之前對 其進行編碼 , 之后再對其進行解碼和解釋以符合攻擊者的目標(biāo)。比如單引號有很多種編碼方式 , 很難預(yù)測應(yīng)用是否按那種方式來解釋 , 所 有就可能繞過驗證。由于這個原因 , 將規(guī)范化作為輸入驗證方法的一 部分。通常最容易的一種方法是拒絕所有不符合規(guī)范格式的輸入。4.5 通過設(shè)計來避免 SQL 注入危險這種方式主要是通過提供許多較高級別的設(shè)計技術(shù)來避免或減輕SQL 注入的危險。有很多獨立的設(shè)計技術(shù),比如:使用存儲過程

10、以便在 數(shù)據(jù)庫層擁有較細的粒度許可技術(shù) , 使用數(shù)據(jù)訪問抽象層來對整個應(yīng) 用施加安全的數(shù)據(jù)訪問技術(shù) , 以及對敏感信息進行附加的控制等技術(shù)。4.6使用運行時保護 此技術(shù)主要用于檢測、減輕或防止那些不需要重編譯易受攻擊的應(yīng) 用的源代碼即可部署的 SQL 注入。主要是 Web 服務(wù)器和部署框架的軟 件或是針對 Web 或應(yīng)用平臺的用于修改和擴展特性的技術(shù)。當(dāng)無法修 改代碼時,這是一種有效的技術(shù)。常用防范方式是通過部署Web 應(yīng)用防火墻、入侵檢測系統(tǒng)、數(shù)據(jù)庫防火墻等進行保護。4.7 確保數(shù)據(jù)庫安全使用一些額外的方式強化數(shù)據(jù)庫安全。 首先鎖定應(yīng)用數(shù)據(jù) , 采用最小 權(quán)限登陸數(shù)據(jù)庫 , 撤銷不必要的公共

11、許可 ,使用強大的加密技術(shù)來保 護敏感數(shù)據(jù)并維護審查跟蹤。其次鎖定數(shù)據(jù)庫 , 對額外的系統(tǒng)對象鎖 定,約束即席查詢 , 加強對驗證周邊嚴(yán)格控制 ,最低權(quán)限操作系統(tǒng)賬戶 并確保數(shù)據(jù)庫打了最新補丁。4.8額外的部署額外的部署主要包括最小化不必要的信息泄露、 配置網(wǎng)絡(luò)訪問控制、 獨立部署 Web 應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器、提高 Web 服務(wù)器冗余日志 及使用最新漏洞掃描程序排查 Web 應(yīng)用等。尤其是不必要的信息泄露 是一些注入的前提 , 因此這些隱藏需要隱藏錯誤的信息、使用空的默 認(rèn) Web 站點、為 DNS 反向查詢使用虛擬主機名稱等措施必不可少。5. 總結(jié)本文總結(jié)了一些常見的 SQL 注入攻擊的方式,提出了一些防范 SQL 注 入攻擊的方法,希望能對一些 Web 應(yīng)用在防注入方面

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論