从源码到实战:OperatorsKit中InjectPoolParty的线程池注入原理
从源码到实战OperatorsKit中InjectPoolParty的线程池注入原理【免费下载链接】OperatorsKitCollection of Beacon Object Files (BOF) for Cobalt Strike项目地址: https://gitcode.com/gh_mirrors/op/OperatorsKitOperatorsKit是一个专注于Cobalt Strike Beacon Object Files (BOF)开发的开源项目其中InjectPoolParty模块提供了通过Windows线程池实现shellcode注入的高级技术。本文将从核心原理到实战应用深入解析这一模块如何利用系统原生机制实现隐蔽的代码执行。线程池注入现代对抗中的技术优势在传统注入技术如CreateRemoteThread普遍被EDR监控的背景下线程池注入凭借其系统原生性和低检测性成为高级渗透测试的优选方案。InjectPoolParty模块通过三种不同的线程池利用方式TP_TIMER/TP_DIRECT/TP_WORK实现无创建线程API调用的代码注入有效规避常规安全检测。核心优势解析无明显恶意API调用避免使用CreateRemoteThread等敏感函数系统行为模拟利用Windows线程池管理机制行为更接近正常进程多向量注入支持提供三种不同注入路径适应不同环境场景InjectPoolParty的技术实现架构InjectPoolParty的核心实现位于KIT/InjectPoolParty/injectpoolparty.c文件中主要包含四大功能模块进程句柄劫持、内存操作、线程池结构操作和注入向量管理。关键数据结构定义模块通过injectpoolparty.h定义了多种Windows内核结构的映射如线程池对象FULL_TP_POOL、工作项FULL_TP_WORK和定时器FULL_TP_TIMER等这些结构是实现线程池劫持的基础typedef struct _FULL_TP_POOL { struct _TPP_REFCOUNT Refcount; union _TPP_POOL_QUEUE_STATE QueueState; struct _TPP_QUEUE* TaskQueue[3]; struct _TPP_TIMER_QUEUE TimerQueue; // 更多结构成员... } FULL_TP_POOL, * PFULL_TP_POOL;这些结构定义使模块能够直接操作进程内存中的线程池数据为后续的代码注入铺平道路。进程句柄劫持技术InjectPoolParty通过HijackProcessHandle函数实现目标进程句柄的获取这是实现跨进程注入的关键步骤HANDLE HijackProcessHandle(PWSTR targetType, HANDLE targetProcess, DWORD accessRights) { // 通过NtQueryInformationProcess枚举进程句柄 // 匹配目标类型如TpWorkerFactory、IRTimer // 复制具有所需访问权限的句柄 }该函数利用NtQueryInformationProcess获取进程句柄表通过对象类型匹配如TpWorkerFactory筛选出可用于注入的线程池相关句柄避免直接打开敏感句柄带来的检测风险。三种注入向量的实现原理InjectPoolParty提供三种不同的线程池注入方式适应不同的系统环境和防御机制。TP_WORK工作项队列注入实现路径RemoteTpWorkInsertion函数核心原理通过操作线程池工作项队列将shellcode作为工作项插入执行队列关键步骤读取目标进程的线程池结构信息创建恶意工作项FULL_TP_WORK并设置回调为shellcode地址修改队列链表指针将恶意工作项插入高优先级任务队列pTpWork-Task.ListEntry.Flink TargetTaskQueueHighPriorityList; pTpWork-Task.ListEntry.Blink TargetTaskQueueHighPriorityList;这种方式利用系统线程池调度机制使shellcode在正常工作线程中执行具有极高的隐蔽性。TP_TIMER定时器事件注入实现路径RemoteTpTimerInsertion函数核心原理通过构造定时器对象将shellcode作为定时回调执行与工作项注入相比定时器注入增加了时间维度控制可用于实现延迟执行或周期性任务LARGE_INTEGER ulDueTime { 0 }; ulDueTime.QuadPart Timeout; // 设置超时时间 NtSetTimer2_t pNtSetTimer2 (NtSetTimer2_t)GetProcAddress(...); pNtSetTimer2(hTimer, ulDueTime, 0, Parameters);TP_DIRECTI/O完成端口注入实现路径RemoteTpDirectInsertion函数核心原理利用I/O完成端口机制将shellcode作为I/O完成回调执行这种方式通过ZwSetIoCompletion设置I/O完成端口的回调函数当有I/O操作完成时触发shellcode执行Direct.Callback shellcodeAddress; // 设置回调为shellcode地址 PTP_DIRECT RemoteDirectAddress VirtualAllocEx(...); WriteProcessMemory(hTargetPid, RemoteDirectAddress, Direct, sizeof(TP_DIRECT), NULL); ZwSetIoCompletion(hIoCompletion, RemoteDirectAddress, 0, 0, 0);完整注入流程解析InjectPoolParty的主函数go实现了完整的注入流程从参数解析到最终执行可分为四个阶段1. 参数解析与初始化BeaconDataParse(parser, args, len); option BeaconDataExtract(parser, NULL); // 注入方式(TP_TIMER/TP_DIRECT/TP_WORK) pid BeaconDataInt(parser); // 目标进程ID code BeaconDataExtract(parser, code_len); // shellcode数据2. 目标进程内存操作通过WriteCode函数在目标进程中分配内存并写入shellcode设置适当的内存保护属性PVOID WriteCode(HANDLE hProc, unsigned char * code, unsigned int code_len) { pAddress VirtualAllocEx(hProc, NULL, code_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); WriteProcessMemory(hProc, pAddress, code, code_len, NULL); VirtualProtectEx(hProc, pAddress, code_len, PAGE_EXECUTE_READ, dwOld); return pAddress; }3. 注入向量选择与执行根据输入参数选择相应的注入方式以TP_WORK为例if (strcmp(option, TP_WORK) 0) { hWorkerFactory HijackProcessHandle(LTpWorkerFactory, hProc, WORKER_FACTORY_ALL_ACCESS); RemoteTpWorkInsertion(hWorkerFactory, pAddress, hProc); }4. 资源清理与结果反馈完成注入后清理句柄资源并通过BeaconPrintf返回执行结果BeaconPrintf(CALLBACK_OUTPUT, Successfully injected code in process ID [%d] at memory address [%p]., pid, pAddress);实战应用与注意事项环境准备使用InjectPoolParty前需准备以下环境Cobalt Strike 4.0环境已编译的BOF文件可通过KIT/InjectPoolParty/bofcompile.bat编译目标系统需为Windows 7及以上版本支持线程池API基本使用方法在Cobalt Strike中加载OperatorsKit.cna后可通过以下命令使用InjectPoolPartyinjectpoolparty [注入方式] [目标PID] [shellcode]常用注入方式参数TP_WORK工作项队列注入推荐默认使用TP_TIMER定时器事件注入适合延迟执行TP_DIRECTI/O完成端口注入适合I/O密集型进程检测规避建议为提高注入成功率建议选择系统进程或常用应用进程作为目标如svchost.exe、explorer.exe根据目标进程特性选择合适的注入向量结合内存加密技术保护shellcode免被静态分析总结与扩展InjectPoolParty作为OperatorsKit项目的重要模块展示了如何通过深入理解Windows内核机制实现高级代码注入技术。其多向量注入设计不仅提供了灵活的使用选择也为安全研究人员提供了对抗现代防御机制的新思路。项目后续可扩展方向增加更多线程池利用向量如TP_WAIT实现动态注入向量选择集成shellcode变形功能通过学习和研究InjectPoolParty的实现安全从业者可以更深入地理解Windows系统内部机制提升在复杂环境下的渗透测试能力。完整源码可参考项目中的KIT/InjectPoolParty目录建议结合Windows内核文档进行深入分析。【免费下载链接】OperatorsKitCollection of Beacon Object Files (BOF) for Cobalt Strike项目地址: https://gitcode.com/gh_mirrors/op/OperatorsKit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于C++语言实现图书管理系统

