孫海波 劉志斌 張鳳雨 馮偉



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