◆馮貴蘭 李正楠
(1.中國(guó)民航飛行學(xué)院(廣漢)現(xiàn)代教育技術(shù)中心 四川 618307;2.中國(guó)民航飛行學(xué)院(廣漢)航空工程學(xué)院 四川 618307)
淺析高校網(wǎng)站安全中SQL注入攻擊與防范方法
◆馮貴蘭1李正楠2
(1.中國(guó)民航飛行學(xué)院(廣漢)現(xiàn)代教育技術(shù)中心 四川 618307;2.中國(guó)民航飛行學(xué)院(廣漢)航空工程學(xué)院 四川 618307)
隨著教育信息化、數(shù)字化校園建設(shè)的不斷推進(jìn),高校校園網(wǎng)中部署了各種web門(mén)戶網(wǎng)站。但是SQL注入攻擊可以入侵?jǐn)?shù)據(jù)庫(kù)、進(jìn)行網(wǎng)頁(yè)掛馬,嚴(yán)重威脅了高校網(wǎng)站安全。本文通過(guò)SQL map工具講解了SQL注入攻擊原理和詳細(xì)操作步驟,高校網(wǎng)絡(luò)管理員在明白攻擊原理之后,可以使用對(duì)應(yīng)的防護(hù)方法,降低web網(wǎng)站受到注入攻擊的風(fēng)險(xiǎn),更好地保護(hù)高校網(wǎng)站的安全。
網(wǎng)絡(luò)安全;web應(yīng)用;SQL注入
隨著教育信息化、數(shù)字化校園建設(shè)的不斷推進(jìn),高校校園網(wǎng)中部署了各種web門(mén)戶網(wǎng)站和應(yīng)用系統(tǒng)。高校網(wǎng)站和應(yīng)用系統(tǒng)是對(duì)外宣傳的窗口,是教學(xué)、管理和科研的重要平臺(tái),在給師生來(lái)帶便利的同時(shí)也面臨著嚴(yán)重的安全問(wèn)題。一方面,黑客熱衷于攻擊搜索引擎(如谷歌、百度)中前幾頁(yè)的教育網(wǎng)站;另一方面,開(kāi)發(fā)高校網(wǎng)站和應(yīng)用系統(tǒng)的程序員水平層次不齊,部分網(wǎng)站和應(yīng)用系統(tǒng)由學(xué)生進(jìn)行開(kāi)發(fā),學(xué)生們經(jīng)驗(yàn)欠缺,在程序開(kāi)發(fā)時(shí)沒(méi)有過(guò)濾用戶輸入,保證其數(shù)據(jù)有效性,導(dǎo)致程序存在安全薄弱點(diǎn),容易引來(lái)黑客攻擊,加大了高校網(wǎng)站被掛馬、數(shù)據(jù)泄露的風(fēng)險(xiǎn)。本文以滲透測(cè)試工具SQLmap為媒介闡述了SQL注入攻擊原理、詳細(xì)操作步驟和防范方法。
SQL注入攻擊主要是指黑客通過(guò)系統(tǒng)開(kāi)發(fā)中存在的漏洞,向系統(tǒng)中注入不合法的SQL查詢語(yǔ)句,以此獲取系統(tǒng)中的敏感數(shù)據(jù)或服務(wù)器控制權(quán)。高校網(wǎng)絡(luò)安全管理員想要保護(hù)學(xué)校網(wǎng)站不受SQL注入攻擊,就要了解其入侵原理,本文通過(guò)SQLmap這款黑客常用的滲透測(cè)試工具來(lái)講解入侵原理和詳細(xì)操作步驟。
使用SQLMap 進(jìn)行注入攻擊的步驟是手動(dòng)檢測(cè)判斷注入點(diǎn),逐步得到web數(shù)據(jù)庫(kù)信息(如數(shù)據(jù)庫(kù)類(lèi)型、數(shù)據(jù)庫(kù)版本)、數(shù)據(jù)庫(kù)的名稱(chēng)、當(dāng)前數(shù)據(jù)庫(kù)中所有表名、列名,然后得到后臺(tái)管理員帳號(hào)、密碼,找到網(wǎng)站后臺(tái)地址并登錄。入侵者能夠使用找到的注入點(diǎn),執(zhí)行自己想要的SQL語(yǔ)句,隨意修改web數(shù)據(jù)庫(kù)中的內(nèi)容(如把所有新聞標(biāo)題改為入侵者想要的標(biāo)題和內(nèi)容),刪除表或數(shù)據(jù)庫(kù)等。
(1)手工檢測(cè)判斷注入點(diǎn)。
手工檢測(cè)系統(tǒng)是否存在漏洞非常關(guān)鍵,方法是打開(kāi)網(wǎng)站中有參數(shù)傳遞的網(wǎng)頁(yè)(如通知公告中的/list.asp?id=11)用注入命令來(lái)進(jìn)行測(cè)試。通常的做法是在某些網(wǎng)站 URL地址后加上一些特殊構(gòu)造的字符串,根據(jù)返回的結(jié)果,以確定這個(gè)網(wǎng)站是否可以被注入,常用的判斷手段是單引號(hào)測(cè)試法和1=2測(cè)試法。操作方法是在某個(gè)測(cè)試url地址后加單引號(hào)’來(lái)判斷,提示錯(cuò)誤。替換判斷語(yǔ)句為 and 1=1,返回正常頁(yè)面。替換語(yǔ)句為:and 1=2,頁(yè)面再次返回錯(cuò)誤,由此可見(jiàn),這個(gè)url地址有注入點(diǎn)可以被利用。
假如地址:http://www.test.com/Art_Show.php?id=2是注入點(diǎn)。(2)利用SQLMap注入數(shù)據(jù)庫(kù)。
打開(kāi)滲透測(cè)試軟件SQLMap輸入:
Python sqlmap.py -u "http://www.test.com/Art_Show. php?id=2"
對(duì)注入點(diǎn)進(jìn)行檢測(cè),注入成功后,將會(huì)顯示數(shù)據(jù)庫(kù)管理系統(tǒng)的類(lèi)型。
(3)獲取數(shù)據(jù)庫(kù)信息。
在SQLMap中輸入:python sqlmap.py -u "http://www. test.com/Art_Show.php?id=2" --current-db獲取當(dāng)前數(shù)據(jù)庫(kù)名稱(chēng)后,繼續(xù)輸入:python sqlmap.py -u "http://www.test.com/ Art_Show.php?id=2" -D mys tables
可以得到數(shù)據(jù)庫(kù)表。有了數(shù)據(jù)庫(kù)表名,下一步就是獲取列名,輸入:
python sqlmap.py -u "http://www.test.com/ Art_Show.php?id=2" -D mys -T zzcms_admin --columns
得到管理員表的列名。列名有了,下一步是獲取賬號(hào)和密碼,輸入:
python sqlmap.py -u "http://www.test.com/ Art_Show.php?id=2" -D mys -T zzcms_admin -C name, password --dump
得到name和password內(nèi)的賬戶密碼。
在攻擊者擁有了賬號(hào)和密碼之后,登錄網(wǎng)站后臺(tái),然后利用后臺(tái)的上傳功能上傳網(wǎng)頁(yè)木馬或者webshell,實(shí)施對(duì)服務(wù)器端的控制、添加一個(gè)管理員賬號(hào)等。
知道SQL注入的原理后,高校網(wǎng)站管理員應(yīng)當(dāng)從下面五個(gè)方面采取防護(hù)措施:
(1)對(duì)數(shù)據(jù)進(jìn)行有效性檢測(cè)。加強(qiáng)對(duì)客戶端輸入數(shù)據(jù)的驗(yàn)證,限制文本輸入框(如登錄系統(tǒng)、搜索系統(tǒng))只輸入英文小寫(xiě)、數(shù)字和下劃線,過(guò)濾用戶輸入?yún)?shù)中的危險(xiǎn)字符、特殊字符,如單引號(hào),分號(hào)、括號(hào)等。此外,還應(yīng)限制數(shù)據(jù)長(zhǎng)度,例如限制文本框的輸入長(zhǎng)度在10個(gè)字符以內(nèi),因?yàn)橐话阌糜赟QL注入攻擊的語(yǔ)句都有一定長(zhǎng)度,通過(guò)這樣的限制可以增加黑客攻擊的難度。
(2)屏蔽網(wǎng)站錯(cuò)誤返回頁(yè)面。通常入侵者會(huì)利用網(wǎng)頁(yè)SQL注入點(diǎn)提交攻擊代碼,提交后根據(jù)頁(yè)面回顯信息得到網(wǎng)站使用的哪種數(shù)據(jù)庫(kù)系統(tǒng)、數(shù)據(jù)庫(kù)版本、網(wǎng)站目錄等關(guān)鍵信息。若網(wǎng)站未關(guān)閉 aspx錯(cuò)誤遠(yuǎn)程顯示,攻擊者就能獲取網(wǎng)站目錄地址及函數(shù)調(diào)用堆棧等重要信息。若Web網(wǎng)站目錄未關(guān)閉匿名瀏覽權(quán)限,攻擊者可作為下一步攻擊的基礎(chǔ),如攻擊過(guò)程中的各種臨時(shí)文件放入此目錄,便于觀察和調(diào)試。因此,開(kāi)發(fā)人員可以專(zhuān)門(mén)做一個(gè)簡(jiǎn)單的網(wǎng)站訪問(wèn)錯(cuò)誤頁(yè)面,給予用戶訪問(wèn)提示,而不包含任何關(guān)于服務(wù)器或網(wǎng)站的有用信息。
(3)過(guò)濾敏感字符。增加過(guò)濾器屏蔽特殊字符,例如%,#,@,CR等可能被利用的查詢字符串。對(duì)用戶在地址欄的輸入、傳入的參數(shù)等進(jìn)行校驗(yàn),通過(guò)正則表達(dá)式,對(duì)單引號(hào)、敏感字符串進(jìn)行判斷和過(guò)濾,不讓特殊構(gòu)造的非法SQL語(yǔ)句執(zhí)行,阻止非法用戶不經(jīng)過(guò)授權(quán)進(jìn)行登錄。
(4)將數(shù)據(jù)進(jìn)行封裝和加密。編程時(shí),通過(guò)參數(shù)化的語(yǔ)句來(lái)傳遞用戶輸入變量,而不是將其直接嵌入到SQL語(yǔ)句中。或者使用session語(yǔ)句傳遞用戶輸入變量,而不是cookie,不要攻擊者采集cookie里的口令信息。另外,對(duì)管理員和普通用戶登錄網(wǎng)站的用戶名和口令使用加密方式保存,增加數(shù)據(jù)的安全性。
(5)定期檢查網(wǎng)站。使用專(zhuān)業(yè)的漏洞掃描工具來(lái)尋找可能被攻擊的點(diǎn),每隔一段時(shí)間定期掃描網(wǎng)站漏洞,一旦發(fā)現(xiàn)存在漏洞,立即修復(fù),提前防范SQL注入攻擊。
隨著高校信息化的發(fā)展,學(xué)校的網(wǎng)站應(yīng)用越來(lái)越多,一些新型的SQL注入攻擊方法層出不窮,對(duì)于高校網(wǎng)站中的SQL注入攻擊的防范也需不斷加強(qiáng)。首先,高校在開(kāi)發(fā)應(yīng)用時(shí)應(yīng)盡量采用先進(jìn)的技術(shù),規(guī)范編程語(yǔ)句,過(guò)濾用戶輸入,提前做好防護(hù)措施。其次,在網(wǎng)站開(kāi)通前進(jìn)行全方位的安全測(cè)試,在后期維護(hù)網(wǎng)站時(shí)定期使用漏洞掃描工具進(jìn)行掃描,及時(shí)修復(fù)網(wǎng)站漏洞。最后,使用web防火墻阻擋網(wǎng)站攻擊,盡可能地降低SQL注入攻擊帶來(lái)的網(wǎng)絡(luò)安全風(fēng)險(xiǎn),保證高校web網(wǎng)站的安全。
[1]焦玉華.WEB系統(tǒng)中SQL注入防御方法的研究[J].大眾科技, 2015.
[2]方友志.基于高校Web應(yīng)用中SQL注入攻擊與防范研究[J].電腦知識(shí)與技術(shù), 2016.
[3]范義山.SQL注入防護(hù)—從一款注入工具入侵原理入手[J].科技視界, 2016.
[4]林金娜.淺談高校網(wǎng)站安全中 SQL注入問(wèn)題[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2016.
[5]歐賢,楊世海.SQL注入攻擊原理與防范技術(shù)研究[J]. 數(shù)字技術(shù)與應(yīng)用,2016.
[6]王云,郭外萍,陳承歡.Web項(xiàng)目中的SQL注入問(wèn)題研究與防范方法[J].計(jì)算機(jī)工程與設(shè)計(jì),2010.
[7]王湘渝,劉豪.SQL注入攻擊及其防范技術(shù)研究[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2009.
[8]黃曉兵,彭健,余昌騏.SQL注入攻擊方法及預(yù)防措施的研究[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2010.
中國(guó)民航飛行學(xué)院青年基金項(xiàng)目(Q2014-118)。
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2017年5期