Jump to content

APC PowerChute Shutdown Script


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

vor 27 Minuten schrieb HeizungAuf5:

$password = "HierDasPasswortDenken"

#erzeugt die Credentials

$credential = New-Object System.Management.Automation.PsCredential($user,$password)

In dem Fall musst du aus $password noch einen SecureString machen. ;)

 

$User = "PC\User"
$Password = "HierDasPasswortDenken"
New-Object -TypeName System.Management.Automation.PSCredential ($User, $(ConvertTo-SecureString $Password -AsPlainText -Force))

oder eben

$User = "PC\User"
$Password = ConvertTo-SecureString "HierDasPasswortDenken" -AsPlainText -Force
New-Object -TypeName System.Management.Automation.PSCredential ($User, $Password)

 

Link zu diesem Kommentar
vor 10 Minuten schrieb testperson:

oder eben


$User = "PC\User"
$Password = ConvertTo-SecureString "HierDasPasswortDenken" -AsPlainText -Force
New-Object -TypeName System.Management.Automation.PSCredential ($User, $Password)

danke. Ich hatte das immer "falschrum". Also "PasswortHier" | ConvertTo-SecureString -AsPlainText -Force

 

 

Aber irgendwie scheint es der Server geradezu auf Pügel anzulegen...

Start-Process : Dieser Befehl kann aufgrund des folgenden Fehlers nicht ausgeführt werden: Der Benutzername oder das Kennwort ist falsch.
In C:\tools\usv_shutdown\runasAdministrator.ps1:12 Zeichen:1
+ Start-Process powershell -Credential $credential $script #-ArgumentLi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Start-Process], InvalidOperationException
    + FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

Das Passwort ist definitiv richtig. Mit dem hab ich mich ja per RDP am Server angemeldet...

Link zu diesem Kommentar
vor 1 Minute schrieb testperson:

Entweder muss da $script weg oder du benötigst noch "-Argumentlist $script". Oder es ist noch was ganz anderes

mit $script wird die Datei die ausgeführt wird gesetzt

 

#eigentlicher PS Skript, der z.B. als Admin etc ausgeführt wird
$script = "C:\tools\usv_shutdown\test.ps1"
#Skript Aufruf
Start-Process powershell -Credential $credential $script #-ArgumentList 

 

 

vor 1 Minute schrieb testperson:

Dafür müsste man aber jetzt nochmal den Rest vom Script sehen. 

cls
#legt Ausführungsbenutzer fest
$user= "SERVERNAME\Administrator"
#lädt Passwortdatei 
$File="C:\tools\usv_shutdown\user.pwd"
$password = ConvertTo-SecureString "HierDasPasswortDenken" -AsPlainText -Force
#erzeugt die Credentials
$credential = New-Object System.Management.Automation.PsCredential($user,$password)
#eigentlicher PS Skript, der z.B. als Admin etc ausgeführt wird
$script = "C:\tools\usv_shutdown\test.ps1"
#Skript Aufruf
Start-Process powershell -Credential $credential $script #-ArgumentList 

#schließt den Intialisierungsskript

 

Link zu diesem Kommentar

In deinem Fall müsste es

Start-Process powershell -Credential $credential -ArgumentList $("-File " + $script)

sein. (Optimalerweise bzw.) ich baue mir das immer so:

$PowerShellPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$PowerShellArgs = $("-NoProfile -ExecutionPolicy Bypass -File " + $script)
Start-Process $PowerShellPath -Credential $credential -ArgumentList $PowerShellArgs

 

Link zu diesem Kommentar
vor 4 Minuten schrieb testperson:

(Optimalerweise bzw.) ich baue mir das immer so:


$PowerShellPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$PowerShellArgs = $("-NoProfile -ExecutionPolicy Bypass -File " + $script)
Start-Process $PowerShellPath -Credential $credential -ArgumentList $PowerShellArgs

 

Hab ich mir mal so zusammen gebaut. Funktioniert genau so wie vorher. Er sagt das Lobeswort ist falsch, ich sag, das kann nicht sein, mit dem Benutzernamen und Passwort habe ich mich angemeldet. :angry2:

Link zu diesem Kommentar
vor 22 Minuten schrieb testperson:

In deinem Fall müsste es


Start-Process powershell -Credential $credential -ArgumentList $("-File " + $script)

sein. (Optimalerweise bzw.) ich baue mir das immer so:


$PowerShellPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$PowerShellArgs = $("-NoProfile -ExecutionPolicy Bypass -File " + $script)
Start-Process $PowerShellPath -Credential $credential -ArgumentList $PowerShellArgs

 

