ローカル システム アカウントで CMD.exe を実行するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/77528

  •  09-06-2019
  •  | 
  •  

質問

現在 Vista を実行していますが、Windows サービスと同じ操作を手動で完了したいと考えています。Windows サービスはローカル システム アカウントで実行されているため、これと同じ動作をエミュレートしたいと考えています。基本的に、ローカル システム アカウントで CMD.EXE を実行したいと考えています。

コマンドでDOSタスクスケジューラを使用してCMD.exeを使用することを示唆する情報をオンラインで見つけましたが、「セキュリティの強化により、このタスクは除外されたがインタラクティブではない時点で実行される」というVistaの警告を受け取りました。これがサンプルコマンドです:

AT 12:00 /interactive cmd.exe

別の解決策では、CMD.exe を起動するだけのサービス コントロール (sc.exe) を介してセカンダリ Windows サービスを作成することを提案しました。

C:\sc create RunCMDAsLSA binpath= "cmd" type=own type=interact
C:\sc start RunCMDAsLSA

この場合、サービスの開始に失敗し、次のエラー メッセージが表示されます。

FAILED 1053: The service did not respond to the start or control request in a timely fashion.

3 番目の提案は、スケジュールされたタスクを介して CMD.exe を起動することでした。スケジュールされたタスクはさまざまなアカウントで実行できますが、ローカル システム アカウントはその 1 つではないと思います。

Runas も使用してみましたが、スケジュールされたタスクを実行するときに見つかったのと同じ制限に遭遇していると思います。

これまでのところ、私の試みはいずれも失敗に終わっています。助言がありますか?

役に立ちましたか?

解決

私は個人的にテストしたことはありませんが、上記の AT COMMAND ソリューションが XP、2000、および Server 2003 で機能すると信じる十分な理由があります。私と Bryant のテストによると、同じアプローチが Vista または Windows Server 2008 では機能しないことが判明しました。おそらく、セキュリティが強化され、/interactive スイッチが非推奨になっていることが原因です。

ところが、こんなものに出会ってしまった 記事 の使用法を示します PSツール から システム内部 (2006 年 7 月に Microsoft に買収されました。) 次のようにコマンド ラインを起動すると、突然、魔法のようにローカル管理者アカウントで実行できるようになりました。

psexec -i -s cmd.exe

PSToolsはうまく機能します。これは、私の問題に適切な解決策を提供する、軽量で十分に文書化されたツールのセットです。

助けを提供してくれた方々に感謝します。

他のヒント

  1. Sysinternals から psexec.exe をダウンロード.
  2. それを C:\ ドライブに置きます。
  3. 標準ユーザーまたは管理ユーザーとしてログオンし、次のコマンドを使用します。 cd \. 。これにより、psexec が配置されているドライブのルート ディレクトリに移動します。
  4. 次のコマンドを使用します。 psexec -i -s cmd.exe ここで、-i は対話型、-s はシステム アカウントを表します。
  5. コマンドが完了すると、cmd シェルが起動します。タイプ whoami;「システム」と表示されます
  6. タスクマネージャーを開きます。Explorer.exe を強制終了します。
  7. 管理者特権のコマンド シェル タイプから start explorer.exe.
  8. エクスプローラーが起動すると、スタート メニュー バーに「システム」という名前が表示されます。これで、system32 ディレクトリ内のいくつかのファイルを削除できるようになりました。これらのファイルは管理者として削除できないか、管理者としてそれらのファイルを削除するにはアクセス許可を変更するのに苦労する必要があります。

Windows の保護されたディレクトリにあるシステム ファイルの名前を変更または削除しようとするユーザーは、すべての Windows ファイルが DACLS によって保護されていることを知っておく必要があります。ファイルの名前を変更する際には、所有者を変更し、ファイルを所有する TrustedInstaller を置き換えて、ユーザーを次のようなユーザーにする必要があります。ファイルの所有者として管理者グループに属しており、アクセス許可を変更した後に名前を変更してみてください。機能します。カーネル特権で Windows エクスプローラーを実行している間は、セキュリティ上の理由からネットワーク アクセスがある程度制限されており、これはまだ研究課題です。アクセスを取り戻すために

答えが見つかりました ここ /k start を binPath パラメータに追加することで問題を解決できるようです。したがって、次のようになります。

sc create testsvc binpath= "cmd /K start" type= own type= interact

しかし、Ben 氏は、それはうまくいかないと言い、Windows Server 2008 で試してみたところ、ローカル システムに cmd.exe プロセスは作成されましたが、対話型ではありませんでした (ウィンドウが表示されませんでした)。

