孫海波 劉志斌 張鳳雨 馮偉
【摘要】? ? 本文就工作中發(fā)現(xiàn)的一起SQL注入網(wǎng)絡(luò)安全漏洞,從事件經(jīng)過、驗證過程、防護建議幾個方面,對該漏洞進行了介紹。使讀者能夠?qū)QL注入漏洞有一個比較清晰的認識,防止攻擊者利用該漏洞對網(wǎng)站數(shù)據(jù)庫進行拖庫、撞庫、洗庫、社工庫等操作,進而導(dǎo)致數(shù)據(jù)泄露、修改網(wǎng)站內(nèi)容、控制網(wǎng)站等安全事件的發(fā)生。
【關(guān)鍵詞】? ? 網(wǎng)絡(luò)安全漏洞? ? SQL注入? ? 數(shù)據(jù)庫
隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,黑客攻擊網(wǎng)站的手段也不斷提高。借助某種技術(shù)手段,非法獲取機密數(shù)據(jù)或非法獲取高于系統(tǒng)給定權(quán)限的系列行為都屬于黑客攻擊[1]。如今犯罪分子利用網(wǎng)絡(luò)安全漏洞進行犯罪的行為已不鮮見,SQL(結(jié)構(gòu)化查詢語言,Structured Query Language)注入漏洞就是最常見的一種網(wǎng)絡(luò)安全漏洞。
網(wǎng)絡(luò)安全漏洞不容小覷。SQL注入屬于高危風險網(wǎng)絡(luò)安全漏洞,攻擊者通過SQL注入可以獲取到網(wǎng)站服務(wù)器的數(shù)據(jù)庫名、表名、字段名,進而得到整個網(wǎng)站服務(wù)器的數(shù)據(jù),對網(wǎng)站用戶的數(shù)據(jù)造成極大的安全威脅。除此以外,攻擊者在獲取到的數(shù)據(jù)庫信息中,可能得到很多用戶的信息,甚至是后臺系統(tǒng)管理員的帳號信息,利用管理員的權(quán)限對網(wǎng)頁進行惡意篡改。這樣不僅造成網(wǎng)站數(shù)據(jù)庫信息泄露,對整個網(wǎng)站系統(tǒng)也造成嚴重破壞。
一、事件經(jīng)過
筆者一直從事對網(wǎng)站的網(wǎng)絡(luò)安全漏洞掃描工作,于2021年3月發(fā)現(xiàn)一起比較典型的SQL注入漏洞,供讀者參考。漏洞詳細情況如下:漏洞名稱為SQL注入漏洞;漏洞數(shù)量1個;漏洞等級為高危;漏洞URL地址為 https://www.---.com/ehall/index.asp(“---”代表網(wǎng)站部分URL地址)。
漏洞描述為,SQL注入漏洞,就是通過執(zhí)行用戶輸入的SQL命令,獲取網(wǎng)站數(shù)據(jù)庫信息,簡單來說就是欺騙網(wǎng)站服務(wù)器從而執(zhí)行用戶輸入的惡意SQL命令。具體來說,SQL注入攻擊就是利用網(wǎng)站應(yīng)用程序存在的安全漏洞,向SQL語句中插入了異常代碼,改變原有的SQL命令語義,從而獲取到想要的數(shù)據(jù),達到攻擊目的。SQL注入的方法非常靈活多變,根據(jù)特定的情況設(shè)計特定的SQL命令,在實際工作中也會遇到很多不同的情況。黑客目的是如何構(gòu)造出巧妙的SQL命令,從而獲取想要的數(shù)據(jù)庫信息。而我們的目的,是如何防止黑客攻擊,保障網(wǎng)站的健康運行。
二、驗證過程
我們通過Web安全漏洞掃描工具,發(fā)現(xiàn)該網(wǎng)站下面的一個URL地址,存在SQL注入安全漏洞:https://www.---.com/ehall/index.asp?hall=1。下面我們開始對這個URL地址,進行漏洞驗證。
1.我們首先訪問主頁https://www.---.com/,并查看源代碼,發(fā)現(xiàn)存在https://www.---.com/ehall/頁面連接,如圖1所示,訪問該連接后繼續(xù)查看源代碼,又發(fā)現(xiàn)了https://www.---.com/ehall/index.asp?hall=1鏈接。
2.我們對發(fā)現(xiàn)的網(wǎng)頁連接進行數(shù)據(jù)請求,并對數(shù)據(jù)包進行抓取。我們采用GET請求方式,返回值為“200”,響應(yīng)正常,如圖2所示。
3.修改請求參數(shù)為“-1%20OR%203*2*1=6”,即“hall=-1%20OR%203*2*1=6”,我們看到無響應(yīng)包,證明服務(wù)器正在解析該請求。由此判斷該網(wǎng)頁連接可能存在SQL注入漏洞,如圖3所示。
4.使用sqlmap工具進行注入判斷。需要對請求方法進行變更,因為在使用sqlmap進行請求測試時,需要對POST中的參數(shù)進行測試,如果是GET請求不會對參數(shù)進行檢測,如圖4所示。
將該請求數(shù)據(jù)保存到文本文件中,文件名修改為2.txt,放到sqlmap根目錄下。sqlmap為開源項目,下載地址為http://sqlmap.org/,并且需要在python2的環(huán)境中運行。安裝好之后,就可以執(zhí)行命令進行測試了。
5.驗證漏洞。使用命令進行驗證:python2 sqlmap.py -r 2.txt --random-agent。其中“--random-agent”表示使用random-agent作為HTTP User-Agent頭值,不再使用sqlmap默認的HTTP User-Agent頭值,因為默認的HTTP User-Agent頭值帶有sqlmap字樣,容易被檢測設(shè)備發(fā)現(xiàn),添加random-agent之后會從sqlmap/data/txt/user-agents.txt文件中調(diào)用HTTP User-Agent頭值。命令執(zhí)行后,結(jié)果如圖5所示,我們可以看到一些關(guān)于服務(wù)器的敏感信息。
6.執(zhí)行命令,列出當前網(wǎng)站的數(shù)據(jù)庫:python2 sqlmap.py -r 2.txt --random-agent --current-db。命令執(zhí)行后如圖6所示,我們可以看到,這個網(wǎng)站的數(shù)據(jù)庫名為“birtvdata”,這比第5步中看到服務(wù)器敏感信息又更加深入了一步。
7.執(zhí)行命令,列出網(wǎng)站數(shù)據(jù)庫中的表:python2 sqlmap.py -r 2.txt --random-agent -D birtvdata –tables。執(zhí)行后如圖7所示,可以看到數(shù)據(jù)庫“birtvdata”中的表信息。由于數(shù)據(jù)庫表比較多,所以在圖7中我們只列出了部分表信息。這一步是在第6步的基礎(chǔ)之上進行的,即發(fā)現(xiàn)了數(shù)據(jù)庫名,然后再查看數(shù)據(jù)庫中的表信息。
通過以上的驗證步驟,我們已經(jīng)可以看到該網(wǎng)站服務(wù)器的一些敏感信息,并且查看到網(wǎng)站數(shù)據(jù)庫中的表信息,更深入的操作我們沒有再進行。如果是不法分子,完全可以進行拖庫,甚至是撞庫、洗庫、社工庫等操作,將網(wǎng)站數(shù)據(jù)庫進行導(dǎo)出,甚至是修改,可能會造成嚴重的后果。由此我們可以得出結(jié)論,這個網(wǎng)站存在SQL注入的網(wǎng)絡(luò)安全漏洞。
三、防護建議
SQL注入網(wǎng)絡(luò)安全漏洞,其本質(zhì)就是欺騙服務(wù)器,進而執(zhí)行惡意的SQL命令。SQL命令是以SQL語言為基礎(chǔ)的,實現(xiàn)對數(shù)據(jù)庫內(nèi)數(shù)據(jù)的查詢、增加、刪除、修改等操作,可大大提高效率。如果被不法分子執(zhí)行惡意的SQL命令,直接威脅到網(wǎng)站數(shù)據(jù)庫的安全,可能帶來嚴重的后果。造成SQL注入漏洞的原因主要有兩個:第一是網(wǎng)站對輸入的信息沒有進行嚴格過濾,第二是沒有對發(fā)送到數(shù)據(jù)庫的信息進行轉(zhuǎn)義。根據(jù)這兩點原因,我們歸納出針對SQL注入漏洞的防護措施主要有以下幾方面。
1.嚴格審查,對輸入信息進行校驗。檢查用戶輸入是否合規(guī),保證用戶輸入的信息合法,尤其是用戶的輸入不能直接被嵌入到SQL語句中,防止SQL注入漏洞。
2.完善機制手段,對用戶輸入SQL語句的語義進行完整性審查,確認SQL語句的功能目的沒有發(fā)生改變。
3.注重對網(wǎng)站數(shù)據(jù)庫的監(jiān)控。定期查看數(shù)據(jù)庫操作日志,尤其是檢查是否存在網(wǎng)站管理員操作以外的SQL語句執(zhí)行痕跡。
4.對于網(wǎng)站接入數(shù)據(jù)庫服務(wù)器使用的用戶,嚴禁其使用系統(tǒng)管理員權(quán)限。對于普通用戶的角色,應(yīng)遵循最小化權(quán)限原則,做到可管可控。比如網(wǎng)站上的普通用戶,只需要讀取數(shù)據(jù)庫內(nèi)容的權(quán)限,那么就禁止該類用戶對數(shù)據(jù)庫表的修改權(quán)限,如命令drop、insert、update、delete 等。
5.對用戶數(shù)據(jù)進行加密。對用戶名、登錄密碼等重要信息進行加密保存。防止用戶信息被泄露,對網(wǎng)站進行攻擊。
6.在不影響網(wǎng)站正常運行的前提下,使用參數(shù)化查詢,避免使用拼接SQL語句對數(shù)據(jù)庫查詢修改。
7.防止網(wǎng)站敏感信息泄露。網(wǎng)站在設(shè)計過程中,要避免出現(xiàn)一些敏感或者是詳細的報錯信息泄露,以防止不法分子對這些信息進行搜集,了解網(wǎng)站及服務(wù)器的情況,造成SQL注入或者其它漏洞的利用。
8.對網(wǎng)站進行定期漏洞掃描。定期掃描是發(fā)現(xiàn)網(wǎng)絡(luò)安全漏洞最好的方法,及時修復(fù)漏洞,防止網(wǎng)站及服務(wù)器遭到攻擊破壞。
四、結(jié)束語
網(wǎng)絡(luò)安全不容忽視,這是一個關(guān)系國家安全和主權(quán)、社會的穩(wěn)定、民族文化的繼承和發(fā)揚的重要問題,其重要性不言而喻。為了確保網(wǎng)站的安全,除了提升我們的專業(yè)技術(shù)水平外,還必須提高工作責任心,定期對網(wǎng)站進行漏洞掃描,發(fā)現(xiàn)問題及時處理,防患于未然。這次發(fā)現(xiàn)的SQL注入漏洞,我們通過幾個驗證步驟,就已經(jīng)可以看到網(wǎng)站數(shù)據(jù)庫中的數(shù)據(jù)表。如果漏洞被惡意攻擊者利用,可能會造成嚴重的后果。
2018年4月20日至21日,全國網(wǎng)絡(luò)安全和信息化工作會議在北京召開。中共中央總書記、國家主席、中央軍委主席、中央網(wǎng)絡(luò)安全和信息化委員會主任習近平同志指出,核心技術(shù)是國之重器。要下定決心、保持恒心、找準重心,加速推動信息領(lǐng)域核心技術(shù)突破。要抓產(chǎn)業(yè)體系建設(shè),在技術(shù)、產(chǎn)業(yè)、政策上共同發(fā)力。要遵循技術(shù)發(fā)展規(guī)律,做好體系化技術(shù)布局,優(yōu)中選優(yōu)、重點突破 [2]。
參? 考? 文? 獻
[1]潘崇霞,仲偉俊,梅姝娥.不同攻擊類型下風險厭惡型企業(yè)信息安全投資策略[J].系統(tǒng)工程學報,2019.34(4):497-510.
[2]新華社.習近平:自主創(chuàng)新推進網(wǎng)絡(luò)強國建設(shè). 2018-04-21. http://www.cac.gov.cn/2018-04/21/c_1122719824.htm.