应关闭xp_cmdshell、OLE Automation Procedures、远程DAC并限制sa账户:分别执行sp_configure禁用前三者,重命名或禁用sa,改用最小权限账户和Windows身份验证。

关闭 xp_cmdshell:最常被利用的后门通道
SQL Server 默认禁用 xp_cmdshell,但很多旧系统为兼容性手动启用了它。一旦攻击者通过 SQL 注入拿到执行权限,EXEC xp_cmdshell 'whoami' 就能直接提权到系统层面。
- 检查是否启用:SELECT value_in_use FROM sys.configurations WHERE name = 'xp_cmdshell',返回 1 表示开着
- 关闭命令(需 sysadmin 权限):EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE;
- 别只在主库关——每个用户数据库都可能被绕过上下文执行,必须在 master 上操作
- 关闭后,某些老运维脚本会报错 Could not find stored procedure 'xp_cmdshell',这不是漏洞,是该淘汰它们了
禁用 OLE Automation Procedures 和 sp_OACreate
这类功能允许 SQL Server 调用 COM 对象,攻击者常用它下载木马、执行 PowerShell 或读取本地文件。
- 查看状态:SELECT value_in_use FROM sys.configurations WHERE name = 'Ole Automation Procedures'
- 禁用命令:EXEC sp_configure 'Ole Automation Procedures', 0; RECONFIGURE;
- 即使没显式调用 sp_OACreate,只要配置项开启,注入语句就能直接触发,比如:DECLARE @x INT EXEC sp_OACreate 'WScript.Shell', @x OUT
- 不要以为“我代码里没写这些”就安全——注入点在应用层,执行环境在数据库层
限制 sa 账户与弱口令策略sa 是 SQL Server 的内置最高权限账户,也是暴力破解和撞库的首要目标。
- 立即重命名或禁用:ALTER LOGIN sa DISABLE; 或 ALTER LOGIN sa WITH NAME = [sa_disabled_2024];
- 所有应用连接改用最小权限专用账户,例如只授予 db_datareader + db_datawriter,绝不要给 db_owner
- 启用 Windows 身份验证模式优先,混合模式下务必强制密码复杂度(通过 Windows 组策略或 SQL Server 登录策略)
- 如果应用仍依赖 sa,说明它本身存在硬编码凭证问题,加固数据库前先修代码
关闭远程 DAC(Dedicated Admin Connection)监听
DAC 是管理员救急通道,默认只监听本地,但若误配为 remote admin connections = 1,攻击者可通过端口扫描发现并连接,绕过常规登录限制。
- 检查:SELECT value_in_use FROM sys.configurations WHERE name = 'remote admin connections'
- 关闭:EXEC sp_configure 'remote admin connections', 0; RECONFIGURE;
- 注意:即使关闭,本地仍可通过 ADMIN:ServerName 连接,这是设计行为,不用慌
- 很多自动化扫描工具(如 Nessus、Nmap 脚本)会专门探测这个配置,开着等于挂个“请黑我”标牌
OLE Automation Procedures 和 sp_OACreate
这类功能允许 SQL Server 调用 COM 对象,攻击者常用它下载木马、执行 PowerShell 或读取本地文件。
- 查看状态:SELECT value_in_use FROM sys.configurations WHERE name = 'Ole Automation Procedures'
- 禁用命令:EXEC sp_configure 'Ole Automation Procedures', 0; RECONFIGURE;
- 即使没显式调用 sp_OACreate,只要配置项开启,注入语句就能直接触发,比如:DECLARE @x INT EXEC sp_OACreate 'WScript.Shell', @x OUT
- 不要以为“我代码里没写这些”就安全——注入点在应用层,执行环境在数据库层
限制 sa 账户与弱口令策略sa 是 SQL Server 的内置最高权限账户,也是暴力破解和撞库的首要目标。
- 立即重命名或禁用:ALTER LOGIN sa DISABLE; 或 ALTER LOGIN sa WITH NAME = [sa_disabled_2024];
- 所有应用连接改用最小权限专用账户,例如只授予 db_datareader + db_datawriter,绝不要给 db_owner
- 启用 Windows 身份验证模式优先,混合模式下务必强制密码复杂度(通过 Windows 组策略或 SQL Server 登录策略)
- 如果应用仍依赖 sa,说明它本身存在硬编码凭证问题,加固数据库前先修代码
关闭远程 DAC(Dedicated Admin Connection)监听
DAC 是管理员救急通道,默认只监听本地,但若误配为 remote admin connections = 1,攻击者可通过端口扫描发现并连接,绕过常规登录限制。
- 检查:SELECT value_in_use FROM sys.configurations WHERE name = 'remote admin connections'
- 关闭:EXEC sp_configure 'remote admin connections', 0; RECONFIGURE;
- 注意:即使关闭,本地仍可通过 ADMIN:ServerName 连接,这是设计行为,不用慌
- 很多自动化扫描工具(如 Nessus、Nmap 脚本)会专门探测这个配置,开着等于挂个“请黑我”标牌
remote admin connections = 1,攻击者可通过端口扫描发现并连接,绕过常规登录限制。
- 检查:SELECT value_in_use FROM sys.configurations WHERE name = 'remote admin connections'
- 关闭:EXEC sp_configure 'remote admin connections', 0; RECONFIGURE;
- 注意:即使关闭,本地仍可通过 ADMIN:ServerName 连接,这是设计行为,不用慌
- 很多自动化扫描工具(如 Nessus、Nmap 脚本)会专门探测这个配置,开着等于挂个“请黑我”标牌
实际防御不是堆功能开关,而是持续确认:谁在连、用什么权限、执行了什么语句。sys.dm_exec_sessions 和 sys.dm_exec_query_stats 这类动态视图比任何配置项都更能暴露异常行为。

















