摘要:SQL注入是一種基于跨站請求偽造的技術,黑客可以利用跨站請求偽造來進行SQL注入獲得的管理員權限,進入網站任意獲得網站上的文件或者在網頁上加掛木馬和各種惡意程序,對網站和訪問該網站的網友都帶來巨大危害。該文主要介紹了SQL注入的原理、方法及防范措施。
關鍵詞:SQL注入;數據庫;權限;密碼
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)14-3592-01
1 引言
ASP編程簡便易學,初學者很容易掌握。在一段不長的時間里,就已經能夠編出比較完美的動態網站,但在安全性方面,新手最容易忽略的問題就是SQL注入漏洞的問題。用NBSI 2.0對網上的一些ASP網站稍加掃描,就能發現許多ASP網站存在SQL注入漏洞,高校內部機構的一些網站這種漏洞就更普遍了,可能這是因為這些網站大都是一些學生做的緣故吧,雖然個個都很聰明,可是畢竟沒有經驗,而且處于學習中,難免存在漏洞了。如何有效地防范措施SQL注入呢?SQL注入一般存在于形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX等帶有參數的ASP動態網頁中,有時一個動態網頁中可能只有一個參數,有時可能有N個參數,有時是整型參數,有時是字符串型參數,不能一概而論。總之只要是帶有參數的動態網頁且此網頁訪問了數據庫,那么就有可能存在SQL注入。如果ASP程序員沒有安全意識,不進行必要的字符過濾,存在SQL注入的可能性就非常大。
2 什么是SQL注入
利用現有應用程序,將惡意的SQL命令注入到后臺數據庫引擎執行的能力,這是SQL注入的標準釋義。它一般通過互聯網的輸入區域,插入SQL meta-characters和指令,操縱執行后端的SQL查詢的技術。這些攻擊主要針對其他組織的WEB服務器。CSS攻擊通過在URL里插入script標簽,然后誘導信任它們的用戶點擊它們,確保惡意Javascript代碼在受害人的機器上運行。這些攻擊利用了用戶和服務器之間的信任關系,事實上服務器沒有對輸入、輸出進行檢測,從而未拒絕javascript代碼。
SQL注入是從正常的WWW端口訪問,而且表面看起來跟一般的Web頁面訪問沒什么區別,所以目前市面的防火墻都不會對SQL注入發出警報,如果管理員沒查看IIS日志的習慣,可能被入侵很長時間都不會發覺。但是,SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據具體情況進行分析,構造巧妙的SQL語句,從而成功獲取想要的數據。
3 SQL注入的原理及分類
3.1 SQL-Injection的原理
SQL是一種用于關系數據庫的結構化查詢語言。它分為許多種,但大多數都松散地基于美國國家標準化組織最新的標準SQL-92。SQL語言可以修改數據庫結構和操作數據庫內容。當一個攻擊者能夠通過往查詢中插入一系列的SQL操作數據寫入到應用程序中去,并對數據庫實施了查詢,這時就已經構成了SQL-Injection。
3.2 SQL-Injection的分類
由于SQL-injection攻擊出要發生在B/S結構的應用程序上,而這些程序大部分都屬于互聯網的web站點,在這種情況下SQL-Injection同樣需要遵循HTTP協議,形成了兩種分類:POST方式注入和GET方式注入。
4 SQL-Injection的注入方法
4.1 常規注入方法
SQL注入攻擊本身就是一個常規性的攻擊,它可以允許一些不法用戶檢索你的數據,改變服務器的設置,或者在你不小心的時候黑掉你的服務器。
4.2 旁注
顧名思義就是從旁注入,也就是利用主機上面的一個虛擬站點進行滲透 ,此類手法多出現與虛擬主機站點。
4.3 盲注
通過構造特殊的SQL語句,在沒有返回錯誤信息的情況下進行注入。
4.4 跨站注入
攻擊者利用程序對用戶輸入過濾及判斷的不足,寫入或插入可以顯示在頁面上對其他用戶造成影響的代碼??缯咀⑷氲母呒壒艟蛯儆谶@種攻擊。
5 SQL注入的過程
SQL注入利用的是正常的HTTP服務端口,表面上看來和正常的web訪問沒有區別,隱蔽性極強,不易被發現。
第一步:判斷Web環境是否可以SQL注入。如果URL僅是對網頁的訪問,不存在SQL注入問題,如:http://news.xxx.com.cn/162414739931.shtml就是普通的網頁訪問。只有對數據庫進行動態查詢的業務才可能存在SQL注入,如:http://www.google.cn/webhp?id=18,其中?id=18表示數據庫查詢變量,這種語句會在數據庫中執行,因此可能會給數據庫帶來威脅。
第二步:尋找SQL注入點。完成上一步的判斷后,就要尋找可利用的注入漏洞,通過輸入一些特殊語句,可以根據瀏覽器返回信息,判斷數據庫類型,從而構建數據庫查詢語句找到注入點。
第三步:猜解用戶名和密碼。數據庫中存放的表名、字段名都是有規律可言的。通過構建特殊數據庫語句在數據庫中依次查找表名、字段名、用戶名和密碼的長度,以及內容。這個猜測過程可以通過網上大量注入工具快速實現,并借助破解網站輕易破譯用戶密碼。
第四步:尋找WEB管理后臺入口。通常WEB后臺管理的界面不面向普通用戶開放,要尋找到后臺的登陸路徑,可以利用掃描工具快速搜索到可能的登陸地址,依次進行嘗試,就可以試出管理臺的入口地址。
第五步:入侵和破壞。成功登陸后臺管理后,接下來就可以任意進行破壞行為,如篡改網頁、上傳木馬、修改、泄漏用戶信息等,并進一步入侵數據庫服務器。
6 SQL注入的危害
SQL注入的主要危害包括:1) 未經授權狀況下操作數據庫中的數據;2) 惡意篡改網頁內容;3) 私自添加系統帳號或者是數據庫使用者帳號;4) 網頁掛木馬。
無論你有多強大的防火墻規則設置或者非常勤于補漏的修補機制,如果你的網絡應用程序開發者沒有遵循安全代碼進行開發,攻擊者都能進入你的系統。SQL注入意味著數據庫被攻破,入侵者得到當前數據庫權限的同時,也獲得了整個數據庫服務器的管理權限,入侵者可通過數據庫管理權限得到系統權限,并為所欲為。
7 防止SQL注入的方法
很多新手從網上下載SQL通用防注入系統的程序,在需要防范注入的頁面頭部用來防止別人進行手動注入測試。可是如果通過SQL注入分析器就可輕松跳過防注入系統并自動分析其注入點。然后只需要幾分鐘,你的管理員賬號及密碼就會被分析出來。對于注入分析器的防范,首先我們要知道SQL注入分析器是如何工作的。在操作過程中,發現軟件并不是沖著“admin”管理員賬號去的,而是沖著權限(如flag=1)去的。這樣一來,無論你的管理員賬號怎么變都無法逃過檢測。
一般的做法是注冊兩個賬號,一個是普通的管理員賬號,一個是防止注入的賬號,理由是如果找一個權限最大的賬號制造假象,吸引軟件的檢測,而這個賬號里的內容是大于千字以上的中文字符,就會使軟件對這個賬號進行分析的時候進入全負荷狀態甚至資源耗盡而死機。具體做法如下:
1) 對表結構進行修改。將管理員的賬號字段的數據類型進行修改,文本型改成最大字段255(其實也夠了,如果還想做得再大點,可以選擇備注型),密碼的字段也進行相同設置。
2) 對表進行修改。設置管理員權限的賬號放在ID1,并輸入大量中文字符(最好大于100個字)。
3) 把真正的管理員密碼放在ID2后的任何一個位置(如放在ID549上)。
4) 在管理員登錄的頁面文件中寫入字符限制。
我們通過上面的四步完成了對數據庫的修改,就算對方使用這個有上千字符的賬號密碼也會被擋住的,而真正的密碼則可以不受限制。
參考文獻:
[1] 潘愛民.計算機網絡[M].4版.北京:清華大學出版社,2004.77-81.
[2] 謝希仁.計算機網絡[M].5版.北京:清華大學出版社,2008.101-108.
[3] 王吉軍.網絡安全機密與解決方案[M].5版.北京:清華大學出版社,2006.56-83.