趙 靜
(天津工業職業學院,天津 300400)
SQL注入技術最早出現在20世紀90年代,在我國則是在2002年后。微軟中國技術中心從腳本注入式攻擊和惡意用戶輸入兩個方面對其進行描述,進而影響執行的腳本。SQL注入攻擊可以描述為攻擊者利用SQL命令將請求的查詢字符串插入Web表單遞交或輸入域名或頁面,讓后臺數據庫執行惡意代碼的命令,并根據程序返回的結果,獲取需要的數據信息。
SQL注入是指Web應用程序沒有判斷用戶輸入數據的合法性或者對其過濾不嚴格,導致攻擊者可以在應用程序中的已經定義好的查詢語句中添加額外的語句,在管理員不知道的情況下進行操作,欺騙數據庫服務器執行非授權的任意查詢操作,得到相應的數據信息。SQL注入通過正常的www端口進行訪問,而且從表面上看和一般的頁面訪問沒有什么不同,假如管理員不經常查看日志,那么可能很長時間都不會知道服務器被黑客入侵了。SQL在注入的時候會發生很多意想不到的情況。黑客需要構造語句,獲取想要的數據。SQL注入攻擊通過操作輸入來修改語句,從而執行代碼對服務器進行攻擊;在表單、輸入域名和頁面請求的查詢字符串中插入數據庫語句命令,最終使用Web服務器執行惡意命令。
SQL注入最常用的方法包括注入判斷法和單引號法。
首先,開發人員在執行操作時,需要區分數字、字符串、用戶表名是數字型還是帶引號類型的。其次,查找內聯注入。內聯注入是指在插入查詢注入代碼后,原來的查詢不受影響,仍會全部執行。最后,終止式注入。終止式語句注入是指黑客在注入代碼時,可以注釋剩下的查詢,利用這種方式成功結束該語句。
1.4.1 基于布爾的盲注手法
Web的頁面返回值只有真或假,布爾盲注手法是注入后根據頁面返回值得到數據庫信息的一種辦法。1.4.2 基于時間的盲注手法
當布爾型注入沒有報錯也就是頁面顯示正常的時候,技術人員不能夠判斷是否執行了注入的代碼,也可以說不確定這個注入點是否存在,這個時候布爾型注入就無法發揮自己的作用。此時,基于時間的盲注手法應運而生。基于時間的盲注手法就是技術人員根據頁面相應的時間差來判斷該頁面是否存在一定的注入點。
1.4.3 聯合查詢注入手法
使用聯合查詢進行注入的前提是注入的頁面必須有顯示位。聯合查詢注入手法就是使用合并兩個或多個選擇語句的結果集,所以兩個及以上的選擇語句必須有相同的列,且各列的數據類型也都相同。聯合查詢注入可在鏈接最后添加order by,基于隨意數字的注入,根據頁面的返回結果來判斷站點中的字段數目[1]。1.4.4 基于錯誤信息的注入手法
此手法是在頁面沒有顯示位,函數輸出了錯誤信息的時候方能使用。優點是注入速度快,缺點是語句較為復雜,而且只能依次進行猜解??傮w來說,報錯注入是一種公式化的注入方法,主要在頁面中沒有顯示位而輸出了錯誤信息時使用。
進行注入時一般會用到兩種方式,一種是手工注入的方式,還有一種是利用工具注入。
第一步,注入點探測。探測注入點是關鍵的一步,研究者通過適當地對應用程序進行分析,可以判斷什么地方存在注入點。帶有輸入提交的動態網頁和從動態網頁訪問的數據庫,都可能存在注入漏洞。如果程序員信息安全意識不強,采用動態構造語句訪問數據庫,并且對用戶的輸入內容未進行有效性驗證,則存在注入漏洞的可能性很大。一般技術人員通過頁面的報錯信息內容來確定是否存在注入漏洞。第二步,收集后臺數據庫信息。不同數據庫的注入方法函數都不盡相同。因此在注入之前,技術人員先要判斷一下數據庫的類型。判斷數據庫類型的方法有很多,可以輸入特殊字符,比如單引號讓程序返回錯誤信息,技術人員根據錯誤信息提示進行判斷。除此之外,技術人員還可以使用特定函數來判斷。第三步,猜解用戶名和密碼。數據庫中的表和字段命名一般都是有規律的。通過構造特殊語句在數據庫中依次猜解出表名、字段名、字段數、用戶名和密碼。第四步,查找Web后臺管理入口。后臺管理通常不對普通用戶開放,要找到后臺管理的登錄網址,可以利用目錄掃描工具,如御劍等,快速搜索到可能的登錄地址,然后逐一嘗試,便可以找到后臺管理平臺的登錄網址。第五步,入侵。一般后臺管理具有較高的權限和較多的功能,使用前面已經破譯的用戶名和密碼成功登錄后臺管理平臺后,就可以任意進行破壞,比如上傳木馬、篡改網頁、修改和竊取信息等,還可以進一步提權,入侵Web服務器和數據庫服務器[2]。
(1)廣泛性,SQL注入攻擊的目標非常的廣泛,它可以跨越各種操作系統進行攻擊。任何一個基于SQL語言的數據庫都可能會被攻擊,很多開發人員在編寫Web應用程序時沒有對從輸入參數表單接收到的值進行規范性驗證和檢測,通常會出現注入漏洞。而且當前大家都在廣泛應用Web應用程序,而Web存在的漏洞相似程度都很高。(2)隱蔽性,注入語句一般都嵌入在普通的HTTP請求中,很難與正常語句進行區別,所以當前許多防火墻都沒有辦法識別并予以警告,而且注入變種非常多,攻擊者可以調整攻擊的參數,所以使用傳統的方法防御注入效果非常不理想。(3)攻擊時間短,操作方便。可在短短幾秒到幾分鐘內完成數據竊取、木馬種植、對整個數據庫或Web服務器進行控制,而且互聯網上有很多注入工具,攻擊過程簡單,不需要專業知識也能自如運用[3]。(4)危害大,攻擊者通過注入獲取到服務器的庫名、表名、字段名,從而獲取到整個服務器中的數據,對網站用戶的數據安全性有極大的威脅。攻擊者也可以通過獲取到的數據,得到后臺管理員的密碼,然后對網頁頁面進行惡意篡改。這樣不僅對數據庫信息安全造成嚴重威脅,對整個數據庫系統安全也影響重大。
1.7.1 檢測方式
SQL注入攻擊檢測方式可以分為兩個方面,即入侵前的檢測以及入侵后的檢測。不同的檢測也具有不同的方式,入侵前的檢測可以通過手工方式和注入工具軟件。注入攻擊后的檢測是針對日志的檢測,黑客注入成功后,會在log和數據庫中留下記錄。
1.7.2 檢測方法
對于數據庫查詢來說,動態的SQL語句是非常強大的工具,但是如果把用戶輸入和它放在一起就很有可能被黑客注入。存儲過程在接收用戶輸入的時候是作為參數而不是SQL命令,這樣就大大限制了入侵者的行動。當然,這種情況不適合用在以下方面,即存儲過程中利用用戶輸入來生成SQL命令。這時,依舊能夠正常執行用戶輸入的命令,數據庫仍然有可能存在注入風險。如果一個輸入框規定只能包括數字,在輸入的時候就要對輸入內容進行嚴格的驗證,即保證輸入的是數字。如果允許有字母輸入,那么就要檢測是否存在不合法的字符。黑客使用軟件工具進行攻擊后,一些臨時表會生成,并且會保存在數據庫中。技術人員要想判斷是否發生過注入攻擊可以通過查看數據庫中最近新建的表的結構內容。日志檢查如果啟用了日志記錄,那么訪問者的訪問文件和IP地址都會被記錄下來。判斷是否發生過注入攻擊可以通過查看日志文件的大小和內容。
打開實訓平臺,通過瀏覽器打開目標地址,在地址后加提交單引號,頁面返回錯誤,然后提交and 1=1頁面返回正常,然后再提交and 1=2頁面返回錯誤,提交and exists(select * from admin_user)判斷是否存在相應的表,如果存在頁面錯誤則返回正常,如果不存在,頁面返回錯誤。頁面返回正常,說明存在相應的表,然后用同樣的方法繼續提交語句來判斷字段名中的用戶名和密碼,如果存在用戶名和密碼字段則頁面返回正常,如果不存在則返回錯誤。頁面返回正常然后判斷當前頁面字段數,Order by 11頁面返回錯誤,修改為10頁面返回正常說明當前頁面有十個字段,然后提交聯合查詢語句,頁面顯示2和7,則在相應的位置上替換用戶名和密碼字段,得到字段值。
對于數據庫攻擊而言,SQL注入攻擊技術是目前主要方式之一。它利用惡意構造數據庫語句,或者嵌入SQL語句到注入點,最終獲取相應的數據庫中的數據。大多數的應用程序存在注入點,主要原因是程序員動態拼接了傳入的參數,從而使得黑客可以構造想要執行的語句,出現數據泄露問題。