
任意のDLLインジェクションを伴うSEHオーバーフローの概念実証
任意のDLLインジェクションを伴うSEHオーバーフローの概念実証(PoC)
Kolibrì HTTP Server 2.0は、スタックベースのバッファオーバーフローの影響を受けます。発見当時、この脆弱性は、ESPがスタック上に置かれたシェルコードを指すJMP ESP命令で命令ポインタを単純に上書きすることで悪用されていました。その後、より大きなペイロードを送信するとSEHチェーンを上書きできることが判明しました。ただし、このアプリケーションには、SEハンドラを次のSEHレコードへ向けさせる有効なPOP - POP - RET命令がありません。これは、関連するすべてのメモリアドレスがヌルバイトで始まるためです。

このエクスプロイトは、DLLインジェクションによるSEHオーバーフローを介したコード実行を提案します。任意のDLLをKolibrìプロセスに注入することで、そのDLL内のPOP - POP - RET命令を指すヌルバイトを含まないアドレスでSEハンドラを上書きする機会が生まれます。明らかに、この手法は概念実証の開発にのみ使用でき、ローカルでシステム特権を昇格させるために悪用する場合には頼ることができません。これは、DLLをプロセスに注入するには、対象プロセスと同じ権限が必要だからです。それ以外の点では、このエクスプロイトは機能します!

このエクスプロイトを最初にアップロードしたとき、ハードコードされたWinExecおよびExitProcessアドレスを持つ非常に短いカスタムシェルコードのみをサポートしていました。これは、SEHを上書きした後に残るバッファ領域が短かったためです。今回、SEHの直後にエッグハンターシェルコードを配置し、エッグとシェルコードをWebサーバーのUser-Agentヘッダーに置くことで、エクスプロイトコードを更新しました。これにより、実行フローは上書きされたSEHからエッグハンターへリダイレクトされ、エッグハンターはエッグ 'w00t' でマークされたシェルコードを検索します。
この手法の功績は、元のリポジトリのFULLSHADEに帰属します。
https://github.com/FULLSHADE/POPPOPRET-nullbyte-bypass
私が行ったのは、このアイデアをこの特定のCVEに適用しただけです。