MSSQL - 数据库枚举 (Database Enumeration)
目录 (Summary)
- 工具 (Tools)
- 识别实例与数据库 (Identify Instances and Databases)
- 识别用户与角色 (Identify Users and Roles)
- 识别敏感信息 (Identify Sensitive Information)
工具 (Tools)
- NetSPI/PowerUpSQL - 一个用于攻击 SQL Server 的 PowerShell 工具包。
- skahwah/SQLRecon - 一个专为攻击性侦察和后期利用设计的 C# MS SQL 工具包。
识别实例与数据库 (Identify Instances and Databases)
发现本地 SQL Server 实例
发现域内 SQL Server 实例
Get-SQLInstanceDomain -Verbose
# 获取已发现实例的服务器信息
Get-SQLInstanceDomain | Get-SQLServerInfo -Verbose
# 获取数据库名称
Get-SQLInstanceDomain | Get-SQLDatabase -NoDefaults
发现远程 SQL Server 实例
识别加密数据库
注意:这些数据库会自动为管理员解密。
Get-SQLDatabase -Username sa -Password Password1234 -Instance "<DBSERVERNAME\DBInstance>" -Verbose | Where-Object {$_.is_encrypted -eq "True"}
版本查询
识别用户与角色 (Identify Users and Roles)
-
查询当前用户并确定其是否为 sysadmin (系统管理员)
-
当前角色
-
服务器上的所有登录名
-
数据库的所有数据库用户
-
列出所有 Sysadmins (系统管理员)
-
列出所有数据库角色 (Database Roles)
SELECT DB1.name AS DatabaseRoleName, isnull (DB2.name, 'No members') AS DatabaseUserName FROM sys.database_role_members AS DRM RIGHT OUTER JOIN sys.database_principals AS DB1 ON DRM.role_principal_id = DB1.principal_id LEFT OUTER JOIN sys.database_principals AS DB2 ON DRM.member_principal_id = DB2.principal_id WHERE DB1.type = 'R' ORDER BY DB1.name;
识别敏感信息 (Identify Sensitive Information)
从特定数据库获取表名
Get-SQLInstanceDomain | Get-SQLTable -DatabaseName <来自Get-SQLDatabase命令的数据库名> -NoDefaults
# 从表中获取列详细信息
Get-SQLInstanceDomain | Get-SQLColumn -DatabaseName <数据库名> -TableName <表名>
-
当前数据库
-
列出所有表
-
列出所有数据库
-
列出服务器信息
从每个列中收集 5 条条目
Get-SQLInstanceDomain | Get-SQLColumnSampleData -Keywords "<列名1,列名2,列名3,列名4,列名5>" -Verbose -SampleSize 5