Wie führen Sie CMD.exe unter dem lokalen Systemkonto aus?

144

Ich verwende derzeit Vista und möchte dieselben Vorgänge wie mein Windows-Dienst manuell ausführen. Da der Windows-Dienst unter dem lokalen Systemkonto ausgeführt wird, möchte ich dasselbe Verhalten emulieren. Grundsätzlich möchte ich CMD.EXE unter dem lokalen Systemkonto ausführen.

Ich habe online Informationen gefunden, die darauf hindeuten, die CMD.exe mit dem Befehl DOS Task Scheduler AT zu starten, aber ich habe eine Vista-Warnung erhalten, dass "diese Aufgabe aufgrund von Sicherheitsverbesserungen zu dem Zeitpunkt ausgeführt wird, außer aber nicht interaktiv". Hier ist ein Beispielbefehl:

AT 12:00 /interactive cmd.exe

Eine andere Lösung schlug vor, einen sekundären Windows-Dienst über das Dienststeuerelement (sc.exe) zu erstellen, das lediglich CMD.exe startet.

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

In diesem Fall kann der Dienst nicht gestartet werden und es wird die folgende Fehlermeldung angezeigt:

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

Der dritte Vorschlag war, CMD.exe über eine geplante Aufgabe zu starten. Obwohl Sie geplante Aufgaben unter verschiedenen Konten ausführen können, glaube ich nicht, dass das lokale Systemkonto eines davon ist.

Ich habe auch versucht, die Runas zu verwenden, denke aber, dass ich auf dieselbe Einschränkung stoße wie beim Ausführen einer geplanten Aufgabe.

Bisher ist jeder meiner Versuche gescheitert. Irgendwelche Vorschläge?

Ben Griswold
quelle

Antworten:

221

Obwohl ich nicht persönlich getestet habe, habe ich guten Grund zu der Annahme, dass die oben angegebene AT COMMAND-Lösung für XP, 2000 und Server 2003 funktioniert. Nach meinen und Bryants Tests haben wir festgestellt, dass der gleiche Ansatz mit Vista nicht funktioniert oder Windows Server 2008 - höchstwahrscheinlich aufgrund zusätzlicher Sicherheit und veralteter / interaktiver Switch.

Ich bin jedoch auf diesen Artikel gestoßen, der die Verwendung von PSTools von SysInternals (das von Microsoft im Juli 2006 erworben wurde) demonstriert . Ich habe die Befehlszeile über Folgendes gestartet und bin plötzlich wie von Zauberhand unter dem lokalen Administratorkonto ausgeführt worden:

psexec -i -s cmd.exe

PSTools funktioniert gut. Es handelt sich um eine leichte, gut dokumentierte Reihe von Tools, die eine geeignete Lösung für mein Problem bieten.

Vielen Dank an diejenigen, die Hilfe angeboten haben.

Ben Griswold
quelle
11
Ich mag dies besser mit -dhinzugefügt, so dass ich weiterhin die Konsole verwenden kann, von der ich es gestartet habe.
SamB
1
Ich habe gerade Vista x64 ausprobiert und festgestellt, dass "Der PsExec-Dienst läuft auf ... ist eine inkompatible Version". Versucht direkt von \\ live.sysinternals.com \ tools \ psexec und neueste Binärdatei. Es scheint keine x64-Version zu geben
ZXX
52
  1. Laden Sie psexec.exe von Sysinternals herunter .
  2. Legen Sie es in Ihr Laufwerk C: \ ein.
  3. Melden Sie sich als Standard- oder Administratorbenutzer an und verwenden Sie den folgenden Befehl : cd \. Dadurch werden Sie in das Stammverzeichnis Ihres Laufwerks verschoben, in dem sich psexec befindet.
  4. Verwenden Sie den folgenden Befehl: psexec -i -s cmd.exeDabei steht -i für interaktiv und -s für Systemkonto.
  5. Nach Abschluss des Befehls wird eine Cmd-Shell gestartet. Typ whoami; es wird "System" sagen
  6. Öffnen Sie den Taskmanager. Töte explorer.exe.
  7. Von einem Shell-Typ mit erhöhten Befehlen start explorer.exe.
  8. Beachten Sie beim Starten des Explorers den Namen "System" in der Startmenüleiste. Jetzt können Sie einige Dateien im System32-Verzeichnis löschen, die Sie als Administrator nicht löschen können, oder als Administrator müssten Sie sich bemühen, die Berechtigungen zum Löschen dieser Dateien zu ändern.

