◆張國防 楊登攀
基于Web 頁面的SQL注入研究
◆張國防 楊登攀
(海南軟件職業技術學院 海南 571400)
Web技術的發展使得基于C/S傳輸模式的通信逐漸被B/S的通信模式所取代,而Web源代碼具有易見性和入侵技術的更新,以及基于SQL的數據庫查詢語言構造聯合查詢語句,使得基于SQL注入的Web滲透模式成為一種直接面向數據庫的滲透方式,本文分析了SQL注入的原理,在目標靶機上完成了驗證試驗,提出了SQL注入發展的新方向。
SQL注入;Web;滲透
大型數據庫由于開發技術強,數據庫的維護技術團隊強大,每一個新版本的釋放都經過非常復雜的長時間的測試,這使得大型數據庫的漏洞難以發現,即便是發現漏洞,而針對這種漏洞的補丁更新快,從而使得針對這種大型數據庫的滲透比較困難。相反,對于中小型數據庫,尤其是不開放源代碼的數據庫,開發技術團隊沒有大型數據庫那樣強大,容易存在各種漏洞,這也成為黑客常常滲透的對象。Access數據庫是由各種數據表構成,這些表存儲用戶的各種數據,包括用戶的信息甚至還包括數據庫管理員的賬戶和密碼信息,數據庫管理員的賬戶信息往往單獨存儲在一張表中,至少存儲著管理員的賬戶和密碼。為了便于管理員對數據庫的維護,數據庫管理員往往對這些表起一個特殊的名稱,便于管理員記憶。這些工作雖然方便了管理員的工作,但也給數據庫帶來危險。一些有經驗的黑客高手往往是憑借對數據庫管理員這些職業習慣的判斷,利用各種方法對這些存儲管理員賬戶信息的表進行滲透,從而達到獲取數據庫管理員權限的目的。
Web技術的出現及大地推動了互聯網迅速遍及世界。它的方便、簡潔風格使得信息傳遞變得簡單化、大眾化,為人們進行信息溝通帶來極大的方便。但在這之前,人們利用網絡傳遞信息是基于C/S模式。企業搭建數據庫服務器,然后在用戶終端安裝專用的客戶端軟件,通過這種C/S模式跨網絡進行信息傳遞。直到現在,在一些特殊的行業,比如銀行、證券公司等金融行業仍然使用這種模式通信。由于C/S模式的開發成本和維護的復雜,逐漸出現了Web瀏覽器取代客戶端的B/S模式,直接使用瀏覽器訪問網站數據庫的通信模式,這種模式使得通信更簡單方便,逐漸成為互聯網用戶訪問網絡服務器的主流模式。但是,任何事物都有兩面性,隨著網絡黑客掌握的新技術的不斷更新,面對黑客新的滲透技術手段,Web逐漸地顯示出它脆弱的一面。
Web的脆弱性表現在以下幾方面:
①Web的源代碼很容易對用戶可見,一個稍微懂點Web技術的人員都可以通過鍵盤上的功能鍵看到Web的源代碼,Web傳遞的內容很容易被看見,即便是傳遞的變量參數信息,這對通過Web傳遞的管理員賬戶信息非常危險。②通過在瀏覽器的URL地址欄的地址信息很容易知道要訪問的網絡服務器使用的Web技術和網絡數據庫信息,比如在url地址欄出現?表示Web是通過get方法向數據庫查詢數據的。如果在瀏覽器的URL地址欄沒有出現“?”,這就表示Web是通過post方法訪問服務器的。③通過瀏覽器的URL地址欄里的信息可以發現Web技術與網絡服務器的數據庫類型。在小型網絡服務器配置中,最典型的配置是在Web服務器的頁面使用Asp技術,后臺使用Access數據庫,本論文的實驗環境就是Asp+Access模式。
當黑客想要對網站進行滲透注入時,需要做以下準備:搜集目標信息;尋找注入點;構造SQL語句進行滲透。
當要對一個目標進行滲透之前,需要盡可能多地搜集目標的詳細信息,包括目標站點的操作系統平臺類型、站點服務器類型、服務器端是否有防火墻、入侵防護設備、日志服務器的地址,目標開啟了那些端口、目標的IP地址、域名、注冊機構、管理者信息等,總之,搜集的信息越詳細越有利于攻擊者分析判斷。通過這些搜集到的信息,攻擊者可以判斷目標的全面信息數據,從而做出攻擊方式的選擇。
搜集目標信息的方法:對目標進行信息搜集可以使用各種方法,搜集目標信息的主要方式是使用各種探測工具,各種探測工具很多,攻擊者主要采用自己熟練的工具對目標進行探測掃描搜集目標的詳細信息。比較著名搜集目標信息的工具有nmap、woreshirk、sniffer等,另外還有一些網站就是用來對目標進行探測搜集信息的。在本文實驗中,根據瀏覽器URL地址欄里的信息出現了“?”符號,以及目標網頁擴展名為.asp,從而得知目標網站服務器應該是IIS服務器,數據庫是Access。
在確定了目標的信息之后,就需要尋找目標的注入點,注入點是在URL地址欄里進行判斷的,以本文實驗的目標靶機為例,判斷注入點的方法是在目標靶機上尋找某些頁面,如果在URL地址欄出現“?id=number”標志時,就有可能是注入點,但究竟是否注入點還有待確定。通過構造不同的SQL查詢語句來判斷該鏈接點是不是注入點。Asp服務器上安裝目標靶機,該靶機是一個名稱為“南方數據2.0”的網站,采用的Web技術是Asp,靶機使用的數據是Access,是典型的Asp+Access組合模型。判斷注入點的方法就是構造SQL語句,構造SQL語句的方法設置各種SQL查詢條件,設置邏輯判斷條件語句,例如“and 1=1”為真的條件,帶入到系統去查詢,當服務器響應頁面正常時說明這有可能是一個注入點,然后在設置"and 1=2"邏輯值為假的條件語句,當服務器響應頁面出錯了,說明這里確實是一個注入點。
在探測到數據庫注入點后,下一步需要做的事是猜測數據庫表名,如何猜測數據庫表名呢,就是根據經驗猜數據庫維護人員的職業習慣,一般情況下,數據庫管理員為數據庫維護方便,往往會給數據庫中存放管理員賬號信息的表起一些容易記住的名稱。數據庫中的表是由許多字段構成的,每個字段有自己的名稱,在存儲管理員賬戶的表中,存儲著賬戶和密碼信息,如要找到這些信息,就需要先確定表中的字段個數,需要構造SQL查詢語句,探測字段的個數,猜測字段個數可以使用二分法,從大到小猜測字段個數,這為下一步猜測表字段名稱做準備。
表中的每一個字段都有一個名字,每一個字段代表不同的意義,有些字段并不是入侵者所關心的,黑客只關心數據庫管理員賬戶名和密碼,所以在猜測字段名時只需猜存儲用戶名和密碼的字段名稱。
在猜出賬戶名和密碼字段名稱后,最后一步是破解字段內容,用戶賬戶字段名一般是明文信息,而密碼字段內容經常是使用MD5加密算法加密后的密文,黑客需要在互聯網上尋找MD5解密工具來解密密文。最后破解了用戶名和密碼信息,入侵者再尋找網站的管理員登錄界面,輸入用戶名和密碼就能以管理員身份進入網站后臺了。
本文研究了基于Web的SQL注入過程,分為尋找注入點、構造注入語句、探測數據庫名稱、探測數據表名稱、探測數據表字段名稱、最后探測表字段內容,獲取目標的賬戶和密碼,登錄目標網站后臺。這種基于Web的SQL注入比較煩瑣,猜測數據表名和數據字段名需要構造SQL語句,這是這種方法的不足之處。
[1]張國防.基于對比分析的計算機病毒防護研究[J].網絡安全技術與應用,2017.
[2]http://edu.51cto.com/course/6681.html.
[3]https://baike.baidu.com/item/sql%E6%B3%A8%E5%85%A5/150289?fr=aladdin.
[4]https://www.cnblogs.com/pursuitofacm/p/6706961.html.
本文受海南省自然科學基金資助(項目編號:618MS080)。