從IIS轉到SQL資料庫安全(轉)

BSDLite發表於2007-08-16
從IIS轉到SQL資料庫安全(轉)[@more@]從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 Then
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,可以獲得伺服器名稱。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-961626/,如需轉載,請註明出處,否則將追究法律責任。

相關文章