轉自老刀專欄
原文地址:http://blog.csdn.net/keenx/archive/2005/11/23/535451.aspx
SQLSERVER估計是為了安裝或者其它方面,它內建了一批危險的預存程序。能讀到註冊表資訊,能寫入註冊表資訊,能讀磁碟共用資訊等等……各位看到這兒,心裡可能會在想,我的網站中有其它的代碼,又不像查詢分析器那樣能直接將結果輸出。給你這個許可權,也不能怎麼樣,還是看不到資訊。如果各位這樣想就大錯特錯了。提示一下,如果攻擊者有CREATE TABLE的許可權,那麼建立一個暫存資料表,然後將資訊INSERT到表中,然SELECT出來,接著跟數字進行比較,讓SQL SERVER報錯,那麼結果就全出來了……所以我們要報著寧錯殺,不放過的態度進行修補。
先來列出危險的內建預存程序:
xp_cmdshell
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite
ActiveX自動指令碼:
sp_OACreate
sp_OADestroy
sp_OAMethod
sp_OAGetProperty
sp_OASetProperty
sp_OAGetErrorInfo
sp_OAStop
以上各項全在我們封殺之列,例如xp_cmdshell屏蔽的方法為:
sp_dropextendedproc 'xp_cmdshell'
如果需要的話,再用
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
進行恢複。如果你不知道xp_cmdshell使用的是哪個.dll檔案的話,可以使用
sp_helpextendedproc xp_cmdshel
來查看xp_cmdshell使用的是哪個動態聯結庫。另外,將xp_cmdshell屏蔽後,我們還需要做的步驟是將xpsql70.dll檔案進行改名,以防止獲得SA的攻擊者將它進行恢複。
1.remove mssql2000 extended stored procedures.sql
use master
exec sp_dropextendedproc 'xp_cmdshell'
go
exec sp_dropextendedproc 'xp_dirtree'
go
exec sp_dropextendedproc 'xp_enumgroups'
go
exec sp_dropextendedproc 'xp_fixeddrives'
go
exec sp_dropextendedproc 'xp_loginconfig'
go
exec sp_dropextendedproc 'xp_regaddmultistring'
go
exec sp_dropextendedproc 'xp_regdeletekey'
go
exec sp_dropextendedproc 'xp_regdeletevalue'
go
exec sp_dropextendedproc 'xp_regread'
go
exec sp_dropextendedproc 'xp_regremovemultistring'
go
exec sp_dropextendedproc 'xp_regwrite'
go
exec sp_dropextendedproc 'xp_enumerrorlogs'
go
exec sp_dropextendedproc 'xp_getfiledetails'
go
exec sp_dropextendedproc 'xp_regenumvalues'
go
2.restore mssql2000 extended stored procedures.sql
use master
exec sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
go
exec sp_addextendedproc 'xp_dirtree', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_enumgroups', 'xplog70.dll'
go
exec sp_addextendedproc 'xp_fixeddrives', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_loginconfig', 'xplog70.dll'
go
exec sp_addextendedproc 'xp_regaddmultistring', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_regdeletekey', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_regdeletevalue', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_regread', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_regremovemultistring', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_regwrite', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_enumerrorlogs', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_getfiledetails', 'xpstar.dll'
go
exec sp_addextendedproc 'xp_regenumvalues', 'xpstar.dll'
go