現在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も使用してみましたが、スケジュールされたタスクを実行するときに見つかったのと同じ制限に直面していると思います。
これまでのところ、私の試みはそれぞれ失敗に終わりました。助言がありますか?
個人的にはテストしていませんが、上記のAT COMMANDソリューションがXP、2000、およびServer 2003で機能すると信じるに十分な理由があります。私とブライアントのテストによると、このアプローチはVistaまたはWindows Server 2008では機能しません。これはおそらく、セキュリティの追加と/ interactiveスイッチの廃止が原因です。
しかし、私はこれに遭遇しました 記事 これは PSTools from SysInternals (2006年7月にMicrosoftによって買収されました)次のコマンドラインを使用して、突然、魔法のようにローカル管理者アカウントで実行していました。
psexec -i -s cmd.exe
PSToolsはうまく機能します。これは、私の問題に対する適切な解決策を提供する、軽量で十分に文書化されたツールのセットです。
助けてくれた人に感謝します。
cd \
を使用します。これにより、psexecが置かれているドライブのルートディレクトリに移動します。psexec -i -s cmd.exe
-iは対話型、-sはシステムアカウント用です。whoami
; 「システム」と表示されますstart Explorer.exe
と入力します。Windowsの保護されたディレクトリにあるシステムファイルの名前を変更または削除しようとするユーザーは、すべてのWindowsファイルがDACLSによって保護されていることを知っている必要があります。ファイルの所有者として管理者グループに属し、権限を変更した後にファイル名を変更してみてくださいアクセスを取り戻すために
答えを見つけました here binPathパラメーターに/ k startを追加することで問題を解決するようです。したがって、それはあなたに与えるでしょう:
sc create testsvc binpath= "cmd /K start" type= own type= interact
しかし、Benはそれが彼にとってうまくいかず、Windows Server 2008で試してみたところ、ローカルシステムでcmd.exeプロセスを作成しましたが、インタラクティブではありませんでした(ウィンドウが見えませんでした)。
あなたが尋ねたことをする簡単な方法があるとは思いませんが、なぜあなたはそれをしているのか疑問に思っていますか?サービスを実行するときに何が起こっているのかを確認しようとしていますか?ローカルシステムとしてexeを実行する代わりに、ログを使用して何が起こっているのかを判断することができるようです...
cmd.exe
をsystem
として実行する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"
CMD
を管理者として実行します
次に、昇格で次のコマンドを使用します。
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"
次に、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
を使用してローカルシステムにアクセスする方法はさらにあります
これに代わるものは、次のように実行する場合のプロセスハッカーです...(セキュリティは強化されている人にとってはインタラクティブではありませんが、それは重要ではありません) :\ Users\Windows\system32\cmd.exe残りの部分をクリックし、[OK]をクリックします。cmdが表示されたウィンドウが表示され、システムとして実行します。
別の方法があります。昇格されたcmdを実行できるようにするPowerRunというプログラムがあります。 TrustedInstallerの権利があっても。コンソールコマンドとGUIコマンドの両方を使用できます。
タスクスケジューラを使用して、/ add:/ user:および/ pass:の適切な引数を使用して、SYSTEMで実行されるCMDKEYの実行をスケジュールします。
何もインストールする必要はありません。
RunAsTi ユーティリティを使用して、TrustedInstaller(高権限)として実行します。このユーティリティはWindowsのリカバリモード(Shift
+ Restart
を実行して入力するモード)でも使用できますが、psexecユーティリティはそこでは機能しません。ただし、PATH
環境変数にC:\Windows
およびC:\Windows\System32
(X:\Windows
およびX:\Windows\System32
ではありません)パスを追加する必要があります。そうしないと、RunAsTiはリカバリモードでは機能せず、印刷されます:SeImpersonateNameのAdjustTokenPrivileges:参照されるすべての特権またはグループが呼び出し元に割り当てられるわけではありません。