
名前付きパイプにハッシュを渡してトークンを偽装する
このプロジェクトは、ローカル名前付きパイプのユーザー偽装における認証にPass-the-Hashを使用する概念実証コードです。説明のためのブログ記事もあります。
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
このプロジェクトは、Invoke-SMBExec.ps1 と RoguePotato のコードに大きく基づいています。
私は過去に、ある攻撃的セキュリティプロジェクトの状況に直面しました。そこでは、すでに low privileged ユーザーアカウントのNTLMハッシュを入手しており、現在侵害しているシステム上でそのユーザーのシェルが必要でしたが、既存の公開ツールではそれが不可能でした。そのような状況について、さらに2つの事実を想像してみてください。NTLMハッシュがクラックできず、かつ被害者ユーザーのプロセスが存在しないため、その中にシェルコードを実行したり、そのプロセスに移行したりできないのです。これは、皆さんの中にはとんでもないエッジケースに聞こえるかもしれません。しかし、私はこれを何度も経験しました。1つの案件だけでなく、その特定の状況で適切なツールやテクニックを探すのに多くの時間を費やしました。
ツール/テクニックに対する私の個人的な目標は次のとおりです。
low privileged アカウントも偽装できる必要がある。エンゲージメントの目標によっては、CEO、人事アカウント、SAP管理者などの特定のユーザーでシステムにアクセスする必要があるかもしれない。残念ながら、偽装されたユーザーはネットワーク認証が許可されていません。新しいプロセスは制限された偽装トークンを使用しているためです。したがって、この手法は別のユーザーによるローカルアクションにのみ使用できます。
この手法には2つの方法があります。\Resources\PipeServerImpersonate.sln をコンパイルして実行可能ファイルをリモートホストに配置し、\Resources\Invoke-NamedPipePTH.ps1 を介して名前付きパイプに接続する方法です。
または、スタンドアロンスクリプトを使用してメモリ内に保持する方法もあります。
実行のためにバイナリをドロップしたくない場合は、PowershellなどのネイティブWindowsバイナリの引数を渡すだけです。
Invoke-ImpersonateUser-PTH -Username USERNAME -Hash NTLMHASH -Domain DOMAIN -PipeName mypipe -binary "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -argument "-nop -w 1 -sta -enc BASEBLOB"