首页/安全/安全加固速查/SQL Server 暴露面与 xp_cmdshell
服务与端口收敛50 条

SQL Server 暴露面与 xp_cmdshell

MSSQL 1433 暴露公网常被爆破;同时确认 xp_cmdshell 等危险扩展已禁用,避免拿到库权限后直接执行系统命令。

安全加固速查安全更新于 2026-10-13

1433 与危险扩展

SQL Server 默认监听 1433,一旦直接暴露到公网就会被持续爆破。与此同时还要检查数据库内部的危险扩展:xp_cmdshell 允许在数据库上下文中执行系统命令,拿到数据库权限的攻击者可以借此直接跳到操作系统层面。加固要分两处做:边界收敛端口,实例内部关闭不需要的扩展功能。

基本信息

适用平台Windows(SQL Server)
默认端口1433
风险等级高
基线要求1433 限源,危险扩展关闭
关键扩展xp_cmdshell、OLE Automation、CLR

典型使用场景

  • 数据库暴露面盘点与边界收敛
  • 排查实例是否监听在默认端口与全部地址
  • 关闭不需要的危险扩展功能
  • 排查数据库是否成为提权跳板
  • 检查服务账号与启动方式的合理性
  • 与防火墙和安全组规则交叉核对

端口与实例核查

端口与实例核查
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\*\MSSQLServer\SuperSocketNetLib\Tcp\IPAll' -ErrorAction SilentlyContinue | Select-Object TcpPort, TcpDynamicPorts   # 静态与动态端口
netstat -ano | findstr :1433      # 确认 1433 是否在监听
Get-Service | Where-Object {$_.DisplayName -like 'SQL Server*'} | Select-Object Name, Status, StartType   # 服务状态与启动类型
Get-NetFirewallRule -DisplayName '*SQL*' | Select-Object DisplayName, Enabled, Direction   # 相关防火墙规则

危险扩展核查

危险扩展核查
SELECT name, value_in_use FROM sys.configurations WHERE name IN ('xp_cmdshell','Ole Automation Procedures','clr enabled');   -- 查看危险扩展的启用状态
SELECT @@version AS version;   -- 确认实例版本,便于对照补丁

复核必查项

检查项含义注意点
TcpPort实例的静态 TCP 端口固定端口便于防火墙收敛
TcpDynamicPorts动态端口配置非 0 会让固定端口规则失效
1433 监听是否监听且对外可达不应暴露到不可信网段
xp_cmdshell是否启用了命令执行扩展不需要时应关闭
服务启动类型自动或手动启动与业务实际使用情况匹配
实例如果只需本机或内网访问,可以直接在 SQL Server 配置管理器里关闭 TCP,或者改成内网静态端口并配套防火墙限源。
xp_cmdshell 常被应用临时打开之后忘记关闭:要把它纳入例行巡检项,定期复查启用状态。
动态端口会让基于固定端口的防火墙规则失效:要固定成静态端口,或者按程序名放行。

易错点

  • xp_cmdshell 被应用临时开启后再没关闭,数据库权限直接等价于系统命令执行
  • 实例使用动态端口,按 1433 写的防火墙规则完全没有生效
  • 只做边界收敛不检查扩展功能,内部提权路径依然存在
  • 数据库服务账号权限过大,被利用之后影响范围急剧扩大
  • 收敛之后不复查版本与补丁,旧的数据库漏洞仍然可被利用

数据来源与参考

  • Microsoft Learn:SQL Server 网络安全
  • CIS Benchmark:SQL Server 条目

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