Benutzer, die versuchen, Systemdateien in einem geschützten Windows-Verzeichnis umzubenennen oder zu löschen, sollten wissen, dass alle Windows-Dateien durch DACLS geschützt sind. Beim Umbenennen einer Datei müssen Sie den Eigentümer ändern und TrustedInstaller ersetzen, dem die Datei gehört, und jeden Benutzer zu einem Benutzer machen, der gehört zur Administratorgruppe als Eigentümer der Datei und versucht dann, sie nach dem Ändern der Berechtigung umzubenennen. Sie funktioniert. Während Sie Windows Explorer mit Kernel-Berechtigungen ausführen, sind Sie aus Sicherheitsgründen hinsichtlich des Netzwerkzugriffs etwas eingeschränkt und es handelt sich immer noch um ein Forschungsthema für mich, um wieder Zugang zu bekommen

Rabe
quelle
Ich benutze diesen Trick, um den Explorer oft als erhöhten Benutzer zu starten. Insbesondere bei der Verbindung über VNC mit einem PC, wo beispielsweise Netzwerkeinstellungen vorgenommen werden müssen. +1 von mir
TPAKTOPA
Dieser Trick scheint jetzt ungültig zu sein. Mein Betriebssystem ist Windows 7 SP1. Ich bin so weit gegangen, das "System" in der Startmenüleiste zu sehen. Beim Umbenennen einer Datei im Ordner system32 wird jedoch die Berechtigung verweigert. Der Ordner system32 gehört jetzt TrustedInstaller, und selbst das lokale Systemkonto verfügt nur über spezielle Berechtigungen.
Shaohua Li
Wenn Sie versuchen, eine Datei umzubenennen oder zu löschen, die sich in einem geschützten Windows-Verzeichnis befindet, dessen Eigentümer TrustedInstaller ist, muss Ihr aktueller Benutzer die Datei durch Ändern der Berechtigung besitzen. Anschließend können Sie sie umbenennen oder löschen. Dies wird häufig zum Löschen von slmgr verwendet. exe und andere Systemdateien, um unbegrenzten Zugriff auf die Trail-Version von Windows zu erhalten, ohne dafür zu bezahlen
Rabe
10

Hier wurde eine Antwort gefunden, die das Problem durch Hinzufügen von / k start zum Parameter binPath zu lösen scheint. Das würde dir also geben:

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

Ben sagte jedoch, dass dies für ihn nicht funktioniert habe und als ich es unter Windows Server 2008 ausprobierte, wurde der Prozess cmd.exe unter dem lokalen System erstellt, aber er war nicht interaktiv (ich konnte das Fenster nicht sehen).

Ich glaube nicht, dass es einen einfachen Weg gibt, das zu tun, was Sie fragen, aber ich frage mich, warum Sie das überhaupt tun? Versuchen Sie nur zu sehen, was passiert, wenn Sie Ihren Dienst ausführen? Scheint, als könnten Sie einfach die Protokollierung verwenden, um festzustellen, was passiert, anstatt die exe als lokales System ausführen zu müssen ...

