2

現在のセッションのネットワーク資格情報を、後で渡すことができる変数にキャプチャする方法を探しています...

要点は、アカウント アクセス/権限がある外部ドメインでコマンドを実行することですが、ソース ドメインとターゲット ドメインの間に信頼関係はありません。

まず、runas コマンド (runas /netonly /user:domian\account powershell) を使用して生成された powershell 内で実行します。

ここから、ユーザー名/パスワードをコマンド ラインにハードコーディングせずに、タスク スケジューラでイベントを作成することを除いて、ほとんどすべてのことを行うことができます。

invoke-command -computer $destination -scriptblock {schtasks -ru domain\account -rp password}

私がやろうとしていることは次のようなものです

$username = Get Current Session Network Username ($(whoami) は、PowerShell ウィンドウを生成した runas アカウントではなく、実際のローカル longon アカウントを起動します)

$password = RunAs コマンドの実行時に入力されたパスワードを取得します

4

1 に答える 1

4

入力された資格情報からセキュリティ トークンが作成され、Active Directory に対して検証されると、パスワードは保持されなくなります。他の場所で取得および再利用することはできません。トークンだけが残ります。これは仕様によるものです。

更新

私は自分のケースを強化するためにもう少し掘り下げました.上記のようにはなりませんが、最終結果は同じです. で使用されているパスワードrunas.exeが利用できないようです。ネットワーク資格情報はAD に対して検証されません。振り返ってみると、リモートの信頼されていないドメインで作業するために使用することが多いため、これは理にかなってい/netonlyます。定義上、ローカル システムからリモート資格情報を検証することはできません。MSDN から:

LOGON_NETCREDENTIALS_ONLYで使用されるflag の情報は次のとおりCreateProcessWithLogonWです。

ログオンしますが、ネットワーク上でのみ指定された資格情報を使用します。新しいプロセスは呼び出し元と同じトークンを使用しますが、システムは LSA 内に新しいログオン セッションを作成し、プロセスは指定された資格情報を既定の資格情報として使用します。

この値を使用して、リモートとは異なる資格情報のセットをローカルで使用するプロセスを作成できます。これは、信頼関係がないドメイン間のシナリオで役立ちます。

システムは、指定された資格情報を検証しません。したがって、プロセスは開始できますが、ネットワーク リソースにアクセスできない可能性があります。

資格情報を検証してトークンを取得できないため、後で SSPI などのためにパスワードをネットワーク経由で渡す必要があるため、パスワードをメモリのどこかに保存する必要があります。runas.exe? どれどれ:

PS> runas /netonly /user:foo\bar powershell.exe
Enter the password for foo\bar: ******

foo\bar上記のドメインとユーザーに文字通り使用しました。すでに述べたように、検証されていません。12345パスワードを入力しました。上記の行は、powershell の新しいインスタンスを起動します。それでは、その新しいインスタンスから、デフォルトのネットワーク資格情報を見てみましょう。

PS> [System.Net.CredentialCache]::DefaultNetworkCredentials

UserName                                           Domain
--------                                           ------

ああ、運が悪かった: 何もない。私の推測では、クレデンシャルはカーネル内のメモリの暗号化された部分で保護されており、おそらく LSA (ローカル セキュリティ機関) が詮索好きなプロセスの手の届かないところにあると思われます。

于 2013-03-28T18:07:32.633 に答える