web-dev-qa-db-ja.com

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

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

DOSタスクスケジューラATコマンドを使用して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も使用してみましたが、スケジュールされたタスクを実行するときに見つかったのと同じ制限に直面していると思います。

これまでのところ、私の試みはそれぞれ失敗に終わりました。助言がありますか?

133
Ben Griswold

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

しかし、私はこれに遭遇しました 記事 これは PSTools from SysInternals (2006年7月にMicrosoftによって買収されました)次のコマンドラインを使用して、突然、魔法のようにローカル管理者アカウントで実行していました。

psexec -i -s cmd.exe

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

助けてくれた人に感謝します。

205
Ben Griswold
  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. Explorerを起動すると、スタートメニューバーに「システム」という名前が表示されます。これで、system32ディレクトリ内のいくつかのファイルを削除できますが、adminとしては削除できないか、adminとしてこれらのファイルを削除するためにアクセス許可を変更する必要があります。

Windowsの保護されたディレクトリにあるシステムファイルの名前を変更または削除しようとするユーザーは、すべてのWindowsファイルがDACLSによって保護されていることを知っている必要があります。ファイルの所有者として管理者グループに属し、権限を変更した後にファイル名を変更してみてくださいアクセスを取り戻すために

41
raven

答えを見つけました here binPathパラメーターに/ k startを追加することで問題を解決するようです。したがって、それはあなたに与えるでしょう:

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

しかし、Benはそれが彼にとってうまくいかず、Windows Server 2008で試してみたところ、ローカルシステムでcmd.exeプロセスを作成しましたが、インタラクティブではありませんでした(ウィンドウが見えませんでした)。

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

10
Bryant

あまりにも特権的なローカルシステムコンテキストではなく、サービスが本当に必要とする最小限の権限セットを見つけて使用することをお勧めします。たとえば、 ローカルサービス

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

6
Mike Dimmick

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

Windows XP/Vista/7/8.1の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"
  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プロンプトが表示されたら、押します Win+U OSKを起動すると、代わりにCMDが起動します。次に、昇格したプロンプトで「whoami」と入力すると、NT Authority\Systemが表示されます。その後、システムコマンドシェルからエクスプローラーを起動し、システムプロファイルを使用できますが、セキュリティ上の理由から、SYSTEM権限を介してネットワーク上で実行できる操作は多少制限されます。 1年前に発見したので、後で説明を追加します。

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

PsExecを使用せずにローカルシステムアカウントでCmd.exeを実行します。この方法は、以前に発見されたDebugger Trapテクニックを実行しますが、このテクニックには独自の利点があり、デバッガーでいくつかの巧妙な/悪意のあるワームまたはマルウェアをトラップし、代わりに他のexeを実行して拡散または一時的な損傷を止めることができます。ここで、このレジストリキーは、Windowsネイティブデバッガーでスクリーンキーボードをトラップし、代わりにcmd.exeを実行しますが、cmdはLogged on users権限で実行されますが、session0でcmdを実行すると、システムシェルを取得できます。そのため、セキュアデスクトップ上のcmdにまたがる別のアイデアをここに追加します。セキュアデスクトップはシステムアカウントのセッション0で実行され、システムシェルを取得します。したがって、昇格したものを実行するときはいつでも、暗い非対話型デスクトップでUACプロンプトとUACプロンプトに答える必要があります。 Win+U その後、OSKを選択すると、ローカルシステム権限でCMD.exeが実行されます。 CMDを使用してローカルシステムにアクセスする方法はさらにあります

3
raven

これに代わるものは、次のように実行する場合のプロセスハッカーです...(セキュリティは強化されている人にとってはインタラクティブではありませんが、それは重要ではありません) :\ Users\Windows\system32\cmd.exe残りの部分をクリックし、[OK]をクリックします。cmdが表示されたウィンドウが表示され、システムとして実行します。

3
James5001

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

2

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

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

0
Paul Harris

RunAsTi ユーティリティを使用して、TrustedInstaller(高権限)として実行します。このユーティリティはWindowsのリカバリモード(Shift + Restartを実行して入力するモード)でも使用できますが、psexecユーティリティはそこでは機能しません。ただし、PATH環境変数にC:\WindowsおよびC:\Windows\System32X:\WindowsおよびX:\Windows\System32ではありません)パスを追加する必要があります。そうしないと、RunAsTiはリカバリモードでは機能せず、印刷されます:SeImpersonateNameのAdjustTokenPrivileges:参照されるすべての特権またはグループが呼び出し元に割り当てられるわけではありません

0
anton_rh