Jump to content
HeizungAuf5

APC PowerChute Shutdown Script

Recommended Posts

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)

 

Share this post


Link to post
Share on other sites
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...

Share this post


Link to post
Share on other sites
vor 2 Minuten schrieb HeizungAuf5:

Start-Process powershell -Credential $credential $script

Entweder muss da $script weg oder du benötigst noch "-Argumentlist $script". Oder es ist noch was ganz anderes. ;) Dafür müsste man aber jetzt nochmal den Rest vom Script sehen.

Share this post


Link to post
Share on other sites
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

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites
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:

Share this post


Link to post
Share on other sites
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 :) 

Share this post


Link to post
Share on other sites

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.

  • Like 1

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

Ich bin immer bei Aufgaben mit hohen Berechtigungen vorsichtig. Hier kann einfach der Inhalt verändert werden. Das würde bei der Aufgabe ohne erneute Passworteingabe nicht funktionieren. :achtung:

 

Das kann durch die Signierung des Skript verhindert werden. 

Share this post


Link to post
Share on other sites

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!

  • Like 1

Share this post


Link to post
Share on other sites
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. 

Share this post


Link to post
Share on other sites
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!

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...