
PowerSploit - A PowerShell Post-Exploitation Framework
Выполнение кода на целевой машине.
Invoke-DllInjectionВнедряет DLL в идентификатор процесса по вашему выбору.
Invoke-ReflectivePEInjectionРефлексивно загружает Windows PE-файл (DLL/EXE) в процесс PowerShell или рефлексивно внедряет DLL в удаленный процесс.
Invoke-ShellcodeВнедряет шелл-код в идентификатор процесса по вашему выбору или локально в PowerShell.
Invoke-WmiCommandВыполняет блок скрипта PowerShell на целевом компьютере и возвращает его форматированный вывод, используя WMI в качестве канала C2.
Изменение и/или подготовка скриптов к выполнению на скомпрометированной машине.
Out-EncodedCommandСжимает, кодирует в Base-64 и генерирует вывод командной строки для полезной нагрузки скрипта PowerShell.
Out-CompressedDllСжимает, кодирует в Base-64 и выводит сгенерированный код для загрузки управляемой DLL в память.
Out-EncryptedScriptШифрует текстовые файлы/скрипты.
Remove-CommentУдаляет комментарии и лишние пробелы из скрипта.
Добавление возможностей персистентности в скрипт PowerShell
New-UserPersistenceOptionНастройка параметров персистентности на уровне пользователя для функции Add-Persistence.
New-ElevatedPersistenceOptionНастройка параметров персистентности с повышенными привилегиями для функции Add-Persistence.
Add-PersistenceДобавление возможностей персистентности в скрипт.
Install-SSPУстановка DLL поставщика поддержки безопасности (SSP).
Get-SecurityPackagesПеречисление всех загруженных пакетов безопасности (SSP).
Антивирус бессилен против PowerShell!
Find-AVSignatureПоиск одно-байтовых сигнатур антивируса тем же методом, что и DSplit из "class101".
Все ваши данные принадлежат мне!
Invoke-TokenManipulationВыводит список доступных токенов входа. Создает процессы с токенами входа других пользователей и имитирует токены входа в текущем потоке.
Invoke-CredentialInjectionСоздание сеансов входа с использованием учетных данных в открытом виде без генерации подозрительного события 4648 (явный вход с учетными данными).
Invoke-NinjaCopyКопирует файл с раздела NTFS путем чтения необработанного тома и разбора структур NTFS.
Invoke-MimikatzРефлексивно загружает Mimikatz 2.0 в память с помощью PowerShell. Может использоваться для дампа учетных данных без записи чего-либо на диск. Может использоваться для любой функциональности, предоставляемой Mimikatz.
Get-KeystrokesЗаписывает нажатые клавиши, время и активное окно.
Get-GPPPasswordИзвлекает пароль в открытом виде и другую информацию для учетных записей, распространяемых через групповые политики.
Get-GPPAutologonИзвлекает имя пользователя и пароль для автоматического входа из registry.xml, если они распространяются через групповые политики.
Get-TimedScreenshotФункция, которая делает снимки экрана через регулярные промежутки времени и сохраняет их в папку.
New-VolumeShadowCopyСоздает новую теневую копию тома.
Get-VolumeShadowCopyВыводит пути устройств всех локальных теневых копий томов.
Mount-VolumeShadowCopyМонтирует теневую копию тома.
Remove-VolumeShadowCopyУдаляет теневую копию тома.
Get-VaultCredentialОтображает объекты учетных данных хранилища Windows, включая веб-учетные данные в открытом виде.
Out-MinidumpГенерирует полный дамп памяти процесса в формате minidump.
Get-MicrophoneAudioЗаписывает аудио с системного микрофона и сохраняет на диск.
Вызов общего хаоса с помощью PowerShell.
Set-MasterBootRecordДоказательство концепции, которое перезаписывает главную загрузочную запись сообщением по вашему выбору.
Set-CriticalProcessВызывает синий экран на вашей машине при выходе из PowerShell.
Инструменты для помощи в повышении привилегий на целевой системе.
PowerUpОбширный набор общих проверок на повышение привилегий, а также некоторые векторы атак.
Инструменты для помощи на этапе разведки при тестировании на проникновение.
Invoke-PortscanВыполняет простой сканер портов с использованием обычных сокетов, основанный (довольно) свободно на nmap.
Get-HttpStatusВозвращает HTTP-статусы и полный URL для указанных путей при предоставлении словаря.
Invoke-ReverseDnsLookupСканирует диапазон IP-адресов на наличие DNS-записей PTR.
PowerViewPowerView — это набор функций для перечисления и эксплуатации сети и домена Windows.
Коллекция словарей, используемых для помощи на этапе разведки при тестировании на проникновение. Словари взяты из следующих источников.
Проект PowerSploit и все отдельные скрипты распространяются по лицензии BSD 3-Clause, если не указано иное.
Для получения подробной информации об использовании обратитесь к встроенной справке в каждом отдельном скрипте.
Чтобы установить этот модуль, поместите всю папку PowerSploit в один из каталогов модулей. Пути к модулям PowerShell по умолчанию перечислены в переменной окружения $Env:PSModulePath.
Путь к модулям для пользователя по умолчанию: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" Путь к модулям для компьютера по умолчанию: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
Чтобы использовать модуль, введите Import-Module PowerSploit
Чтобы увидеть импортированные команды, введите Get-Command -Module PowerSploit
Если вы используете PowerShell v3 и хотите убрать назойливое предупреждение «Вы действительно хотите запускать скрипты, загруженные из Интернета?», после того как поместили PowerSploit в путь модуля, выполните следующую однострочную команду:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerSploit) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
Для справки по каждой отдельной команде используйте Get-Help.
Примечание: Инструменты, содержащиеся в этом модуле, были разработаны таким образом, чтобы их можно было запускать по отдельности. Включение их в модуль просто повышает их портативность.
Нам нужны вклады! Если у вас есть отличная идея для PowerSploit, мы будем рады добавить её. Новые дополнения потребуют следующего:
Для всех текущих и будущих участников PowerSploit: прошу вас следовать этому руководству по стилю при написании скриптов/модулей.
Избегайте Write-Host любой ценой. Функции/командлеты PowerShell — это не утилиты командной строки! Pull request-ы, содержащие код с Write-Host, не будут рассматриваться. Вместо этого выводите пользовательские объекты. Для получения дополнительной информации о создании пользовательских объектов прочтите эти статьи:
Если вы хотите отображать отладочную информацию на экране, используйте Write-Verbose. Пользователь всегда может добавить -Verbose.
Всегда предоставляйте подробную встроенную справку для каждого скрипта. Также не забудьте указать своё имя и лицензию BSD 3-Clause (если нет чрезвычайных обстоятельств, препятствующих применению лицензии BSD).
Убедитесь, что все функции следуют правильному соглашению «глагол-существительное» в PowerShell. Используйте Get-Verb для вывода списка стандартных глаголов, используемых PowerShell. Исключения из поддерживаемых глаголов будут рассматриваться в индивидуальном порядке.
Я предпочитаю, чтобы имена переменных были написаны заглавными буквами и были максимально описательными.
Соблюдайте логические отступы между блоками кода. Используйте отступы, чтобы сделать код более читаемым.
Если вы повторяете код, напишите функцию.
Перехватывайте все ожидаемые ошибки и выдавайте осмысленный вывод. Если ошибка должна остановить выполнение скрипта, используйте 'Throw'. Если ошибка не останавливает выполнение, используйте Write-Error.
Если вы пишете скрипт, который взаимодействует с Win32 API, старайтесь избегать компиляции C# с помощью Add-Type. По возможности используйте модуль PSReflect.
Не используйте жестко заданные пути. Скрипт должен работать «из коробки». Никто не должен модифицировать код, если только он сам этого не хочет.
Желательна совместимость с PowerShell v2.
Используйте позиционные параметры и делайте параметры обязательными, когда это имеет смысл. Например, я ожидаю что-то вроде следующего:
[Parameter(Position = 0, Mandatory = $True)]Не используйте псевдонимы, если только это не имеет смысла для получения входных данных из конвейера. Они делают код более сложным для чтения людям, не знакомым с конкретным псевдонимом.
Старайтесь не делать команды слишком длинными. Например, конвейер — естественное место для разрыва строки.
Не переусердствуйте с встроенными комментариями. Используйте их только тогда, когда некоторые аспекты кода могут сбить с толку читателя.
Вместо использования Out-Null для подавления нежелательного/нерелевантного вывода сохраняйте его в $null. Это дает небольшой прирост производительности.
Используйте значения по умолчанию для параметров, когда это имеет смысл. В идеале скрипт должен работать без параметров.
Если скрипт создает сложные пользовательские объекты, включите файл ps1xml, который правильно форматирует вывод объекта.