基于C++语言实现图书管理系统

代码功能分析该程序是一个简单的图书管理系统,基于C实现,采用结构体数组存储图书信息,支持添加、删除、查找、清空、修改和显示图书功能。以下是核心模块的说明和优化建议:关键功能模块数据结构Person结构体存储单本图书信息&…

2026/10/3 8:30:13 阅读更多 →
什么是Go语言突变测试?go-mutesting让你的测试质量提升300%的终极指南

什么是Go语言突变测试?go-mutesting让你的测试质量提升300%的终极指南

什么是Go语言突变测试?go-mutesting让你的测试质量提升300%的终极指南 【免费下载链接】go-mutesting Mutation testing for Go source code 项目地址: https://gitcode.com/gh_mirrors/go/go-mutesting Go语言突变测试(Mutation Testing&#xf…

2026/10/2 12:40:54 阅读更多 →
SynologyCloudflareDDNS脚本原理解析:从域名解析到IP自动更新的完整流程

SynologyCloudflareDDNS脚本原理解析:从域名解析到IP自动更新的完整流程

SynologyCloudflareDDNS脚本原理解析:从域名解析到IP自动更新的完整流程 【免费下载链接】SynologyCloudflareDDNS 📜 Cloudflare DDNS script for Synology 项目地址: https://gitcode.com/gh_mirrors/sy/SynologyCloudflareDDNS SynologyCloudf…

