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

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

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

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

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

Категории

Все категории
Loading categories
p3-loader — P³-Shellcode Loader — это загрузчик, реализующий технику внедрения кода, которая использует структуру Process Parameters в качестве места выполнения и промежуточного хранения для инъекции шеллкода в удаленные процессы, не активируя стандартные механизмы обнаружения. | Kitploit
Инструменты/GitHubGitHub/orange-cyberdefense/p3-loader
Оборонительные ИнструментыПовышение привилегийЭксплуатацияШелл-кодПост-эксплуатацияТестирование на ПроникновениеСтатьи и ИсследованияОбучение и ОбразованиеRed Teaming

Популярное

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

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

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

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

Смотреть все инструменты →
Разработка Полезной Нагрузки
Эксплуатация Бинарных Файлов
GitHuborange-cyberdefense/p3-loader

p3-loader

P³-Shellcode Loader — это загрузчик, реализующий технику внедрения кода, которая использует структуру Process Parameters в качестве места выполнения и промежуточного хранения для инъекции шеллкода в удаленные процессы, не активируя стандартные механизмы обнаружения.

Репозиторий
20423142 месяцев назадПроверено Kitploit
Поделиться

P³-Shellcode Loader — отравление параметров процесса

Авторы: Макс Хиршбергер и Огулкан Угур


Содержание

  1. Введение
  2. Типичное внедрение процесса и задействованные системные API
  3. Техническая основа требуемых внутренних компонентов Windows
    • 3.1 API создания процесса и параметры запуска
    • 3.2 Блок окружения процесса (PEB)
  4. Отравление параметров процесса (P³)
    • 4.1 Запуск процесса с отравленным параметром
    • 4.2 Поиск внедрённых данных в новом процессе
    • 4.3 Выполнение внедрённого кода
    • 4.4 Реализованные варианты внедрения полезной нагрузки
  5. Передача произвольного шелл-кода в строке
    • 5.1 Вспомогательные методы низкого уровня, используемые генератором шелл-кода
    • 5.2 Реализация операций более высокого уровня
  6. Преимущества обхода обнаружения с помощью этой техники
  7. Подход к обнаружению
  8. Заключение
  9. Ссылки

1. Введение

P³-Shellcode Loader — это загрузчик, реализующий технику внедрения кода, которая использует структуру параметров процесса (отравление параметров процесса) в качестве места выполнения и временного хранения для внедрения шелл-кода в удалённые процессы, не запуская типичные механизмы обнаружения.

Похожая концепция была описана исследователем безопасности modexp, который показал, что аргументы, передаваемые в API CreateProcess, могут быть использованы для этой цели [1].


2. Типичное внедрение процесса и задействованные системные API

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

Ниже перечислены типичные шаги, необходимые для внедрения кода в другой процесс:

  1. Злоумышленник находит и открывает целевой процесс или запускает новый процесс (через OpenProcess / NtOpenProcess или CreateProcess / NtCreateProcess).
  2. Память для вредоносного кода выделяется в целевом процессе (через VirtualAllocEx или NtAllocateVirtualMemory).
  3. Вредоносный код записывается в новое выделение (через WriteProcessMemory / NtWriteVirtualMemory).
  4. Настраивается защита доступа к памяти для разрешения выполнения вредоносного кода (через VirtualProtectEx / NtProtectVirtualMemory).
  5. В целевом процессе запускается новый поток, выполняющий вредоносный код (через CreateRemoteThread или NtCreateThreadEx).

Дополнительные техники внедрения включают, помимо прочего, следующие:

  • Перехват потока: Вместо создания нового потока перенаправляется существующий (через NtSetContextThread).
  • APC-инъекция Early-Bird: Использует асинхронные вызовы процедур (APC) для перенаправления выполнения существующего потока (через NtQueueApcThread).
  • Dirty Vanity: Злоупотребляет Windows API RtlCreateProcessReflection, реализующим ветвление процессов. В ходе нашего тестирования мы заметили, что большинство EDR ориентируются на определённую телеметрию для обнаружения внедрения процессов. EDR в первую очередь отслеживают использование WriteProcessMemory и VirtualAllocEx, а также их базовые системные вызовы ядра NtWriteVirtualMemory, NtAllocateVirtualMemory и NtAllocateVirtualMemoryEx.

3. Техническая основа требуемых внутренних компонентов Windows

3.1 API создания процесса и параметры запуска

Windows предоставляет функцию API CreateProcessW для создания новых процессов, показанную в листинге 1. Первые три её параметра — lpCommandLine, lpEnvironment и lpStartupInfo — важны для описываемой техники внедрения, поскольку они используются для передачи данных в новый процесс.```c BOOL CreateProcessW( [in, optional] LPCWSTR lpApplicationName, [in, out, optional] LPWSTR lpCommandLine, [in, optional] LPSECURITY_ATTRIBUTES lpProcessAttributes, [in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes, [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags, [in, optional] LPVOID lpEnvironment, [in, optional] LPCWSTR lpCurrentDirectory, [in] LPSTARTUPINFOW lpStartupInfo, [out] LPPROCESS_INFORMATION lpProcessInformation );

*Листинг 1: Определение функции CreateProcessW Windows API*
 
Параметр `lpCommandLine` задает командную строку для нового процесса. Он ограничен максимумом 32 767 символов Unicode, включая завершающий нулевой символ Unicode. Для варианта Unicode необходимо предоставить строку, в которую функция может выполнять запись. Если передается константная строка, любые попытки записи со стороны API-функции приведут к нарушению прав доступа к памяти. Если значение равно `NULL`, командная строка процесса будет взята из параметра `lpApplicationName`. Если `lpApplicationName` равен `NULL`, она должна быть указана в поле `lpCommandLine` и ограничена `MAX_PATH` символами.
 
Параметр `lpEnvironment` предоставляет процессу список переменных окружения. Если значение равно `NULL`, будет использоваться окружение создающего процесса. Список переменных окружения состоит из последовательных строк, завершающихся нулевым символом, в формате `NAME=VALUE` с еще одним нулевым символом в конце.
 
Параметр `lpStartupInfo` представляет собой структуру, показанную в Листинге 2, с такими полями, как оконная станция, рабочий стол, дескрипторы стандартного ввода и вывода, а также поля, настраивающие главное окно нового процесса. Согласно документации Microsoft, поле `lpReserved` зарезервировано для внутреннего использования и не документировано. В ходе анализа с помощью отладчика WinDbg удалось связать этот параметр с переменной `ShellInfo` типа `UNICODE_STRING` в новом процессе.```c
typedef struct _STARTUPINFOW {
    DWORD  cb;
    LPWSTR lpReserved;   // Copied to ShellInfo (UNICODE_STRING)
    LPWSTR lpDesktop;
    LPWSTR lpTitle;
    DWORD  dwX;
    DWORD  dwY;
    DWORD  dwXSize;
    // (...) additional fields
    WORD   wShowWindow;
    WORD   cbReserved2;
    LPBYTE lpReserved2;
    HANDLE hStdInput;
    // (...) additional fields
} STARTUPINFOW, *LPSTARTUPINFOW;

Листинг 2: Структура данных STARTUPINFOW

Скачать инструмент