Bryant
quelle
Hallo Bryant. Diese Lösung wird im Wesentlichen in der Frage umrissen. Funktioniert es tatsächlich für Sie? Es führt zu einem Misserfolg für mich. Vielen Dank.
Ben Griswold
Bryant, ich habe einen Dienst, der die Installation und Deinstallation einer anderen Komponente verwaltet. Ich möchte unserer Support-Gruppe eine einfache Möglichkeit bieten, die Komponente "gewaltsam" zu deinstallieren, wenn mein Service seine Aufgabe nicht erfüllt. Während des Testens möchte ich auch die Deinstallation "erzwingen" können. Danke für die Hilfe ..
Ben Griswold
1
@Ben: Haben Sie den Starttyp des Dienstes "Interactive Services Detection" auf "Manual" oder "Disabled" gesetzt?
Hallo71
1
Um interaktive Dienste für Server 2012 zuzulassen, HKLM\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServicesmuss 0 (Standard 1) festgelegt werden
Ivan Chau
6

Ich würde empfehlen, dass Sie den Mindestberechtigungssatz erarbeiten, den Ihr Dienst wirklich benötigt, und diesen verwenden, anstatt den viel zu privilegierten lokalen Systemkontext. Zum Beispiel Local Service .

Interaktive Dienste funktionieren unter Windows Vista und Windows Server 2008 aufgrund der Isolation von Sitzung 0 nicht mehr - oder zeigen zumindest keine Benutzeroberfläche mehr an .

Mike Dimmick
quelle
4
Mike, danke für die Antwort. Obwohl ich Ihrer Empfehlung zustimme und ich denke, dass jeder von Ihrer Antwort profitieren wird, glaube ich nicht, dass Sie die Frage beantwortet haben.
Ben Griswold
@ Ben Griswold: Er weist jedoch genau darauf hin, was den alten Weg in Vista zum Scheitern bringt. +1.
SamB
1
Die Frage lautet: "Wie führen Sie CMD.exe unter dem lokalen Systemkonto aus?"
Jaco Pretorius
2
@SamB, und dafür sind Kommentare gedacht, wenn Sie etwas beitragen können, das eigentlich keine Antwort ist .
Synetech
6

Verwenden von Secure Desktop zum Ausführen cmd.exealssystem

Wir können den Kernelzugriff CMDin Windows XP / Vista / 7 / 8.1 einfach durch Anhängen eines Debuggers erhalten:

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. Führen Sie CMDals Administrator

  2. Verwenden Sie dann diesen Befehl in Erhöht:

     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. Führen Sie dann osk(onscreenkeyboard) aus. Es wird immer noch nicht mit Systemintegritätsstufe ausgeführt, wenn Sie den Prozess-Explorer überprüfen. Wenn Sie jedoch OSK in einer Servicesitzung verwenden können, wird es als ausgeführtNT Authority\SYSTEM

Ich hatte also die Idee, dass Sie es auf Secure Desktop ausführen müssen.

Starten Sie eine beliebige Datei als Administrator. Wenn UAC-Eingabeaufforderungen angezeigt werden, drücken Sie einfach Win+ Uund starten Sie OSKund es wird CMDstattdessen gestartet . Geben whoamiSie dann in der erhöhten Eingabeaufforderung ein und Sie erhalten NT Authority\System. Danach können Sie den Explorer über die Systembefehlsshell starten und das Systemprofil verwenden. Aus Sicherheitsgründen sind Sie jedoch etwas eingeschränkt, was Sie über SYSTEM-Berechtigungen im Netzwerk tun können. Ich werde später weitere Erklärungen hinzufügen, wie ich es vor einem Jahr entdeckt habe.

Eine kurze Erklärung, wie dies geschieht

