it-swarm-eu.dev

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

Ich verwende derzeit Vista und möchte die gleichen 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 nachahmen. Grundsätzlich möchte ich CMD.EXE unter dem lokalen Systemkonto ausführen.

Ich habe online Informationen gefunden, in denen vorgeschlagen wird, die CMD.exe mit dem Befehl DOS Task Scheduler AT zu starten, aber ich habe eine Vista-Warnung erhalten, dass "diese Task aufgrund von Sicherheitsverbesserungen zu der Zeit ausgeführt wird, jedoch 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 startet der Dienst nicht und es wird 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 Task 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, ich habe die gleichen Einschränkungen wie beim Ausführen einer geplanten Aufgabe.

Jeder meiner Versuche ist bisher gescheitert. Irgendwelche Vorschläge?

124
Ben Griswold

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 funktionieren wird. Nach meinen und Bryants Tests haben wir festgestellt, dass derselbe Ansatz funktioniert funktionieren nicht mit Vista oder Windows Server 2008 - höchstwahrscheinlich aufgrund zusätzlicher Sicherheit und weil der/interactive-Schalter nicht mehr verwendet wird. 

Ich bin jedoch auf diesen Artikel gestoßen, der die Verwendung von PSTools von SysInternals (die von Microsoft im Juli 2006 erworben wurde) demonstriert lief wie ein Zauber unter dem lokalen Admin-Konto:

psexec -i -s cmd.exe

PSTools funktioniert gut. Es ist ein leichtes, gut dokumentiertes Set an Tools, das eine angemessene Lösung für mein Problem bietet.

Vielen Dank an alle, die Hilfe angeboten haben.

196
Ben Griswold
  1. Laden Sie psexec.exe von Sysinternals .
  2. Legen Sie es in Ihr Laufwerk C: \.
  3. Melden Sie sich als Standard- oder Admin-Benutzer an und verwenden Sie den folgenden Befehl: cd \. Sie befinden sich dann im Stammverzeichnis Ihres Laufwerks, in dem sich psexec befindet.
  4. Verwenden Sie den folgenden Befehl: psexec -i -s cmd.exe wobei -i für interaktives und -s für Systemkonto ist.
  5. Wenn der Befehl abgeschlossen ist, wird eine cmd-Shell gestartet. Typ whoami; es wird sagen "system"
  6. Taskmanager öffnen. Töte Explorer.exe.
  7. Von einem erhöhten Befehl Shell-Typ start Explorer.exe.
  8. Wenn Sie den Explorer starten, beachten Sie 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üssen Sie alle Berechtigungen zum Löschen dieser Dateien ändern.

Benutzer, die versuchen, Systemdateien in einem beliebigen geschützten Verzeichnis von Windows umzubenennen oder zu löschen, sollten wissen, dass alle Windows-Dateien durch DACLS geschützt werden. Beim Umbenennen einer Datei müssen Sie den Eigentümer ändern und TrustedInstaller ersetzen, der die Datei besitzt, und jeden Benutzer wie einen Benutzer, der dies tut Gehört zur Administratorgruppe als Eigentümer der Datei. Versuchen Sie, die Datei nach dem Ändern der Berechtigung umzubenennen. Wenn Sie Windows Explorer mit Kernel-Privilegien ausführen, sind Sie aus Sicherheitsgründen in Bezug auf den Netzwerkzugriff etwas eingeschränkt und es handelt sich immer noch um ein Forschungsthema für mich zurückzugreifen

39
raven

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

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

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

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

9
Bryant

Ich würde empfehlen, dass Sie den minimalen Berechtigungssatz ausarbeiten, den Ihr Dienst wirklich benötigt, und diesen verwenden, anstatt den viel zu privilegierten Kontext des lokalen Systems. Zum Beispiel Local Service .

Interaktive Dienste funktionieren auf Windows Vista und Windows Server 2008 aufgrund von session 0-Isolierung nicht mehr - oder zeigen zumindest keine Benutzeroberfläche.

6
Mike Dimmick

Verwenden von Secure Desktop zum Ausführen von cmd.exe als system

