張鑫+++張婷+++段新東+++林玉香
【 摘 要 】 由于Web應(yīng)用系統(tǒng)的開發(fā)周期較短,同時開發(fā)人員安全編程意識不足,Web應(yīng)用程序會存在漏洞。因此,檢測Web應(yīng)用系統(tǒng)的安全性是安全領(lǐng)域的亟待解決的問題。SQL注入漏洞檢測工具模擬黑客攻擊的方式,采用網(wǎng)絡(luò)爬蟲技術(shù)建立需檢測的URL庫,依據(jù)SQL注入模板精心構(gòu)造URL,并從根據(jù)瀏覽器返回信息,判定是否存在SQL注入點??梢蕴崆耙庾R到Web應(yīng)用存在的漏洞,并及時修補,降低系統(tǒng)受攻擊的風(fēng)險,是有效的Web安全防護手段。
【 關(guān)鍵詞 】 SQL注入;漏洞檢測;Web安全
【 中圖分類號 】 TP311
1 引言
采用B/S架構(gòu),并通過HTTP或HTTPS協(xié)議提供訪問的應(yīng)用服務(wù)統(tǒng)稱為Web應(yīng)用。目前,幾乎所有政府、通信、證券、銀行以及電子商務(wù)都支持在線交易和查詢服務(wù),包括個人賬戶、用戶信息、交易記錄等在內(nèi)的用戶的敏感信息,都通過Web應(yīng)用系統(tǒng)存儲在數(shù)據(jù)庫中,一旦數(shù)據(jù)被盜取或篡改,都會造成巨大損失。為降低系統(tǒng)受攻擊的風(fēng)險,可利用Web應(yīng)用安全漏洞掃描技術(shù),可以實現(xiàn)在線的Web應(yīng)用健康檢查,提醒網(wǎng)站管理員進行修補,是效果好的Web安全防護手段。
2 Web 應(yīng)用中常見漏洞攻擊
Web 應(yīng)用大多涉及服務(wù)器端的動態(tài)處理,同時,開發(fā)人員可能在開發(fā)過程中疏忽參數(shù)的輸入檢查,因此會出現(xiàn)各種Web 應(yīng)用安全問題,會產(chǎn)生相關(guān)漏洞,例如文件包含漏洞,目錄遍歷漏洞,信息泄露漏洞和SQL 注入漏洞給攻擊者留下可乘之機。
由于SQL 注入漏洞利用Web應(yīng)用開放的端口,通常防火墻等設(shè)備無法檢測到,所以其隱蔽性高,如果攻擊者不留下痕跡,或者管理員沒有查看數(shù)據(jù)庫日志的習(xí)慣,基本不會發(fā)現(xiàn)。
根據(jù)美國國家漏洞數(shù)據(jù)庫(NVD)的統(tǒng)計,SQL注入在針對Web應(yīng)用攻擊手段中名列榜首,是互聯(lián)網(wǎng)危害最大的安全漏洞。SQL注入攻擊的幾個過程。
(1)判斷Web應(yīng)用是否可以進行SQL注入。如果URL僅是對靜態(tài)網(wǎng)頁的訪問,不存在SQL注入問題。只有存在數(shù)據(jù)庫動態(tài)查詢請求的URL,才可能存在SQL注入,如:http://www.***.cn/web.jsp?id=36,其中id=36表示數(shù)據(jù)庫查詢變量。
(2)尋找SQL注入點。完成帶參URL的查找后,通過構(gòu)造一些特殊SQL語句,替換原有的URL參數(shù)值,再根據(jù)瀏覽器返回信息,判斷該URL是否為SQL注入點。
(3)猜解用戶名和密碼。軟件開發(fā)人員設(shè)計的數(shù)據(jù)庫表名、字段名通常是有規(guī)律可循的。通過構(gòu)建SQL語句在數(shù)據(jù)庫中查找表名、字段名、用戶名和密碼的長度等內(nèi)容。
(4)尋找Web系統(tǒng)管理后臺入口。通常Web系統(tǒng)后臺管理的界面不向普通用戶開放,要尋找到后臺的登錄路徑,可以利用掃描工具,測試可能的后臺入口地址進行。
(5)實施入侵和破壞。成功登錄管理系統(tǒng)后,接下來就可以任意進行讀寫,篡改網(wǎng)頁、木馬上傳、修改、泄漏用戶信息等,并進一步入侵數(shù)據(jù)庫服務(wù)器。
由于大多數(shù)Web應(yīng)用檢測軟件成本較高,不適合中小型網(wǎng)站,所以需要一種簡單方便的網(wǎng)站檢測服務(wù)。該漏洞檢測工具針對MySQL數(shù)據(jù)庫服務(wù)器,對用戶提交的URL進行安全檢測,對漏洞劃分不同的危險等級,發(fā)現(xiàn)問題后顯示危險URL,不顯示其他敏感信息。
3 SQL注入漏洞檢測工具的設(shè)計
3.1 SQL注入漏洞檢測方法
可以采用模仿黑客攻擊的方法來檢測是否存在SQL注入漏洞,與SQL注入攻擊的步驟類似,如圖1所示。
(1)在檢測過程中,采用網(wǎng)絡(luò)爬蟲技術(shù),先將整個網(wǎng)站的所有網(wǎng)頁抓取完成。將重復(fù)的 URL以及鏈接到被檢測網(wǎng)站外的URL剔除后,存入網(wǎng)頁URL數(shù)據(jù)庫。
(2)訪問網(wǎng)頁URL的數(shù)據(jù)庫,獲得一條URL。
(3)對網(wǎng)頁URL數(shù)據(jù)庫中存儲的URL進行檢測,檢測的步驟同攻擊過程。為了提高檢測的效率,采用模板參數(shù)填充的方法??尚枰鶕?jù)實際情況對表1所示的SQL 注入模板的參數(shù)進行填充,以構(gòu)成可執(zhí)行的SQL攻擊語句。其中u表示URL;%s表示SQL語句的條件部分;~u表示將URL中SQL語句的條件取反。如果構(gòu)建的SQL語句未通過URL檢測,那么該URL不存在SQL注入漏洞,轉(zhuǎn)步驟2。如果構(gòu)建的SQL語句通過URL檢測,那么存在SQL注入漏洞,轉(zhuǎn)步驟4。
(4)以MySQL4及以上版本為例,列出檢測信息。構(gòu)建SQL語句,進一步獲取基本信息,猜解數(shù)據(jù)和列名,并讀取和寫入文件。
(5)如果網(wǎng)頁URL的數(shù)據(jù)庫的每一條URL都檢測過后,算法終止。
3.2 整體架構(gòu)圖
注入漏洞檢測工具的基礎(chǔ)構(gòu)架如圖2所示。分為三個功能模塊:(1)網(wǎng)絡(luò)爬蟲:創(chuàng)建網(wǎng)頁URL數(shù)據(jù)庫;(2)SQL注入檢測引擎:采用圖2所示的流程進行SQL注入漏洞檢測;(3)公共組件:支持前兩個模塊相應(yīng)功能的實現(xiàn)。
4 SQL注入檢測引擎的實現(xiàn)
4.1 SQL注入漏洞掃描
1)構(gòu)造不同類型的payload:參照表2所示的SQL 注入模板的參數(shù)對URL進行填充。
2)根據(jù)http response來判斷是否存在注入點:根據(jù)參數(shù)m_HttpUrl從指定的URL得到相應(yīng)的返回內(nèi)容;獲取或設(shè)置用于向 Internet Http資源的請求進行身份驗證的網(wǎng)絡(luò)憑據(jù),并使用正則表達式("
3)分析具體的注入類型:根據(jù)不同的注入類型構(gòu)造不同的URL。
4.2 猜解數(shù)據(jù)與列名表名
1)獲取數(shù)據(jù)庫的基本信息
MySQL4及以上版本支持union查詢,可以通過折半查找,逐步猜解信息。用到的內(nèi)置函數(shù)如下:(1)VERSION():獲得當(dāng)前的數(shù)據(jù)庫版本信息;(2)USER():獲得當(dāng)前的數(shù)據(jù)庫用戶名;(3)DATABASE():獲得當(dāng)前數(shù)據(jù)庫名;(4)PASSWORD():獲得相關(guān)用戶的密碼。獲取數(shù)據(jù)庫的基本信息如圖4所示。
2)猜解表名
在MySQL4及以上版本中,可在注入點URL后添加如下代碼:and(select count(*)from table_name)>0。如果返回正常,那么說明數(shù)據(jù)表的名字是存在的,否則不存在。
3)猜解列名
在MySQL4及以上版本中,可在SQL注入點URL后添加如下代碼:and (select count(column_name)from table_name)>0。如果返回正常,那么列名是正確的,否則反之。把常見列名保存在一個文本文檔中,猜解時打開,構(gòu)造URL進行猜解,遍歷所有字段名。猜解數(shù)據(jù)與列名表名如圖5所示。
4.3 讀取和寫入文件
1)利用函數(shù)load_file()讀取文件,為避開單引號,使用16進制表示文件路徑。2)利用函數(shù)into outfile() 實現(xiàn)寫文件的功能。
5 結(jié)束語
SQL注入漏洞檢測工具通過構(gòu)造HTTP協(xié)議請求,獲取服務(wù)器響應(yīng)信息,分析網(wǎng)絡(luò)頁面信息,來分析檢測??梢詭椭芾韱T更好的管理網(wǎng)站,可立刻查詢URL的各項記錄,并顯示上次掃描時間,同時標明漏洞類型,能更直觀的了解網(wǎng)站的安全狀況。管理員可以根據(jù)這些信息對網(wǎng)站進行整修,填補漏洞,使網(wǎng)站更加安全。但是在SQL注入檢測引擎的運行時會存在一定延時,并只針對SQL注入漏洞進行檢查,因此,會進一步豐富掃描知識庫,并開展更多類型漏洞(如XSS漏洞、危險端口預(yù)警、敏感目錄檢測、蜘蛛屏蔽掃描等)的研究工作,使其更高效準確地為用戶提供服務(wù)。
參考文獻
[1] 楊林,楊勇.Web應(yīng)用漏洞攻擊分析及防御實現(xiàn)[J].中國教育網(wǎng)絡(luò),2011,Z1:79-82.
[2] National Vulnerability Database National vulnerability database(NVD) CVE.statistics[EB/OL].http://web.nvd.nist.gov/view/vuln/statistics-results.
[3] 彭賡,范明鈺.基于改進網(wǎng)絡(luò)爬蟲技術(shù)的SQL注入漏洞檢測[J].計算機應(yīng)用研究,2010,27(07):2605-2607.
[4] 張令通,羅森林.SQL盲注入快速攻擊方法研究[J].信息網(wǎng)絡(luò)安全,2013,05:15-18.
[5] 蘇忠,林闖,封富君等.無線傳感器網(wǎng)絡(luò)密鑰管理的方案和協(xié)議[J].軟件學(xué)報, 2007, 18(5):1218-1231.
[6] 馬凱,蔡皖東,姚燁.Web2.0環(huán)境下SQL注入漏洞注入點提取方法[J].計算機技術(shù)與發(fā)展,23(3):121-128.
基金項目:
河南省科技計劃項目(142300410108);河南省教育廳科學(xué)技術(shù)研究重點項目基礎(chǔ)研究(14A520056);南陽師范學(xué)院校級項目(QN2013047)。
作者簡介:
張鑫(1985-),男,河北石家莊人,碩士,講師;主要研究方向和關(guān)注領(lǐng)域:信息安全、網(wǎng)絡(luò)安全與攻防。endprint
MySQL4及以上版本支持union查詢,可以通過折半查找,逐步猜解信息。用到的內(nèi)置函數(shù)如下:(1)VERSION():獲得當(dāng)前的數(shù)據(jù)庫版本信息;(2)USER():獲得當(dāng)前的數(shù)據(jù)庫用戶名;(3)DATABASE():獲得當(dāng)前數(shù)據(jù)庫名;(4)PASSWORD():獲得相關(guān)用戶的密碼。獲取數(shù)據(jù)庫的基本信息如圖4所示。
2)猜解表名
在MySQL4及以上版本中,可在注入點URL后添加如下代碼:and(select count(*)from table_name)>0。如果返回正常,那么說明數(shù)據(jù)表的名字是存在的,否則不存在。
3)猜解列名
在MySQL4及以上版本中,可在SQL注入點URL后添加如下代碼:and (select count(column_name)from table_name)>0。如果返回正常,那么列名是正確的,否則反之。把常見列名保存在一個文本文檔中,猜解時打開,構(gòu)造URL進行猜解,遍歷所有字段名。猜解數(shù)據(jù)與列名表名如圖5所示。
4.3 讀取和寫入文件
1)利用函數(shù)load_file()讀取文件,為避開單引號,使用16進制表示文件路徑。2)利用函數(shù)into outfile() 實現(xiàn)寫文件的功能。
5 結(jié)束語
SQL注入漏洞檢測工具通過構(gòu)造HTTP協(xié)議請求,獲取服務(wù)器響應(yīng)信息,分析網(wǎng)絡(luò)頁面信息,來分析檢測。可以幫助管理員更好的管理網(wǎng)站,可立刻查詢URL的各項記錄,并顯示上次掃描時間,同時標明漏洞類型,能更直觀的了解網(wǎng)站的安全狀況。管理員可以根據(jù)這些信息對網(wǎng)站進行整修,填補漏洞,使網(wǎng)站更加安全。但是在SQL注入檢測引擎的運行時會存在一定延時,并只針對SQL注入漏洞進行檢查,因此,會進一步豐富掃描知識庫,并開展更多類型漏洞(如XSS漏洞、危險端口預(yù)警、敏感目錄檢測、蜘蛛屏蔽掃描等)的研究工作,使其更高效準確地為用戶提供服務(wù)。
參考文獻
[1] 楊林,楊勇.Web應(yīng)用漏洞攻擊分析及防御實現(xiàn)[J].中國教育網(wǎng)絡(luò),2011,Z1:79-82.
[2] National Vulnerability Database National vulnerability database(NVD) CVE.statistics[EB/OL].http://web.nvd.nist.gov/view/vuln/statistics-results.
[3] 彭賡,范明鈺.基于改進網(wǎng)絡(luò)爬蟲技術(shù)的SQL注入漏洞檢測[J].計算機應(yīng)用研究,2010,27(07):2605-2607.
[4] 張令通,羅森林.SQL盲注入快速攻擊方法研究[J].信息網(wǎng)絡(luò)安全,2013,05:15-18.
[5] 蘇忠,林闖,封富君等.無線傳感器網(wǎng)絡(luò)密鑰管理的方案和協(xié)議[J].軟件學(xué)報, 2007, 18(5):1218-1231.
[6] 馬凱,蔡皖東,姚燁.Web2.0環(huán)境下SQL注入漏洞注入點提取方法[J].計算機技術(shù)與發(fā)展,23(3):121-128.
基金項目:
河南省科技計劃項目(142300410108);河南省教育廳科學(xué)技術(shù)研究重點項目基礎(chǔ)研究(14A520056);南陽師范學(xué)院校級項目(QN2013047)。
作者簡介:
張鑫(1985-),男,河北石家莊人,碩士,講師;主要研究方向和關(guān)注領(lǐng)域:信息安全、網(wǎng)絡(luò)安全與攻防。endprint
MySQL4及以上版本支持union查詢,可以通過折半查找,逐步猜解信息。用到的內(nèi)置函數(shù)如下:(1)VERSION():獲得當(dāng)前的數(shù)據(jù)庫版本信息;(2)USER():獲得當(dāng)前的數(shù)據(jù)庫用戶名;(3)DATABASE():獲得當(dāng)前數(shù)據(jù)庫名;(4)PASSWORD():獲得相關(guān)用戶的密碼。獲取數(shù)據(jù)庫的基本信息如圖4所示。
2)猜解表名
在MySQL4及以上版本中,可在注入點URL后添加如下代碼:and(select count(*)from table_name)>0。如果返回正常,那么說明數(shù)據(jù)表的名字是存在的,否則不存在。
3)猜解列名
在MySQL4及以上版本中,可在SQL注入點URL后添加如下代碼:and (select count(column_name)from table_name)>0。如果返回正常,那么列名是正確的,否則反之。把常見列名保存在一個文本文檔中,猜解時打開,構(gòu)造URL進行猜解,遍歷所有字段名。猜解數(shù)據(jù)與列名表名如圖5所示。
4.3 讀取和寫入文件
1)利用函數(shù)load_file()讀取文件,為避開單引號,使用16進制表示文件路徑。2)利用函數(shù)into outfile() 實現(xiàn)寫文件的功能。
5 結(jié)束語
SQL注入漏洞檢測工具通過構(gòu)造HTTP協(xié)議請求,獲取服務(wù)器響應(yīng)信息,分析網(wǎng)絡(luò)頁面信息,來分析檢測??梢詭椭芾韱T更好的管理網(wǎng)站,可立刻查詢URL的各項記錄,并顯示上次掃描時間,同時標明漏洞類型,能更直觀的了解網(wǎng)站的安全狀況。管理員可以根據(jù)這些信息對網(wǎng)站進行整修,填補漏洞,使網(wǎng)站更加安全。但是在SQL注入檢測引擎的運行時會存在一定延時,并只針對SQL注入漏洞進行檢查,因此,會進一步豐富掃描知識庫,并開展更多類型漏洞(如XSS漏洞、危險端口預(yù)警、敏感目錄檢測、蜘蛛屏蔽掃描等)的研究工作,使其更高效準確地為用戶提供服務(wù)。
參考文獻
[1] 楊林,楊勇.Web應(yīng)用漏洞攻擊分析及防御實現(xiàn)[J].中國教育網(wǎng)絡(luò),2011,Z1:79-82.
[2] National Vulnerability Database National vulnerability database(NVD) CVE.statistics[EB/OL].http://web.nvd.nist.gov/view/vuln/statistics-results.
[3] 彭賡,范明鈺.基于改進網(wǎng)絡(luò)爬蟲技術(shù)的SQL注入漏洞檢測[J].計算機應(yīng)用研究,2010,27(07):2605-2607.
[4] 張令通,羅森林.SQL盲注入快速攻擊方法研究[J].信息網(wǎng)絡(luò)安全,2013,05:15-18.
[5] 蘇忠,林闖,封富君等.無線傳感器網(wǎng)絡(luò)密鑰管理的方案和協(xié)議[J].軟件學(xué)報, 2007, 18(5):1218-1231.
[6] 馬凱,蔡皖東,姚燁.Web2.0環(huán)境下SQL注入漏洞注入點提取方法[J].計算機技術(shù)與發(fā)展,23(3):121-128.
基金項目:
河南省科技計劃項目(142300410108);河南省教育廳科學(xué)技術(shù)研究重點項目基礎(chǔ)研究(14A520056);南陽師范學(xué)院校級項目(QN2013047)。
作者簡介:
張鑫(1985-),男,河北石家莊人,碩士,講師;主要研究方向和關(guān)注領(lǐng)域:信息安全、網(wǎng)絡(luò)安全與攻防。endprint