Stimmt so nicht mit dem -File, er nimmt es als Default Parameter :) 

Link zu diesem Kommentar

Hier ist sehr viel durcheinander, und in jedem Beitrag gibt es Codeschnipsel, die auch immer nur auszugsweise sind. Vielleicht mal zurück auf Los und "komplett schildern"?

 

Zum Anfangsproblem: Aus einer CMD mit .\script.ps1 zu arbeiten ist grenzwertig. Du weißt nicht, was das aktuelle Arbeitsverzeichnis ist ("cd" ohne Parameter verrät Dir das).

Mit %~dp0 kommst Du an das Verzeichnis ran, in dem die CMD liegt (mehr dazu: "for /?"). Und mit >>log.txt 2>&1 kannst Du Batch-Output in eine Datei schreiben.

 

Bei den Credentials hast Du vermutlich einen recht trivialen Logikfehler drin, aber in den Codeschnipseln von bisher ist das total undurchsichtig. "Falsches Kennwort" sagt für mich, daß Du Dich irgendwie im Konvertieren verrannt hast.

Link zu diesem Kommentar

Hallo zussammen,

 

sorry für die verspätete Antwort.

 

Ich habe das Problem nun auf eine "eigene" Art lösen können: Ich hab die Powershell Datei als Automatische Aufgabe in Windows angelegt, dort mit allen Privilegien ausgestattet und die CMD-Datei startet einfach die Aufgabe. Zwar über mehrere Ecken, dafür spar ich mit die zweite PowerShell Datei und es funktioniert immerhin ;)

 

Grüße!

Link zu diesem Kommentar

Hallo @MurdocX,

 

Am 5.6.2019 um 15:06 schrieb MurdocX:

Hier kann einfach der Inhalt verändert werden.

Das haben wir intern ebenfalls schon aufgegriffen. Allerdings halten wir es für unsinnig, das Script, beziehungsweise die Aufgabe zu sichern. Wer bereits auf den Server zugriff hat, auf dem die Aufgabe und das Script liegt, der ändert kein Powershell Script mehr ab, dass ausgeführt wird, wenn der Strom ausfällt, sondern kann dort ganz andere Dinge abziehen, die schneller von Erfolg gekrönt sein dürften, als dort in dem Script (welches im Übrigen gemonitored wird) anzupassen und zu hoffen, dass der Strom ausfällt.

 

 

Grüße!

Link zu diesem Kommentar
vor 13 Minuten schrieb HeizungAuf5:

Wer bereits auf den Server Zugriff hat, auf dem die Aufgabe und das Script liegt, der ändert kein Powershell Script mehr ab, dass ausgeführt wird, wenn der Strom ausfällt, sondern kann dort ganz andere Dinge abziehen, die schneller von Erfolg gekrönt sein dürften, als dort in dem Script (welches im Übrigen gemonitored wird) anzupassen und zu hoffen, dass der Strom ausfällt.

Eine alternative Option wäre hier, um keine mögliche Privilege Escalation zu hinterlassen, das Skript in einen Bereich abzulegen auf die nur der Admin "Schreiben" Berechtigung hat. 

Link zu diesem Kommentar
vor 10 Minuten schrieb MurdocX:

in einen Bereich abzulegen auf die nur der Admin "Schreiben" Berechtigung

Sowas ist schon mit eingebaut. Wir sind sogar noch einen schritt weiter gegangen und haben der Admingruppe auch nur das Recht zu lesen hinterlassen. Geschrieben wird in den Ordner eh nichts. Klar kann jemand, der auf den Server zugreifen kann diese Berechtigung wieder setzen, aber somit ist dem "schnellen Zugriff" schon mal ein Riegel vor geschoben. Zudem haben wir im Moitoring eine Überprüfung laufen, welche testet, welchen Inhalt die .ps1 Datei hat und wenn dieser sich ändern eben anschlägt.

 

Grüße!

Link zu diesem Kommentar

Die Umsetzung klingt gut. Jedoch solltet Ihr die Signierung der Skripte nicht generell aus den Augen verlieren und euch schon mal ansatzweise damit beschäftigen. Das ist nie zu eurem Nachteil ;-) 

 

Wenn der Zugriff auf den Server gelingt, soll nur die Escalation in eine höhere Ebene verhindert werden. Falls der Angreifer schon Admin-Berechtigung besitzt, dann ist jede Hürde nur noch Schein. Dann interessiert euer Skript auch nicht mehr.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...