2026/9/27 17:12:45 阅读更多 →

最新新闻

failed to load plugins 排查指南:插件契约与激活机制全解析

failed to load plugins 排查指南:插件契约与激活机制全解析

1. 报错现场:failed to load plugins 到底在说什么 1.1 我在排查什么:一次“2 entries did not activate”的实录 事情是这样的,我习惯在每个季度末统一升级开发环境,结果那次一升级完,启动 IDE 时直接弹出一行让我血…

2026/10/5 11:17:58 阅读更多 →
插件加载失败深度解析:从web boot到did not activate的排查指南

插件加载失败深度解析:从web boot到did not activate的排查指南

我最近接到的求助里,出现频率最高的一句话大概就是:failed to load plugins web boot: 2 entries did not activate linxin666/dsh-p。第一次看的人会以为系统崩了,其实这就是插件加载器在如实报告自己的状态。plugins 这个词看起来只像一个目…

2026/10/5 11:17:58 阅读更多 →
植物照明仿真实战:用LITESTAR 4D精准计算PPFD与DLI

植物照明仿真实战:用LITESTAR 4D精准计算PPFD与DLI

做植物照明设计的人,十有八九还停留在“亮不亮”的层面,但真正种过东西、或者被甲方追着要产量数据的人,都知道植物照明根本不是“亮”的问题。用LITESTAR 4D做植物照明仿真时,我盯的从来不是照度lux,而是PPFD&#xf…

2026/10/5 11:17:57 阅读更多 →
插件加载失败怎么排查?从IAR到Web Boot的激活机制与定位方法

插件加载失败怎么排查?从IAR到Web Boot的激活机制与定位方法

最近在好几个技术社区都看到同一个问题:“iar plugins 是干什么的?”问的人一部分是刚开始用IAR调试嵌入式工程的新手,另一部分是被启动日志里failed to load plugins web boot: X entries did not activate这类报错打懵的老开发。“plugins”…

2026/10/5 11:17:56 阅读更多 →
OpenShell完全指南:把Windows 11开始菜单改回经典两栏布局

OpenShell完全指南:把Windows 11开始菜单改回经典两栏布局

前两天又有人问我:Windows 11 这个开始菜单,能不能把程序排得更紧凑一点?能不能关掉那些推荐内容,换成传统文件夹式布局?我回了一句:直接装 OpenShell,把菜单换掉就行。OpenShell 是一个免费开源…

2026/10/5 11:17:56 阅读更多 →
从零构建 coding agent CLI:TUI、Agent Loop 与 LLM 函数调用实战

从零构建 coding agent CLI:TUI、Agent Loop 与 LLM 函数调用实战

1. 从“pi”这个标题说起:一个极简命名背后的技术野心第一次看到“pi”这个项目标题,很多人会本能地联想到数学常数,或者树莓派(Raspberry Pi),再或者某个缩写。但如果你最近在开发者社区里泡过&#xff0c…

2026/10/5 11:16:56 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →