


摘" 要: 網絡安全工作日益受到重視,其中SQL注入漏洞檢測與修復是當前網絡安全領域的一個重要研究方向。文章基于Sqlmap軟件對數據庫注入漏洞檢測展開研究,從Sqlmap安裝及使用角度進行詳細分析,并提出SQL注入漏洞的防御及加固建議。
關鍵詞: Sqlmap軟件; SQL注入; 數據庫注入; 漏洞檢測; BurpSuite軟件
中圖分類號:TP309" " " " " 文獻標識碼:A" " "文章編號:1006-8228(2023)12-194-04
Application of Sqlmap in SQL injection vulnerability detection
Feng Hongjuan
(National Library of China, Beijing 100081, China)
Abstract: Network security has been paid more and more attention, in which SQL injection vulnerability detection and repair is an important research direction. Based on Sqlmap software, the detection of database injection vulnerabilities is studied, the installation and use of Sqlmap are analyzed in detail, and suggestions for the defense and reinforcement of SQL injection vulnerabilities are" put forward.
Key words: Sqlmap software; SQL injection; database injection; vulnerability detection; BurpSuite software
0 引言
網絡系統漏洞及各類網絡安全問題極大地妨礙了信息系統的正常運行,以致阻礙了人們通過網絡獲取服務的進程,給計算機的使用帶來風險。建設有序、安全的網絡環境對研究者是一個實際的挑戰。
漏洞檢測是重要的網絡安全技術,通過對信息系統的漏洞檢測,可及時掌握信息系統的漏洞和問題,在黑客攻擊之前做好加固和防范,這是主動的防御措施,可有效提升信息系統的網絡安全性[1]。
SQL注入是一種將SQL代碼插入或添加到應用(用戶)的輸入參數中的攻擊,之后再將這些參數傳遞給后臺的SQL服務器加以解析并執行,凡是構造SQL語句的步驟均存在被潛在攻擊的風險[2]。SQL注入漏洞常年占據各類漏洞排行榜前列。如果代碼和應用程序存在SQL注入漏洞,攻擊者可通過SQL注入訪問后端數據庫內容、遠程執行系統命令,在某些情況下甚至可以控制托管數據庫的服務器。根據注入點的不同,SQL注入可分為數字類型的注入、字符串類型的注入、搜索類型的注入等;根據提交方式的不同,SQL注入可分為GET型注入、POST型注入、COOKIE注入、HTTP頭注入等[3]。針對SQL注入安全漏洞的檢測和防御是網絡安全研究領域的熱點之一。目前常見的SQL注入漏洞檢測工具包含Sqlmap、The Mole、Pangolin、Sqlsus等軟件。
1 Sqlmap開源軟件介紹
Sqlmap軟件是一款自動化的SQL注入漏洞檢測工具,可用于測試各種數據庫注入漏洞,甚至可利用SQL注入漏洞,獲取數據庫服務器權限。作為國內外著名的滲透測試工具,其由Python寫成,具有開源且不斷更新的特點,備受業界關注[4,5]。它支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird等30余種數據庫的檢測,支持枚舉用戶、密碼、哈希、權限、角色、數據庫、數據表和列。
Sqlmap軟件可安裝在Windows和Linux操作系統上。因為Sqlmap軟件基于Python環境研發,所以第一步需安裝配置Python環境。第二步,下載并安裝Sqlmap。在Sqlmap官網https://sqlmap.org/,下載最新版Sqlmap安裝包,之后進行解壓縮即完成安裝。本文選用Sqlmap1.7.3,并對基于Sqlmap軟件探測MySQL數據庫注入漏洞展開詳細研究。
2 利用Sqlmap軟件對SQL注入漏洞進行檢測
2.1 GET型漏洞檢測[6]
2.1.1 指定測試目標
使用Sqlmap軟件檢測GET型漏洞,實施SQL注入時,首先需要指定測試目標,也就是檢測的鏈接。使用-u參數進行檢測(u即URL的簡寫),示例:sqlmap.py -u URL地址
當檢測目標是多個網絡鏈接時,可以將多個鏈接存儲在一個txt文件里,如test.txt,使用-m參數進行檢測(m為multiple的簡寫),示例:sqlmap.py -m test.txt。
2.1.2 指定測試目標的爬取深度
為收集更多的潛在的可能存在漏洞的鏈接,可以指定Sqlmap的檢測深度,使用參數--crawl。示例:Python.py -u URL地址 --crawl=5。
2.1.3 指定測試等級、測試風險
Sqlmap提供了level、risk參數,用來在檢測過程中指定測試等級和測試風險。
其中,--level用于指定測試等級,可選1-5,默認為1。當參數大于等于2時,會檢測cookie,當參數大于等于3時,會檢測user-agent和referer;--risk用于指定測試風險,可選0-3,默認為1,會檢測大部分的測試語句,2會增加基于事件的測試語句;3會增加or語句進行檢測。
2.1.4 指定SQL注入技術
Sqlmap支持六種SQL注入技術,分別是:基于布爾類型的盲注(boolean-based blind,參數為B);基于時間的盲注(time-based blind,參數為T);基于報錯的盲注(error-based,參數為E);聯合查詢注入(UNION query-based,參數為U);堆查詢注入(stacked queries,參數為S)及內聯查詢注入(Inline queries,參數為Q)。若不指定注入技術,Sqlmap實施注入時會依次使用以上技術。若對某系統比較熟悉,也可使用參數--technique,指定Sqlmap選用哪種注入方式進行檢測,以加快檢測進度。示例:sqlmap.py -u URL地址 --technique=B。
2.1.5 進一步探測數據庫信息
對于未檢測到SQL注入漏洞的情況,Sqlmap軟件操作界面會給予提示“all tested parameters do not appear to be injectable”。如軟件檢測結果提示為“SQL injection vulnerability has already been detected against ‘**’ ”(**即為測試鏈接),則表明測試目標已被探測到存在SQL注入漏洞,如圖1所示。
針對存在數據庫注入漏洞的目標,可進一步探測數據庫的各類詳細信息[7],具體包括如下信息:
⑴ 查詢數據庫用戶,使用參數--users,示例:sqlmap.py -u URL地址 --users --crawl=3。
⑵ 查詢所有數據庫,使用參數--dbs,示例:sqlmap.py -u URL地址 --dbs --crawl=3。
⑶ 查詢數據庫用戶密碼的哈希值,使用參數--passwords,示例:sqlmap.py -u URL地址 --passwords --crawl=3,如圖2所示,依次枚舉用戶及密碼哈希值,查詢到該庫root密碼為弱口令。
⑷ 根據數據庫名,查詢數據庫表,使用參數--tables,示例:sqlmap.py -u URL地址 --tables -D 庫名 --crawl=3,如圖3所示,查詢到某庫下有5個表,依次枚舉5個數據表的名稱。
⑸ 根據數據庫名、表名,查詢所有列名,使用--columns,示例:sqlmap.py -u URL地址 --columns -T 表名 -D 庫名 --crawl=3。
⑹ 查詢某表所有列的內容,使用--dump all columns,示例:sqlmap.py -u URL地址 --dump all columns -T 表名 -D 庫名 -crawl=3。
⑺ 查詢指定列的內容,使--cump -C,示例:sqlmap.py -u URL地址 --dump -C 列名 -T 表名 -D 庫名 -crawl=3。
2.2 POST型漏洞檢測
SQL注入漏洞除了存在于GET請求中,有時還存在于POST請求中,稱為POST型漏洞。針對POST型漏洞,無法直接通過Sqlmap -u進行探測,一般需結合BurpSuite軟件,通過BurpSuite抓包,查看請求、獲取日志文件,之后借助Sqlmap進行SQL注入探測。
2.2.1 安裝JDK,安裝BurpSuite
BurpSuite軟件是一款Web應用程序滲透測試集成平臺,包含截包分析、暴力破解、修改包數據、掃描網站等功能[8-9]。BurpSuite軟件由Java語言編寫,運行時,依賴Java環境,它通過攔截HTTP、HTTPS協議的流量,以中間人的方式對客戶端情況、服務器端返回信息,進行處理,以實現安全檢測的目的[10]。安裝BurpSuite軟件,首先需要安裝Java環境,之后安裝BurpSuite安裝包。
2.2.2 設置BurpSuite代理
正常情況使用瀏覽器訪問網站是直接訪問,如果需要對請求進行攔截,則需將瀏覽器請求傳往BurpSuite,所以需要先設置BurpSuite代理[11-12]。將瀏覽器的代理服務器設置為BurpSuite,即默認的127.0.0.1:8080。以火狐瀏覽器為例,首先下載安裝瀏覽器,之后下載安裝插件FoxyProxy Standard(下載地址:https://proxy-switchyomega.com/download/),新建情景模式,進行插件配置并保存,之后啟用插件Proxy SwitchyOmega插件按鈕,選擇相應情景模式。針對HTTPS鏈接,還需要下載安裝CA Certificate證書。
2.2.3 通過BurpSuite抓包,獲取日志文件
BurpSuite安裝成功并完成代理設置后,打開BurpSuite程序,在欄目“代理”(Proxy)下的“截斷”(Intercept)頁面,選擇攔截請求(Intercept is on),之后對包含POST請求的網站頁面進行操作,可在HTTP歷史記錄(HTTP history)下查看到相應的POST請求日志,如圖4所示,可選中一項POST請求或者多項POST請求,點擊鼠標右鍵進行保存,如保存為test.txt日志文件,完成日志文件的獲取。
2.2.4 對日志文件通過sqlmap進行檢測
Sqlmap提供了參數-r,用于對HTTP請求的日志文件進行檢測,r是英文字母request(請求)的首字母。若請求是HTTPS,檢測時需要增加參數“--force-SSL”。
示例1:檢測test.txt日志文件。
sqlmap.py -r test.txt
示例2:使用快速模式檢測日志文件。
sqlmap.py -r test.txt --batch
示例3:檢測日志文件,選用測試等級為5進行快速檢測(測試等級越高,檢測所需時間越長)。
sqlmap.py -r test.txt --level=5 --batch
3 SQL注入防御及安全加固策略
為有效應對SQL注入攻擊帶來的網絡安全威脅,提升系統網站的安全性,建議從以下方面進行考慮。
3.1 對網站特殊字符進行過濾
將拼接參數修改成預編譯的方式,將SQL語句和用戶提供的輸入數據分開處理。針對服務器端腳本生成的客戶端頁面,提交的表單或發出的連接請求中包含的變量,必須進行檢查[13],過濾其中包含的特殊字符,或對字符進行轉義處理。嚴格定義應用程序可接受的數據類型(如:字符串、字母、數字、字符等),驗證輸入中是否存在不正確的字符。采用這樣一種基本思路:使用肯定的定義而非否定的定義;不要向最終用戶顯示提供可用于策劃攻擊的信息(如表名);定義受允許的字符集。
3.2 加強對應用數據庫的權限管理
通過對數據庫權限的細粒度管理,提升系統安全性,防范SQL注入攻擊。如:嚴禁使用DBA權限作為應用所使用的鏈接賬戶,用戶角色應遵循最小權限原則。應用所使用的用戶關閉執行系統命令、查詢系統表功能。當前用戶權限完全控制在此應用所使用的數據表范圍內。
3.3 采用加密技術保護數據庫中的敏感數據
針對數據庫中存放的敏感數據,可考慮使用功能強大的加密算法。如針對驗證用戶身份的口令,不建議存儲數據本身,僅存儲數據哈希或其他算法加密后的數據。這樣攻擊者即使查看到存儲這些數據的表,也需要對口令哈希進行破解,才能獲取真口令,增加攻擊者破解口令的難度,提升敏感數據的安全性。
3.4 定期對系統進行漏洞檢測及安全加固
管理員可選用本文推薦的Sqlmap軟件或其他檢測工具對系統進行滲透測試、漏洞檢測,分析網站存在的風險隱患,及時進行漏洞修復、安全加固,加強對系統和數據庫日志的監測,化被動為主動,提升網絡安全主體意識和工作責任心,加強對信息系統的安全管理。
4 小結
SQL注入攻擊作為一種常見的Web攻擊方式,對各機構的網站與信息系統安全工作提出極大挑戰。只有從SQL注入漏洞檢測、防御、安全加固等多方面采取切實有效措施,才能降低乃至消除SQL注入攻擊帶來的威脅,避免數據泄露、網頁篡改等網絡安全事件的發生,保障網站及信息系統的安全性和穩定性。
參考文獻(References):
[1] 國家電網有限公司.常見網絡安全漏洞修復指南[M].北京:
中國電力出出版社,2018:1-16.
[2] [美]Justin Clarke著,施宏斌,葉愫譯.SQL 注入攻擊與防御[M].
北京:清華大學出版社,2010:5.
[3] 白鑫玉.SQL注入攻擊檢測技術研究[D].北京:北京交通
大學,2021.
[4] sqlmap:automatic SQL injection and database takeover tool
[EB/OL].https://sqlmap.org/.2023-05-15.
[5] 陳小兵,趙春,姜海,等.sqlmap從入門到精通[M].北京:北京
大學出版社,2019:1-4,127-136.
[6] 朱振方,張鵬.從實踐中學習sqlmap數據庫注入測試[M].
北京:機械工業出版社,2022:20-46.
[7] 王琦,白淼.滲透工具SqlMap GET注入使用及原理分析[J].
計算機安全,2013(6):73-76.
[8] BurpSuite超詳細安裝教程[EB/OL].https://www.cnblogs.
com/jiguibu/p/16373385.html.2023-06-02
[9] 滲透利器—BurpSuite基本介紹[EB/OL]. https://blog.csdn.
net/da13122318861/article/details/107337229.2023-06-06.
[10] 網絡安全工具-BurpSuite[EB/OL].https://blog.csdn.net/
wislove/article/details/102548280.2023-06-06.
[11] BurpSuite-代理和瀏覽器設置[EB/OL].https://blog.csdn.
net/elmoyan/article/details/126852647.2023-06-06.
[12] BurpSuite配置代理[EB/OL].https://blog.csdn.net/
weixin_44657888/article/details/124673652.2023-06-06.
[13] sql注入攻擊的防范措施有哪些[EB/OL].https://www.
php.cn/faq/498667.html.2023-06-18.