打造抵禦 SQL注入攻擊的MSSQL服務器

  • MS SQL SERVER的安全性問題一般是由於設置不當而引起,攻擊者可通過這樣的設置獲得非常高的權限來執行SQL指令 (如:sp_addlogin,xp_subdirs的存儲過程),設置一臺安全可靠的MS SQL SERVER對你的網站整體安全會起到關鍵性作用!讓我們一起來看一看:  
    1.用戶權限分佈  
    用戶分配的權限有兩種:
    (1)網絡空間提供商提供的MS SQL賬號,一般這類型賬號的權限是db_owner,也就是數據庫所有者,擁有管理個人數據庫文件的所有權限,針對自己的那個庫文件,無法跨越別人的庫 文件,針對MASTER更有一定的權限。
    (2)主機託管,這類型的主機的MS SQL的權限,有非常大一部分能達到SYSADMIN服務器角色組,相對來說這類型網站,被入侵的機率達到99%。
    權限的安全合理設置是至關重要的,對於使用網站程式調用SQL數據庫的設置,更加重要。首先,用於程式連接數據庫的用戶應拒絕使用服務器角色組成 員,應使用數據庫用戶角色組的成員,最佳的方法是隻給予db_reader,db_writer權限,遇見有需要備份的用戶請另行新建用戶??注意:只要 有備份權限就能通過BACKUP得到WEBSHELL!使用db_redaer,db_wirter不能直接用SQL指令建表,不過對於網站的安全也起到 了至關重要的作用,入侵者無法使用create talbe,想進一步獲取服務器信息,無處保存。那當然,低權限也會給入侵者帶來讀表的權限,所以說合理的數據庫權限,給你的網站安全加了一道牆。  
    bitscn.com


    2.數據庫存儲過程的分配
    刪除所有對數據庫可有可無的存儲過程、對註冊表操作的擴展進程:
    Xp_regaddmultistring  
    Xp_regdeletekey  
    Xp_regdeletevalue  
    Xp_regenumvalues (通過他可獲得所以網頁目錄)
    Xp_regread (對Public能執行) (通過他可獲得默認網頁根目錄,“\”)
    Xp_regremovemultistring  
    Xp_regwrite
    非常多人只留意到這幾部分,更有一組:
    xp_instance-regaddmultistring
    xp_instance_regdeletevalue
    xp_instance_regenumkeys
    xp_instance_regread
    xp_instance_regremovemultistring
    部分重要的存儲過程(以下的這些存儲進程使用的權限達到DBO以上):
    xp_cmdshell(目前幾乎所有的服務器都通殺了)
    xp_dirtree (查看目錄樹,由些瞭解你目錄的
    xp_subdirs (用起來就跟DIR C:\相同,不過顯示的只是目錄)
    xp_fileexist,用來確定一個文件是否存在。  
    xp_getfiledetails,能獲得文件周詳資料。  
    sp_OACreate (通過他,危害非常得更大,不過要有有SYSADMINS權限纔可能使用)
    sp_OAGetErrorInfo bitsCN.Com
    sp_OAGetProperty
    sp_OAMethod
    sp_OASetProperty
    sp_SetProperty
    sp_OAStop
    使用下面的存儲過程:
    xp_makecab(dbo.xp_makecab ’c:\test.cab’,’mszip’,1,’C:\Inetpub\wwwroot\SQLInject\login.asp’,
    ’C:\Inetpub\wwwroot\SQLInject\securelogin.asp’)
    如果入侵者使用conn.asp,dbconn.asp,databaseconn.asp這類的設置文件,就能找出目錄,再用上面的命令就能把 你的程式打包再下載,
    你的SQL密碼將被一覽無疑(建議連接密碼文件加密):
    xp_makewebtask (用WEB作業得到WEBSHELL)
    xp_runwebtask
    xp_readerrorlog(讀取出錯的記錄,但我們可能他來讀取文件exec master.dbo.xp_readerrorlog 1,’c:\inetpub\wwwroot\dvbbs\conn.asp’)

    3. 程式的安全
    程式的安全問題危害到了MS SQL,下面是一些注意事項:(1)書寫程式,帶值輸入應周詳過濾如(’,;,=,update,select,insert,create,",--, exec, execute等等)用來執行指令的關鍵字。有人已研究出如果避過’分號來得到權限,不過如果你有語句中加入:
    (if instr(request("id"),",")>0 or instr(request("id"),"insert")> or instr(request("id"),";")>0 then ’根據以上提供的那些得、重複加上,這些舉例)
    中國.網管聯盟
    response.write "<script language=script>javascript:history.go(-1);</script>
    response.end
    end if
    )
    發現這些字符就跳回來出的頁面,使得攻擊者無法判斷信息是否正確,通過頁面變量直接取值的,請使用request.Querysring,可防止 入侵者使用POST:
    if instr(request.querysring("id"),",")>0 or instr(request.querystring("id"),"insert")> or instr(request.querystring("id"),";")>0 then ’根據以上提供的那些得、重複加上,這些舉例)
    response.write "<script language=script>javascript:history.go(-1);</script>
    response.end
    end if
    (2)改掉預設的WEB虛擬路徑,不要使用IIS裝好的預設(系統所在碰碟)\Inetpub\wwwroot路徑,網頁目錄最佳不要放在C盤。
    (3)利用 On Error Resume Next 排除網頁出錯,或使用:
    if Err.Number<>0 then
    response.write redirect url
    end if
    重定向到你指定的系統頁面刪除或修改默認的出錯頁面(重點是500出錯頁面),修改默認出錯頁面,讓入侵者無法參考出錯信息。
    bbs.bitsCN.com

    4.系統的設置
    (1)使用防火牆關閉TCP 1433/UDP 1434端口對外連接
    (2)升級最新的補丁(關注微軟發佈的補丁文件,是備及時修改,最新MS SQL 2000 SERVER有SP4補丁了)
    (3)檢查系統的是否存在弱口令用戶,一旦出現就要及時修改密碼。
    最後,網站的安全還是要靠廣大程式來一起維護,一時麻痹大意思將你的網站非常大的災難,SQL INJECTIONS可謂真是防不勝防,這些方面也不單單是MS SQL,包括ORACLE、SYBASE、MYSQL等等,希望能創造出好的網絡環境。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章