摘 要:文章主要研究了Web應(yīng)用程序安全問題中的SQL注入漏洞,分析其原理及分類,闡述了SQL注入漏洞的在Web應(yīng)用中的危害,研究了對SQL注入漏洞的檢測流程,并選擇實際案例進行漏洞檢測,成功發(fā)現(xiàn)網(wǎng)頁中所存在的漏洞,本研究對于推動Web應(yīng)用程序安全問題的研究起到了不容忽視的作用。
關(guān)鍵詞:Web應(yīng)用程序;SQL注入漏洞;檢測
引言
在互聯(lián)網(wǎng)時代的今天,適應(yīng)多平臺、充分集成的Web應(yīng)用程序已經(jīng)成為當(dāng)前應(yīng)用最廣泛的網(wǎng)絡(luò)交互模式,與之相呼應(yīng)的安全問題也日益突出,Web應(yīng)用程序的安全問題成為一個重要課題被廣大學(xué)者研究,在各類Web應(yīng)用安全問題中,SQL注入攻擊的風(fēng)險是位居前列的,這主要表現(xiàn)在一下兩個方面:首先,雖然在聯(lián)入Internet的計算機上裝有防火墻,但是為了保證用戶可以訪問Web應(yīng)用程序,防火墻允許計算機從Internet到Web服務(wù)器正向連接,在這種情況下,如果網(wǎng)絡(luò)應(yīng)用程序中存在注入漏洞,攻擊者就可以直接訪問數(shù)據(jù)庫甚至進而訪問數(shù)據(jù)庫所在服務(wù)器。其次SQL攻擊非常廣泛,它在所有基于SQL語言標(biāo)準(zhǔn)的數(shù)據(jù)庫軟件,如Oracle、SQL Server,MySQL等以及與之相連接的網(wǎng)絡(luò)應(yīng)用程序上都是有效的。
1 SQL注入的原理
SQL注入攻擊源于英文“SQL Injection Attack”,所謂SQL注入攻擊,就是利用SQL注入技術(shù)來實施的網(wǎng)絡(luò)攻擊,它把SQL命令插入到Web交互頁面(例如表單遞交或頁面請求或輸入域名)的查詢字符串中,以達到欺騙服務(wù)器的目的從而執(zhí)行非授權(quán)的命令。SQL注入漏洞在迄今所發(fā)現(xiàn)的Web應(yīng)用程序的安全漏洞中是最著名的,它利用某些包含特殊目的的SQL語句,通過關(guān)鍵變量插入到正常的操作語句中從而形成安全漏洞。程序一旦發(fā)生注入漏洞就會引發(fā)一系列安全問題,例如會對數(shù)據(jù)庫進行未經(jīng)授權(quán)的訪問、更新或刪除等操作。
SQL注入的應(yīng)用違背了“數(shù)據(jù)與代碼分離原則”,它有兩個條件:一是用戶能夠控制數(shù)據(jù)的輸入;二是代碼拼湊了用戶輸入的數(shù)據(jù),把數(shù)據(jù)當(dāng)作代碼執(zhí)行。并且在任何語言開發(fā)環(huán)境中,只要涉及使用SQL語句對數(shù)據(jù)庫操作的應(yīng)用程序,SQL注入漏洞就可能存在。
2 SQL注入的方式
2.1 繞過Web應(yīng)用的用戶驗證
繞過Web應(yīng)用的用戶驗證是攻擊者通過Web應(yīng)用驗證頁面最常用的方法,在這種情況下,攻擊者往往會在用戶輸入?yún)^(qū)域輸入一些數(shù)據(jù)信息,而這些信息將會改變SQL查詢語句中的where條件部分的代碼,使得程序在執(zhí)行時會跳過用戶驗證。
2.2 盲注攻擊
攻擊者在通過輸入注入信息然后提交到服務(wù)器來檢測Web應(yīng)用是否存在SQL注入漏洞,當(dāng)提交的信息動態(tài)組裝成一個SQL語句時,如果是一個不合理的語句,服務(wù)器向客戶端返回一個錯誤代碼,攻擊者可以通過反復(fù)探測然后再返回有效信息。
2.3 聯(lián)合查詢攻擊
使用UNION或UNION ALL可以將一個表追加到另一個表,從而將兩張表組合在一起進行查詢。在使用聯(lián)合查詢時,攻擊者可以在用戶輸入?yún)^(qū)域鍵入類似于“UNION SELECT<注入語句>”的數(shù)據(jù)信息,這時程序運行時會自動組裝SQL査詢語句,代碼變成“select *from user where id=‘UNION select*where account=10and password=’”;若按照普通的SQL語句執(zhí)行,由于id和password都是空值,所以返回的數(shù)據(jù)就是空值,但我們可以明顯看到代碼中加入了UNION方法,則執(zhí)行完該代碼后數(shù)據(jù)庫服務(wù)器會從表user中返回account=10時的值。
3 SQL注入漏洞的危害
SQL注入不但可以獲取網(wǎng)站數(shù)據(jù),還可以生成網(wǎng)站后門程序從而得到網(wǎng)絡(luò)用戶的所有權(quán)限,主要表現(xiàn)在一下幾點:(1)在非授權(quán)情況下讀取、修改甚至刪除數(shù)據(jù)庫中的數(shù)據(jù);(2)盜取用戶敏感信息;(3)注入木馬。
4 SQL注入漏洞的檢測
4.1 思考方向
從上面的研究中我們發(fā)現(xiàn)SQL注入主要存在于頁面中會與數(shù)據(jù)庫產(chǎn)生交互的地方,比如查詢、提交、回復(fù)等頁面,因此可以在Web應(yīng)用程序的這些地方插入設(shè)計好的注入語句,然后觀察服務(wù)器端的返回響應(yīng)。
4.2 測試字符串
在SQL注入漏洞測試中需要用到特定的字符串,用來査找并判斷Web應(yīng)用程序是否存在漏洞。我們根據(jù)注入?yún)?shù)的類型,可以將設(shè)計好的字符串劃分為以下3類:(1)數(shù)字型:select*from表名 where 字段=77;(2)字符型:select*from 表名 where 字段=‘IT書籍’;(3)搜索型:selec*from表名where字段like‘%關(guān)鍵字%’。
4.3 SQL語句變換
Web漏洞測試人員可以針對不同的語句類型進行SQL注入??梢酝ㄟ^構(gòu)造特定的語句規(guī)則,實現(xiàn)提升訪問權(quán)限、獲取完全數(shù)據(jù)庫信息等操作。
4.4 數(shù)據(jù)庫類型變換
由于在實際中對于不同的數(shù)據(jù)庫管理系統(tǒng)的攻擊方式也不一樣,因此,測試人員需要通過指紋標(biāo)識數(shù)據(jù)庫類型。
4.5 SQL注入漏洞檢測
測試人員通過對注入測試字符串進行各種變化,模仿攻擊者根據(jù)不同數(shù)據(jù)庫類型用不同類型的語句攻擊Web應(yīng)用程序,從而動態(tài)檢測出注入漏洞。具體流程如下:(1)選取注入測試字符串,輸入應(yīng)用程序并對比輸出;(2)使用不同的語句類型對應(yīng)用程序進行攻擊;(3)根據(jù)指紋識別數(shù)據(jù)庫類型來識別出應(yīng)用所使用的數(shù)據(jù)庫管理系統(tǒng);4)輸入應(yīng)用程序并對比輸出。
5 SQL注入漏洞檢測試驗?zāi)M
以用ASP.NET中一個簡單的戶登錄界面為案例,分析源代碼中與數(shù)據(jù)庫交互的主要語句如下所示:
SqlStr=“select*from會員表where會員名='”+this.txt_User_Name.Text+“'and 密碼='”+Md5_User_Pwd+“'”;
按照上述漏洞檢測規(guī)則及流程,我們選擇“or 1=1—”為漏洞檢測用例輸入到會員名文本框中,因為“—”在代碼中是注釋的意思,所以后面的語句都可以視為注釋不必執(zhí)行,而1的確等于1,因此即便沒有該會員照樣可以成功登錄,由此可見,這個登錄界面中存在SQL注入漏洞。
6 結(jié)束語
隨著互聯(lián)網(wǎng)時代的擴張,Web應(yīng)用程序已經(jīng)滲透到社會各個層面,而Web應(yīng)用程序的安全問題則成為當(dāng)今網(wǎng)絡(luò)應(yīng)用的主要問題之一,如何科學(xué)地測試評估Web應(yīng)用程序的安全性具有重要的理論意義和實用價值,文章僅SQL注入漏洞測試做了簡單研究,下一步將繼續(xù)深入研究其他類型漏洞,如網(wǎng)絡(luò)爬蟲漏洞等等。
參考文獻
[1]朱輝,沈明星,李善平.Web應(yīng)用中代碼注入漏洞的測試方法[J].計算機工程,2010(10).
[2]盧俊.SQL注入與XSS攻擊防范方法的研究以及防范模型的設(shè)計與實現(xiàn)[J].北京郵電大學(xué),2010.
[3]潘古兵.Web應(yīng)用程序滲透測試方法研究[D].西南大學(xué),2012.
[4]趙麗娟.Web應(yīng)用程序滲透測試方法研究[D].中南大學(xué),2014.
[5]尹彥濤.Web漏洞掃描系統(tǒng)設(shè)計與實現(xiàn)[D].中國海洋大學(xué),2014.