
DiagTrack RPCを介してSeImpersonateを悪用するWindows権限昇格エクスプロイト。Secondary Logonを使用してINTERACTIVEトークンを取得し、SYSTEM権限を獲得します。
SeImpersonate 特権を悪用するもう 1 つの方法です。
この PoC は、@crisprss によるこのブログに基づいています。
このブログで @crisprss 氏は、最近のバージョンの SQL Server に同梱されている AzureAttestService を使用して SeImpersonate 特権を悪用する興味深い方法を紹介しました。その PoC はこちら https://github.com/crisprss/magicAzureAttestService にあります。
また、そのブログでは DiagTrack サービスを使用して SeImpersonate 特権を悪用する別の方法も示されていますが、作者はそれを実用化できませんでした。これはそのブログからの引用です(中国語からの翻訳のため、100%正確ではないかもしれません):
But just when I thought it could be triggered normally, I didn't realize that this service is transparent to service users, which also means that it is not feasible to simulate pipeline privilege escalation through service users, because service users such as sqlserver There is no way to call the RPC interface, which also means that you can only escalate rights from the administrator user to SYSTEM in this way, so here is just a process sharing
そして、サービスユーザーからその RPC サーバーが公開しているメソッドを呼び出そうとすると、アクセス拒否エラーが発生します。

しかし、なぜ通常の非特権ユーザーはこのメソッドを呼び出せるのでしょうか?
私の推測では、サービスユーザーはセッション 0 で動作するため、そのトークンには NT AUTHORITY\INTERACTIVE SID が含まれません。一方、RDP または対話的にログインする通常のユーザーにはそれが含まれます。
では、セッション 0 から NT AUTHORITY\INTERACTIVE SID を取得するにはどうすればよいでしょうか? 実はとても簡単で、Secondary Logon サービスがそれを実現してくれます。 LogonUser API 呼び出しを使用して、NT AUTHORITY\INTERACTIVE SID を持つトークンを取得できます。NewCredentials(9) ログオンタイプを使用するため、有効な資格情報は必要ありません。 NewCredentials ログオンタイプを使用すると、Secondary Logon は新しいログオンセッションを作成して呼び出し元のトークンをコピーしますが、NT AUTHORITY\INTERACTIVE SID も挿入します。有効な資格情報を持つ必要がないため、これは私たちにとって完璧な状況です(NewCredentials ログオンタイプで使用される資格情報は、ユーザーがネットワークリソースにアクセスしようとするまで検証されません)。
これで NT AUTHORITY\INTERACTIVE SID を持つトークンが手に入りました。悪用は機能するでしょうか? はい、機能します :D

この PoC は Windows 10 および Windows 2019 でテストされています。
@crisprss - https://www.crisprx.top/archives/561