
Fax サービスと Ualapi.dll に基づく DLL ハイジャックを使用した Proof-of-Concept のバインドシェル。
詳細は次の記事をご覧ください: https://windows-internals.com/faxing-your-way-to-system/

Ualapi.dll をビルドし、c:\windows\system32 に配置します。Fax サービスを起動すると、DLL が読み込まれ、エクスポート UalStart が呼び出されます。UalStart はスレッドプールのワークアイテムをキューに入れ、RpcSs へのハンドルを開き、SYSTEM トークンを見つけて偽装します。その後、ローカルエンドポイントアドレスにソケットを作成し、ポート 9299 にバインドし、スレッドプールの I/O 完了ポートを使用して非同期的に接続を待ちます。nc(at).exe <ip> 9299)を使用してポート 9299 のソケットに接続し、let me in と入力して ENTER を押します。カスタムコードを書く場合は、文字列 let me in\n を送信するようにしてください。DcomLaunch サービスの下で SYSTEM 権限を持つ Cmd.exe プロセスを開始し、その入力と出力のハンドルを新しく作成されたソケットにバインドします。SYSTEM として実行され、たった 1 回の API 呼び出しの後、すぐに NETWORK SERVICE に戻ります。これにより、さまざまなスキャナーに捕捉される可能性を減らすことができます。Fax サービスではなく DcomLaunch サービス(すでに SYSTEM サービス)の下に作成することで、はるかに自然に見え、非常に不審なプロセスツリーを避けます。DcomLaunch や Cmd.exe ではなく Fax サービスに属しているように見せる Windows のバグを利用しています。Fax サービスを強制終了すると、ソケットは System に属しているように見えます。これは、すぐに使える検出不可能な悪意のある武器化されたシェルを意図したものではありません。
80 や 443 などの一般的なポートを介して通信する方が効果的です。Spooler も Ualapi.dll を読み込みます。Fax サービスが SERVICE_START_PENDING 状態で「スタック」してもシステムは正常に動作しますが、Spoolsv.exe に問題を引き起こします。