Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
BOF_RunPe — 在Cobalt Strike Beacon中运行PE且无需创建控制台的BOF | Kitploit
工具/GitHubGitHub/ntdallas/bof_runpe
内存取证Shellcode后渗透利用红队
GitHubntdallas/bof_runpe

BOF_RunPe

在Cobalt Strike Beacon中运行PE且无需创建控制台的BOF

查看仓库
200259个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

BOF_RunPE

BOF RunPE 是一个用于 Cobalt Strike 的 Beacon 对象文件,可在 beacon 进程内完全在内存中执行 PE 文件。与传统的 fork&run 不同,不会生成子进程,不会创建控制台,也不会使用管道——所有输出均通过 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 挂钩捕获输出
  • 多种分配方法:堆、VirtualAlloc、模块踩踏
  • 代理加载:定时器队列、RegisterWait 或直接调用
  • Ntdll 取消挂钩:可选择从磁盘获取新副本
  • RWX:可选择以 RWX 分配内存
  • 线程起始地址欺骗:使用合法起始地址并通过 RIP 劫持

配置选项

BOF 的行为可以在 Additionals postex -> RunPe Config 中编辑

Custom BOF

代理方法

方法描述
None直接 API 调用
Draugr栈欺骗 API 调用
RegwaitRegisterWaitForSingleObject 回调

分配方法

方法描述
Heap通过 Draugr 使用 RtlCreateHeap 的私有堆
VirtualAlloc通过 Draugr 使用 NtAllocateVirtualMemory
Module stomping覆盖合法 DLL 的 .text 节区

通用选项

选项描述
AllocRWX以 RWX 分配(相对于 RW→RX 转换)

线程欺骗

选项描述
ModuleName用于起始地址的合法模块(例如 Kernel32.dll)
ProcedureName模块内的函数名(例如 BaseThreadInitThunk)
Offset

输出捕获

所有 PE 输出通过 IAT 挂钩重定向到 beacon 控制台。不会创建控制台窗口或命名管道。

规避技术

检测向量

内核遥测 (ETW-TI)

NtGetContextThread / NtSetContextThread:

  • 对挂起的线程进行线程上下文操作,然后恢复它

内存操作:

  • NtAllocateMemory 分配,可设置为 RWX(取决于配置)
  • NtProtectVirtualMemory 转换(RW → RX)
  • 堆区域中的可执行内存可疑(取决于配置)
  • 通过节区哈希不匹配可检测模块踩踏(取决于配置)

行为指标

  • 创建挂起的线程,获取上下文然后更改 RIP 的值
  • 堆内存标记为可执行(如果内存分配器是堆)
  • 使用 DONT_RESOLVE_DLL_REFERENCES 加载 DLL(如果内存分配器是模块踩踏)
  • Ntdll .text 节区被修改(如果启用取消挂钩)

使用方法

加载脚本

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

攻击者命令

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控制流强制技术可能会阻止合成栈帧
仅 x64不支持 x86/WoW64
内核可见性线程创建对内核回调可见
.NET不支持托管可执行文件

致谢 / 开发使用的资源

仓库/博客文章

  • 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 by Pavel Yosifovich
  • Windows Internals, Part 1 by Pavel Yosifovich
  • Windows Internals, Part 2 by Andrea Allievi
下载工具
Timer
定时器队列回调
UnhookNtdll用磁盘上的新副本替换 ntdll.dll 的 .text 节区
Timeout执行超时时间(毫秒,0 = 无限)
StompModule用于模块踩踏的 DLL 路径(例如 chakra.dll)
距离函数起始的偏移
挂钩的函数目标
GetCommandLineA/W返回欺骗的参数
__getmainargs / __wgetmainargsCRT 参数初始化
printf / wprintfBeaconPrintf 重定向
WriteConsoleA/WBeaconPrintf 重定向
__stdio_common_vfprintfUCRT 打印函数
ExitProcess / exit转换为 ExitThread
技术绕过对象
间接系统调用用户层 API 挂钩(EDR/AV)
Draugr 栈欺骗调用栈检查
线程起始地址欺骗线程起始地址分析
模块踩踏无后备内存检测
私有堆分配VirtualAlloc 监控
Ntdll 取消挂钩用磁盘上的 Ntdll 覆盖内存中的 ntdll
IAT 挂钩(无管道)命名管道监控