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