
在Windows系统提权的江湖里有一种漏洞它既不靠缓冲区溢出也不玩内核态的骚操作而是静静地潜伏在系统服务的配置里等待着粗心的管理员或不规范的软件 installer 将它唤醒。它就是——不带引号的空格提权Unquoted Service Path。这个漏洞被微软戏称为“脚本小子报告的新宠儿”但在实际的渗透测试和红队对抗中它依然是一把劈开低权账号、直取 SYSTEM 大权的利刃。今天我们就来扒一扒这个“老古董”漏洞的底裤看看它是如何让系统翻车的。一、 追本溯源为什么一个空格就能提权要理解这个漏洞我们得先聊聊 Windows 服务控制管理器SCM的一个“古老习惯”。想象一下你在 CMD 里敲下一行命令C:\Program Files\Awesome App\service.exe如果没有引号Windows 的命令行解析器会怎么想它会认为C:\Program是一个程序后面跟着参数Files\Awesome和App\service.exe。但因为找不到C:\Program.exe它会继续往下试直到拼凑出完整的、正确的路径。不带引号的空格提权本质上就是利用了 Windows 在解析带空格文件路径时的“贪婪匹配”机制。如果一个服务的可执行文件路径是这样配置的注意没有双引号C:\Program Files\Vulnerable App\LegitService.exe并且这个服务是以高权限比如 SYSTEM 或 Administrator运行的。那么当系统启动这个服务时它不会直接报错而是会像瞎子摸象一样从最前面的路径开始依次尝试执行以下程序C:\Program.exeC:\Program Files\Vulnerable.exeC:\Program Files\Vulnerable App\LegitService.exe攻击的精髓来了 如果攻击者能在C:\ 或C:\Program Files目录下偷偷放一个名为Program.exe或Vulnerable.exe的恶意程序那么当服务重启时系统就会优先执行攻击者植入的恶意程序并且继承该服务的高权限二、 实战演练从“破烂王”到低权用户再走向 SYSTEM在实战中利用这个漏洞就像是在玩一场“路径拼图”游戏。假设你已经通过 Webshell 或钓鱼邮件拿到了目标机器上的一个低权限账号比如cmarko接下来该怎么做第一步翻箱倒柜找“漏洞服务”我们需要用 WMI 命令把所有服务拉出来溜溜筛选出那些路径带空格、没引号并且是自动启动的服务cmdwmic service get name,displayname,pathname,startmode | findstr /i Auto | findstr /i /v C:\Windows\\ | findstr /i /v 如果运气好你会看到类似这样的回显VulnService Vulnerable Service 1 C:\Program Files\Vulnerable Service1\Service.exe Auto第二步勘察地形找“可写目录”光有漏洞路径还不够你得能把恶意文件塞进去。通常普通用户是没有权限往C:\ 或C:\Program Files里写文件的。这时候就需要用到icacls 命令来查看目录的 ACL访问控制列表权限了。cmdicacls C:\Program Files如果你发现该目录的权限里包含(M)修改权限或(F)完全控制甚至(W)写入权限并且是针对普通用户或Authenticated Users组的那恭喜你突破口找到了第三步投毒与“守株待兔”既然有了写入权限我们就可以把编译好的恶意程序比如一个反向 Shell 的 exe上传到可利用的路径下。例如如果我们对C:\Program Files有写权限就上传一个名为Vulnerable.exe的程序。接下来怎么办等着如果这个服务平时很少重启我们可以手动尝试停止并启动它如果有相应权限的话cmdsc stop VulnService sc start VulnService更绝的是如果你有SeShutdownPrivilege权限即使显示为Disabled也可以在某些情况下生效你可以直接发个重启命令等系统再次上线时你的恶意程序就会以高权限运行从而完成提权。三、 拨开迷雾这真的是高危漏洞吗看到这里你可能会觉得“哇那岂不是满地都是 SYSTEM 权限”别急微软的工程师们早就考虑到了这一点。在默认情况下Windows 系统的核心目录如C:\、C:\Program Files的权限是极其严格的。 普通用户根本无法在这些目录下创建文件。正如微软官方博客所言大多数报告上来的“不带引号空格提权”漏洞其实都位于这层严密的防御之下属于“不可利用”的范畴。真正的漏洞往往诞生于第三方不规范软件 它们在安装时粗暴地更改了目录权限或者在注册表里写下了不合规的服务路径。管理员的“上帝模式” 某些管理员为了图省事直接用管理员权限运行一切甚至放宽了关键目录的 ACL。所以这个漏洞更像是一个“系统基线配置是否达标”的试金石。四、 亡羊补牢如何修补这道“空格门”无论是作为防守方还是开发人员防范这种低级错误的成本几乎为零。1. 加引号加引号加引号在编写安装脚本或注册服务时只要路径中包含空格必须使用双引号将路径包裹起来。这是最根本的解决办法。正确示范sc create MyService binPath \C:\Program Files\My App\service.exe\2. 收紧权限最小权限原则定期检查系统服务的配置权限确保只有SYSTEM和Administrators组才有权修改服务配置。可以使用accesschk等工具进行权限审计。3. 规范目录 ACL千万不要随意放宽C:\、C:\Program Files 等关键目录的写入权限。对于第三方应用尽量将其隔离在专用的、权限受限的目录中。 互动时刻你的“赛博直觉”还在线吗看完这篇文章你是否也回忆起了自己曾经在渗透测试中利用或被这个漏洞坑过的某个深夜我们在评论区发起一个“一句话避坑”征集除了不加引号你在 Windows 提权中还见过哪些“令人窒息的操作”或“阴间漏洞”无论是AlwaysInstallElevated的降维打击还是 Potato 家族的魔法攻击亦或是你踩过的各种奇葩 CVE欢迎在下方留言分享让我们一起在互相吐槽中把系统安全的大门焊得死死的