天天看點

如何通過SQL Server執行系統指令?

本文講的是<b>如何通過SQL Server執行系統指令?</b>,

0x00 簡介

滲透測試過程中,大家經常會碰到通過MSSQL來進行提權或執行系統指令之類的操作,通常我們經常會使用xp_cmdshell來進行執行系統指令,但是當xp_cmdshell不能使用的時候,我們還有什麼别的方式麼?本文将介紹與分享一下我自己學到的一些姿勢。

0x01 常用的一些姿勢

1. XP_CMDSHELL

這個大家都比較熟悉了,通過xp_cmdshell來執行指令,可使用以下語句來執行:

預設情況下xp_cmdshell 是禁止的,如下圖:

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

這個時候,可以使用以下指令進行開啟:

關閉一樣,隻是将上面的後面的那個”1”改成”0”就可以了。

開啟以後,則可執行系統指令

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

如果xp_cmdshell被删除,可以嘗試上傳xplog70.dll進行恢複,恢複語句:

2. SP_OACREATE

當xp_cmdshell 删除以後,可以使用SP_OACreate。

首先要打開元件:

之後使用以下語句執行指令:

這裡要注意一下,此方式執行是無回顯的

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

3. 自啟動

以下方式需要電腦重新開機。

添加系統資料庫:

備份添加啟動項:

測試發現,Win10+MSSQL 2012導出的批處理并不能順利執行,可能與系統及資料庫版本有一定關系,成功率并不怎麼高。

4. 通過沙盒執行指令

開啟沙盒:

然後利用jet.oledb執行指令:

0x02 通過Agent Job執行指令

此種方式适用于伺服器開啟了MSSQL Agent Job服務,并且伺服器中目前運作的使用者賬号擁有足夠的權限去建立并執行代理作業的情況。

利用代碼如下:

關于此種方式已經有文章進行介紹,有興趣可以閱讀一下。戳我

0x03 SQL Server CLR

這種方式是最近才學到的,也是本文重點介紹的一種姿勢。

Microsoft SQL Server 現在具備與 Microsoft Windows .NET Framework 的公共語言運作時 (CLR) 元件內建的功能。CLR 為托管代碼提供服務,例如跨語言內建、代碼通路安全性、對象生存期管理以及調試和分析支援。對于 SQL Server 使用者和應用程式開發人員來說,CLR 內建意味着您現在可以使用任何 .NET Framework 語言(包括 Microsoft Visual Basic .NET 和 Microsoft Visual C#)編寫存儲過程、觸發器、使用者定義類型、使用者定義函數(标量函數和表值函數)以及使用者定義的聚合函數。 

要通過此種方式來執行指令,也有幾個前提:

建立CLR有兩種方式:

方式一:使用DLL檔案進行建立

方式二:使用檔案16進制流進行建立

對于做滲透的我們,當然是沒有檔案是最好的方式了,是以,本文主要介紹方式二。以下為詳細測試步驟:

1、安裝Visual Studio和SQL Server資料庫,此次測試使用了VS2015跟SQL2012。

2、建立一個新的SQL Server資料庫項目

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

3、設定項目屬性,目标平台修改為需要的目标平台,如SQL Server 2012; 将SQLCLR權限級别修改為UNSAFE;修改.Net 架構版本為自己需要的版本;語言選擇C#。

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

4、右鍵項目,選擇添加-&gt;建立項,建立SQL CLR C# 存儲過程

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

5、填入以下測試代碼:

6、填入代碼以後進行編譯,之後到編譯目錄下可以看到一個dacpac字尾的檔案。

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

7、輕按兩下此檔案進行解壓,将解壓出一個名為mode.sql的檔案。

8、執行SQL檔案中的以下語句

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

之後執行:

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

9、開啟資料庫伺服器配置選項clr enabled

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

10、執行指令:

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

如果沒成功,可以換個資料庫試試看。

11、删除存儲過程

0x04 PowerUpSQL

當然針對SQL Server的攻擊,有一個強大的工具PowerUpSQL,裡面也有很多針對MSSQL的攻擊方式。下面介紹兩種比較實用的方式。

1. SP_Addextendedproc

套件中的Create-SQLFileXpDll方法,在這裡對其使用方式簡單的進行一下介紹。

建立DLL:

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

SQL Server 通過 sp_addextendedproc 調用DLL進而達到指令執行的效果。這裡有兩種方式導入:

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

導入之後的可調用xp_test來執行指令:

如何通過SQL Server執行系統指令?
如何通過SQL Server執行系統指令?

通過以下指令可以解除安裝:

2. SMB Relay Attacks

針對這種方式,已經有文章總結了,這裡就不多做介紹了,詳細請看這裡。

0x05 小結

本文就通過SQL Server 執行系統指令進行了一下小結,當然方式可能不全,僅僅是自己知道的一些方法,還希望大牛别噴,如果您有什麼更加新穎的方法,歡迎補充,希望本文對你有所幫助。

原文釋出時間為:2017年2月14日

本文作者:Evi1cg

本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。

<a href="http://www.4hou.com/technology/3338.html" target="_blank">原文連結</a>