Unter Windows XP/Vista/7/8.1 können wir auf einfache Weise über CMD auf den Kernel zugreifen, indem wir einen Debugger anhängen:

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 CMD als Administrator aus

  2. Dann benutze diesen Befehl in Elevated:

     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 der Systemintegritätsstufe ausgeführt, wenn Sie den Prozess-Explorer überprüfen. Wenn Sie jedoch OSK in einer Servicesitzung verwenden können, wird es als NT Authority\SYSTEM ausgeführt.

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+U und starte OSK und starte stattdessen CMD. Geben Sie dann in der Eingabeaufforderung mit erhöhten Rechten whoami ein, und Sie erhalten NT Authority\System. Danach können Sie den Explorer über den Systembefehl Shell starten und das Systemprofil verwenden. Was Sie jedoch aus Sicherheitsgründen über SYSTEM-Berechtigungen im Netzwerk tun können, ist etwas eingeschränkt. Ich werde später weitere Erklärungen hinzufügen, da ich es vor einem Jahr entdeckt habe.

Eine kurze Erklärung, wie dies geschieht

Ausführen von Cmd.exe unter dem lokalen Systemkonto ohne Verwendung von PsExec. Diese Methode führt die zuvor entdeckte Debugger-Trap-Technik aus. Diese Technik hat jedoch ihre eigenen Vorteile. Sie kann verwendet werden, um einen listigen/böswilligen Wurm oder Malware im Debugger abzufangen und stattdessen eine andere Exe-Datei 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 Rechten für angemeldete Benutzer ausgeführt. Wenn wir jedoch cmd in session0 ausführen, können wir die System-Shell erhalten. Deshalb fügen wir hier eine weitere Idee hinzu, die wir für den sicheren Desktop verwenden. Denken Sie daran, dass der sichere Desktop in Sitzung 0 unter dem Systemkonto ausgeführt wird, und wir erhalten die System-Shell. Wenn Sie also einen erhöhten Status ausführen, müssen Sie die UAC-Eingabeaufforderung und die UAC-Eingabeaufforderung auf einem dunklen, nicht interaktiven Desktop beantworten. Sobald Sie sie sehen, müssen Sie die Taste drücken Win+U und wählen Sie dann OSK, damit CMD.exe unter den Berechtigungen des lokalen Systems ausgeführt wird. Es gibt noch mehr Möglichkeiten, mit CMD auf das lokale System zuzugreifen

3
raven

eine Alternative dazu ist Process Hacker, wenn Sie in run als ... einsteigen (Interaktiv funktioniert nicht für Benutzer mit Sicherheitserweiterungen, die aber keine Rolle spielen) und wenn das Feld geöffnet wird, legen Sie den Dienst in .__ und setzen Sie C:\Users\Windows\system32\cmd.exe. Lassen Sie den Rest klicken und klicken Sie auf "OK". Wenn Sie ein Fenster mit "cmd" haben, werden Sie ausgeführt, während das System die anderen Schritte für sich selbst ausführt

3
James5001

Es geht auch anders. Es gibt ein Programm namens PowerRun, das die Ausführung von erhöhten Cmd-Werten ermöglicht. Auch mit TrustedInstaller-Rechten. Es erlaubt sowohl Konsolen- als auch GUI-Befehle. 

2

wenn Sie eine Batchdatei schreiben können, die nicht interaktiv sein muss, führen Sie diese Batchdatei als Dienst aus.

1

Planen Sie mit dem Taskplaner eine Ausführung von CMDKEY unter SYSTEM mit den entsprechenden Argumenten von/add:/user: und/pass:

Es muss nichts installiert werden.

0
Paul Harris

Ich verwende das Dienstprogramm RunAsTi , um als TrustedInstaller auszuführen (hohes Privileg). Das Dienstprogramm kann auch im Wiederherstellungsmodus von Windows verwendet werden (der Modus, den Sie mit Shift + Restart eingeben). Das Dienstprogramm psexec funktioniert dort nicht. Sie müssen jedoch die Pfade C:\Windows und C:\Windows\System32 (nicht X:\Windows und X:\Windows\System32) zur Umgebungsvariable PATH hinzufügen. Andernfalls funktionieren RunAsTi nicht im Wiederherstellungsmodus, sondern es werden nur AdjustTokenPrivileges für SeImpersonateName: Nicht alle Berechtigungen gedruckt oder referenzierte Gruppen werden dem Anrufer zugewiesen.

0
anton_rh