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

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

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

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

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

Категории

Все категории
Loading categories
BOF_RunPe — BOF для запуска PE в Cobalt Strike Beacon без создания консоли | Kitploit
Инструменты/GitHubGitHub/ntdallas/bof_runpe
Криминалистика памятиШелл-кодПост-эксплуатацияRed Teaming
GitHubntdallas/bof_runpe

BOF_RunPe

BOF для запуска PE в Cobalt Strike Beacon без создания консоли

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

Популярное

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

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

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

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

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

BOF_RunPE

BOF RunPE — это Beacon Object File для Cobalt Strike, который выполняет PE-файлы полностью в памяти внутри процесса beacon. В отличие от традиционного fork&run, не создается дочерний процесс, не создается консоль и не используется канал (pipe) — весь вывод захватывается через перехват IAT и перенаправляется в консоль beacon.

Архитектура: только x64

Обзор

root@kitploit:~
┌──────────────────────────────────────────────────────────────┐
│                   Cobalt Strike Beacon                       │
│                    (Current Process)                         │
└────────────────────────┬─────────────────────────────────────┘
                         │
                         │  beacon_inline_execute()
                         │
                         ▼
┌──────────────────────────────────────────────────────────────┐
│                    BOF RunPE                                 │
│  ┌────────────────────────────────────────────────────────┐  │
│  │  VxTable + Draugr Initialization                       │  │
│  │  (Syscall Resolution + Stack Spoofing)                 │  │
│  └──────────────────────┬─────────────────────────────────┘  │
│                         │                                    │
│  ┌──────────────────────▼─────────────────────────────────┐  │
│  │  PE Mapping                                            │  │
│  │  - Section Copy    - IAT Patching (with hooks)         │  │
│  │  - Relocations     - Memory Protection                 │  │
│  └──────────────────────┬─────────────────────────────────┘  │
│                         │                                    │
│  ┌──────────────────────▼─────────────────────────────────┐  │
│  │  Thread Execution                                      │  │
│  │  - Spoofed Start Address                               │  │
│  │  - RIP Hijacking to Entry Point                        │  │
│  │  - Output Redirection via Hooks                        │  │
│  └────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────┘

Ключевые возможности

  • Нет создания процесса: PE выполняется внутри процесса beacon
  • Нет консоли/канала: Вывод захватывается через перехват printf/WriteConsole
  • Несколько методов выделения памяти: Heap, VirtualAlloc, Module Stomping
  • Прокси-загрузка: Timer Queue, RegisterWait или прямые вызовы
  • Снятие перехвата ntdll: Опционально свежая копия с диска
  • RWX: Опционально выделять память как RWX
  • Спуфинг стартового адреса потока: Легитимный стартовый адрес с перехватом RIP

Параметры конфигурации

Поведение BOF можно настроить в Additionals postex -> RunPe Config

Custom BOF

Методы прокси

МетодОписание
NoneПрямые вызовы API
DraugrВызовы API со спуфингом стека
Regwait

Методы выделения памяти

МетодОписание
HeapПриватная куча через RtlCreateHeap с Draugr
VirtualAllocNtAllocateVirtualMemory с Draugr
Module stompingПерезапись секции .text легитимной DLL

Общие опции

ОпцияОписание

Спуфинг потока

ОпцияОписание
ModuleNameЛегитимный модуль для стартового адреса (например, Kernel32.dll)
ProcedureNameИмя функции внутри модуля (например, )

Захват вывода

Весь вывод PE перенаправляется в консоль beacon через перехваты IAT. Не создается ни окно консоли, ни именованный канал.

Техники обхода

Векторы обнаружения

Телеметрия ядра (ETW-TI)

NtGetContextThread / NtSetContextThread:

  • Манипуляция контекстом потока на приостановленных потоках с последующим возобновлением

Операции с памятью:

  • NtAllocateMemory — выделение, может быть в RWX (зависит от конфигурации)
  • NtProtectVirtualMemory — переходы (RW → RX)
  • Исполняемая память в областях кучи подозрительна (зависит от конфигурации)
  • Module stomping обнаруживается через несоответствие хэша секции (зависит от конфигурации)

Поведенческие индикаторы

  • Создан приостановленный поток, получен контекст, затем изменено значение RIP
  • Память кучи помечена как исполняемая (если распределитель памяти — куча)
  • DLL загружена с флагом DONT_RESOLVE_DLL_REFERENCES (если распределитель памяти — module stomping)
  • Секция .text ntdll изменена (если включено снятие перехвата)

Использование

Загрузка скрипта

root@kitploit:~
Cobalt Strike → Script Manager → Load → BOF_RunPe.cna

Команды Aggressor

root@kitploit:~
beacon> runpe /path/to/binary.exe --arg1 value1

Mimikatz

root@kitploit:~
beacon> help runpe

Help

Компиляция

Требуется GCC 13 (mingw-w64). Используйте предоставленный Dockerfile:

root@kitploit:~
sudo docker build -t ubuntu-gcc-13 .
sudo docker run --rm -it -v "$PWD":/work -w /work ubuntu-gcc-13:latest make

Результат: Bin/runpe.o

Ограничения

ОграничениеОписание
CETТехнология Control-flow Enforcement может блокировать синтетические кадры стека

Благодарности / Использованные ресурсы для разработки

Репозитории/статьи в блогах

  • https://github.com/susMdT/LoudSunRun
  • https://github.com/Octoberfest7/Inline-Execute-PE
  • https://www.coresecurity.com/core-labs/articles/running-pes-inline-without-console
  • https://0xdarkvortex.dev/proxying-dll-loads-for-hiding-etwti-stack-tracing/

Книги

  • Windows Native API Programming — Pavel Yosifovich
  • Windows Internals, Part 1 — Pavel Yosifovich
  • Windows Internals, Part 2 — Andrea Allievi
Скачать инструмент
Обратный вызов RegisterWaitForSingleObject
TimerОбратный вызов Timer Queue
AllocRWXВыделять как RWX (вместо перехода RW→RX)
UnhookNtdllЗаменить .text ntdll.dll свежей копией с диска
TimeoutТаймаут выполнения в миллисекундах (0 = бесконечно)
StompModuleПуть к DLL для module stomping (например, chakra.dll)
BaseThreadInitThunk
OffsetСмещение от начала функции
Перехваченная функцияЦель
GetCommandLineA/WВозвращает подставные аргументы
__getmainargs / __wgetmainargsИнициализация аргументов CRT
printf / wprintfПеренаправление в BeaconPrintf
WriteConsoleA/WПеренаправление в BeaconPrintf
__stdio_common_vfprintfФункции печати UCRT
ExitProcess / exitПреобразуется в ExitThread
ТехникаОбход чего
Косвенные системные вызовыПерехваты API на уровне пользователя (EDR/AV)
Спуфинг стека DraugrАнализ стека вызовов
Спуфинг стартового адреса потокаАнализ стартового адреса потока
Module StompingОбнаружение незакрепленной памяти
Выделение приватной кучиМониторинг VirtualAlloc
Снятие перехвата ntdllПерезапись ntdll в памяти копией с диска
Перехват IAT (без каналов)Мониторинг именованных каналов
Только x64
Нет поддержки x86/WoW64
Видимость на уровне ядраСоздание потока видимо для callback-функций ядра
.NETУправляемые исполняемые файлы не поддерживаются