首页/安全/安全加固速查/未加引号服务路径核查(路径劫持)
主机加固基线90 条

未加引号服务路径核查(路径劫持)

含空格且未加引号的服务路径存在被中间可执行文件劫持的可能(C:\Program Files\X.exe 风格);这是本地提权的经典检查项,需审计并修复。

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

未加引号的服务路径为什么危险

服务的可执行路径若包含空格又没有用双引号包裹(典型如 C:\Program Files\App\svc.exe),Windows 会按顺序尝试多个候选路径。攻击者只需在中间某个可写目录放一个同名程序,服务启动时就会先执行它,从而实现本地提权。这是本地提权检查里的经典项。

基本信息

适用平台Windows Server / Windows 10+(需管理员权限)
审计对象Win32_Service 的 PathName 字段与驱动类服务
判据含空格且未用双引号包裹的服务路径
可利用前提路径中间存在普通用户可写目录

典型使用场景

  • 本地提权面清理:作为终端加固与内网渗透自查的常规项
  • 第三方软件审计:安装程序常把服务路径写成不带引号的形式
  • 变更前评估:升级软件前确认其服务路径写法是否需要修正
  • 合规检查:检查清单里通常有明确的对应条目

审计

审计
# 找出含空格且未以引号开头的服务路径
Get-CimInstance Win32_Service | Where-Object { $_.PathName -match '\s' -and $_.PathName -notmatch '^\s*"' } | Select-Object Name, PathName, StartMode
# 补充:用 autoruns 一类工具能看到更全的服务与驱动清单

修复示例(先导出原值再改)

修复示例(先导出原值再改)
# 1) 先记录原始 binPath
sc.exe qc "MyService"
# 2) 改为带引号形式(注意 sc 的等号后必须有空格)
# sc.exe config "MyService" binPath= "\"C:\Program Files\App\svc.exe\" -arg"
# 3) 确认服务仍可启动
sc.exe query "MyService"

审计结果读法

字段含义判读要点
Name服务名称驱动类服务也要纳入范围
PathName可执行文件路径含空格且无引号才是候选
StartMode启动方式自动启动的服务被利用的机会更多
中间目录权限决定是否可利用目录不可写则无法完成劫持
并非所有候选路径都可利用:只有中间存在可写目录才构成劫持链。评估与修复都要逐服务验证,避免批量改动引发服务无法启动。
修复前导出配置并安排维护窗口:binPath 写错会让服务彻底起不来,比原本的风险更直接,改动后应立即用 sc query 确认服务状态正常。

易错点

  • 直接批量改 binPath:写错一个字符服务就无法启动,务必先导出再改并逐台验证
  • 只看服务不看驱动:驱动类服务同样存在路径问题,审计范围要覆盖
  • 把「有空格」等同于「有漏洞」:中间目录不可写时不构成可利用链
  • 忽略第三方软件的重新安装:升级或重装会覆盖回原写法,需要复测

数据来源与参考

  • MITRE ATT&CK:未加引号的服务路径(T1574.009)
  • Microsoft Learn:服务安全(binPath 配置)

相关工具

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