久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SQL注入攻擊及其防范檢測技術研究

 深晨S 2018-01-28
2009-2-9 16:55    天極網(wǎng)

  【天極網(wǎng)開發(fā)頻道】本文簡要介紹了SQL注入攻擊的原理,,SQL注入攻擊實現(xiàn)過程,,并在此基礎上給出了一種SQL注入攻擊的自動防范模型。

  1 SQL注入攻擊概述

  1.1 SQL注入技術定義

  SQL注入(SQL Injection)技術在國外最早出現(xiàn)在1999年,,我國在2002年后開始大量出現(xiàn),,目前沒有對SQL注入技術的標準定義,微軟中國技術中心從2個方面進行了描述:

  (1)腳本注入式的攻擊

  (2)惡意用戶輸入用來影響被執(zhí)行的SQL腳本

  Chris Anley將SQL注入定義為,,攻擊者通過在查詢操作中插入一系列的SQL語句到應用程序中來操作數(shù)據(jù),。Stephen Kost[3]給出了SQL注入的一個特征,“從一個數(shù)據(jù)庫獲得未經授權的訪問和直接檢索”,。利用SQL注入技術來實施網(wǎng)絡攻擊常稱為SQL注入攻擊,,其本質是利用Web應用程序中所輸入的SQL語句的語法處理,針對的是Web應用程序開發(fā)者編程過程中未對SQL語句傳入的參數(shù)做出嚴格的檢查和處理所造成的,。習慣上將存在SQL注入點的程序或者網(wǎng)站稱為SQL注入漏洞,。實際上,SQL注入是存在于有數(shù)據(jù)庫連接的應用程序中的一種漏洞,,攻擊者通過在應用程序中預先定義好的查詢語句結尾加上額外的SQL語句元素,,欺騙數(shù)據(jù)庫服務器執(zhí)行非授權的查詢。這類應用程序一般是基于Web的應用程序,,它允許用戶輸入查詢條件,,并將查詢條件嵌入SQL請求語句中,發(fā)送到與該應用程序相關聯(lián)的數(shù)據(jù)庫服務器中去執(zhí)行,。通過構造一些畸形的輸入,,攻擊者能夠操作這種請求語句去獲取預先未知的結果。

  1.2 SQL注入攻擊特點

  SQL注入攻擊是目前網(wǎng)絡攻擊的主要手段之一,,在一定程度上其安全風險高于緩沖區(qū)溢出漏洞,,目前防火墻不能對SQL注入漏洞進行有效地防范,。防火墻為了使合法用戶運行網(wǎng)絡應用程序訪問服務器端數(shù)據(jù),,必須允許從Internet到Web服務器的正向連接,因此一旦網(wǎng)絡應用程序有注入漏洞,,攻擊者就可以直接訪問數(shù)據(jù)庫進而甚至能夠獲得數(shù)據(jù)庫所在的服務器的訪問權,,因此在某些情況下,,SQL注入攻擊的風險要高于所有其他漏洞。SQL注入攻擊具有以下特點:

  (1)廣泛性,。SQL注入攻擊利用的是SQL語法,,因此只要是利用SQL語法的Web應用程序如果未對輸入的SQL語句做嚴格的處理都會存在SQL注入漏洞,目前以Active/Java Server Pages,、 Cold Fusion Management,、 PHP、Perl等技術與SQL Server,、Oracle,、DB2、Sybase等數(shù)據(jù)庫相結合的Web應用程序均發(fā)現(xiàn)存在SQL注入漏洞,。

  (2)技術難度不高,。SQL注入技術公布后,網(wǎng)絡上先后出現(xiàn)了多款SQL注入工具,,例如教主的HDSI,、NBSI、明小子的Domain等,,利用這些工具軟件可以輕易地對存在SQL注入的網(wǎng)站或者Web應用程序實施攻擊,,并最終獲取其計算器的控制權。

  (3)危害性大,,SQL注入攻擊成功后,,輕者只是更改網(wǎng)站首頁等數(shù)據(jù),重者通過網(wǎng)絡滲透等攻擊技術,,可以獲取公司或者企業(yè)機密數(shù)據(jù)信息,,產生重大經濟損失。

  2 SQL注入攻擊的實現(xiàn)原理

  2.1 SQL注入攻擊實現(xiàn)原理

  結構化查詢語言(SQL)是一種用來和數(shù)據(jù)庫交互的文本語言,,SQL Injection就是利用某些數(shù)據(jù)庫的外部接口把用戶數(shù)據(jù)插入到實際的數(shù)據(jù)庫操作語言當中,,從而達到入侵數(shù)據(jù)庫乃至操作系統(tǒng)的目的。它的產生主要是由于程序對用戶輸入的數(shù)據(jù)沒有進行細致的過濾,,導致非法數(shù)據(jù)的導入查詢,。

  SQL注入攻擊主要是通過構建特殊的輸入,這些輸入往往是SQL語法中的一些組合,,這些輸入將作為參數(shù)傳入Web應用程序,,通過執(zhí)行SQL語句而執(zhí)行入侵者的想要的操作,下面以登錄驗證中的模塊為例,,說明SQL注入攻擊的實現(xiàn)方法,。

  在Web應用程序的登錄驗證程序中,一般有用戶名(username)和密碼(password)兩個參數(shù),程序會通過用戶所提交輸入的用戶名和密碼來執(zhí)行授權操作,。其原理是通過查找user表中的用戶名(username)和密碼(password)的結果來進行授權訪問,,典型的SQL查詢語句為:

  Select * from users where username='admin' and password='smith’

  如果分別給username和password賦值“admin' or 1=1--”和“aaa”。 那么,,SQL腳本解釋器中的上述語句就會變?yōu)椋?/p>

  select * from users where username=’admin’ or 1=1-- and password=’aaa’

  該語句中進行了兩個判斷,,只要一個條件成立,則就會執(zhí)行成功,,而1=1在邏輯判斷上是恒成立的,,后面的“--”表示注釋,即后面所有的語句為注釋語句,。同理通過在輸入?yún)?shù)中構建SQL語法還可以刪除數(shù)據(jù)庫中的表,,查詢、插入和更新數(shù)據(jù)庫中的數(shù)據(jù)等危險操作:

  (1)jo'; drop table authors—如果存在authors表則刪除,。

  (2)' union select sum(username) from users—從users表中查詢出username的個數(shù)

  (3)'; insert into users values( 666, 'attacker', 'foobar', 0xffff )—在user表中插入值

  (4)' union select @@version,1,1,1--查詢數(shù)據(jù)庫的版本

  (5)'exec master..xp_cmdshell 'dir' 通過xp_cmdshell來執(zhí)行dir命令

  2.2. SQL注入攻擊實現(xiàn)過程

  SQL注入攻擊可以手工進行,,也可以通過SQL注入攻擊輔助軟件如HDSI、Domain,、NBSI等,,其實現(xiàn)過程可以歸納為以下幾個階段:

  (1)尋找SQL注入點;尋找SQL注入點的經典查找方法是在有參數(shù)傳入的地方添加諸如“and 1=1”、“and 1=2”以及“’”等一些特殊字符,,通過瀏覽器所返回的錯誤信息來判斷是否存在SQL注入,,如果返回錯誤,則表明程序未對輸入的數(shù)據(jù)進行處理,,絕大部分情況下都能進行注入,。

  (2)獲取和驗證SQL注入點;找到SQL注入點以后,需要進行SQL注入點的判斷,,常常采用2.1中的語句來進行驗證,。

  (3)獲取信息;獲取信息是SQL注入中一個關鍵的部分,SQL注入中首先需要判斷存在注入點的數(shù)據(jù)庫是否支持多句查詢,、子查詢,、數(shù)據(jù)庫用戶賬號、數(shù)據(jù)庫用戶權限,。如果用戶權限為sa,,且數(shù)據(jù)庫中存在xp_cmdshell存儲過程,則可以直接轉(4),。

  (4)實施直接控制;以SQL Server 2000為例,,如果實施注入攻擊的數(shù)據(jù)庫是SQL Server 2000,且數(shù)據(jù)庫用戶為sa,,則可以直接添加管理員賬號,、開放3389遠程終端服務,、生成文件等命令。

  (5)間接進行控制,。間接控制主要是指通過SQL注入點不能執(zhí)行DOS等命令,只能進行數(shù)據(jù)字段內容的猜測,。在Web應用程序中,,為了方便用戶的維護,一般都提供了后臺管理功能,,其后臺管理驗證用戶和口令都會保存在數(shù)據(jù)庫中,,通過猜測可以獲取這些內容,如果獲取的是明文的口令,,則可以通過后臺中的上傳等功能上傳網(wǎng)頁木馬實施控制,,如果口令是明文的,則可以通過暴力破解其密碼,。

  3 SQL注入攻擊檢測方法與防范

  3.1 SQL注入攻擊檢測方法

  SQL注入攻擊檢測分為入侵前的檢測和入侵后的檢測,,入侵前的檢測,可以通過手工方式,,也可以使用SQL注入工具軟件。檢測的目的是為預防SQL注入攻擊,而對于SQL注入攻擊后的檢測,,主要是針對日志的檢測,,SQL注入攻擊成功后,會在IIS日志和數(shù)據(jù)庫中留下“痕跡”,。

  (1)數(shù)據(jù)庫檢查

  使用HDSI,、NBSI和Domain等SQL注入攻擊軟件工具進行SQL注入攻擊后,都會在數(shù)據(jù)庫中生成一些臨時表,。通過查看數(shù)據(jù)庫中最近新建的表的結構和內容,,可以判斷是否曾經發(fā)生過SQL注入攻擊。

  (2)IIS日志檢查

  在Web服務器中如果啟用了日志記錄,,則IIS日志會記錄訪問者的IP地址,,訪問文件等信息,SQL注入攻擊往往會大量訪問某一個頁面文件(存在SQL注入點的動態(tài)網(wǎng)頁),,日志文件會急劇增加,,通過查看日志文件的大小以及日志文件中的內容,也可以判斷是否發(fā)生過SQL注入攻擊,。

  (3)其它相關信息判斷

  SQL注入攻擊成功后,,入侵者往往會添加用戶、開放3389遠程終端服務以及安裝木馬后門等,,可以通過查看系統(tǒng)管理員賬號,、遠程終端服務器開啟情況,、系統(tǒng)最近日期產生的一些文件等信息來判斷是否發(fā)生過入侵。

  3.2 一般的SQL注入攻擊防范方法

  SQL注入攻擊防范方法目前已經有很多,,總結起來有下面一些:

  (1) 在服務端正式處理之前對提交數(shù)據(jù)的合法性進行檢查;

  (2) 封裝客戶端提交信息;

  (3) 替換或刪除敏感字符/字符串;

  (4) 屏蔽出錯信息,。

  (5)不要用字串連接建立SQL查詢,而使用SQL變量,,因為變量不是可以執(zhí)行的腳本;

  (6)目錄最小化權限設置,,給靜態(tài)網(wǎng)頁目錄和動態(tài)網(wǎng)頁目錄分別設置不同權限,盡量不給寫目錄權限;

  (7)修改或者去掉Web服務器上默認的一些危險命令,,例如ftp,、cmd、wscript等,,需要時再復制到相應目錄;

  (8)數(shù)據(jù)敏感信息非常規(guī)加密,,通過在程序中對口令等敏感信息加密都是采用md5函數(shù)進行加密,即密文=md5(明文),,本文推薦在原來的加密的基礎上增加一些非常規(guī)的方式,,即在md5加密的基礎上附帶一些值,如密文=md5(md5(明文)+123456);

  4 SQL注入攻擊防范模型

  4.1SQL注入攻擊防范模型

  在前人提出的SQL 注入攻擊的檢測/防御/備案模型基礎上[8][9], 我們進行了檢測過程的優(yōu)化,,提出了一種SQL自動防范模型如圖1所示,,本模型中所有檢測都在服務器端進行,首先對IP地址進行檢測,,如果該IP地址在SQL注入攻擊庫中,,則禁止該用戶的訪問,并再次將相關信息添加到SQL注入攻擊庫中;如果用戶是首次訪問,,則對提交字符進行檢測,,如果是非法字符,則檢測是否達到規(guī)定的訪問值,,如果達到則禁止用戶訪問,,同時發(fā)送郵件給系統(tǒng)管理員。本模型可以防止攻擊者窮舉攻擊并可自由設置攻擊次數(shù)的上限,,一旦到達上限,,系統(tǒng)將自動發(fā)送郵件給管理員,管理員收到郵件后可以進行相應的處理,,如果條件允許,,還可以增加短信發(fā)送,增強了SQL注入攻擊的自動防范能力,。

  本模型的最大特點是自動將攻擊信息及時的傳遞給管理員,,方便管理員及時做出響應。

  

  圖1 SQL注入攻擊自動防范模型

  核心代碼如下:

  sub stopit()response.write '存在禁止訪問ip地址:'&rs('ip')response.endresponse.redirect 'noright.asp'end subdim attack_browser,attack_ip,attack_hostattack_browser=Request.ServerVariables('Http_User_Agent')attack_ip=Request.ServerVariables('ReMote_Addr')attack_host=Request.ServerVariables('Remote_Host')set rs1=server.createobject('adodb.recordset')'從訪問禁止ip中查詢是否存在訪問者的IP地址,,如果存在則禁止其訪問sql1='select ip from prohibit_ip where ip=''&attack_ip&'''rs1.open sql1,conn,1,3if not rs1.eof thencall stopit()end ifrs1.closeset rs1=nothing'從系統(tǒng)防范設置中查出email地址和運行的訪問次數(shù)set rs2=server.createobject('adodb.recordset')sql2='select * from D_setup'rs2.open sql2,conn,1,3if not rs2.eof thensession('email')=rs2('email')session('ok_count')=rs2('ok_count')end ifrs2.closeset rs2=nothingurl=Request.ServerVariables('Query_String')call chk(url)'從Attack_count表中獲取A_count的次數(shù),,如果A_count次數(shù)不小于默認的訪問次數(shù)則禁止if chk(url) thenset rs3=server.createobject('adodb.recordset')sql3='select A_count from attack_count 'rs3.open sql3,conn,1,3if not rs3.eof thenif rs3('A_count')>=session('ok_count') then '插入攻擊記錄信息到attack_record表中 t1_sql1='insert into Attack_record(ip,Attacktime,,Host,Browser) value(''&attack_ip&'',now

  (),,''&attack_host&'',,''&attack_browser&'')'set rsdel=conn.execute(t1_sql1)call stopit()ok=Jmail(session('email'),'SQL注入攻擊告警!','攻擊者IP地址:'& attack_ip )elsetemp_a_count=rs3('a_count')+1'插入攻擊Ip和a_count信息到Attack_count表中t1_sql2='insert into Attack_count(ip,A_count) value(''&attack_ip&'',''&temp_a_count&'')'set rsdel=conn.execute(t1_sql2)end ifend if

  4.2使用方法

  所有代碼均存入一個文件sqlinject.asp,只需要將該文件包含在需要防范的頁面中即可;其中需要包含email.asp和conn.asp二個文件,,前者主要通過Jmail組件來發(fā)送email郵件,,后者是調用數(shù)據(jù)庫連接,本模型的所采用的數(shù)據(jù)庫是SQL Server 2000,。

  4.3實際應用效果分析

  通過實際測試,,當入侵者在網(wǎng)頁提交一些非法字符達到指定次數(shù)后,,系統(tǒng)會自動屏蔽掉該IP地址對網(wǎng)站的訪問并將攻擊IP地址,、攻擊時間、攻擊者瀏覽器版本等信息寫入到數(shù)據(jù)庫中,。當本模型存在一個缺陷:當攻擊者在一個局域網(wǎng)時,,一旦系統(tǒng)自動記錄該地址后,其它使用該IP地址的非入侵用戶也無法訪問網(wǎng)站,。本文采取的折衷辦法是,,在禁止的網(wǎng)頁時留有email地址,如果發(fā)現(xiàn)是因為SQL入侵導致某個局域網(wǎng)(企業(yè))不能訪問網(wǎng)站,,則可以通過刪除數(shù)據(jù)庫中禁止訪問的IP地址,,即可恢復正常訪問。

  5 .結束語

  本文對SQL注入攻擊的方法,、原理以及攻擊實施過程進行了闡述和總結,,并給出了常見的一些SQL注入攻擊防范方法。最后給出了一種SQL注入攻擊自動防范模型,,通過在實際項目中的使用,,能夠很好的進行主動防范,具有較高的實用價值,。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多