Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
PINKPANTHER — Windows x64 手書きのトークン窃取カーネルモードシェルコード | Kitploit
ツール/GitHubGitHub/winterknife/pinkpanther
特権昇格シェルコードポストエクスプロイトペイロード開発バイナリエクスプロイト
GitHubwinterknife/pinkpanther

PINKPANTHER

Windows x64 手書きのトークン窃取カーネルモードシェルコード

リポジトリを見る
517612年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

PINKPANTHER

Brief

Windows x64 カーネルモードのハンドクラフト(手書き)シェルコード。実行中プロセスのプライマリアクセストークンを SYSTEM プロセストークンに置き換え、Elevation of Privilege(EoP)(特権昇格)を行います。

対応OSバージョン

  • Windows 7/Windows Server 2008 R2 Build 7601
  • Windows 8/Windows Server 2012 Build 9200
  • Windows 8.1/Windows Server 2012 R2 Build 9600
  • Windows 10 1507/TS1 Build 10240
  • Windows 10 1511/TS2 Build 10586
  • Windows 10 1607/RS1/Windows Server 2016 Build 14393
  • Windows 10 1703/RS2 Build 15063
  • Windows 10 1709/RS3 Build 16299
  • Windows 10 1803/RS4 Build 17134
  • Windows 10 1809/RS5/Windows Server 2019 Build 17763
  • Windows 10 1903/19H1 Build 18362
  • Windows 10 1909/19H2 Build 18363
  • Windows 10 2004/20H1 Build 19041
  • Windows 10 2009/20H2 Build 19042
  • Windows 10 2104/21H1 Build 19043
  • Windows 10 2110/21H2 Build 19044

ビルドと展開

このプロジェクトをビルドするための前提条件は次のとおりです。

  1. Visual Studio 2019(any edition will do fine)
  2. Windows 10 SDK, version 2004
  3. Windows 10 WDK, version 2004
  4. Python3

ここで注意すべき点として、アセンブラ(MASM)だけでも十分にやっていけます。技術的にはそれだけで済むからです。

上記をインストールした後は、Visual Studio でソリューションを開き、x64 ターゲットでビルドするだけです。

ビルドが成功すると、バイナリは Bin ディレクトリ配下の適切なビット数サブディレクトリに生成されます。

あるいは、Releases からそのままデプロイ可能な位置独立シェルコードをダウンロードすることもできます。

仕組みが分からない場合は、作業に依存しているマシンにペイロードをデプロイしようと絶対にしないでください。

追加情報については、Microsoft ドキュメントを参照してください。

テスト

テスト目的には、カーネルモードシェルコードをテスト VM 上にデプロイするための flare-kscldr と、フルカーネルデバッグサポート付きの Hyper-V Guest VM をセットアップするための CodeMachine のカーネル開発・デバッグ用システムセットアップガイド を強くお勧めします。

あるいは、kdbg-driver-vagrant を使ってプロセスを自動化し、Vagrant を使用してフルカーネルデバッグ対応のテスト VM をすばやく起動することも検討できます。

スクリーンショット

demo

注意事項

Dmytro Oleksiuk(@d_olex) 氏から指摘されたとおり、このコードには、いくつかのかなり明白なレースコンディションが存在します。具体的には以下に関連します:

  1. 何らかの同期プリミティブ/ロック機構を使用せずに、循環双方向リンクリストで連結された nt!_EPROCESS 構造体を手動で走査していること
  2. これらのプロセスオブジェクトを操作している最中に、それらを安全でない方法で参照していること

現状、これらの処理中にオブジェクトが変更されるのを防ぐ保護は一切ありません。

これは問題なのでしょうか? はい、レースコンディションは常に問題であり、あらゆる種類の未定義動作やバグチェックといった不快な事態を引き起こす可能性があります。

このペイロードを使用すると、エクスプロイトの安定性に影響はありますか? あるかもしれません。

では、修正方法は? 修正は2段階です。

パート1では、プロセスリストを走査する前に nt!ExAcquirePushLockExclusive を使用して、Pushlock のような待機型ロック(nt!PspActiveProcessLock(プッシュロックポインタ))を排他アクセス用に取得します(事前に通常のカーネル APC 配信を無効化しておく必要があります)。そして、リストの使用が完了したら nt!ExReleasePushLockExclusive でロックを解放し、その時点で通常のカーネル APC 配信を再び有効にします。

しかし、このグローバル変数は nt カーネルによってエクスポートされていないため、より適切で安全な方法は、nt!ZwQuerySystemInformation API を SYSTEM_INFORMATION_CLASS == SystemProcessInformation と共に使用して ImageName から PID を見つけ、nt!PsLookupProcessByProcessId を使用して PID から nt!_EPROCESS VA を取得することです。

もし、カーネルが前者の処理をどのように行っているのか気になるなら、nt!PsGetNextProcess をディスアセンブラで調べてみてください。

パート2では、nt!ObReferenceObject 系の API を使ってプロセスオブジェクトの参照カウントを増やし、安全に参照します。これにより、最後に nt!ObDereferenceObject で明示的に参照カウントを減らして処理を終えるまで、オブジェクトが削除されることはありません。

参照カウントを手動で増やすのは冗長であることに注意してください。nt!PsLookupProcessByProcessId への呼び出しが成功した場合、その呼び出しが自動的に参照カウントを増やしてくれるからです。

ただし、これらの修正を実装するには、ntoskrnl.exe のベースアドレスを特定し、EAT を走査して何らかの文字列ハッシュアルゴリズムで関数ポインタを見つけるシンボル解決を行う必要があり、そのすべてがペイロードサイズを大幅に増加させることになります。

いつの日かそれを実装するかもしれませんし、単に C で書いてコンパイラに出力を大量生成させるかもしれません :)

エラーを指摘し、修正方法を提案してくれた Dmytro Oleksiuk(@d_olex) 氏と Paul L.(@am0nsec) 氏に感謝します。

関連記事

  1. エクスプロイト開発: Panic! At The Kernel - Windows 10 x64 におけるトークン窃取ペイロード再訪と SMEP バイパス
  2. Windows カーネルエクスプロイト入門 – パート3 – アクセストークンの窃取
  3. [カーネルエクスプロイト] 2: ペイロード
  4. Windows カーネルシェルコード - 総覧
  5. Windows 10 における Windows カーネルシェルコード – パート1
  6. Windows カーネルシェルコード : TokenStealer
  7. x64 カーネル特権昇格
ツールをダウンロード