あなたが求めていることを実行する簡単な方法はないと思いますが、そもそもなぜそれを行うのか疑問に思います。サービスの実行時に何が起こっているかを確認したいだけですか?exeをローカルシステムとして実行する代わりに、ログを使用して何が起こっているかを判断できるようです...

特権が高すぎるローカル システム コンテキストではなく、サービスが実際に必要とする最小限の権限セットを見つけ出して、それを使用することをお勧めします。例えば、 ローカルサービス.

Windows Vista および Windows Server 2008 では、対話型サービスが機能しなくなりました (または、少なくとも UI が表示されなくなりました)。 セッション0の分離.

これに代わる方法は、次のユーザーとして実行する場合の Process hacker です。(インタラクティブはセキュリティの強化を備えた人には機能しませんが、それは重要ではありません)。ボックスが開かれたときにボックスタイプにサービスを入れてユーザーボックスにシステムを入れて、C: users windows system32 cmd.exe残りを残します。そして、あなたはその上にCMDが付いているウィンドウを持っています、そしてシステムとして実行されたので、あなたはそれらを知っていることを提案しているので、あなた自身のために他の手順を実行するようになりました

Secure Desktop を使用して実行する cmd.exe として system

カーネルアクセスを取得するには、 CMD Windows XP/Vista/7/8.1 では、デバッガを接続することで簡単に実行できます。

REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
  1. 走る CMD 管理者として

  2. 次に、昇格で次のコマンドを使用します。

     CMD REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\osk.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
    
  3. それから実行します osk (スクリーンキーボード)。プロセス エクスプローラーで確認すると、まだシステム整合性レベルで実行されませんが、サービス セッションで OSK を使用できる場合は、次のように実行されます。 NT Authority\SYSTEM

そこで、Secure Desktop で実行する必要があると考えました。

任意のファイルを管理者として開始します。UAC プロンプトが表示されたら、 を押します。 勝つ+U そして始めます OSK そしてそれは始まります CMD その代わり。次に、管理者特権のプロンプトで次のように入力します。 whoami そしてあなたは得るでしょう NT Authority\System. 。その後、システム コマンド シェルからエクスプローラーを起動し、システム プロファイルを使用できますが、セキュリティ上の理由から、SYSTEM 権限を使用してネットワーク上でできることはある程度制限されます。1年前に発見したので、後ほど説明を追加します。

これがどのように起こるかについての簡単な説明

ランニング Cmd.exe ローカル システム アカウントを使用せずに PsExec. 。この方法は、以前に発見されたデバッガ トラップ手法を実行します。この手法には、デバッガ内で巧妙/悪意のあるワームやマルウェアをトラップし、代わりに別の exe を実行して拡散や被害を一時的に阻止するために使用できるという独自の利点があります。ここで、このレジストリ キーは Windows ネイティブ デバッガーのオンスクリーン キーボードをトラップし、代わりに cmd.exe を実行しますが、cmd は引き続きログオン ユーザー権限で実行されますが、session0 で cmd を実行するとシステム シェルを取得できます。そこで、ここに別のアイデアを追加します。セキュア デスクトップ上で cmd を実行します。セキュア デスクトップはシステム アカウントのセッション 0 で実行され、システム シェルが取得されることを覚えておいてください。そのため、昇格して何かを実行するときは常に、UAC プロンプトに応答する必要があり、暗い非対話型デスクトップで UAC プロンプトが表示されたら、それを押す必要があります。 勝つ+U そして選択します OSK あなたは得るでしょう CMD.exe ローカル システム権限で実行されます。ローカル システムにアクセスするには、さらに多くの方法があります。 CMD

別の方法もあります。PowerRun と呼ばれるプログラムがあり、昇格された cmd を実行できるようになります。TrustedInstaller 権限があっても。コンソールと GUI コマンドの両方が可能になります。

対話型である必要のないバッチ ファイルを作成できる場合は、そのバッチ ファイルをサービスとして実行して、必要なことを実行してみてください。

私が使用するのは、 ランアスティ として実行するユーティリティ 信頼できるインストーラー (高い特権)。このユーティリティは、Windows のリカバリ モード (リカバリ モード) でも使用できます。 Shift+Restart)、 psexec そこではユーティリティが機能しません。ただし、追加する必要があります C:\Windows そして C:\Windows\System32 (ない X:\Windows そして X:\Windows\System32) へのパス PATH 環境変数、それ以外の場合 ランアスティ リカバリモードでは機能せず、次のように表示されるだけです。 SeImpersonateName の AdjustTokenPrivileges:参照されたすべての権限またはグループが呼び出し元に割り当てられるわけではありません.

タスク スケジューラを使用して、/add の適切な引数を使用して SYSTEM で実行される CMDKEY の実行をスケジュールします。/ユーザー:および /pass:

何もインストールする必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top