⓫⁄₁₁ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 未加引号服务路径漏洞利用(上)
郑重声明:本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论 | 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶ 信息收集
▶ 漏洞检测
▶ 初始立足点
▶ 权限提升 ➢ Windows权限提升 ➢ 未加引号服务路径漏洞利用(上) 🔥🔥🔥
▶ 横向移动
▶ 报告/分析
▶ 教训/修复
目录
1.Windows权限提升
1.1 Windows未加引号服务路径漏洞利用
1.1.1 漏洞原理
1.1.1.1 CreateProcess函数介绍
1.CreateProcess函数原型
2.代码示例
3.与漏洞的关联
1.1.1.2 攻击前提与思路
1.漏洞利用前提
2.攻击思路
1.1.1.3 路径解析顺序
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
1.Windows权限提升
在渗透测试中,我们通常以非特权用户身份获得初始立足点。但为了深入探测(如搜索敏感信息、提取密码哈希等),往往需要提升至管理员权限(比如:使用Mimikatz提取密码哈希),这个过程就是特权提升。
📊 权限提升三大路径:本文开始介绍:Windows未加引号服务路径漏洞利用。
| 阶段 | 目标 | 关键方法 |
|---|---|---|
| 1. 枚举Windows | 获取系统情报 | 手动搜索 + 自动化工具 |
| 2. 滥用Windows服务 | 攻击服务漏洞 | 服务配置缺陷、权限滥用 |
| 3. 利用其他组件 | 扩大攻击面 | 计划任务、系统漏洞利用 |
1.1 Windows未加引号服务路径漏洞利用
1.1.1 漏洞原理
在Windows系统中,当服务对应的可执行文件路径包含空格且未用引号包裹时,系统在启动服务解析路径的方式存在缺陷,可能被攻击者利用来提升权限。
当对一个服务的主目录或子目录具有写入权限但无法替换其中的文件时,可以利用这种攻击。
正如我们在之前的章节中学到的,每个Windows服务都映射到一个在服务启动时运行的可执行文件。如果该文件的路径包含一个或多个空格,并且没有用引号括起来,那么它可能成为一个权限提升攻击的机会。
1.1.1.1 CreateProcess函数介绍
CreateProcess函数:是Windows系统中用于创建新进程的核心 API 函数,负责启动外部程序并配置其运行环境。
1.CreateProcess函数原型

| 参数名称 | 参数类型 | 关键说明 |
|---|---|---|
| lpApplicationName | LPCSTR | 程序主路径。指定可执行文件的完整路径。若为空,则程序路径由lpCommandLine提供。 |
| lpCommandLine | LPSTR | 命令行参数字符串。通常包含:程序路径及启动参数。这是未加引号路径漏洞的关键参数。 |
| lpProcessAttributes | LPSECURITY_ATTRIBUTES | 指向新进程安全属性的指针,控制句柄继承性。通常传入NULL。 |
| lpThreadAttributes | LPSECURITY_ATTRIBUTES | 指向新线程安全属性的指针。通常传入NULL。 |
| bInheritHandles | BOOL | 句柄继承标志。TRUE表示子进程继承父进程的可继承句柄。常设为FALSE。 |
| dwCreationFlags | DWORD | 进程创建标志。用于控制创建方式(如CREATE_NEW_CONSOLE、CREATE_NO_WINDOW)。 |
| lpEnvironment | LPVOID | 指向新环境变量块的指针。为NULL时,子进程继承父进程环境。 |
| lpCurrentDirectory | LPCSTR | 新进程的当前工作目录。为NULL时,继承父进程工作目录。 |
| lpStartupInfo | LPSTARTUPINFO | 指向 STARTUPINFO 结构的指针,必须初始化。配置主窗口外观及标准句柄。 |
| lpProcessInformation | LPPROCESS_INFORMATION | 指向 PROCESS_INFORMATION 结构的指针,用于接收新进程的句柄和ID信息。 |
2.代码示例
以下是使用CreateProcess函数启动一个外部应用程序(例如notepad.exe)的简单示例:

3.与漏洞的关联
如果CreateProcess函数的第一个参数lpApplicationName在解析包含空格的未加引号路径时,会错误地将空格前的部分识别为程序名,剩余部分当作参数,从而导致路径劫持。这是未加引号服务路径漏洞得以存在的根本技术原因。
例如:当服务的启动路径是(如C:Program FilesMyApppp.exe)未被引号包裹时,该函数会按以下方式解析:
- 从左到右解析路径:CreateProcess函数会从路径字符串的左侧开始解析,直到遇到第一个空格。
- 遇到空格时停止:当函数遇到路径中的空格时,它会认为路径到空格处为文件名。剩余部分会被认为是参数。
错误解析示例:
C:Program FilesMyApppp.exe
系统会尝试执行:
C:Program.exe并将
FilesMyApppp.exe视为参数
1.1.1.2 攻击前提与思路
🔧 攻击实施步骤:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 识别未加引号的服务路径 | 使用sc query或PowerShell获取服务配置 |
| 2 | 检查目录写入权限 | 确定可在哪个级别目录植入恶意文件 |
| 3 | 创建恶意可执行文件 | 命名与系统尝试执行的文件名一致 |
| 4 | 放置到合适目录 | 等待服务重启或系统重启 |
| 5 | 触发执行 | 恶意代码以高权限运行 |
1.漏洞利用前提
枚举并确认目标服务启动路径包含空格且未使用引号包裹。
2.攻击思路
①创建恶意程序
编写恶意可执行文件,并将其名称设置为系统在解析路径时会优先尝试执行的对应文件名(如 Program.exe、My.exe 等)。
②放置恶意程序
将该文件放置于漏洞路径解析顺序中某个您具有写入权限的对应目录(例如 C:、C:Program Files 或服务的子目录)。
③触发执行
当服务重启或系统重启时,系统会按照解析顺序优先执行您的恶意程序,而非原始服务程序。恶意程序将以服务账户(通常是高权限的 LocalSystem)的身份运行,从而实现权限提升。
⚠️ 关键概念说明:
LocalSystem账户
Windows内置的系统级账户
拥有最高权限,可访问几乎所有系统资源
常用于运行操作系统核心服务
不会出现在常规用户列表中
1.1.1.3 路径解析顺序
接下来,通过一个示例来展示。未加引号的服务路径是:
C:Program FilesMy ProgramMy Serviceservice.exe
当Windows启动服务时,由于路径中存在空格,它将按照以下顺序尝试启动可执行文件。
1. C:Program.exe
2. C:Program FilesMy.exe
3. C:Program FilesMy ProgramMy.exe
4. C:Program FilesMy ProgramMy Serviceservice.exe ← 正确文件
假设攻击者对C:Program FilesMy Program目录有写入权限:
-
原始路径:
C:Program FilesMy ProgramMy Serviceservice.exe -
系统第三次尝试执行:
C:Program FilesMy ProgramMy.exe -
攻击者操作:在该目录创建名为
My.exe的恶意程序 -
结果:服务启动时,优先执行
My.exe的恶意程序,获得与服务相同的权限(实现提取)
目录权限分析:
-
**C:** 或 *C:Program Files* → 标准用户通常无写入权限
-
软件安装子目录 → 可能因配置不当权限过于宽松
-
攻击可行性:通常只有软件主目录可能被利用
🛡️ 漏洞本质:
该漏洞本质上是路径解析顺序与目录权限控制不当共同作用的结果。攻击者通过“提前拦截”系统对可执行文件的查找过程,实现权限提升。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。








