
Elevator を使用すると、UAC をバイパスして、完全な管理者権限を持つ昇格プロセスを起動できます。これは、James Forshaw 氏が記事 .NET からローカル Windows RPC サーバーを呼び出す で実証したように、UAC 機能を実装する RPC サーバーの動作を悪用することで実現されます。このツールは、追加の DLL をドロップしたり、Windows レジストリに書き込んだりする必要はなく(他の UAC バイパス手法ではよくあることですが)、Windows Server 2016、Windows Server 2019、Windows 10、Windows 11 で正常にテストされています(他のバージョンの Windows でもおそらく動作します)。ビルド 19045.3570 付近で修正されました)。
このツールは、APPINFO サービスが公開する RPC サーバーにツール自体を接続する C++ スタブと、バグを悪用して UAC をバイパスするためのメインロジックを含む Rust プロジェクトで構成されています。C++ スタブは、RPC View が ID 201ef99a-7fa0-444c-9399-19ba84f12a1a の RPC インターフェースから作成した IDL ファイルをコンパイルして取得されました。
C++ RPC スタブは dll にコンパイルされ、そのバイナリコンテンツは暗号化されて Rust クレートにハードコードされています(rpcclient クレートの get_rpc_stub() 関数を参照してください)。その後、dll は DInvoke_rs を使用して実行時に手動でマッピングされます。このプロセスを自分で実行したい場合(ツールを使用するために必要ではありません)、Visual Studio 2019+ でプロジェクト RPC_Stub を開いて dll をコンパイルするだけです。その後、リポジトリに含まれる script.py(Python 2.7)を使用して、dll のバイナリコンテンツから 16 進文字列を取得し、その文字列を rppclient::get_rpc_stub() 関数に配置してください。
x64 システムでのみ有効です。
文字列リテラルを難読化するために LITCRYPT プラグインを使用しているため、コードをコンパイルする前に環境変数 LITCRYPT_ENCRYPT_KEY を設定する必要があります:
C:\Users\User\Desktop\Elevator> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
その後、Elevator フォルダに移動して、コードをコンパイルするだけです:
C:\Users\User\Desktop\Elevator\Elevator> cargo build --release
C:\Users\User\Desktop\Elevator\Elevator\target\release> elevator.exe -h
USAGE:
elevator.exe <COMMAND> [OPTIONS]
ARGS:
<COMMAND> Command line to run.
OPTIONS:
-h, --help Print help information.
-n, --new-console Set CREATE_NEW_CONSOLE flag for the new process.
C:\Temp> elevator.exe c:\windows\system32\cmd.exe --new-console
C:\Temp> elevator.exe "c:\windows\system32\cmd.exe /C whoami /groups > file.txt" --new-console