Wird Cmd.exeunter einem lokalen Systemkonto ohne Verwendung ausgeführtPsExec . Diese Methode führt die zuvor entdeckte Debugger-Trap-Technik aus. Diese Technik hat ihre eigenen Vorteile. Sie kann verwendet werden, um einen schlauen / böswilligen Wurm oder Malware im Debugger abzufangen und stattdessen eine andere Exe auszuführen, um die Ausbreitung oder den vorübergehenden Schaden zu stoppen. Hier fängt dieser Registrierungsschlüssel die Bildschirmtastatur im nativen Windows-Debugger ein und führt stattdessen cmd.exe aus, aber cmd wird weiterhin mit den Berechtigungen für angemeldete Benutzer ausgeführt. Wenn wir jedoch cmd in Sitzung 0 ausführen, können wir die Systemshell erhalten. Deshalb fügen wir hier eine weitere Idee hinzu, die wir auf dem sicheren Desktop überspannen. Denken Sie daran, dass sichere Desktops in Sitzung 0 unter dem Systemkonto ausgeführt werden und wir die System-Shell erhalten. Wenn Sie also etwas als erhöht ausführen, müssen Sie die UAC-Eingabeaufforderung und die UAC-Eingabeaufforderungen auf einem dunklen, nicht interaktiven Desktop beantworten und sobald Sie es sehen, müssen Sie Win+ drückenU und dann auswählenOSKSie werden CMD.exeunter den lokalen Systemberechtigungen ausgeführt. Es gibt noch mehr Möglichkeiten, um lokalen Systemzugriff zu erhaltenCMD

Rabe
quelle
ya es gibt noch mehr Möglichkeiten, cmd als Erhöht mit NT-Berechtigungen auszuführen
Rabe
Das ist sehr nett. Sehr schön. Ich hasse es, mich auf Add-Ons von Drittanbietern zu verlassen, um etwas zu erledigen. Das geht super schnell und einfach. Permanent auch :-) Das einzige Problem ist, dass Sie alle Befehle im UAC-Fenster ausführen müssen und nur einige Anwendungen geöffnet sind. Explorer.exe wird beispielsweise nicht geöffnet. Ich möchte experimentieren, ob es einen anderen Weg gibt, dies auszulösen. Ich möchte in der Lage sein, andere Apps in der nativen Windows-Umgebung auszuführen, ohne dass die Benutzerkontensteuerung bestimmte Apps einschränkt. Tolles Zeug, Rabe!
KonaRin
3

Eine Alternative dazu ist Process Hacker, wenn Sie als ... ausgeführt werden (Interactive funktioniert nicht für Personen mit Sicherheitsverbesserungen, aber das spielt keine Rolle). Wenn die Box geöffnet wird, setzen Sie Service in den Box-Typ und setzen Sie SYSTEM in die User-Box und setzen Sie C. : \ Users \ Windows \ system32 \ cmd.exe Lassen Sie den Rest auf OK klicken und boch Sie haben ein Fenster mit cmd darauf und führen Sie es als System aus. Führen Sie jetzt die anderen Schritte für sich selbst aus, da ich Ihnen vorschlage, sie zu kennen

James5001
quelle
2

Es geht auch anders. Es gibt ein Programm namens PowerRun, mit dem erhöhte cmd ausgeführt werden können. Auch mit TrustedInstaller-Rechten. Es ermöglicht sowohl Konsolen- als auch GUI-Befehle.

Alexander Haakan
quelle
1

Wenn Sie eine Batchdatei schreiben können, die nicht interaktiv sein muss, versuchen Sie, diese Batchdatei als Dienst auszuführen, um das zu tun, was getan werden muss.


quelle
0

Ich verwende das Dienstprogramm RunAsTi , um als TrustedInstaller (hohe Berechtigung) ausgeführt zu werden. Das Dienstprogramm kann auch im Wiederherstellungsmodus von Windows verwendet werden (der Modus, den Sie mit Shift+ aufrufenRestart ). Das Dienstprogramm psexec funktioniert dort nicht. Sie müssen jedoch Ihre C:\Windowsund C:\Windows\System32(nicht X:\Windowsund X:\Windows\System32) Pfade zur PATHUmgebungsvariablen hinzufügen , da sonst RunAsTi im Wiederherstellungsmodus nicht funktioniert, sondern nur Folgendes gedruckt wird: AdjustTokenPrivileges for SeImpersonateName: Dem Aufrufer werden nicht alle Berechtigungen oder Gruppen zugewiesen, auf die verwiesen wird .

anton_rh
quelle
0

Planen Sie mit dem Taskplaner einen CMDKEY-Lauf, der unter SYSTEM ausgeführt wird, mit den entsprechenden Argumenten / add: / user: und / pass:

Sie müssen nichts installieren.

Paul Harris
quelle