
PowerSploit - A PowerShell Post-Exploitation Framework
Форкнут, чтобы добавить несколько функций в PowerView.ps1, которые я обычно выполняю вручную
Выполняет код на целевой машине.
Invoke-DllInjectionВнедряет DLL в процесс с выбранным вами идентификатором процесса.
Invoke-ReflectivePEInjectionРефлексивно загружает Windows PE-файл (DLL/EXE) в процесс PowerShell или рефлексивно внедряет DLL в удалённый процесс.
Invoke-ShellcodeВнедряет шелл-код в процесс с выбранным вами идентификатором процесса или локально в PowerShell.
Invoke-WmiCommandВыполняет PowerShell ScriptBlock на целевом компьютере и возвращает его форматированный вывод, используя 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Извлекает пароль в открытом виде и другую информацию для учетных записей, распространяемых через Group Policy Preferences.
Get-GPPAutologonИзвлекает имя пользователя и пароль для автоматического входа из registry.xml, если они распространяются через Group Policy Preferences.
Get-TimedScreenshotФункция, которая делает снимки экрана через регулярные промежутки времени и сохраняет их в папку.
New-VolumeShadowCopyСоздает новую теневую копию тома.
Get-VolumeShadowCopyПеречисляет пути устройств всех локальных теневых копий томов.
Mount-VolumeShadowCopyМонтирует теневую копию тома.
Remove-VolumeShadowCopyУдаляет теневую копию тома.
Get-VaultCredentialОтображает объекты учетных данных Windows Vault, включая веб-учетные данные в открытом виде.
Out-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-файл, который правильно форматирует вывод объекта.