版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第1期題目PAGE28第5期遼寧省電子信息產(chǎn)品監(jiān)督檢驗院年度論文2009年1月-PAGE4-SQL注入攻擊漏洞研究與防范措施StructuredQueryLanguageInjectionLeakStudyAndDefenseMeasure姜志坤摘要:在當今的數(shù)字世界中,人們發(fā)現(xiàn)在維持公開的Internet連接的同時,保護網(wǎng)絡和計算機系統(tǒng)的安全變得越來越困難。病毒、木馬、后門、蠕蟲等攻擊層出不窮,虛假網(wǎng)站的釣魚行為也讓警惕性不高的公眾深受其害。為了減輕信息泄露及系統(tǒng)被攻擊帶來的風險,企業(yè)和機構(gòu)開始對自己的系統(tǒng)進行滲透測試,找出其中存在的漏洞和薄弱環(huán)節(jié)。本文通過對目前最流行的SQL注入攻擊漏洞的攻擊方法做了逐一的分析,并提出了檢測和防范的措施。關鍵字:SQL注入攻擊腳本攻擊網(wǎng)絡安全攻擊防范模型有害代碼SQL注入(SQLInjection)攻擊是目前網(wǎng)上最流行最熱門的黑客腳本攻擊方法之一,那什么是SQL注入式攻擊呢?它是指黑客利用一些Web應用程序(論壇、留言本、文章發(fā)布系統(tǒng))中某些疏于防范的用戶可以提交或修改的數(shù)據(jù)的頁面,精心構(gòu)造SQL語句,把特殊的SQL指令語句插入到系統(tǒng)實際SQL語句中并執(zhí)行它,以獲得用戶名、密碼等敏感信息,從而達到獲取主機控制權(quán)限的攻擊方法。1.SQL注入攻擊原理1.1SQL注入攻擊實現(xiàn)原理結(jié)構(gòu)化查詢語言(SQL)是一種用來和數(shù)據(jù)庫交互的文本語言,SQLInjection就是利用某些數(shù)據(jù)庫的外部接口把用戶數(shù)據(jù)插入到實際的數(shù)據(jù)庫操作語言當中,從而達到入侵數(shù)據(jù)庫乃至操作系統(tǒng)的目的。它的產(chǎn)生主要是由于程序?qū)τ脩糨斎氲臄?shù)據(jù)沒有進行細致的過濾,導致非法數(shù)據(jù)的導入查詢。SQL注入攻擊主要是通過構(gòu)建特殊的輸入,這些輸入往往是SQL語法中的一些組合,這些輸入將作為參數(shù)傳入Web應用程序,通過執(zhí)行SQL語句而執(zhí)行入侵者想要的操作,下面以登錄驗證中的模塊為例,說明SQL注入攻擊的實現(xiàn)方法。在Web應用程序的登錄驗證程序中,一般有用戶名(username)和密碼(password)兩個參數(shù),程序會通過用戶所提交輸入的用戶名和密碼來執(zhí)行授權(quán)操作。其原理是通過查找user表中的用戶名(username)和密碼(password)的結(jié)果來進行授權(quán)訪問,典型的SQL查詢語句為:Select*fromuserswhereusername=′admin′andpassword=′smith′如果分別給username和password賦值“admin'or1=1--”和“aaa”。那么,SQL腳本解釋器中的上述語句就會變?yōu)?select*fromuserswhereusername=′admin′or1=1--andpassword=′aaa′該語句中進行了兩個判斷,只要一個條件成立,則就會執(zhí)行成功,而1=1在邏輯判斷上是恒成立的,后面的“--”表示注釋,即后面所有的語句為注釋語句。同理通過在輸入?yún)?shù)中構(gòu)建SQL語法還可以刪除數(shù)據(jù)庫中的表,查詢、插入和更新數(shù)據(jù)庫中的數(shù)據(jù)等危險操作:(1)droptableauthors—如果存在authors表則刪除。(2)unionselectsum(username)fromusers—從users表中查詢出username的個數(shù)。(3)insertintousersvalues(666,′attacker′,′foobar′,0xffff)—在user表中插入值。(4)unionselect@@version,1,1,1--查詢數(shù)據(jù)庫的版本。(5)execmaster.xp_cmdshell′dir′通過xp_cmdshell來執(zhí)行dir命令。1.2SQL注入攻擊分析SQL注入可以說是一種漏洞,也可以說是一種攻擊。當程序中的變量處理不當,對用戶提交的數(shù)據(jù)過濾不足,都可能產(chǎn)生這個漏洞。它的攻擊原理就是利用用戶提交或可修改的數(shù)據(jù),把想要的SQL語句插入到系統(tǒng)實際SQL語句中,輕則獲得敏感的信息,重則控制服務器。例如Web應用有一個登錄頁面,這個登錄頁面控制著用戶是否有權(quán)訪問應用,要求用戶輸入一個名稱和密碼。攻擊者在用戶名字和密碼輸入框中輸入1'or'1'='1之類的內(nèi)容。該內(nèi)容提交給服務器之后,服務器運行上面的代碼構(gòu)造出查詢用戶的SQL命令,但由于攻擊者輸入的內(nèi)容非常特殊,所以最后得到的SQL命令變成:“select*fromuserswhereusername=''or'1'='1'andpassword=''or'1'='1'”。2.SQL注入攻擊的檢測方式及方法2.1檢測方式SQL注入攻擊檢測分為入侵前的檢測和入侵后的檢測。入侵前的檢測,可以通過手工方式,也可以使用SQL注入工具軟件。檢測的目的是為預防SQL注入攻擊,而對于SQL注入攻擊后的檢測,主要是針對日志的檢測,SQL注入攻擊成功后,會在IIS日志和數(shù)據(jù)庫中留下“痕跡”。2.2檢測方法(1)輸入驗證檢查動態(tài)的SQL語句是一個進行數(shù)據(jù)庫查詢的強大的工具,但把它和用戶輸入混合在一起就使SQL注入成為了可能。將動態(tài)的SQL語句替換成預編譯的SQL或者存儲過程對大多數(shù)應用程序是可行的。預編譯的SQL或者存儲過程可以將用戶的輸入作為參數(shù)而不是SQL命令來接收,這樣就限制了入侵者的行動。當然,它不適用于存儲過程中利用用戶輸入來生成SQL命令的情況。在這種情況下,用戶輸入的SQL命令仍可能得到執(zhí)行,數(shù)據(jù)庫仍然有受SQL注入攻擊的危險。如果一個輸入框只可能包括數(shù)字,那么要通過驗證確保用戶輸入的都是數(shù)字。如果可以接受字母,那就要檢查是不是存在不可接受的字符。確保應用程序要檢查以下字符:分號、等號、破折號、括號以及SQL關鍵字。(2)數(shù)據(jù)檢查使用HDSI、NBSI和Domain等SQL注入攻擊軟件工具進行SQL注入攻擊后,都會在數(shù)據(jù)庫中生成一些臨時表。通過查看數(shù)據(jù)庫中最近新建的表的結(jié)構(gòu)和內(nèi)容,可以判斷是否曾經(jīng)發(fā)生過SQL注入攻擊。(3)日志檢查在Web服務器中如果啟用了日志記錄,則IIS日志會記錄訪問者的IP地址,訪問文件等信息,SQL注入攻擊往往會大量訪問某一個頁面文件(存在SQL注入點的動態(tài)網(wǎng)頁),日志文件會急劇增加,通過查看日志文件的大小以及日志文件中的內(nèi)容,也可以判斷是否發(fā)生過SQL注入攻擊。(4)其他SQL注入攻擊成功后,入侵者往往會添加用戶、開放3389遠程終端服務以及安裝木馬后門等,可以通過查看系統(tǒng)管理員賬號、遠程終端服務器開啟情況、系統(tǒng)最近日期產(chǎn)生的一些文件等信息來判斷是否發(fā)生過入侵。3.SQL注入攻擊防范模型及措施3.1防范模型在前人提出的SQL注入攻擊的檢測/防御/備案模型基礎上,本人進行了檢測過程的優(yōu)化,提出了一種SQL自動防范模型如圖1所示,本模型中所有檢測都在服務器端進行。首先對IP地址進行檢測,如果該IP地址在SQL注入攻擊庫中,則禁止該用戶的訪問,并再次將相關信息添加到SQL注入攻擊庫中;如果用戶是首次訪問,則對提交字符進行檢測,如果是非法字符,則檢測是否達到規(guī)定的訪問值,如果達到則禁止用戶訪問,同時發(fā)送郵件給系統(tǒng)管理員。本模型可以防止攻擊者窮舉攻擊并可自由設置攻擊次數(shù)的上限,一旦到達上限,系統(tǒng)將自動發(fā)送郵件給管理員,管理員收到郵件后可以進行相應的處理,如果條件允許,還可以增加短信發(fā)送,增強SQL注入攻擊的自動防范能力??蛻舳颂峤恍畔⒖蛻舳颂峤恍畔⒎掌鳈z測Sql注入庫中檢測IP地址是否存在服務器端字符串檢測檢測字符串是否合法正確訪問地址禁止訪問服務器進行備案是否超過指定訪問值發(fā)送Email是是是否否否圖1本模型的最大特點是自動將攻擊信息及時地傳遞給管理員,方便管理員及時做出響應。核心代碼如下:substopit()response.write"存在禁止訪問ip地址:"&rs("ip")response.endresponse.redirect"noright.asp"endsubdimattack_browser,attack_ip,attack_hostattack_browser=Request.ServerVariables("Http_User_Agent")attack_ip=Request.ServerVariables("ReMote_Addr")attack_host=Request.ServerVariables("Remote_Host")setrs1=server.createobject("adodb.recordset")'從訪問禁止ip中查詢是否存在訪問者的IP地址,如果存在則禁止其訪問SQL1="selectipfromprohibit_ipwhereip=′"&attack_ip&"′"rs1.openSQL1,conn,1,3ifnotrs1.eofthencallstopit()endifrs1.closesetrs1=nothing'從系統(tǒng)防范設置中查出email地址和運行的訪問次數(shù)setrs2=server.createobject("adodb.recordset")SQL2="select*fromD_setup"rs2.openSQL2,conn,1,3ifnotrs2.eofthensession("email")=rs2("email")session("ok_count")=rs2("ok_count")endifrs2.closesetrs2=nothingurl=Request.ServerVariables("Query_String")callchk(url)'從Attack_count表中獲取A_count的次數(shù),如果A_count次數(shù)不小于默認的訪問次數(shù)則禁止ifchk(url)thensetrs3=server.createobject("adodb.recordset")SQL3="selectA_countfromattack_count"rs3.openSQL3,conn,1,3ifnotrs3.eofthenifrs3("A_count")>=session("ok_count")then'插入攻擊記錄信息到attack_record表中t1_SQL1="insertintoAttack_record(ip,Attacktime,Host,Browser)value(′"&attack_ip&"′,now(),′"&attack_host&"′,′"&attack_browser&"′)"setrsdel=conn.execute(t1_SQL1)callstopit()ok=Jmail(session("email"),"SQL注入攻擊告警!","攻擊者IP地址:"&attack_ip)elsetemp_a_count=rs3("a_count")+1'插入攻擊ip和a_count信息到Attack_count表中t1_SQL2="insertintoAttack_count(ip,A_count)value(′"&attack_ip&"′,′"&temp_a_count&"′)"setrsdel=conn.execute(t1_SQL2)endifendif3.2防范措施SQL注入攻擊防范方法目前已經(jīng)有很多,總結(jié)起來有以下方法:(1)在服務端正式處理之前對提交數(shù)據(jù)的合法性進行檢查。如果一個輸入框只可能包括數(shù)字,那么要通過驗證確保用戶輸入的都是數(shù)字。如果可以接受字母,那就要檢查是不是存在不可接受的字符。確保應用程序要檢查以下字符:分號、等號、破折號、括號以及SQL關鍵字。另外限制表單或查詢字符串輸入的長度也是一個好方法。如果用戶的登錄名字最多只有10個字符,那么不要認可表單中輸入的10個以上的字符,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。(2)封裝客戶端提交信息;(3)替換或刪除敏感字符/字符串。使用雙引號替換掉所有用戶輸入的單引號,這個簡單的預防措施將在很大程度上預防SQL注射攻擊,單引號常常結(jié)束掉SQL語句,可能給予輸入者不必要的權(quán)力。用雙引號替換掉單引號可以使許多SQL注入攻擊失敗。如:“select*fromuserswhereusername=or1=1andpassword=or1=1”顯然會得到與“select*fromuserswhereusername=''or'1'='1'andpassword=''or'1'='1'”不同的結(jié)果。(4)屏蔽出錯信息。攻擊者有時從客戶端提交特殊的代碼,根據(jù)IIS給出的出錯提示信息來收集程序及服務器的信息,從而獲取想得到的資料。如果把IIS設置成不管出什么樣的ASP錯誤,只給出一種錯誤提示信息,那么攻擊者就沒辦法入侵了。(5)不要用字串連接建立SQL查詢,而使用SQL變量,因為變量不是可以執(zhí)行的腳本。動態(tài)的SQL語句是一個進行數(shù)據(jù)庫查詢的強大的工具,但把它和用戶輸入混合在一起就使SQL注入成為了可能。將動態(tài)的SQL語句替換成預編譯的SQL或者存儲過程對大多數(shù)應用程序是可行的。預編譯的SQL或者存儲過程可以將用戶的輸入作為參數(shù)而不是SQL命令來接收,這樣就限制了入侵者的行動。當然,它不適用于存儲過程中利用用戶輸入來生成SQL命令的情況。在這種情況下,用戶輸入的SQL命令仍可能得到執(zhí)行,數(shù)據(jù)庫仍然有受SQL注入攻擊的危險。(6)目錄最小化權(quán)限設置,給靜態(tài)網(wǎng)頁目錄和動態(tài)網(wǎng)頁目錄分別設置不同權(quán)限,盡量不給寫目錄權(quán)限;(7)修改或者去掉Web服務器上默認的一些危險命令,例如ftp、cmd、wscript等,需要時再復制到相應目錄;(8)將用戶登錄名稱、密碼等數(shù)據(jù)加密保存,然后再將它與數(shù)據(jù)庫中保存的數(shù)據(jù)比較,這相當于對用戶輸入的數(shù)據(jù)進行了“消毒”處理,用戶輸入的數(shù)據(jù)不再對數(shù)據(jù)庫有任何特殊的意義,從而
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年辣椒種植收購合同
- 游戲課程設計軟件
- 2024年礦山機械臺班費用支付及合同解除合同范本3篇
- 網(wǎng)站策劃書課程設計
- 自動化課程設計路燈觸摸
- 離合器的設計課程設計
- 線性vf轉(zhuǎn)換課程設計
- 我國小學課程設計
- 2024版事業(yè)單位工作人員聘用合同書版B版
- 2024年項目經(jīng)理聘請條件3篇
- 房地產(chǎn)中介公司業(yè)務管理制度
- 電大《生產(chǎn)與運作管理》2023-2024期末試題及答案(試卷代號2617)
- 中國腫瘤藥物治療相關惡心嘔吐防治專家共識(2022年版)解讀
- PLC應用技術(shù)(三菱機型)三菱大中型PLC
- GB 21258-2024燃煤發(fā)電機組單位產(chǎn)品能源消耗限額
- 《用戶體驗設計導論》
- 美團外賣運營知識試題
- 航空概論學習通超星期末考試答案章節(jié)答案2024年
- 業(yè)務流程可視化改善
- 期末復(知識清單)2024-2025學年人教PEP版(2024)英語三年級上冊
- 人教版六年級科學重點知識點
評論
0/150
提交評論